SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Análise de Redes Sociais usando
NetworkX e Google App Engine
(Shaving the yak with Python)
Érico Andrei
Pessoa Física
Érico Andrei
• Sócio/Diretor da Simples Consultoria
• Gerente de consultoria na Assessoria da
Presidência da Editora Abril
• Consultor de Marketing - Microsoft Brasil
• Diretor de Marketing da APyB
• Professor de Administração e Marketing
(UNIP, UNICSUL)
E para evitar o efeito
Google
Pai de uma linda garota
Part time nerd
Torcedor do Juventus da Mooca
Shaving theYak
• Outro dia eu estava conversando com o
@osantana sobre o uso de Git vs
Mercurial vs PythonBrasil vs Futebol vs
Teatro...
On any given sunday...
• Como será que se comporta minha rede
de amigos no Facebook?
• E que tal se eu aproveitasse para aprender
este tal de Google App Engine?
• E se ....
On any given sunday...
• Listar meus amigos
• Relações entre estes amigos
• Fazer um gráfico destas relações
On any given sunday...
• Depois de 2 horas e um pouco de :
• NetworkX + App Engine + Nexus +
pyfacebook + Matplotlib
On any given sunday...
On any given sunday...
Retrospectiva
Dados Facebook
http://developers.facebook.com/
• Várias formas de acesso
• REST
• FQL
• Graph API
• Social plugins
Dados Facebook
http://developers.facebook.com/
• Entender Permissões
• user_about_me
• user_birthday
• user_location
• user_religion_politics,
• user_website
• user_work_history
• read_friendlists,user_hometown,
• user_groups
• offline_access
PyFacebook
http://github.com/sciyoshi/pyfacebook/
• Parecia a melhor solução
• Usa a api REST do Facebook
• Fácil de usar
PyFacebook
• Meio que morto...
PyFacebook
Meus dados
import facebook
_FbApiKey = 'e18cfce409596b6508930fd99edffd'
_FbSecret = 'e18cfce409596b6508930fd99edffd'
fb = facebook.Facebook(_FbApiKey, _FbSecret)
fb.auth.createToken()
fb.login()
fb.auth.getSession()
info = fb.users.getInfo([fb.uid], ['name', 'birthday', 'affiliations', 'sex'])[0]
print 'Nome: ', info['name']
print 'Sexo: ', info['sex']
FQL
Listar amigos
SELECT
uid, name, sex, birthday_date
FROM
user
WHERE
uid in (SELECT uid2 FROM friend WHERE uid1=534881870)
PyFacebook + FQL
Meus amigos
import facebook
...
query ="""SELECT uid, name, sex, birthday_date
FROM user
WHERE
uid in (SELECT uid2 FROM friend WHERE uid1=534881870)"""
friends = fb.fql.query(query)
friends = friends.get('fql_result_set',[])
PyFacebook + FQL
Meus amigos e relações entre eles
query ={"friends": """SELECT uid, name, birthday, relationship_status, pic_square,
FROM user
WHERE
uid in (SELECT uid2 FROM friend WHERE uid1=534881870)""",
"friendFriends": """SELECT uid1, uid2 FROM friend
WHERE uid1 IN (SELECT uid FROM #friends) AND uid2 in (SELECT
uid FROM #friends)
"""}
friends, friendsFriend = fb.fql.multiquery(query)
friends = friends.get('fql_result_set',[])
friendsFriend = friendsFriend.get('fql_result_set',[])
E entra OpenGraph
• Facebook disponibiliza SDK para Python
• Foco apenas em OpenGraph
http://github.com/facebook/python-sdk
Python SDK
Meus dados
import facebook
FACEBOOK_APP_ID = "114205635404397"
FACEBOOK_APP_SECRET = "abc21d6d41ec7ae98c31d97942e66276"
cookie = facebook.get_user_from_cookie(cookies,
FACEBOOK_APP_ID,
FACEBOOK_APP_SECRET)
graph = facebook.GraphAPI(cookie["access_token"])
profile = graph.get_object("me")
nome = profile.get('name')
Python SDK
Meus Amigos
import facebook
FACEBOOK_APP_ID = "114205635404397"
FACEBOOK_APP_SECRET = "abc21d6d41ec7ae98c31d97942e66276"
cookie = facebook.get_user_from_cookie(cookies,
FACEBOOK_APP_ID,
FACEBOOK_APP_SECRET)
graph = facebook.GraphAPI(cookie["access_token"])
amigos = graph.get_connections("me", "friends")
Python SDK
FQL
import facebook
...
NetworkX
Agrupando amigos
http://github.com/ericof/bin/blob/master/facebook/graph.py
#!/usr/local/bin/python2.4
try:
import matplotlib.pyplot as plt
except:
raise
import networkx as nx
x_min,x_max = (0.946,1.3)
y_min,y_max = (0.9,1.3)
x_avg = (x_max+x_min)/2
y_avg = (y_max+y_min)/2
E entra o App Engine
http://apps.facebook.com/manoexplorer/
• Manter alguns dados dos usuários
• Permitir relatórios complexos
• Pedir ajuda aos amigos
• Brincar (+) um pouco
Desafios
• Buscar dados Facebook
• Entender o Datastore
• Limites, limites
Dados do Facebook
• Acesso HTTP
• Limite de tempo de resposta
• urlfetch ou urllib
Datastore
• Maldito vício de RDBMS
• Agradeço a @rodolphoeck
• Agora reescrever boa parte do código
Limites
• ReferenceProperty são coisas do mal
• Mantenha dados a serem exibidos no
mesmo “registro”
• Lembre-se de que temos tempo limite de
execução
Exemplo prático
• Um cabra tem 560 amigos no Facebook
• Ao entrar no Mano Explorer quero listar
os amigos
• Adicionar registros relativos a novos
usuários
Exemplo prático
• No máximo posso salvar 500 registros por
vez
• Isto consome muita CPU
Exemplo prático
• Solução: TaskQueue + Memcache
• Memcache: Resultado vindo do Facebook
• TaskQueue: Processa resultados direto do
Memcache
Exemplo prático
Criando a fila
def friends(self):
''' Let's get the friends of this user
'''
user = self.current_user
if user:
taskqueue.add(url='/queue/getFriends', params={'user_id':user.id})
Exemplo prático
Armazenando amigos
if friends:
memcache.add(key="friends_%s" % str(user.id), value=friends, time=180)
if tmpFF:
memcache.add(key='queue_%s' % str(user.id),value=tmpFF,time=240)
ranges = [(r,((((r+limit)<nUsers) and (r+limit)) or nUsers)) for r in range
(0,nUsers,limit)]
memcache.delete(key='queues_%s' % str(user.id))
for s,e in ranges:
tmpQueues.append((s,e))
logging.debug('Adiciona tarefa na fila %d - %d' % (s,e))
taskqueue.add(queue_name='friendsUp' ,url='/queue/friend_fetch',
params={'user_id':user.id, 'start':s, 'end':e,})
memcache.add(key='queues_%s' % str(user.id),value=tmpQueues,time=180)
Exemplo prático
Exemplo prático
Meus amigos
Amigos do Cleber
Próximos Capítulos
• RaphäelJs ou Flare
• Ter mais que > 17 usuários
• Implementar rede no AppEngine
Obrigado
Érico Andrei
+551138982121 ext.1019
erico@simplesconsultoria.com.br
http://www.simplesconsultoria.com.br
Twitter: @ericof
Gtalk, MSN: ericof@gmail.com

Mais conteúdo relacionado

Semelhante a Análise de Redes Sociais usando NetworkX e Google App Engine

WebQuest-A Educação pelas Redes Sociais
WebQuest-A Educação pelas Redes SociaisWebQuest-A Educação pelas Redes Sociais
WebQuest-A Educação pelas Redes Sociaismonicafatimarosa
 
Primeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLDickson S. Guedes
 
Hackeando o Facebook e o Twitter com Python TI no Vale
Hackeando o Facebook e o Twitter com Python TI no ValeHackeando o Facebook e o Twitter com Python TI no Vale
Hackeando o Facebook e o Twitter com Python TI no ValeFATEC São José dos Campos
 
2006 - Introdução a Objetos Linguagem e Padrões.ppt
2006 - Introdução a Objetos Linguagem e Padrões.ppt2006 - Introdução a Objetos Linguagem e Padrões.ppt
2006 - Introdução a Objetos Linguagem e Padrões.pptRicardo Guerra Freitas
 
Automatizando tarefas com Python
Automatizando tarefas com PythonAutomatizando tarefas com Python
Automatizando tarefas com Pythonpugpe
 
Aula Paula Rizzo
Aula Paula RizzoAula Paula Rizzo
Aula Paula Rizzo...
 
Como trabalhar remoto com WordPress
Como trabalhar remoto com WordPressComo trabalhar remoto com WordPress
Como trabalhar remoto com WordPressMario Ernesto
 
Google analytics-para-search-e-social-campus-party
Google analytics-para-search-e-social-campus-partyGoogle analytics-para-search-e-social-campus-party
Google analytics-para-search-e-social-campus-partyfrankmarcel
 
The Data Science Workflow
The Data Science WorkflowThe Data Science Workflow
The Data Science WorkflowRenzo Ziegler
 
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurançaInternet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurançaW. Gabriel de Oliveira
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBDouglas Lira
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e DjangoOsvaldo Santana Neto
 
Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Marcel Caraciolo
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014Christiano Anderson
 

Semelhante a Análise de Redes Sociais usando NetworkX e Google App Engine (20)

ativ2webquestmonicarosa
ativ2webquestmonicarosaativ2webquestmonicarosa
ativ2webquestmonicarosa
 
WebQuest-A Educação pelas Redes Sociais
WebQuest-A Educação pelas Redes SociaisWebQuest-A Educação pelas Redes Sociais
WebQuest-A Educação pelas Redes Sociais
 
Primeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQL
 
Hackeando o Facebook e o Twitter com Python TI no Vale
Hackeando o Facebook e o Twitter com Python TI no ValeHackeando o Facebook e o Twitter com Python TI no Vale
Hackeando o Facebook e o Twitter com Python TI no Vale
 
Os3
Os3Os3
Os3
 
TWP45 Hackeando o Facebook com Python
TWP45 Hackeando o Facebook com PythonTWP45 Hackeando o Facebook com Python
TWP45 Hackeando o Facebook com Python
 
2006 - Introdução a Objetos Linguagem e Padrões.ppt
2006 - Introdução a Objetos Linguagem e Padrões.ppt2006 - Introdução a Objetos Linguagem e Padrões.ppt
2006 - Introdução a Objetos Linguagem e Padrões.ppt
 
Web scrapping com selenium webdriver
Web scrapping com selenium webdriverWeb scrapping com selenium webdriver
Web scrapping com selenium webdriver
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
Automatizando tarefas com Python
Automatizando tarefas com PythonAutomatizando tarefas com Python
Automatizando tarefas com Python
 
Aula Paula Rizzo
Aula Paula RizzoAula Paula Rizzo
Aula Paula Rizzo
 
Webquest
WebquestWebquest
Webquest
 
Como trabalhar remoto com WordPress
Como trabalhar remoto com WordPressComo trabalhar remoto com WordPress
Como trabalhar remoto com WordPress
 
Google analytics-para-search-e-social-campus-party
Google analytics-para-search-e-social-campus-partyGoogle analytics-para-search-e-social-campus-party
Google analytics-para-search-e-social-campus-party
 
The Data Science Workflow
The Data Science WorkflowThe Data Science Workflow
The Data Science Workflow
 
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurançaInternet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
 
Mude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDBMude seu jeito de pensar com MongoDB
Mude seu jeito de pensar com MongoDB
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 

Mais de Simples Consultoria

Plone: Funcionalidades que todo gestor de conteúdo Plone deveria saber
Plone: Funcionalidades que todo gestor de conteúdo Plone deveria saberPlone: Funcionalidades que todo gestor de conteúdo Plone deveria saber
Plone: Funcionalidades que todo gestor de conteúdo Plone deveria saberSimples Consultoria
 
PloneGov.Br: Cadê o .br que estava aqui?
PloneGov.Br: Cadê o .br que estava aqui?PloneGov.Br: Cadê o .br que estava aqui?
PloneGov.Br: Cadê o .br que estava aqui?Simples Consultoria
 
V de Vinagre: A história por trás da história do momento que mudou o Brasil
V de Vinagre: A história por trás da história do momento que mudou o BrasilV de Vinagre: A história por trás da história do momento que mudou o Brasil
V de Vinagre: A história por trás da história do momento que mudou o BrasilSimples Consultoria
 
Collective.cover: one year later
Collective.cover: one year laterCollective.cover: one year later
Collective.cover: one year laterSimples Consultoria
 
Plone 5: Você ainda vai ter um!
Plone 5: Você ainda vai ter um!Plone 5: Você ainda vai ter um!
Plone 5: Você ainda vai ter um!Simples Consultoria
 
Primeiros passos com Plone, o CMS Pythonico
Primeiros passos com Plone, o CMS PythonicoPrimeiros passos com Plone, o CMS Pythonico
Primeiros passos com Plone, o CMS PythonicoSimples Consultoria
 
Python como primeira linguagem de programação
Python como primeira linguagem de programaçãoPython como primeira linguagem de programação
Python como primeira linguagem de programaçãoSimples Consultoria
 
O Futuro do Plone (PythonBrasil[8])
O Futuro do Plone (PythonBrasil[8])O Futuro do Plone (PythonBrasil[8])
O Futuro do Plone (PythonBrasil[8])Simples Consultoria
 
Lenguaje, framework, comunidad y cuenta bancaria: De teoría hasta la práctica
Lenguaje, framework,  comunidad y cuenta bancaria: De teoría hasta la prácticaLenguaje, framework,  comunidad y cuenta bancaria: De teoría hasta la práctica
Lenguaje, framework, comunidad y cuenta bancaria: De teoría hasta la prácticaSimples Consultoria
 
Cómo Brasil está construyendo una nación digital con código abierto y Python
Cómo Brasil está construyendo una nación digital con código abierto y PythonCómo Brasil está construyendo una nación digital con código abierto y Python
Cómo Brasil está construyendo una nación digital con código abierto y PythonSimples Consultoria
 
Plone.gov.br: Or how to leverage Plone in the Brazilian Government
Plone.gov.br: Or how to leverage Plone in the Brazilian GovernmentPlone.gov.br: Or how to leverage Plone in the Brazilian Government
Plone.gov.br: Or how to leverage Plone in the Brazilian GovernmentSimples Consultoria
 
Criando temas para Joomla, Wordpress, Drupal e tudo mais sem tocar em templa...
Criando temas para Joomla, Wordpress, Drupal e tudo mais  sem tocar em templa...Criando temas para Joomla, Wordpress, Drupal e tudo mais  sem tocar em templa...
Criando temas para Joomla, Wordpress, Drupal e tudo mais sem tocar em templa...Simples Consultoria
 

Mais de Simples Consultoria (20)

Diazo para todos
Diazo para todosDiazo para todos
Diazo para todos
 
