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")


O objetivo desse tutorial é aprender a manipular texto. Conhecer uma biblioteca muito poderosa tm, e no final do processo de aprendizagem temos uma visualização bem interessante sobre nossas conversas.