O objetivo deste estudo é apresentar algumas técnicas para análise de padrões em dados. Utilizaremos a linguagem R e seus pacotes.
Vamos utilizar o pacote bpa - Basic Pattern Analysis. Este pacote possui funções especiais em análise de padrões em dados. É um conjunto de ferraamentas para pré-processamento de dados que ajuda a economizar linhas e linhas de código em busca de padrões de dados sejam conjuntos de caracteres, números ou combinações de números e caracteres. É util para limpeza de dados e estudo de padrões e anomalias.
In [6]:
install.packages("bpa", repos = "https://cloud.r-project.org")
In [9]:
library(bpa)
In [11]:
data(messy, package = "bpa")
In [16]:
head(messy)
attach(messy)
Pode-se perceber imediatamente que os valores possuem formatos mistos. Isto é muito comum quando os dados são inseridos manualmente dentro de um sistema e por não ter uma crística de dentrada acabam sendo aceitos pelo sistema transacional, dificultando assim a padronização dos mesmos.
In [20]:
get_pattern("(079)-200-150")
In [21]:
get_pattern("016 651 851")
In [25]:
get_pattern("016 651 851", ws_char = "<BRANCO>")
Agora examinemos algumas variáveis, buscando não só descobrir os padrões como também a frequência de cada um na variável. Voltemos aos dados. Busquemos padrões na variável Date
In [26]:
messy$Date %>%
get_pattern %>% # extrai o padrão
table %>% # tabula as fraquências
as.data.frame # apresenta o resultado como um data frame
Perceba que temos 259 registros no campo Date com formato 99/99/9999 (Ex:01/22/2004) e 241 com formato 99Aaa9999(Ex:16Aug2001) , por exemplo.
Analisando os dados da variável alvo:
In [28]:
messy$Date %>%
unique %>% # extract unique values
head(50) # look at first 50 observations
Padronizar os dados através de basic pattern analysis fornece uma representação muito mais clara a respeito dos dados que são frequentemente mais usados durante a etapa de pré-processamento
In [31]:
messy %>%
bpa %>%
head(10)
Com muitos dados, muitas vezes será mais útil exibir uma lista contendo apenas os padrões únicos para cada coluna de um frame.
In [33]:
# Retorna somente os padôes únicos em formato de lista
bpa(messy, unique_only = TRUE)
Finalmente, nós incluímos a função match_pattern para extrair os valores de um vetor que coincidam com um padrão especificado. Por exemplo, o fragmento de código a seguir irá extrair os valores exclusivos de que coincidirem com o padrão padronizado Gender Aaaa.
In [36]:
# Extrai de dentro de Gender os valores que coincidem com o padrão "Aaaa"
match_pattern(messy$Gender, pattern = "Aaaa", unique_only = TRUE)
In [37]:
library(bpa)
In [40]:
nf <-read.csv2("./dados/NotaFiscal.csv", header = TRUE)
In [41]:
head(nf)
In [42]:
nf %>%
bpa%>%
head(10)
In [45]:
# Retorna somente os padôes únicos em formato de lista
bpa(nf, unique_only = TRUE)
In [48]:
nf$NF %>%
get_pattern %>% # extrai o padrão
table %>% # tabula frequências
as.data.frame # apresenta o dado como data frame
In [60]:
# Extrai de dentro de Gender os valores que coincidem com o padrão "99"
match_pattern(nf$NF, pattern = "99", unique_only = TRUE)