Otra forma de escuchar a través de Internet Gonzalo Ruiz – [email protected]
31 de octubre de 2014
Í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
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
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
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
Jacathon
31 de octubre de 2014 6
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
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
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
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
Ejemplo I
31 de octubre de 2014 11
http://docs.python-requests.org/en/latest/
Ejemplo II
31 de octubre de 2014 12
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
Ejemplo III
31 de octubre de 2014 13
http://selenium-python.readthedocs.org/
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
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
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
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
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
Temas de interés
31 de octubre de 2014 19
Temas de interés
31 de octubre de 2014 20
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
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
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
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
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
Arquitectura
31 de octubre de 2014 26
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
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
Arquitectura
31 de octubre de 2014 29
Cómo funciona
31 de octubre de 2014 30
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
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
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
Monitorización
31 de octubre de 2014 34
Monitorización
31 de octubre de 2014 35
Monitorización
31 de octubre de 2014 36
Monitorización
31 de octubre de 2014 37
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
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
Qué formato tienen los resultados
• Actualmente en formato JSON
• Los resultados aparecen paginados • Ordenados cronológicamente
31 de octubre de 2014 40
Tendencias • http://opendata.aragon.es/socialdata/trendings – {"status": "OK", "results": [result_1, result_2,
result_3...]} – Results: {"name": name, "url": url}
• /socialdata/trendings?type=aragon • /socialdata/trendings?type=spain • /socialdata/trendings?type=30days • /socialdata/trendings?type=60days • /socialdata/trendings?type=90days • /socialdata/trendings?type=diff
31 de octubre de 2014 41
Contenido • http://opendata.aragon.es/socialdata/data?
parameters – {"status": "NOK", "error_message": message} – {"status": "OK", "on_this_page": on_this_page,
"results":[result_1, result_2, result_3...]} – {"id": id,"description": description, "ends_on":
ends_on, "lat": latitude, "lng": longitude, "published_on": published_on, "title": title, "url": url, "author": author,"starts_on": starts_on, "source": source, "type": type, "thumbnail":thumbnail}
31 de octubre de 2014 42
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
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
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
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
Filtro por fuente • /socialdata/data?source=source_name
– spain_info – facebook_events – twitter – youtube – instagram – facebook – wikipedia – blogger – wordpress – blogia – vimeo – flickr – foursquare – pinterest – google_plus – github – heraldodearagon – periodicodearagon – diariodelaltoaragon – diariodeteruel
31 de octubre de 2014 47
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
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
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
Ejemplo de uso
31 de octubre de 2014 51
https://github.com/albertoalcolea/charla-scraping
Ejemplo de resultados
31 de octubre de 2014 52
Qué puedo hacer con estos datos
31 de octubre de 2014 53
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
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
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
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
Top Related