otra forma de escuchar a través de internet (bime), gonzalo ruiz

Post on 15-Jul-2015

56 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Otra forma de escuchar a través de Internet Gonzalo Ruiz – gruiz@bifi.es

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