No exemplo de hoje vamos apresentar o plugin Python Twitter para realizar a mineração de dados de redes sociais. O objetivo é muito simples: vamos buscar algo que esteja acontecendo e verificar como as pessoas estão falando sobre isso nas redes sociais.
- Pré-requisitos: Python 2.7 (ainda não teste no Python3)
- Conta ativa no Twitter
Antes de começar você precisa obter um token para realizar as buscas no Twitter, conforme descrito no README.md do próprio módulo. Você pode acessar o site do Twitter para obter manualmente um token ou ainda utilizar o script get_acess_token.py fornecido no próprio módulo Python Twitter. Basta executar o script e seguir as instruções que estão ativas na tela.
O exemplo abaixo vai verificar se você conseguiu com sucesso carregar suas credenciais executando a chamada de verificação do próprio módulo:
import twitter import pprint api = twitter.Api(consumer_key='consumer_key', consumer_secret='consumer_secret', access_token_key='access_token', access_token_secret='access_token_secret') api.VerifyCredentials()
Agora que você conseguiu autenticar, vamos realizar uma busca simples pela palavra ladrão trazendo apenas os últimos 10 resultados:
status_list = api.GetSearch( geocode=None, term=u”ladrão”, since_id=None, lang=’pt’, count=10, result_type=’recent’ ) print(status_list) [, , , , , , , , , ]
Obtemos como resposta uma lista de instâncias da classe status. Uma das grandes vantagens do módulo é possuir uma interface excelente de documentação. Vejamos a documentação da classe:
help(twitter.Status) Help on class Status in module twitter.status: class Status(__builtin__.object) | A class representing the Status structure used by the twitter API. | | The Status structure exposes the following properties: (...) | withheld_copyright | | withheld_in_countries | | withheld_scope
Vejamos então qual foi o primeiro resultado retornado:
status_list[0].GetText() # u’RT @PandaRcds: @edmilsonpapo10 @OThereza MAIS UMA DAS MENTIRAS DO LULA LADR\xc3O DO BRASIL!’
Agora vem a parte da análise propriamente dita: de posse dos dados na mão, o que eu posso fazer com eles? Aí é que entra o trabalho do analista de dados: sabendo qual é o conteúdo dos tweets, vamos descobrir quais as hashtags mais utilizadas? Pretendo abordar esse aspecto em mais detalhes mais à frente, mas no momento vamos apenas extrair uma lista das hashtags e contar as ocorrências.
hashtags = dict() for status in status_list: status_hashtags = status.hashtags for hash in status_hashtags: if hashtags.get(hash.text) is None: hashtags[hash] = 1 else: hashtags[hash] += 1 pp = pprint.PrettyPrinter(indent=4) pp.pprint(hashtags) { u'FDP': 1, u'JackWarner': 1, u'LADR\xc3O': 1, u'Sele\xe7\xe3osportv': 1, u'VAGABUNDO': 1, u'diariodaputaria': 1, u'globoesporte': 1}
Dá pra ter um aperitivo? Em um próximo post vamos abordar questões como termos mais frequentes e modelagem de tópicos.
Deixei um gist com todo o código pra quem quiser brincar.
#!/usr/env python | |
# -*- coding: utf-8 -*- | |
import twitter | |
import pprint | |
api = twitter.Api(consumer_key='consumer_key', | |
consumer_secret='consumer_secret', | |
access_token_key='access_token', | |
access_token_secret='access_token_secret') | |
api.VerifyCredentials() | |
# <twitter.user.User object at 0x02EE5EF0> | |
status_list = api.GetSearch( | |
geocode=None, term=u”ladrão”, since_id=None, | |
lang=’pt’, count=10, result_type=’recent’ | |
) | |
print(status_list) | |
# [<twitter.status.Status object at 0x03078AF0>, <twitter.status.Status object at 0x03078B90>, <twitter.status.Status object at 0x03078C50>, <twitter.status.Status object at 0x03078D30>, <twitter.status.Status object at 0x03078D90>, <twitter.status.Status object at 0x03078DF0>, <twitter.status.Status object at 0x03078E50>, <twitter.status.Status object at 0x03078F10>, <twitter.status.Status object at 0x03078F70>, <twitter.status.Status object at 0x03088030>] | |
help(twitter.Status) | |
status_list[0].GetText() | |
# u’RT @PandaRcds: @edmilsonpapo10 @OThereza MAIS UMA DAS MENTIRAS DO LULA LADR\xc3O DO BRASIL!’ | |
hashtags = dict() | |
for status in status_list: | |
status_hashtags = status.hashtags | |
for hash in status_hashtags: | |
if hashtags.get(hash.text) is None: | |
hashtags[hash] = 1 | |
else: | |
hashtags[hash] += 1 | |
pp = pprint.PrettyPrinter(indent=4) | |
pp.pprint(hashtags) |
One Reply to “Extraindo dados de redes sociais com Python”