Destaques, Redes Sociais

Extraindo dados de redes sociais com Python

No exemplo de hoje vamos apresentar o plugin Python Twitter para realizar a mineração de dados de redes sociais. O objetivo é...

Written by Eduardo Santos · 1 min read >

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=uladrã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)
view raw twitter-extract hosted with ❤ by GitHub
Written by Eduardo Santos
Desenvolvedor Open Source por vocação, Mestre em Computação Aplicada pela Universidade de Brasília (UnB), professor universitário e cientista de dados (data scientist). Profile

One Reply to “Extraindo dados de redes sociais com Python”

Leave a Reply

%d bloggers like this: