Sitemap
Rita Lopes

Rita Lopes

about technology and life

Refazendo telegram-analysis com Python

Análise de mensagens de supergrupo do Telegram a partir de repositório expectocode/telegram-analysis modificado para uso de Pandas.

4 min readNov 6, 2020

--

Press enter or click to view image in full size

Antes de tudo…

Esse artigo é um projeto da disciplina de Ciências de Dados do curso B. Tecnologia da Informação da Universidade Federal do Rio Grande do Norte.

Nos parágrafos seguintes, exponho quais as adaptações fiz no projeto telegram-analysis de análise de mensagens do Telegram para usar num chat de grupo do qual participo, ele contém membros de um determinado curso da UFRN.

telegram-analysis

O repositório mostrado na imagem abaixo é do expectocode e até o momento em que escrevo este artigo ele estava sem atualização há 3 anos.

Press enter or click to view image in full size
Repositório do telegram-analysis no github

O propósito dos código desenvolvidos na linguagem Python é mostrar desde a atividade dos usuários de um chat até gerar gráficos com mensagens mais comuns.

Json ou jsonl?

Um problema foi que o chat usado para gerar as saídas era .jsonl e a saída atual do processo de exportação de um chat do telegram é .json com organização e campos diferentes. Isso, possivelmente, foi modificações que ocorreram desde a escrita do código original até hoje.

Elaborei um código simples para converter a saída do chat em .jsonl.

Parte do código para converter para .jsonl

No entanto, preferi não utilizar o código convertido para gerar meus resultados, mas sim usar o pandas…

Usando Pandas

Primeira questão que me propus a resolver foi não manipular arquivos constantemente e conseguir entrar com arquivo .json com estrutura que o telegram me retorna.

O código para pegar todas as mensagens (getalltext.py)de um chat antes assim:

Press enter or click to view image in full size
Código de abertura de arquivos no telegram-analysis

Ficou assim depois de usar pandas e uma função para gerar as saídas:

Press enter or click to view image in full size
Parte do código para pegar todas as mensagens do chat

Foram modificados todos os scripts que usei para gerar os resultados: activedays.py, activehours.py, activityovertime.py, gettextfromuser.py, getpinnedmessage.py, mostactiveusers.py e mostcommonphrases.py.

Anonimização dos usuários

Não havia nenhum script para anonimizar o nome dos usuários. Então para não expor os usuários do grupo que exportei criei o seguinte script para substituir os nomes dos usuários:

Parte do script para anonimizar os dados

O arquivo modifica o nome de todos os usuários usando sempre o prefixo user_ e um número:

Parte do arquivo resultante do script para anonimização

ResultadoS

Dos scripts que geram saídas em texto o que irei destacar é o getalltext.py. Ele pega todas mensagens e gera a saída. Oferece também a opção de adicionar os nomes dos usuários. Usando o str.replace e RegEx com n+|^\n|\n\r+|^\s+ removi as quebras de linhas e espaços em branco das mensagens individuais.

Arquivo gerando pelo getalltext.py

Além disso, usei a saída de getalltext.py para entrada de mostcommonphrases.py , onde usei str.contains(r’^[^\.]’) para remover os pontos solitários das mensagens, dessa forma modifiquei a saída que contava os pontos finais como palavra.

Get Rita Lopes’s stories in your inbox

Join Medium for free to get updates from this writer.

Antes e depois de retirar os pontos a saída era essa:

Press enter or click to view image in full size
Press enter or click to view image in full size
Resultado antes e depois de retirar os pontos

Ademais, os scripts activedays.py e activehours.py geram saídas muito interessantes mostrando, respectivamente, um histograma com a frequência das mensagens por dias da semana e por horas do dias.

Press enter or click to view image in full size
Uso do chat por dia da seman
Press enter or click to view image in full size
Uso do chat por horas por dia

Ainda destaco os usuários mais ativos do chat:

Press enter or click to view image in full size
Usuários e sua porção de mensagens no chat

A figura

Por fim, exponho o que me chamou mais atenção: os momentos mais ativos desde o primeiro dia de 2020 até final de outubro de 2020.

Press enter or click to view image in full size
Uso do chat nos últimos meses

Conclusão

Ainda é possível melhorar bastante os scripts. No entanto, da forma que está é possível analisar o comportamento de chats exportados do Telegram.

No exemplo usado, vemos os picos de envio de mensagem em um dia no mês de Março, época em que houveram os primeiros casos de Covid-19 no Brasil e as Universidades se posicionaram paralisando suas atividades. Também no mês de Junho, tempo no qual o primeiro semestre remoto iniciou na UFRN.

Referências:

Meu repositório no github: https://github.com/ritallopes/telegram-analysis

Repositório original: https://github.com/expectocode/telegram-analysis

Do pandas: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.html

Editei as regex aqui

Sobre as regex: https://docs.python.org/pt-br/3.8/howto/regex.html

--

--