Plone: Funcionalidades que todo gestor de conteúdo Plone deveria saber
Plone: Funcionalidades que todo gestor de conteúdo Plone deveria saberPlone: Funcionalidades que todo gestor de conteúdo Plone deveria saber
Plone: Funcionalidades que todo gestor de conteúdo Plone deveria saber
 
PloneGov.Br: Cadê o .br que estava aqui?
PloneGov.Br: Cadê o .br que estava aqui?PloneGov.Br: Cadê o .br que estava aqui?
PloneGov.Br: Cadê o .br que estava aqui?
 
V de Vinagre: A história por trás da história do momento que mudou o Brasil
V de Vinagre: A história por trás da história do momento que mudou o BrasilV de Vinagre: A história por trás da história do momento que mudou o Brasil
V de Vinagre: A história por trás da história do momento que mudou o Brasil
 
Collective.cover: one year later
Collective.cover: one year laterCollective.cover: one year later
Collective.cover: one year later
 
Plone 5: Você ainda vai ter um!
Plone 5: Você ainda vai ter um!Plone 5: Você ainda vai ter um!
Plone 5: Você ainda vai ter um!
 
Primeiros passos com Plone, o CMS Pythonico
Primeiros passos com Plone, o CMS PythonicoPrimeiros passos com Plone, o CMS Pythonico
Primeiros passos com Plone, o CMS Pythonico
 
Python como primeira linguagem de programação
Python como primeira linguagem de programaçãoPython como primeira linguagem de programação
Python como primeira linguagem de programação
 
O Estado do Plone - FISL 14
O Estado do Plone - FISL 14O Estado do Plone - FISL 14
O Estado do Plone - FISL 14
 
O Futuro do Plone (RuPy-Br)
O Futuro do Plone (RuPy-Br)O Futuro do Plone (RuPy-Br)
O Futuro do Plone (RuPy-Br)
 
O Futuro do Plone (PythonBrasil[8])
O Futuro do Plone (PythonBrasil[8])O Futuro do Plone (PythonBrasil[8])
O Futuro do Plone (PythonBrasil[8])
 
Lenguaje, framework, comunidad y cuenta bancaria: De teoría hasta la práctica
Lenguaje, framework,  comunidad y cuenta bancaria: De teoría hasta la prácticaLenguaje, framework,  comunidad y cuenta bancaria: De teoría hasta la práctica
Lenguaje, framework, comunidad y cuenta bancaria: De teoría hasta la práctica
 
Cómo Brasil está construyendo una nación digital con código abierto y Python
Cómo Brasil está construyendo una nación digital con código abierto y PythonCómo Brasil está construyendo una nación digital con código abierto y Python
Cómo Brasil está construyendo una nación digital con código abierto y Python
 
Gestión de Contenido con Plone
Gestión de Contenido con PloneGestión de Contenido con Plone
Gestión de Contenido con Plone
 
Plone.gov.br: Or how to leverage Plone in the Brazilian Government
Plone.gov.br: Or how to leverage Plone in the Brazilian GovernmentPlone.gov.br: Or how to leverage Plone in the Brazilian Government
Plone.gov.br: Or how to leverage Plone in the Brazilian Government
 
Collective Cover
Collective CoverCollective Cover
Collective Cover
 
O Futuro do Plone
O Futuro do PloneO Futuro do Plone
O Futuro do Plone
 
Criando Temas com Diazo
Criando Temas com DiazoCriando Temas com Diazo
Criando Temas com Diazo
 
Criando temas para Joomla, Wordpress, Drupal e tudo mais sem tocar em templa...
Criando temas para Joomla, Wordpress, Drupal e tudo mais  sem tocar em templa...Criando temas para Joomla, Wordpress, Drupal e tudo mais  sem tocar em templa...
Criando temas para Joomla, Wordpress, Drupal e tudo mais sem tocar em templa...
 
O Futuro do Plone
O Futuro do PloneO Futuro do Plone
O Futuro do Plone
 

Análise de Redes Sociais usando NetworkX e Google App Engine