Descripción de las técnicas empleadas por Aragón Open Data para captar la información que se está generando en diferentes redes sociales. La información es almacenada y procesada dentro del proyecto Aragón Open Social Data y ofrecida como servicio para su uso por terceros.
1. Obtención de datos de
redes sociales
Gonzalo Ruiz – gruiz@kampal.com
10 de marzo de 2016
2. Índice
• Introducción
• Técnicas y herramientas de extracción
de datos
• Ruido, técnicas de filtrado de datos
• Qué hemos hecho en Aragón Open
Social Data
• Qué ofrecemos al público
• Detección de tendencias
10 de marzo de 2016 2
3. Introducción
• Internet -> gran base de datos
• Desestructurada -> Redes sociales,
foros, medios de prensa, blogs, etc.
• Propuesta DGA
– Descargar todo lo relacionado con Aragón
– Ponerlo a disposición
• Ciudadanos
• Empresas
• Desarrolladores
10 de marzo de 2016 3
4. Para qué
• Marketing
• Prensa
• Ocio y turismo
• Imagen de marca
• Toma de decisiones estratégicas
• Tendencias
• Estudios de movilidad
• …
10 de marzo de 2016 4
7. El problema
• Lenguaje HTML (HyperText Markup
Language - lenguaje de marcas de
hipertexto)
• No hay un estándar de cómo estructurar
la información -> heterogeneidad
• Complicaciones -> AJAX, JavaScript
10 de marzo de 2016 7
8. Protocolo HTTP
• Sistema de cliente-servidor
• Petición y respuesta
• GET y POST
10 de marzo de 2016 8
10. Otros elementos
• Cabeceras -> datos de las peticiones y
respuestas
• Autenticación (sesión)
• Códigos de respuesta
– 1XX: informativas
– 2XX: correctas
– 3XX: redirecciones
– 4XX: errores de cliente
– 5XX: errores de servidor
10 de marzo de 2016 10
12. Ejemplo de diálogo
10 de marzo de 2016 12
• http://www.mitienda.com/index.html
Petición
Respuesta
13. Índice
• Introducción
• Técnicas y herramientas de
extracción de datos
• Ruido, técnicas de filtrado de datos
• Qué hemos hecho en Aragon Open
Social Data
• Qué ofrecemos al público
• Detección de tendencias
10 de marzo de 2016 13
14. Técnicas y herramientas de
extracción de datos
• Descargar toda la información –> BD
– Herramientas que las propias páginas web
proveen
• APIs (Application Programming Interface)
• Volcados en ficheros en diferentes formatos
(CSV, XLS, JSON, XML…)
– Si no queda más remedio -> scraping
• Tratar de extraer la información del HTML
10 de marzo de 2016 14
15. Opción 1 - API
• Interfaz de programación de
aplicaciones
• Lenguaje intermedio -> mecanismo de
pregunta y respuesta
• La información está estructurada ->
JSON, XML…
10 de marzo de 2016 15
18. API
• Ejemplos
– Twitter
– Facebook
– Youtube
– Instagram
– …
• Problemas
– Límites técnicos
– Límites legales
– Oscurantismo (empresas, malfuncionamiento…)
10 de marzo de 2016 18
19. Tipos de API
• Tradicional
– Pregunta respuesta
– La mayoría
• Streaming
– Conexión permanente
– Algunas como Twitter
10 de marzo de 2016 19
20. Opción 2 - Ficheros
• Muy comunes en la administración
• Suelen estar bien estructurados -> XLS,
CSV…
• Generalmente, para información estática
– Tráfico
– Padrón
– Turismo
– INEM
– …
• Descargar y procesar
10 de marzo de 2016 20
22. Opción 3 - scraping
• Cuando no hay otra alternativa
• Técnica para extraer datos de sitios web a
través de programas
– Ingeniería inversa
• Qué parámetros envía
• Estudiar cómo se estructura la información
• Secuencia de peticiones y reusar datos de las
respuestas
• Estudiar el comportamiento dinámico de la web
• Visitar muchas páginas para conseguir todos los
datos
10 de marzo de 2016 22
26. Parseo
10 de marzo de 2016 26
• Convertir HTML en algo manejable ->
errores
27. Diferencias
• Si lo hiciéramos manuealmente
– API: www.mitienda.com/productos
– Volcado:
www.mitienda.com/descargar_productos
– Scraping:
1. www.mitienda.com/listado -> parseo -> buscar y
extraer identificadores de productos
2. www.mitienda.com/productos?id1 -> parseo ->
buscar y extraer datos
www.mitienda.com/productos?id=2 -> parseo ->
buscar y extraer datos
www.mitienda.com/productos?id=3 -> parseo ->
buscar y extraer datos
…
10 de marzo de 2016 27
28. WEB scrapers/crawlers
• Programas que simulan las visitas que
muchos usuarios harían
• “Engañan” a los servidores haciéndoles
creer que son usuarios
• Pero no son tontos
– Cuestiones legales
– Límites
• Número de páginas vistas
• Por tiempo
• …
10 de marzo de 2016 28
29. Tecnologías
• Existen multitud de herramientas en
distintos lenguajes de programación (Java,
Python, Ruby, …)
• Necesitamos esencialmente
– Herramienta para la conexión (urllib,
requests…)
– Herramienta para parseo y extracción de datos
• HTML y XML (Beautifulsoup, lxml…)
• JSON (json, simplejson)
– Almacenamiento de datos en ficheros, bases de
datos, … -> Con la estructura que nosotros
queramos
10 de marzo de 2016 29
30. Dificultades
• Mecanismos de “defensa”
– Autenticación – cookies de sesión
– Formularios y parámetros especiales
– Enviar cabeceras especiales
– Límites
– Captchas
– Contenido dinámico
• A veces no es posible (o es muy difícil)
emular el navegador (contenido dinámico,
actualizaciones) -> utilizar un webdriver
10 de marzo de 2016 30
31. Webdriver - Selenium
• Abre y controla una ventana de navegador
como si fuera un usuario
• Simula clicks, eventos del ratón,
pulsaciones de teclas, etc.
• Podemos especificarle una secuencia:
1. Conéctate a www.mitienda.com
2. Rellena y envía el formulario de login
3. Ve al listado de productos
4. Entra en todos los productos y descárgame
sus datos
10 de marzo de 2016 31
32. Curiosidad
• 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…
10 de marzo de 2016 32
34. Índice
• Introducción
• Técnicas y herramientas de extracción de
datos
• Ruido, técnicas de filtrado de datos
• Qué hemos hecho en Aragón Open Social
Data
• Qué ofrecemos al público
• Detección de tendencias
10 de marzo de 2016 34
35. El ruido
• El mismo concepto que con el sonido
• Sabemos cómo descargar, pero
– ¿qué descargamos?
– ¿cómo sabemos lo que realmente nos interesa
y lo que no?
• Definir unos buenos criterios de búsqueda
– Palabras clave
– Fechas
– Geoposición
– …
10 de marzo de 2016 35
37. Prevenir
• Mayor parte -> Búsqueda por palabras
– No seleccionar muchas palabras
• Cuantas más palabras, peor
• Atención a los límites
• Directamente relacionadas -> exclusividad
– Combinar palabras
• Ej: “corte” vs. “corte de luz”
– Que estén directamente relacionadas con lo
que queremos encontrar
• Ej: apagón
– Que no sean demasiado cortas
• Evitar confusiones
10 de marzo de 2016 37
38. Curar
• Técnicas de filtrado -> a posteriori
(imposible hacerlo a mano)
– Identificación del idioma
– Evitar ciertas palabras
• Si aparece junto con otra palabra -> Eliminar
– Blacklists and whitelists dinámicas ->
palabras y/o usuarios
– Cuidado con los spammers
10 de marzo de 2016 38
40. Índice
• Introducción
• Técnicas y herramientas de extracción
de datos
• Ruido, técnicas de filtrado de datos
• Qué hemos hecho en Aragon
Open Social Data
• Qué ofrecemos al público
• Detección de tendencias
10 de marzo de 2016 40
41. 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?
10 de marzo de 2016 41
42. 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
10 de marzo de 2016 42
43. 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
10 de marzo de 2016 43
44. 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
10 de marzo de 2016 44
48. 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 y scraping
• Límites de las fuentes
10 de marzo de 2016 48
49. 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”
10 de marzo de 2016 49
50. Cómo se filtra
• Se solicitan sólo los campos que nos interesan,
se eliminan el resto
• 2 tipos: streaming o periódicas
• Las arañas no saben qué contenido es bueno o
malo
– Se captura mucho ruido, especialmenteal 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
10 de marzo de 2016 50
51. 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.
10 de marzo de 2016 51
52. 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
10 de marzo de 2016 52
53. Cómo se accede a la
información
• Creamos una API
10 de marzo de 2016 53
62. Qué ofrecemos al público
• LO QUE NOS GUSTARÍA TENER
• Una API 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)
10 de marzo de 2016 62
63. 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
10 de marzo de 2016 63
64. Qué formato tienen los resultados
• Actualmente en formato JSON
• Los resultados aparecen paginados
• Ordenados cronológicamente
10 de marzo de 2016 64
67. 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.
10 de marzo de 2016 67
68. 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
10 de marzo de 2016 68
69. Cómo podemos filtrarla
• Por tipo de contenido
• Por fuente
• Por conversación
• Por geoposición
• Por período
• Por palabra clave
10 de marzo de 2016 69
70. 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)
10 de marzo de 2016 70
72. Filtro por conversación
• /socialdata/data?conversat
ion=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
10 de marzo de 2016 72
73. Filtro por geoposición
• Filtrado por centro y radio
– /socialdata/data?center=coordinates&distance=distance_in_k
m
– /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
10 de marzo de 2016 73
74. Otros filtros
• Por período:
– /socialdata/data?start_date=start_date&end
_date=end_date
• Por palabra clave:
– /socialdata/data?query=query
• Combinaciones!
10 de marzo de 2016 74
75. Ejemplo de uso
10 de marzo de 2016 75
https://github.com/albertoalcolea/charla-scraping
79. Índice
• Introducción
• Técnicas y herramientas de extracción
de datos
• Ruido, técnicas de filtrado de datos
• Qué hemos hecho en Aragon Open
Social Data
• Qué ofrecemos al público
• Detección de tendencias
10 de marzo de 2016 79
80. Detección de 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)
10 de marzo de 2016 80
81. Qué es un trending topic
• Tendencia o tema del
momento
• Palabras o frases más
repetidas en un
momento concreto en
Twitter
• Origen en los hashtag ->
#etiqueta
• 2 objetivos principales:
– Promoción
– Movilización
10 de marzo de 2016 81
82. Cómo se detecta
• Algoritmo que pesa los términos
– Apariciones
– Novedad de los términos
• Hay temas de los que siempre se habla mucho -
> no son trending topics. Ej: Justin Bieber
• Algunos de los más importantes:
– Wikileaks
– Primavera Árabe
– AcampadaSol
– Muerte de Michael Jackson
– Muerte de Steve Jobs
10 de marzo de 2016 82
84. Robots y spam
• Aprovechan estas tendencias para hacer
publicidad
• Tienen robots similares a los nuestros
– Calculan sus propias tendencias
– Utilizan las de las redes sociales
• Incluyen sus propios hashtags, enlaces,
etc.
• No tienen interacción con otros usuarios
10 de marzo de 2016 84
86. Bola de nieve
• Hacemos detección de tendencias
– Muy costoso -> guardar mucha información,
hacer muchos cálculos periódicamente…
– Lista fija inicial -> perderíamos mucha
información
• Además de las palabras clave iniciales -
> retroalimentación
– Coge nuevas palabras
– Elimina algunas viejas
10 de marzo de 2016 86