import Pkg
Pkg.add(["TidierStrings", "Tidier"])
using Tidier, TidierStringsPacote TidierStrings.jl
O pacote TidierStrings.jl emula a facilidade do StringR, unindo manipulação de strings com dados Tidy. Neste post, serão apresentadas as principais funções do pacote.
Introdução
A manipulação de strings (sequência de caracteres) é indispensável na manipulação de bancos de dados, e a linguagem Julia oferece suporte nativo para esse tipo de operação, dispensando o uso de pacotes adicionais. Mas qual a melhor forma de lidar com dados no formato Tidy?
O pacote TidierStrings.jl emula a facilidade do StringR, da linguagem R, trazendo para Julia uma integração entre manipulação de strings e dados organizados no formato Tidy. Esse estilo consiste em dados tabulares estruturados de modo que cada coluna representa uma variável, cada linha uma observação e cada célula um valor.
Neste post, serão apresentadas e exemplificadas funções de remoção, substituição, correspondência e modificação disponíveis no TidierStrings.jl.
Carregando os pacotes
Para instalar os pacotes necessários e carregar seus comandos no ambiente, execute as seguintes linhas de código:
Além disso, utilizaremos o pacote RDataSets para importar bancos de dados originários do R e usaremos o conjunto de dados Titanic como exemplo para aplicar as funções.
import Pkg
Pkg.add("RDatasets")
using RDatasets
titanic = dataset("datasets", "Titanic")Selecionaremos apenas as 10 primeiras observaçÕes das variáveis do tipo “String”, correspondentes às quatro primeiras colunas do banco de dados:
titanic = first(titanic[:, 1:4], 10)10×4 DataFrame
Row │ Class Sex Age Survived
│ String7 String7 String7 String3
─────┼─────────────────────────────────────
1 │ 1st Male Child No
2 │ 2nd Male Child No
3 │ 3rd Male Child No
4 │ Crew Male Child No
5 │ 1st Female Child No
6 │ 2nd Female Child No
7 │ 3rd Female Child No
8 │ Crew Female Child No
9 │ 1st Male Adult No
10 │ 2nd Male Adult No
Funções
str_replace(), str_replace_all()
A função str_replace() substitui a primeira ocorrência do padrão indicado no segundo argumento pelo valor informado no terceiro argumento. No exemplo abaixo, a primeira letra “e” minúscula encontrada em cada elemento da coluna Sex foi substituída pela sua equivalente maiúscula.
@mutate(titanic, Sex = str_replace(Sex, "e", "E"))10×4 DataFrame
Row │ Class Sex Age Survived
│ String7 String String7 String3
─────┼────────────────────────────────────
1 │ 1st MalE Child No
2 │ 2nd MalE Child No
3 │ 3rd MalE Child No
4 │ Crew MalE Child No
5 │ 1st FEmale Child No
6 │ 2nd FEmale Child No
7 │ 3rd FEmale Child No
8 │ Crew FEmale Child No
9 │ 1st MalE Adult No
10 │ 2nd MalE Adult No
Já str_replace_all() substitui todas as ocorrências do padrão no conjunto de strings especificado.
@mutate(titanic, Sex = str_replace_all(Sex, "e", "E"))10×4 DataFrame
Row │ Class Sex Age Survived
│ String7 String String7 String3
─────┼────────────────────────────────────
1 │ 1st MalE Child No
2 │ 2nd MalE Child No
3 │ 3rd MalE Child No
4 │ Crew MalE Child No
5 │ 1st FEmalE Child No
6 │ 2nd FEmalE Child No
7 │ 3rd FEmalE Child No
8 │ Crew FEmalE Child No
9 │ 1st MalE Adult No
10 │ 2nd MalE Adult No
str_remove(), str_remove_all()
De forma análoga às funções anteriores, str_remove() remove a primeira ocorrência do padrão informado no segundo argumento, enquanto str_remove_all() remove todas as ocorrências desse padrão nas strings indicadas no primeiro argumento.
@mutate(titanic, Sex = str_remove(Sex, "e"))10×4 DataFrame
Row │ Class Sex Age Survived
│ String7 String String7 String3
─────┼────────────────────────────────────
1 │ 1st Mal Child No
2 │ 2nd Mal Child No
3 │ 3rd Mal Child No
4 │ Crew Mal Child No
5 │ 1st Fmale Child No
6 │ 2nd Fmale Child No
7 │ 3rd Fmale Child No
8 │ Crew Fmale Child No
9 │ 1st Mal Adult No
10 │ 2nd Mal Adult No
@mutate(titanic, Sex = str_remove_all(Sex, "e"))10×4 DataFrame
Row │ Class Sex Age Survived
│ String7 String String7 String3
─────┼────────────────────────────────────
1 │ 1st Mal Child No
2 │ 2nd Mal Child No
3 │ 3rd Mal Child No
4 │ Crew Mal Child No
5 │ 1st Fmal Child No
6 │ 2nd Fmal Child No
7 │ 3rd Fmal Child No
8 │ Crew Fmal Child No
9 │ 1st Mal Adult No
10 │ 2nd Mal Adult No
str_detect()
Essa função identifica padrões nas strings especificadas e pode utilizar operadores lógicos, como | e &. No exemplo abaixo, foram filtradas as observações que correspondiam a passageiros (excluindo tripulantes).
TidierData.@filter(titanic, str_detect(Class, "d | s"))8×4 DataFrame
Row │ Class Sex Age Survived
│ String7 String7 String7 String3
─────┼─────────────────────────────────────
1 │ 1st Male Child No
2 │ 2nd Male Child No
3 │ 3rd Male Child No
4 │ 1st Female Child No
5 │ 2nd Female Child No
6 │ 3rd Female Child No
7 │ 1st Male Adult No
8 │ 2nd Male Adult No
str_to_upper()
A função str_to_upper() converte todos os caracteres de uma string para maiúsculas. Existem outras funções com estrutura semelhante que modificam o formato das strings:
- str_to_lower(): converte todos os caracteres para minúsculas;
- str_to_sentence(): deixa apenas o primeiro caractere em maiúsculo;
- str_to_title(): coloca em maiúscula a primeira letra de cada palavra e mantém as demais em minúsculas.
@mutate(titanic, Age = str_to_upper(Age))10×4 DataFrame
Row │ Class Sex Age Survived
│ String7 String7 String String3
─────┼────────────────────────────────────
1 │ 1st Male CHILD No
2 │ 2nd Male CHILD No
3 │ 3rd Male CHILD No
4 │ Crew Male CHILD No
5 │ 1st Female CHILD No
6 │ 2nd Female CHILD No
7 │ 3rd Female CHILD No
8 │ Crew Female CHILD No
9 │ 1st Male ADULT No
10 │ 2nd Male ADULT No
str_starts()
Essa função responde de forma binária à pergunta: “A string começa com determinado caractere?”. No exemplo, verificamos se a coluna Age inicia com a letra C. A função retorna 1 para sim e 0 para não. De modo análogo, str_ends() verifica se a string indicada termina com o caractere especificado.
str_starts.(titanic.Age, "C")10-element BitVector:
1
1
1
1
1
1
1
1
0
0
str_length()
Retorna o tamanho da string informada. No exemplo, foi utilizada a palavra “Female”, localizada na quinta linha da segunda coluna do data frame.
str_length(titanic[5,2])6
str_c()
A função str_c() concatena um vetor de strings em uma única string. Ela comporta o argumento sep, que define o separador entre os elementos, e o argumento collapse, que agrega todas as concatenações em um único objeto.
@chain titanic begin
@mutate(ID = str_c(Ref(Class), Ref(Survived); sep = "-"))
TidierData.@select(Sex, Age, ID)
end10×3 DataFrame
Row │ Sex Age ID
│ String7 String7 String
─────┼───────────────────────────
1 │ Male Child 1st-No
2 │ Male Child 2nd-No
3 │ Male Child 3rd-No
4 │ Male Child Crew-No
5 │ Female Child 1st-No
6 │ Female Child 2nd-No
7 │ Female Child 3rd-No
8 │ Female Child Crew-No
9 │ Male Adult 1st-No
10 │ Male Adult 2nd-No
No exemplo, criamos uma nova coluna (ID) que agrupa as informações de Class e Survived. Em seguida, selecionamos as colunas Sex, Age e ID, resultando em um data frame com uma coluna a menos.
A função Ref() foi utilizada para que o
Juliatratasse cada coluna como um único vetor, e não uma coleção de vetores.
Referências
Este post foi elaborado a partir da documentação oficial produzida pelos autores do pacote.
Ferramentas de IA foram utilizadas para correção ortográfica e aprimoramento do texto.