Analisando seu bate-papo do Facebook Messenger

Uma visão de uma parte dos seus dados que o Facebook tem

Seguir · 5 min ler

Facebook sempre forneceu um arquivo de seus dados que armazena. Veio à luz quando ocorreu o evento de violação de dados Cambridge Analytica. Na minha opinião, sinto que o Google armazena mais dados do usuário do que o Facebook para um usuário. Descobri que todas as minhas pesquisas, não no Google, mas mesmo em sites externos, como o GitHub, foram armazenadas pelo Google. Embora esses dados possam ser apagados, mas ainda assim esses dados estão lá e apenas com uma combinação de nome de usuário e senha, eles podem ser acessados por qualquer pessoa.

A ideia

Eu era fascinado por visualizações de dados e queria um começo. Então, meses antes de o evento Cambridge Analytica acontecer, veio-me à mente traçar um gráfico do meu chat com o meu amigo do Facebook. Então a ideia era traçar o número total de mensagens enviadas ou recebidas em um dia. Eu costumo codificar em python e sabia sobre uma plotagem de biblioteca matplotlib .

Primeiros passos: coletando dados do bate-papo

Então, finalmente, depois de decidir o que fazer e quais tecnologias usar, a tarefa principal era obter todas as mensagens de um bate-papo. Um pensamento foi raspar o chat completo, mas o scraping não teria sido eficiente e, no caso em que o número de mensagens estava em milhares, levaria horas para conseguir uma única conversa. Além disso, isso poderia ter imposto uma proibição temporária do meu endereço IP, já que o scraping é algo que nenhum site suporta. Eu já tive uma experiência de banimento temporário do Reddit enquanto aprendia a usar web scraping, e eu não queria fazer isso de novo.

Então eu lembrei que o Facebook fornece um arquivo de dados do usuário, eu tentei dar uma chance. Felizmente, quando extraí o zip, encontrei uma página html para mensagens que tinha todas as minhas conversas listadas com cada pessoa e grupo até o momento da solicitação de dados. Cada nome era uma página html com chat completo com esse usuário. O código de cada html foi reduzido para que ele tivesse que ser unminified para analisar o que estava escrito lá. Ao desimpedir o html, ficou claro que o código dentro de cada arquivo html do chat estava em um formato genérico com cada mensagem dentro de um div com a classe 'message'. A mensagem div tem o nome do remetente, o carimbo de data e hora da mensagem e a mensagem com cada um deles incluído em uma tag de span individual. O nome do remetente está em um intervalo com o usuário da classe, o registro de data e hora em um intervalo com a classe meta e o conteúdo da mensagem em uma tag do parágrafo 'p'.

Bloco de código contendo dados necessários no chat.html

Etapa 1: extrair datas da mensagem

Agora eu tive o bate-papo completo comigo em um formato html que só precisava ser raspado para obter os dados. Eu usei sopa bonita para obter o timestamp de cada mensagem e despejei esses dados em um arquivo csv “chatdata.csv”. Esse processo leva de 4 a 5 segundos apenas para o caso em que há muitas mensagens, mas é quase instantâneo. Até este ponto, o csv está em uma condição muito ruim com valores redundantes, ou seja, várias linhas para o mesmo timestamp.

Extraindo e exportando datas da mensagem.

Etapa 2: contando mensagens em uma determinada data

A próxima tarefa era contar o número de mensagens enviadas em um único dia. Eu usei biblioteca de pandas para fazer isso. O dataframe foi o csv completo. Usei a função groupby para agrupar as linhas de acordo com uma data específica. Após essa etapa, eu tinha todas as datas em que a mensagem foi enviada e a contagem de mensagens enviadas naquele dia foi exportada para “count.csv”. O único passo restante era ordenar as datas em ordem crescente para que o gráfico fosse plotado de uma maneira ordenada.

Etapa 3: Classificando os dados

Usando a função sort_values na biblioteca pandas, classifiquei o count.csv da etapa anterior em ordem crescente de datas. O timestamp originalmente contém data e hora no formato Sunday,April 8,2018 at 12:02pm UTC+5:30 . Portanto, ao criar o “chatdata.csv”, extraí apenas a data do registro de data e hora e, ao criar o final sorted.csv, a data é convertida no formato AAAA-MM-DD usando a função to_date na biblioteca pandas. O “sorted.csv” é o arquivo de dados que tem a contagem de mensagens em um determinado dia em ordem crescente de datas. A tarefa final restante é plotar essas duas colunas em um gráfico.

Contando e classificando as datas da mensagem

Etapa final: plotar gráfico e executar o script.

Para plotar os dados, usei a biblioteca matlplotlib. Eu mantive datas no eixo xea contagem de mensagens naquele dia no eixo y.

função principal para criar dataset e traçar o gráfico

Agora era hora de dar um teste de script python e Voila! a saída estava lá na tela. Foi divertido testar o script em chats diferentes e comparar o gráfico entre eles.

Exemplo de plotagem de saída

O código fonte do script completo pode ser encontrado no GitHub.

Anupam-dagar / Data-Visualization-Facebook-Chat

Data-Visualization-Facebook-Chat – Script Python para visualizar seu bate-papo no Facebook com seu amigo

github.com