library(tidyverse)
avaliacoes <- read_csv("../data/3-avaliacao-humana/avaliacoes-20180610.csv")
reclamacoes <- read_csv("../data/1-reclamacoes-selecionadas/reclamacoes-avaliadas.csv")
sentimentos = read_csv("../data/4-estimativa-automatica/sentimento.csv")
reclamacoes <- reclamacoes %>% mutate(reclamacao.length = str_length(reclamacao))
reclamacoes$numero.de.capslock <- str_count(reclamacoes$reclamacao, "\\b[A-Z]{2,}\\b")
reclamacoes$numero.pontuacao <- str_count(reclamacoes$reclamacao, "\\!") + str_count(reclamacoes$reclamacao, "\\?")
1.1 Tamanho das reclamações
reclamacoes %>%
filter(complete.cases(.)) %>%
ggplot(aes(fill = orgao, x = reclamacao.length), na.rm = TRUE) +
geom_histogram(binwidth = 50, na.rm = TRUE) +
facet_grid(orgao ~ .) + labs(title = "Distribuição do tamanho das reclamações separadas por orgão" , x = "Tamanho das Reclamações", y = "Quantidade de Reclamações")
1.2 Quantidade de carácteres em caixa alta
reclamacoes %>%
ggplot(aes(x = numero.de.capslock), na.rm = TRUE) +
geom_histogram() + labs(title="Distribuição de reclamações de acordo com o número de caracteres em caixa alta", x = "Número de caracteres em caixa alta", y = "Número de Reclamações")
1.3 Quantidade de carácteres em caixa alta por orgão
reclamacoes %>%
ggplot(aes(fill = orgao, x = numero.de.capslock), na.rm = TRUE) +
geom_histogram() + facet_grid(orgao ~ .) + labs(title = "Distribuição de reclamações de acordo com o número de caracteres \n em caixa alta separadas por órgão" , x = "Tamanho das Reclamações", y = "Quantidade de Reclamações")
1.4 Uso de pontuação (! e ?) #####Nos pareceu pertinente destacar o uso dos caracteres que indicam exclamação e interrogação
reclamacoes %>%
ggplot(aes(x = numero.pontuacao), na.rm = TRUE) +
geom_histogram() + labs(title = "Distribuição de reclamações de acordo com o número de caracteres \n de pontuação (! e ?)" , x = "Quantidade de pontos (exclamação e interrogação)", y = "Quantidade de Reclamações")
#####Da nossa amostra, podemos ver que boa parte das reclamações não possuem nenhum dos dois pontos. Mesmo assim, existe uma quantidade considerável que usou um ou dois pontos. Para as reclamações que possuem uma quantidade maior de pontos, seria interessante ver de que forma essa quantidade influencia na nota de insatisfação, mas, como não desejamos nos aprofundar nisso agora, deixaremos para um próximo momento. ###2. Explorando as avaliações
avaliacoes <- avaliacoes %>%
select(avaliador = `Matricula`,
id = `ID da reclamação`,
insatisfacao = `Grau de insatisfação`)
avaliacoes %>%
filter((id %in% 1:5 ))
## # A tibble: 27 x 3
## avaliador id insatisfacao
## <int> <int> <int>
## 1 113110007 2 4
## 2 113111448 2 4
## 3 113210425 5 3
## 4 114110439 3 2
## 5 114110485 3 2
## 6 114111357 2 5
## 7 114111370 1 5
## 8 114111371 5 5
## 9 114210164 2 5
## 10 114210300 3 2
## # ... with 17 more rows
2.1 - Quantidade de avaliadores de uma mesma reclamação
avaliacoes %>%
group_by(id) %>%
count() %>%
ungroup() %>%
summarise(media = mean(n),
mediana = median(n))
## # A tibble: 1 x 2
## media mediana
## <dbl> <dbl>
## 1 5.32 5
avaliacoes %>%
group_by(id) %>%
count() %>%
ggplot(aes("Reclamacoes", n)) +
geom_jitter(width = .05, alpha = .7)
2.2 - Avaliaçoes de um mesmo individuo
avaliacoes %>%
group_by(avaliador) %>%
summarise(variancia = var(insatisfacao)) %>%
ggplot(aes(x=avaliador, y=variancia, colour = avaliador)) + geom_point() +
geom_jitter(height = 0.05, alpha = .4)
2.3 - Range das avaliaçoes
avaliacoes %>% group_by(id) %>%
summarise(range = max(insatisfacao) - min(insatisfacao),
mediana = median(insatisfacao)) %>%
ggplot(aes(x=id, y=range, colour = id)) + geom_point() +
geom_jitter(height = 0.05, alpha = .4)
3 - Correlação das variáveis
library(GGally)
##
## Attaching package: 'GGally'
## The following object is masked from 'package:dplyr':
##
## nasa
rec <- reclamacoes %>% select(reclamacao.length, numero.de.capslock, mediana, numero.pontuacao)
corr = rec[, 0:4] %>% cor() %>% round(2)
corr %>% ggcorr(label_size = 3, label = TRUE, label_color = "black", hjust = 0.925, size = 3.5, angle = -45)
3.1 léxicos vs avaliação humana
reclamacoes = reclamacoes %>%
left_join(sentimentos, by = "id")
reclamacoes_l = reclamacoes %>%
select(-palavras_op30, -palavras_sent) %>%
gather(key = "lexico",
value = "polaridade",
sentimento_op30, sentimento_sent)
reclamacoes_l %>% View()
reclamacoes_l = reclamacoes_l %>%
group_by(lexico) %>%
mutate(polaridade_normalizada = round(((4 * (polaridade - max(polaridade))) / (min(polaridade) - max(polaridade))) + 1))
reclamacoes_l = reclamacoes_l %>%
mutate(erro = (mediana - polaridade_normalizada)**2)
reclamacoes_l %>%
ggplot(aes(x = mediana), na.rm = TRUE) +
geom_histogram() + labs(title = "Avaliação partindo do experimento humano" , x = "Grau de Insatisfação", y = "Quantidade de Reclamações")
reclamacoes_l %>%
ggplot(aes(x = polaridade_normalizada), na.rm = TRUE) +
geom_histogram() + labs(title = "Avaliação a partir dos léxicos" , x = "Grau de Insatisfação", y = "Quantidade de Reclamações")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
3.2 avaliações por agência
reclamacoes_l %>%
group_by(polaridade_normalizada) %>%
filter(orgao == "anac-agencia-nacional-de-aviacao-civil") %>%
#filter(tipoDocumento == 2) %>%
summarise(usos = n()) %>%
arrange(usos) %>%
#slice(1:27) %>%
ggplot(aes(x = polaridade_normalizada, y = usos,fill = polaridade_normalizada)) + guides(fill=FALSE) +
geom_col() + labs(title = "Avaliações da agência ANAC" , x = "Grau de insatisfação", y = "Quantidade de Reclamações")
reclamacoes_l %>%
group_by(polaridade_normalizada) %>%
filter(orgao == "inss-ministerio-da-previdencia-social") %>%
#filter(tipoDocumento == 2) %>%
summarise(usos = n()) %>%
arrange(usos) %>%
#slice(1:27) %>%
ggplot(aes(x = polaridade_normalizada, y = usos,fill = polaridade_normalizada)) + guides(fill=FALSE) +
geom_col() + labs(title = "Avaliações da agência INSS" , x = "Grau de insatisfação", y = "Quantidade de Reclamações")