Rede Humaniza SUS – Palavras mais frequentes em suas postagens

Olá a tod@s,

Hoje venho falar um pouco a respeito do processo de coleta de dados para a criação de uma nuvem de palavras com o conteúdo existente na base de dados da Rede Humaniza SUS (RHS), essa é uma das etapas para o desenvolvimento de um painel analítico que tem sido construído com dados da rede.

Antes de começar, preciso dizer que o que será mostrado aqui embora chegue ao resultado que gostaríamos, segue um caminho não muito linear, que vai de algo mais técnico para algo mais curioso a medida que o trabalho se desenvolve, dessa forma a “metodologia” utilizada pode ser aprimorada, deixando de ter tantas etapas e softwares diferentes.

Este trabalho foi constituído da seguinte demanda:

“A necessidade de extração das palavras mais frequentes que aparecem nas postagens da RHS, separadas por dia”.

A RHS até o momento tem quase 15 mil postagens individuais, seguindo o que foi pedido, era preciso agrupar essas quase 15 mil postagens por dia, sendo que em um dia pode acontecer de não haver qualquer postagem, como podemos ter dias em que são feitas 5 ou 10 postagens na rede. Aqui começa um dos primeiros desafios, “como agrupar os dados?”

O agrupamento dos dados foi feito com o uso de SQL para obtenção das postagens e com Python para agrupa-los de maneira coerente e efetuar o tratamento do texto. O pré tratamento para a organização dos dados foi feito e assim adicionamos o que foi coletado do banco em um data frame.

df = pd.DataFrame(rhs_data)

Utilizando uma função da livraria Pandas fazemos a junção dos dados por data

df_new = pd.DataFrame(df.groupby('Data')['post'].apply(' '.join))

Mais alguns ajustes e temos os dados por data, o que gerou textos com tamanho considerável, uma vez que estamos tratando de postagens no estilo blog, das quase 15 mil postagens totais, passamos para 3228 postagens com bastante texto!!!

Neste ponto um outro fator foi identificado, e por se tratar de algo um tanto quanto crucial, existiu a necessidade de se solucionar tal questão antes do prosseguir, algumas postagens mais antigas apresentavam caracteres em ASCII que normalmente são interpretados pelo navegador, então letras como “ç” ou o “ã” não apareciam de forma correta, foi feito um tratamento especifico para isso, tornando o texto legível. Haviam também páginas com muitos elementos HTML, para sua limpeza recorremos ao uso da livraria BeautifulSoup.

A partir desse ponto alguns tratamentos de texto foram utilizados, nomeadamente:

– Remoção de caracteres especiais e diversos e números (, . % $ # + ? ! | 0-9) .

– Remoção de espaços múltiplos que são deixados pela remoção de caracteres especiais.

– Remoção de Stop Words (a, e, de, da).

– Remoção de caracteres soltos no texto, caso existam.

– Contagem de palavras mais frequentes por dia.

O resultado final armazena em tuplas as 10  palavras mais comuns por dia, o tratamento aqui vai desde a junção das tuplas que são apresentadas de forma separada, sua limpeza e o desenvolvimento final do trabalho.

Como resultado final foi obtida uma tabela com a data, a palavra, e a quantidade de vezes que ela aparece naquele dia. Levando esses dados ao Excel e fazendo o uso de VBA replicamos as palavras de acordo com a quantidade, sem alterar o dia, com isso feito temos o produto final que apresenta a data da postagem onde a palavra aparece e a repetição de quantas vezes essas palavras apareceram naquele dia.

Resultado final —> Uso de VBA para formatar os dados de acordo com o Tableau

A parte final pode não fazer muito sentido de forma isolada, no entanto como a visualização final seria gerada no Tableau os dados precisavam seguir aspectos comuns dessa ferramenta, por isso sua estrutura segue o modelo mencionado e mostrado acima. Melhorias podem ser feitas no código criado e também na forma como se reproduziu o desenvolvimento do trabalho.

Abaixo o código em Python, a primeira imagem do post, apresenta o resultado final usado.

Obrigado 🙂

https://gist.github.com/4dd4671f17521dd4711f3f5b5db0d7da

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *