Otra forma de escuchar a través de Internet (BiMe), Gonzalo Ruiz
1. Otra forma de escuchar a
través de Internet
Gonzalo Ruiz – gruiz@bifi.es
31 de octubre de 2014
2. Índice
• Introducción
• Qué es el scraping
• Qué hemos hecho en Aragon Open
Social Data
• Qué ofrecemos al público
• Cómo se puede utilizar en el ámbito de
la música
31 de octubre de 2014 2
3. Qué es el BIFI
• Instituto de Biocomputación y Física de
Sistemas Complejos de la Universidad
de Zaragoza
• Multidisciplinariedad
– Bioquímica
– Biofísica
– Física
– Computación
31 de octubre de 2014 3
4. Redes complejas
• Grafo con una serie de características
especiales (estructura en comunidades,
jerarquía, etc.)
• Ej.: las redes sociales, foros, prensa
online, Internet… -> datos relacionados
• Experimentos dilema del prisionero,
análisis del movimiento del 15m,
Universidad de Zaragoza, collective
music experiment en SONAR, etc.
31 de octubre de 2014 4
5. Kampal
• Este tipo de análisis tiene mucho
potencial:
– Marketing
– Prensa
– Imagen de marca
– Toma de decisiones estratégicas
• Creación de una spin-off para ofrecer
estos servicios a empresas
31 de octubre de 2014 5
7. Qué es el scraping
• Internet es una gran base de datos
• Algunos sitios proveen herramientas
para descargarlos (APIs, servicios web,
etc.) -> JSON, XML
• En los que no, el formato es muy
heterogéneo -> HTML, XML, KML, AJAX
• Técnica para extraer datos de sitios web
a través de programas
31 de octubre de 2014 7
8. Scraper
• Programas que simulan las visitas que
muchos usuarios harían
• Normalmente el usuario ve la
información a través de un navegador
• Problemas según las fuentes:
– Cuestiones legales
– Límites
31 de octubre de 2014 8
9. Tecnologías
• Existen multitud de librerías en distintos
lenguajes (Java, Python, Ruby, …)
• Necesitamos esencialmente
– Librería para la conexión (urllib, requests…)
– Librería para parseo y extracción de datos
• HTML y XML (Beautifulsoup, lxml…)
• JSON (json, simplejson)
– Almacenamiento de datos en ficheros,
bases de datos, …
31 de octubre de 2014 9
10. Dificultades
• En ocasiones es necesario
– Autenticación
– Enviar formularios
– Enviar cabeceras
– Cookies de sesión
• Requieren trabajo de ingeniería inversa
• A veces no es posible emular el
navegador -> utilizar un webdriver
31 de octubre de 2014 10
14. Buenas prácticas
• Mira el robots.txt de los sitios que vayas a
scrapear
– Honestamente, habría que mirar también las
cabeceras x-robots en HTTP y las tag robots en el
HTML
• Controla la velocidad. Si el sitio va lento, baja la
presión.
• Y al revés, para más velocidad usa múltiples IPs,
varios scrapers, lanza proxies en la nube…
• No mientas en el UserAgent e indica al
sysadmin una forma de contactarte: email,
web…
31 de octubre de 2014 14
15. Qué hemos hecho en Aragón
Open Social Data
• ¿De qué se habla en Aragón?
• ¿Qué es importante para los
aragoneses?
• ¿Qué puede resultar interesante para los
aragoneses?
• ¿En qué se diferencian los
aragoneses del resto de
España?
31 de octubre de 2014 15
16. Qué fuentes capturamos
• Eventos: Facebook Events, Spain-info
• Texto: Twitter, Facebook, Google+, Blogger,
Blogia, Wordpress
• Wiki: Wikipedia
• Video: Youtube, Vimeo
• Imágenes: Instagram, Flickr, Pinterest
• Lugares: Foursquare
• Código: Github
• Prensa: Heraldo de Aragón, El Periódico de
Aragón, Diario del Alto Aragón, Diario de Teruel
31 de octubre de 2014 16
17. Qué datos capturamos
• Siempre datos públicos
• Que cualquier usuario puede encontrar
por sus propios medios
• Se puede controlar el contenido:
– por la URL
– por el autor
• Un usuario puede solicitar dejar de ser
escuchado
31 de octubre de 2014 17
18. Criterios de captura
• Geoposición
– Dentro de Aragón
– Zonas colindantes
– Nombres de municipios
• Palabras/usuarios clave
– Temas de interés
– Usuarios relevantes para Aragón
– Se realimentan y actualizan con los datos
geoposicionados
31 de octubre de 2014 18
21. Cómo se captura
• Normalmente el usuario ve la
información a través de un navegador
• Necesitamos capturar grandes
volúmenes de información constante
• Filtrado por diferentes criterios
• Herramientas que las redes sociales y
otras webs proveen
• Límites de las fuentes
31 de octubre de 2014 21
22. Cómo se captura
• Robots, arañas, web crawlers,
scrapers…
• Simulan las visitas que muchos
usuarios harían
• Cada uno se ocupa de una tarea
– Una red social
– Sólo cierta información
• Centralizan la información
– Filtran y “uniformizan” -> ETL
31 de octubre de 2014 22
23. Cómo se procesa la información
• Se solicitan sólo los campos que nos interesan,
se obvian los demás
• 2 tipos: streaming o periódicas
• Las arañas no saben qué contenido es bueno o
malo
– Se captura mucho ruido, especialmente al buscar
por palabra clave
– No se deben de usar palabras demasiado cortas o
sin significado (preposiciones, artículos…)
– Hay que tener cuidado con otros idiomas. Ej.: CAI,
USJ
31 de octubre de 2014 23
24. Cómo se almacena
• Todos los datos son guardados en una
base de datos distribuida
• La cantidad de información capturada
es importante
• En torno a 30 GB al mes, que se reducen
a unos 3 GBs al filtrar
• Alrededor de 1.000.000 de entradas al
mes entre vídeos, fotos, mensajes, etc.
31 de octubre de 2014 24
25. Procesamiento
• Detección de idioma
• Se almacena el criterio que ha hecho que
cierto contenido se capture
• Se calculan ciertos parámetros en base a
los datos capturados:
– Apariciones por cada 1000 palabras de dentro
y fuera de Aragón:
• Temas de interés dentro de Aragón
• Diferenciales
• Acumulados por 30, 60 y 90 días
31 de octubre de 2014 25
27. Arquitectura
• Nodo maestro
• PostgreSQL 9.3: sistema gestor de la base
de datos como maestro (+POSTGIS)
• Python 2.7 (pyscopg2, lxml,
beautifoulsoup4, json, urllib)
• Django: interfaz de administración
• Munin: monitorización de recursos
• Celery+Redis: sistema de colas de tareas
distribuidas
• Apache: servidor web
31 de octubre de 2014 27
28. Arquitectura
• Nodo esclavo
• PostgreSQL 9.3: sistema gestor de la base
de datos como esclavo de sólo lectura
• Python 2.7 (pyscopg2, json, mod-wsgi)
• Munin: monitorización de recursos
• Celery+Redis: sistema de colas de tareas
distribuidas
• Apache: servidor web para servir la API
con mod-python y mod-evasive
31 de octubre de 2014 28
31. Cómo funciona
• Un script en Python por cada scraper
– Cada uno se ocupa de una fuente
– Código común separado (geolocalización, db,
idioma…)
– En la base de datos se guarda información de
cada uno:
• Tipo: periódico o streaming
• Ruta: dónde se encuentra el script que lo ejecuta
• Cada cuánto se ejecuta
• Cuándo ha sido la última ejecución
• Resultado de la última ejecución
31 de octubre de 2014 31
32. Cómo funciona
• Proceso tipo demonio que consulta esta
información y lanza en segundo plano
conforme está configurado
– Controla el resultado
– Registra todo lo que sucede en logs
– Manda emails a los administradores si hay
errores
• Desde el panel de administración se
modifican estos parámetros
31 de octubre de 2014 32
33. Cómo funciona
• Los scrapers que requieren procesamiento
lo llevan integrado en el propio script
(cambios en las fuentes)
• Una vez que los datos están descargados
– Automáticamente se copian al esclavo -> API
– Pueden ser monitorizados y controlados desde
el panel de administración
• El esclavo es el que soporta la carga de las
consultas de los usuarios
31 de octubre de 2014 33
38. Qué ofrecemos al público
• Una API (Application Programming
Interface) que permite acceder a los
datos recogidos y filtrados
• Totalmente pública, sin necesidad de
registro (aunque con algún límite)
• Se pueden acceder a los datos antiguos
hasta 12 meses (por el momento
disponemos desde diciembre de 2013)
31 de octubre de 2014 38
39. Cómo usar nuestra API
• Peticiones HTTP como las que hace
cualquier navegador
• El usuario sólo tiene que indicar qué datos
desea obtener y cómo los quiere filtrar
– Dirección (/trendings o /data)
– Parámetros (?source=twitter)
• Librerías en distintos lenguajes que hacen
muy sencillo su uso
31 de octubre de 2014 39
40. Qué formato tienen los resultados
• Actualmente en formato JSON
• Los resultados aparecen paginados
• Ordenados cronológicamente
31 de octubre de 2014 40
43. Contenido
• id: entero identificativo del elemento.
• type: cadena que indica el tipo de contenido.
• source: cadena de texto que indica a qué fuente pertenece el resultado.
• title: cadena con el título del contenido en el caso de que lo tenga.
• description: contenido del elemento (texto del tweet, descripción del
evento, descripción del vídeo, etc.)
• url: dirección url directa al contenido.
• author: cadena de texto con el nombre del autor en caso de que lo haya.
• starts_on: para los eventos, si la tuvieran, fecha de comienzo.
• ends_on: para los eventos, si la tuvieran, fecha de final.
• published_on: fecha de publicación del contenido.
• lat: latitud del contenido en formato real.
• lng: longitud del contenido en formato real.
• thumbnail: dirección url del thumbnail asociado si lo hubiera.
31 de octubre de 2014 43
44. Contenido
• Dos tipos de paginación:
– Estándar (máx. 1000)
– since_id & max_id
• Todas las fechas tienen el formato: 16/01/14
13:03
• Se puede especificar que la API devuelva los
datos en crudo con el parámetro raw_mode
– /socialdata/data?source=twitter&raw_mode=true
– Nuevo campo en los resultados llamado raw_data
31 de octubre de 2014 44
45. Cómo podemos filtrarla
• Por tipo de contenido
• Por fuente
• Por conversación
• Por geoposición
• Por período
• Por palabra clave
31 de octubre de 2014 45
46. Filtro por tipo de contenido
• /socialdata/data?type=content_type
– event (Facebook Events, Spain-info)
– text (Twitter, Facebook, Google+, Blogger, Blogia,
Wordpress)
– wiki (Wikipedia)
– video (Youtube, Vimeo)
– picture (Instagram, Flickr, Pinterest)
– venue (Foursquare)
– code (Github)
– media (Heraldo de Aragón, El Periódico de Aragón,
Diario del Alto Aragón, Diario de Teruel)
31 de octubre de 2014 46
48. Filtro por conversación
• /socialdata/data?
conversation=conversation
_type
– geo: conversación sobre lo
que se habla dentro de
Aragón
– rel: conversación de temas y
usuarios relevantes para
Aragón
31 de octubre de 2014 48
49. Filtro por geoposición
• Filtrado por centro y radio
– /socialdata/data?
center=coordinates&distance=distance_in_km
– /socialdata/data?center=41.35678,-0.8148576&distance=5
• Filtrado por cuadrado geográfico
– /socialdata/data?bbox=min_lng,min_lat,man_lng,max_lat
– /socialdata/data?
bbox=-0.8148576,41.35678,-0.667584,41.78553
• Filtrado por municipio y radio
– /socialdata/data?locality=locality&distance=distance_in_km
– /socialdata/data?locality=Zaragoza&distance=5
• Sólo datos geolocalizados:
– /socialdata/data?source=twitter&geolocated=true
31 de octubre de 2014 49
50. Otros filtros
• Por período:
– /socialdata/data?
start_date=start_date&end_date=end_date
• Por palabra clave:
– /socialdata/data?query=query
• Combinaciones!
31 de octubre de 2014 50
51. Ejemplo de uso
https://github.com/albertoalcolea/charla-scraping
31 de octubre de 2014 51
54. Cómo se puede utilizar en el
ámbito de la música
• Tendencias
– Volumen de tráfico en redes sociales (twitter,
facebook, youtube…)
– Volumen de descargas y compras (iTunes,
Amazon, Spotify, Google Play…)
– Valoraciones
– Charts, top lists (Emisoras de radio, foros…)
– Volumen de búsquedas (Google)
31 de octubre de 2014 54
55. Redes sociales específicas
• Intentan dar a conocer nuevos temas,
artistas, profesionales, conectar gente…
– Last.fm: scrobblings, oyentes
– Myspace
– Tastebuds
– Reverbnation
– VK
• Contrastar datos, tendencias,
recomendaciones, gente importante…
31 de octubre de 2014 55
56. Algo un poco más avanzado
• Análisis de redes complejas
– Quién habla más y es más escuchado
– Quién es más influyente
– Qué grupos de gente relacionada con la
música se forman: ej. estilos
• Hay webs que van un poco más allá
(SoundCloud, Hulkshare, Zippyshare…)
– Proveen las formas de onda de las canciones
• Patrones más comunes
31 de octubre de 2014 56
57. Enlaces
• http://opendata.aragon.es/
• http://opendata.aragon.es/portal/social-data
• http://opendata.aragon.es/portal/
desarrolladores/resumen
31 de octubre de 2014 57