Se você quer saber o que está acontecendo no mundo, o Twitter é lugar certo. Uma rede social extremamente dinâmica e atualizada. Para quem lida com ciência de dados, o Twitter é um prato cheio, além de ser uma excelente fonte de dados, possui uma API de fácil utilização.
Tenho estudado sobre recuperação da informação em redes sociais e web para desenvolver um projeto que provavelmente virará um post aqui no blog. Pretendo coletar tweets sobre um tema e depois fazer uma análise de palavras, sentimentos, quantidade e etc… Enfim, enquanto o projetinho não sai, gostaria de compartilhar um código bem simples e compacto que pode ajudar bastante quem deseja fazer projetos desse tipo.
O processo é simples, com nosso código (no meu caso rodando no jupyter notebook, mas você pode usar a IDE que preferir), utilizando a API do Twitter, coletaremos os tweets que desejarmos e os armazenaremos em um banco de dados MongoDB. Depois, vamos ler nossos dados adquiridos e os transformar em um dataframe para que possamos aplicar os algoritmos e fazer nossas análises. Além disso, também exportaremos para um arquivo .csv para que podermos trabalhar com eles em outros momentos sem a necessidade de acessar o banco de dados.
Bom, primeiramente você precisará das chaves da API do Twitter, para isso é necessário ter uma conta de desenvolvedor, caso não tenha, é possível fazer no site deles. Esse processo pode levar alguns dias, você preenche com seus dados e informações sobre seu projeto e posteriormente receberá um email de confirmação. Não tem muito mistério, mas caso se sinta um pouco inseguro para responder o email, aqui e aqui, tem alguns exemplos de respostas.
O MongoDB pode ser baixado pelo site, e sua instalação é bem tranquila. Se tiver dificuldades em trabalhar com ele via shell, recomendo baixar o Robo 3T para usar uma interface gráfica.
Vamos ao código:
# Instalação do pacote Tweepy !pip install tweepy # Importação de módulos from tweepy.streaming import StreamListener from tweepy import OAuthHandler from tweepy import Stream from datetime import datetime import json
Chaves da API do Twitter. Aqui substitua os "XXXXX" pelas suas chaves.
# Consumer Key consumer_key = "xxxxx" # Consumer Secret consumer_secret = "xxxxx" # Access Token access_token = "xxxxx" # Access Token Secret access_token_secret = "xxxxx" # Chaves de autenticação auth = OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_token, access_token_secret)
Classe para captura dos tweets. Nessa parte do código você pode definir o que você irá coletar. Do jeito que estar, está coletando: momento de criação (created_at), ID (id_str), nome do usuário (screen_name), número de seguidores (followers_count) e o texto do tweet (text). Nessa página você pode ver quais outros itens existem em um tweet e sua respectiva nomenclatura para a coleta.
# Classe de captura de stream class MyListener(StreamListener): def on_data(self, data): tweet = json.loads(data) created_at = tweet["created_at"] id_str = tweet["id_str"] screen_name = tweet["user"]["screen_name"] followers_count = tweet["user"]["followers_count"] text = tweet["text"] obj = {"created_at":created_at,"id_str":id_str, "screen_name":screen_name, "followers_count":followers_count, "text":text,} tweetind = col.insert_one(obj).inserted_id print (obj) return True
Definindo objetos:
# Objeto mylistener mylistener = MyListener() # Objeto mystream mystream = Stream(auth, listener = mylistener)
Conexão com MongoDB.
Lembrete: O banco de dados deve estar ativo nesse momento.
# Importação do módulo MongoClient from pymongo import MongoClient # Conexão com MongoDB client = MongoClient('localhost', 27017) # Criação do banco de dados db = client.twitterdb # Criando da coleção col = db.tweets
Defina as palavras chaves que os tweets que você deseja coletar devem conter:
# Lista de palavras chave para buscar nos Tweets keywords = ['xxxxxx', 'yyyyyy', 'zzzzzz']
Coleta. Deixe rodando pelo tempo que achar necessário. Você poderá ver que os tweets irão começar a aparecer na célula.
# Acionamento do filtro de tweets e gravação no MongoDB mystream.filter(track=keywords) # Pausar a execução para interromper a coleta
mystream.disconnect()
Manipulação dos dados coletados:
# consulta de um elemento da coleção col.find_one() # criação de um dataset com dados do MongoDB dataset = [{"created_at": item["created_at"], "screen_name":item["screen_name"], "followers_count":item["followers_count"], "text": item["text"], } for item in col.find()] # Pacote Pandas import pandas as pd # Criação de um dataframe a partir do dataset dataframe = pd.DataFrame(dataset) # Exibição do dataframe dataframe # Exportação do DataFrame para um arquivo .csv dataframe.to_csv('dados.csv', index=False)
Prontinho, dados coletados e prontos para a análise. Em breve, disponibilizarei um Jupyter notebook com o código, pronto para uso (bastantando apenas inserir as chaves da API e definir as palavras para a busca).
06-03-2019 | Update:
Como prometido, segue o link do Github com notebook do código.