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) |
Encontro de 10 anos da Comunidade Cacic
One Reply to “Extraindo dados de redes sociais com Python”