Existe uma funcionalidade no Whatsapp que é exportar o histórico da conversa, quando descobri essa funcionalidade logo imaginei as análises que poderiam ser feitas utilizando esses dados. A primeira ideia que tive, foi montar uma nuvem de palavras e ver quais as palavras mais aparecem no chat. Para isso, precisei aprender um pouco sobre mineração e processamento de texto. Utilizei o RStudio para realizar esse processamento.
A biblioteca tm foi utilizada no processamento dos dados e na montagem da nuvem utilizei a wordcloud2 e para manipulação dos dados, a clássica dplyr.
# instalando versão mais recente da wordcloud
#devtools::install_github("lchiffon/wordcloud2")
library(dplyr) # Manipulação de dados
library(tm) # Processamento de Texto
library(wordcloud2) # Criação da wordcloud
Para exportar as o histórico do chat, siga os passos descritos aqui: iOS Android
Ao concluir a exportação, você terá em mãos um arquivo _chat.txt que será nosso dado de entrada. Utilizando as funções da biblioteca tm, vamos processar esse arquivo e deixar ele no formato desejado.
#importando arquivo txt do chat
chat <- Corpus(DirSource("."))
# normalização do texto
# deixando palavras minúsculo
chat <- tm_map(chat, tolower)
# removendo pontuação
chat <- tm_map(chat, removePunctuation, preserve_intra_word_dashes = FALSE)
# removendo stopwords inglês
chat <- tm_map(chat, removeWords, stopwords("english"))
# removendo stopwords português
chat <- tm_map(chat, removeWords, stopwords("pt"))
# removendo números
chat <- tm_map(chat, removeNumbers)
# removendo espaçoes em branco
chat <- tm_map(chat, stripWhitespace)
# reduzindo tamanho das palavras
chat <- tm_map(chat, stemDocument)
O próximo passo é remover os nomes dos contatos do chat, já que essas palavras irão se repetir bastante.
# remove palavras
chat <- tm_map(chat, removeWords, c("name1","last_name1", "name2","last_name2"))
Nesse caso eu criei um vetor com os nomes dos contatos que participam da conversa.
# criando matriz de palavras e frequencia
dtm <- TermDocumentMatrix(chat)
matriz <- as.matrix(dtm)
vector <- sort(rowSums(matriz),decreasing=TRUE)
data <- data.frame(word = names(vector),freq=vector)
# exportando csv com os dados obtidos
write.csv(data, "chat.csv", row.names = F)
após o processamento, teremos um dataset com duas colunas word e freq.
head(chat)
## word freq
## 1 amor 3548
## 2 dia 2484
## 3 hahaha 2205
## 4 agora 2092
## 5 casa 2016
## 6 gent 1919
O passo mais simples é gerar a wordcloud, basta passarmos os dados e pronto.
# gerando wordcloud
wordcloud2(head(chat, 700), fontFamily = 'Segoe UI', size = 1, color = "random-light")