-
Notifications
You must be signed in to change notification settings - Fork 0
Relatório de Projeto
Relatório de projeto final da após graduação de Especialização em Ciência de Dados e Inteligência de Negócios.
Este trabalho foca no processamento em tempo real de mensagens compartilhadas na rede social Twitter, daqui em diante referidas como tweets.
O twitter é uma grande fonte de informação. Os usuários são bastante ativos, e estão constantemente comentando publicamente sobre os mais variados assuntos. Existem diversas oportunidades para aproveitar-se do fluxo constante de dados disponíveis a cada minuto na rede social. Movimentos sociais podem ser acompanhados, o impacto de notícias em diversos locais pode ser sentido, e empresas podem visualizar a percepção dos usuários sobre seus produtos, ganhando uma importante vantagem competitiva e tendo a chance de alterar sua estratégia de vendas de acordo com o que dá mais certo com o público em geral.
Dadas chaves de pesquisa como hashtags e palavras relevantes a uma empresa, o projeto deve montar um dashboard com informações relevantes como quantidade de tweets redigidos no período e palavras mais utilizadas. Utilizando o Tweepy, biblioteca Python que possibilita acessar a API do Twitter, é possível realizar a coleta dos tweets que estão relacionados às hashtags e palavras-chaves informadas.
Com os tweets coletados, os dados são limpos e tratados para possibilitar uma análise mais assertiva. A análise dos dados pode ser adaptada de acordo com as necessidades do usuário, de forma a conseguir extrair as informações que promovam maior impacto no negócio.
As informações são agrupadas e apresentadas de forma mais visual e interativa utilizando o Plotly, também uma biblioteca Python, facilitando a compreensão e agilizando a leitura das informações obtidas dos dados.
O projeto utiliza o processo de Descoberta de Conhecimento em Base de Dados (do inglês Knowledge Discovery in Databases — KDD), onde são realizadas cinco etapas até ser possível visualizar as informações relevantes que foram extraídas dos dados. São essas etapas a seleção, pré-processamento, transformação, mineração de dados e por fim a interpretação.
O time é composto por Felipe Carvalhedo, Matheus Carvalho, Nathannael Morais e Tales Siebra.
Os dados brutos são coletados diretamente da API do twitter. O acesso é feito com o uso do Tweepy. Por meio dessa biblioteca, é possível realizar a coleta dos tweets mais recentes por meio das duas formas disponibilizadas pela rede social: através de HTTP e de fluxo de dados (streaming). Como o objetivo da aplicação é trazer esses dados em tempo real, conforme os tweets são enviados à plataforma, o método de aquisição escolhido foi o de streaming.
A aplicação deve ser registrada junto ao Twitter, que por sua vez emite chaves criptografadas que podem ser utilizadas para a autenticação no serviço. Utilizando o Tweepy, é possível utilizar essas chaves para realizar a conexão.
O Tweepy também possui classes específicas para a implementação do stream de dados. É possível criar Listeners que herdam da classe padrão da biblioteca, e neles já é possível especificar o que será feito no recebimento de cada tweet. No caso da nossa aplicação, cada tweet recebido é tratado utilizando o spaCy, biblioteca especializada no processamento de linguagem natural.
Por fim, a aplicação cria uma instância do Listener personalizado criado e passa o parâmetro desejado para a pesquisa. A partir desse momento, o código do Tweepy faz sua parte no processamento, chamando nossa função de tratamento para cada tweet novo.
Inicialmente, uma tela simples com um campo de input é exibido para o usuário. Esse campo representa o termo que será analisado, e ele será utilizado como o principal parâmetro de busca pelo programa. Após preenchido, o campo envia o termo para uma função chamada Analysis.perform(), que abre uma conexão de stream com a API do Twitter através do Tweepy. O Tweepy possui uma função de objeto chamada Stream.filter(), que será responsável por trazer todos os tweets que referenciam o termo anteriormente digitado através do parâmetro track, estando ele presente tanto no texto do tweet, quanto no nome do usuário que realizou a postagem.
A classe MyStreamWordCounter recebe os tweets após a abertura da stream, e se responsabilizará por fazer todo o tratamento dos dados. Pode-se listar as seguintes funções como as principais para a visualização dos dados obtidos:
-
track_retweets - Responsável por contar a quantidade de vezes em que um retweet aparece durante o tempo em que a stream está rodando;
-
track_sources - Responsável por especificar e contar os aplicativos e fontes pelos quais um tweet foi feito;
-
track_countries - Responsável por especificar o país de onde o tweet foi originado.
No final de cada uma dessas funções, um arquivo JSON é criado para que sejam utilizados como fonte de informação para a exibição de gráficos na página principal do programa. Em seguida, a quantidade total de tweets é quantificada, e uma variável contendo apenas retweets é armazenada. Com esta variável em mãos, o programa utiliza uma função split para remover os caracteres especiais. Os retweets em questão serão jogados em uma função de tokenização que necessita de dois parâmetros: o texto do retweet, e uma string que contém uma tag de part-of-speech que representa “substantivos”. Dentro da função, o spaCy se responsabiliza por transformar o texto em um objeto do tipo Doc, que possui a funcionalidade de transformar o tweet em uma lista de palavras. Cada palavra dentro da lista é um objeto do tipo Token. Essa lista de palavras será filtrada por um laço de repetição, que buscará apenas pelos substantivos. Depois de obtidos, os dados filtrados serão armazenados em um JSON, que também será utilizado posteriormente na plotagem dos gráficos.
Após terminado o tratamento dos dados, a função retorna a stream para o método principal, que utilizará os arquivos JSON para formatar os gráficos na tela utilizando um framework baseado no Plotly chamado Dash. A principal função do Dash é de associar interfaces de usuário ao código Python, permitindo que todas as suas funcionalidades sejam facilmente executadas em um servidor web.
Frequência de Substantivos
Frequência de Fontes
Localização dos Usuários


