Download Taller de Minería y Análisis de Datos

Document related concepts
no text concepts found
Transcript
Taller de Minería y Análisis
de Datos
TELENOIKA_ MARZO 2013
Óscar Marín Miró
@oscarmarinmiro
[email protected]
Friday, March 8, 2013
CONTENIDOS
INTRODUCCIÓN
PYTHON
ADQUISICIÓN DE DATOS
ANÁLISIS
REFERENCIAS
Material del curso en http://assets.outliers.es/cursos/mineria
Friday, March 8, 2013
INTRODUCCIÓN
Friday, March 8, 2013
DE LOS DATOS A LA SABIDURÍA
“Los datos, organizados y empleados debidamente, pueden convertirse en
información.
La información, absorbida, comprendida y aplicada por las personas, puede
convertirse en conocimientos.
Los conocimientos aplicados frecuentemente en un campo pueden
convertirse en sabiduría, y la sabiduría es la base de la acción positiva”
Michael Cooley:”Architect or Bee?” Hogarth Press, London, UK, 1987.
Friday, March 8, 2013
DE LOS DATOS A LA SABIDURÍA
Complejidad Cognitiva
Sabiduría
Friday, March 8, 2013
Conocimiento
Información
Datos
•No transmisible
•Aplicación ‘ética’ de los conocimientos
•Asimilación personal
•Aplicación de la información
•‘Insights’
•Estructuración de los datos
•Semántica
•Narrativa
•Registros de observaciones
¿QUÉ ES EL ANÁLISIS DE DATOS?
‣ Proceso multidisciplinar
‣ Pasar de los datos a la información
‣ Nuevas maneras de estructurar datos
desestructurados
‣ Cuantitativo o cualitativo
‣ Automático, semi-automático, manual
‣ El dataset puede ser el punto de partida y/o de
llegada
Friday, March 8, 2013
PIPELINE DE DATOS
Información /
Datos
Datos
Datos
Adquisición
•API’s
•Scraping
•Ficheros
•BBDD
•Proveedores
Friday, March 8, 2013
Análisis
•Minería de texto
•Minería emocional
•Minería de perfiles
•Machine Learning
•Métricas de Influencia
•Métricas de Red
•Estadística
Presentación
•Visualización
•Narrativa
Información
FASES DE UN TRABAJO (VISUALIZACIÓN)
Friday, March 8, 2013
MÉTODOS: ADQUISICIÓN
‣ Adquisición
‣ API’s
‣ Scraping
‣ Crawling
‣ Open Data
‣ Ficheros (excel, tsv,csv)
Friday, March 8, 2013
MÉTODOS: ANÁLISIS
‣ Análisis
‣ Numérico / Estadístico (p.ej: histograma de
followers)
‣ Contenido (p.ej: análisis semántico)
‣ Relaciones: Grafos entre cualquiera de los
anteriores
Friday, March 8, 2013
MÉTODOS: PRESENTACIÓN
‣ Presentación
‣ Visualización de Redes (grafos)
‣ Nubes de palabras (contenido)
‣ Gráficos estadísticos (numérico)
Friday, March 8, 2013
HERRAMIENTAS
‣ Programación:
‣ Python (multipropósito)
‣ R (análisis estadístico)
‣ Librería Pattern para Python
‣ Sin programación
‣ Gephi (análisis de redes)
‣ Wordle (nubes de palabras)
Friday, March 8, 2013
PYTHON
Friday, March 8, 2013
PYTHON
¿POR QUÉ PYTHON?
SETUP
LO BÁSICO
CADENAS
CONTROL DE FLUJO
LISTAS Y ORDENACIÓN
DICCIONARIOS
FICHEROS
Friday, March 8, 2013
¿POR QUÉ PYTHON?
‣Es un lenguaje interpretado
‣Orientado a Objetos
‣Código elegante y mantenible
‣Ha pasado el test del tiempo [1991]
‣Open Source
‣Infinitas librerías
‣Alto nivel
‣Luce especialmente en computación científica,
procesado de texto y desarrollo web
Friday, March 8, 2013
¿POR QUÉ PYTHON?
‣Entornos de éxito:
‣Django (Web)
‣Flask (Web)
‣Rhino3D (Modelado)
‣Nodebox (Visualización)
‣Matplotlib, ScyPy, numPy (Científico)
‣Casos de éxito:
‣Industrial Light & Magic
‣Google App Engine
‣Es un pilar en el desarrollo back-end Google
‣Disqus [17.000 peticiones / segundo]
‣Instagram
‣Pinterest
‣Librerías NLTK, Pattern
Friday, March 8, 2013
SET-UP: PYTHON + SETUPTOOLS
‣Instalación de python (2.6/2.7)
Mac OS
Linux
Windows
‣Instalación de setuptools (para 2.6/2.7)
Mac OS
Linux
Windows (notas)
Friday, March 8, 2013
SET-UP: PYCHARM (IDE)
‣Instalación de PyCharm (entorno de
desarrollo, 30 días de prueba)
‣ Mac OS
‣ Linux
‣ Windows
Friday, March 8, 2013
SET-UP: EJERCICIO
‣ Validación de la instalación de python
‣ Linux/Mac OS/Windows: Abrir ventana de
comandos y ejecutar ‘python’
Friday, March 8, 2013
SET-UP: EJERCICIO
‣ Validación de la instalación de setuptools.
Desde linea de comandos:
Friday, March 8, 2013
SET-UP: EJERCICIO
‣ Validación de la instalación de pyCharm
‣ Descargar (aquí) y descomprimir el código
fuente del curso en el directorio que elijamos
‣ Abrir PyCharm y Elegir la opción File>Open
Directory
‣ Seleccionar el directorio donde hemos
descomprimido el código
‣ Navegar hasta Setup/helloName.py
‣ Botón Derecho > Run ‘helloName’
Friday, March 8, 2013
SET-UP: EJERCICIO
Friday, March 8, 2013
PYTHON: LO BÁSICO
‣ El intérprete de python.
‣ En PyCharm: Tools > Run Python Console
Friday, March 8, 2013
PYTHON: LO BÁSICO
‣ Esqueleto de un programa
‣ Abrir Basico/programStub.py
‣ Botón derecho sobre el fichero > Run
Friday, March 8, 2013
PYTHON: LO BÁSICO
‣ Esqueleto de un programa
‣ Los módulos se importan al principio
‣ Los cuerpos de las funciones y de las estructuras de
control van ‘indentados’ para alinear principio y fin
‣ Un programa ejecutable bien estructurado debe
contener la funcion ‘main’
‣ Las funciones de declaran antes del ‘main’, despues
de la importación de módulos externos. Las veremos
más adelante
‣ Un módulo es un fichero que contiene funciones que
pueden ser llamadas importándolo. Lo veremos más
adelante. En este caso importamos el módulo ‘sys’ e
invocamos su función ‘sys.platform’
Friday, March 8, 2013
PYTHON: LO BÁSICO
• Abrir y ejecutar Basico / ejemploFuncion.py
• El operador ‘*’ aplicado sobre una cadena, la concatena
N veces. Las triples comillas marcan la ‘docString’
• En la definición se declaran los parámetros que entran
• Se retorna el resultado de una variable, si aplica
Friday, March 8, 2013
PYTHON: LO BÁSICO
‣
‣
‣
Friday, March 8, 2013
Python es un lenguaje dinámico:
‣ Ejecutar lo siguiente en el anterior ejemplo:
‣ Las variables tienen ‘tipado’ dinámico. Es conveniente
nombrarlas haciendo alusión a qué tipo de dato contienen:
cadenaNombre, listaNombres, diccionarioNombres, etc…
Para usar el sistema de ayuda, hay que lanzar el intérprete de
python. P.ej: help(sys), help(len)
La documentación oficial (referencia/tutoriales/librarías, la podéis
encontrar en docs.python.org, pero muchas veces una búsqueda
en Google es más rápida (p.ej: python string)
PYTHON: CADENAS
‣ Un tipo de dato que representa una
secuencia de caracteres
‣ Los principales tipos de datos en python son:
cadenas, enteros, flotantes, listas,
diccionarios y tuplas
Friday, March 8, 2013
PYTHON: CADENAS
•
•
•
•
•
•
•
Friday, March 8, 2013
Abrir el fichero Cadenas/StringOps.py
Vamos a aprovechar para usar el depurador y ejecutar
paso a paso cada operación
El código se auto-explica
Se pone un ‘breakpoint’ en la línea 14
Se le da al icono de depurar
Con ‘step over’ y viendo la consola vamos viendo los
resultados de la ejecución de cada línea
Ejercicios:
• Cambiar el valor de la variable ‘e’ por 3.14 en tiempo
de depuración, de tal manera que en la linea 31 se
imprima el valor nuevo de la variable ‘e’
• En la línea 73, conseguir que pString tenga el mismo
contenido, pero usando concatenaciones y la funcion
str()
PYTHON: CONTROL DE FLUJO (IF)
‣ Comprueba si se cumple una condición y ejecuta un bloque de
código en ese caso
‣ El bloque ‘else’ si lo hay, se ejecuta si NO se cumple la condición
‣ Los operadores de ‘test’ pueden ser:
‣ ‘==‘ igualdad
‣ ‘!=‘ distinto
‣ ‘>’ mayor que
‣ ‘>=‘ mayor o igual que
‣ ‘<=‘ menor o igual que
‣ ‘<‘ menor que
‣ Las condiciones se pueden agrupar con operadores booleanos:
‘and’, ‘not’, ‘or’
‣ Abrir el fuente Flujo/if.py
Friday, March 8, 2013
PYTHON: EJERCICIO CONSOLIDACIÓN
• Abrir Flujo/ejercicio.py
• Completar las funciones para que
devuelvan los resultados explicados
• Ejecutar el programa para comprobar la
corrección de las funciones
Friday, March 8, 2013
PYTHON: CONTROL DE FLUJO (WHILE)
‣ Repite un bloque de código (indefinidamente)
mientras se mantenga una condición
‣ OJO con los bucles infinitos (el ‘protagonista’ de la
condición debe alterarse dentro del bucle).
‣ Abrir el fuente Flujo/while.py
Friday, March 8, 2013
PYTHON: LISTA
‣
‣
‣
‣
Friday, March 8, 2013
Es un ‘vector’ de valores
Se expresa entre corchetes
Se accede a ella mediante un índice
Ejemplos:
‣ a = [1,2,3,7,8]
‣ a[0] = 1
‣ a[3] = 7
‣ len(a) = 5
‣ OJO: a[5] da error en ejecución
‣ b = [“hola”,”hello”,”alo”]
‣ len(b) = 3
‣ b[0] = “hola”
‣ b[2] = “alo”
‣ Abrir fuente Listas/lists.py para ver diferentes operaciones
sobre una lista
PYTHON: ORDENACIÓN
‣
‣
‣
‣
Friday, March 8, 2013
Siempre se aplica sobre listas
Dependiendo del tipo será numérica o alfabética
Con ‘key’ se puede ordenar según una función auxiliar
Abrir el fuente Listas/sort.py
PYTHON: TUPLAS
• Conjunto de elementos NO NECESARIAMENTE del mismo
tipo
• El numero de elementos es inmutable
• Ejemplos:
• point = (x,y)
• entradaAgenda = (nombre, apellido, edad, direccion,
telefono)
• Una funcion puede devolver una tupla:
• return (x,y)
• Abrir Listas/tuples.py
Friday, March 8, 2013
PYTHON: EJERCICIO CONSOLIDACIÓN
‣ Abrir el fuente Listas/ejercicio.py
‣ Rellenar las funciones y pasar los tests
Friday, March 8, 2013
PYTHON: DICCIONARIOS
‣ Almacenan en una estructura de datos pares ‘clave’ ‘valor’
‣ Ejemplo:
‣ telefonos = {}
‣ telefonos[‘persona1’] = “913555589”
‣ telefonos[‘persona2’] = “933090888”
‣ Para encontrar el valor correspondiente a una clave, no hace
falta recorrerlo (como en las listas): telefono = telefonos
[‘persona1’]
‣ Están diseñados para acceso rápido
‣ En otros lenguajes: hashMap, hashtable, hash
‣ Abrir el fuente Diccionarios/dicts.py
Friday, March 8, 2013
PYTHON:FICHEROS
• Una cantidad de datos almacenados en un disco duro
• Se acceden mediante su ruta o ‘path’
• Los datos pueden estar estructurados de cualquier
manera, hay que conocerla antes de leerlos
• Los ficheros en formato texto se suelen leer por líneas
• Hay tres modos de acceso: lectura, escritura y ‘append’
• Abrir el fuente Ficheros/files.py
Friday, March 8, 2013
PYTHON:EJERCICIO FINAL DE CONSOLIDACIÓN
• Este ejercicio repasa:
• Cadenas, diccionarios, listas
• Ficheros
• Ordenación
• Funciones
• Control de flujo
• Paciencia, es un ejercicio pensado para consolidar
todo lo visto hasta ahora
• Abrir Ficheros/ejercicio.py
Friday, March 8, 2013
ADQUISICIÓN
DE DATOS
Friday, March 8, 2013
ADQUISICIÓN DE DATOS
• Traer a memoria datos que existen fuera de ella
• ¿Dónde?
• Fichero local (CSV, JSON, XML)
• BBDD
• Internet:
• API
• Scraping
• Crawling
• Ficheros remotos (CSV, JSON, XML)
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: FORMATOS
TSV
“valor1\tvalor2\tvalor3\t\n”
JSON
{[
{ “campo1”: ·valor11,”campo2”:valor21},
{ “campo1”: ·valor1N,”campo2”:valor2N}
]}
XML
<items>
<item campo1="valor11" campo2="valor21" />
<item campo1="valor1N" campo2="valor2N" /> </items>
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: FUENTES
http://shop.oreilly.com/product/0636920018254.do
http://www.quora.com/Data/Where-can-I-get-large-datasets-open-tothe-public
http://www.google.com/publicdata/directory
http://data.worldbank.org
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: APIS
Application Programming Interface
‣ API’s
‣ Facebook Open Graph API
‣ YouTube, API
‣ Google :-(
‣ Foursquare, Venues
‣ Twitter
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: TWITTER API
‣ GET API:
‣ Parámetros: consulta booleana, lenguaje,geocode
‣ Sin autenticación, pero en proceso de cambio, ojo!
‣ Tweets ‘incompletos’: sin info de usuario ni de RT
‣ 150 peticiones por hora
‣ No documentado, pero puedes buscar ‘places’
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: TWITTER API
‣
Streaming API:
‣
Parámetros:
‣
‣
‣
‣
‣
‣
Friday, March 8, 2013
Follow: hasta 5000 usuarios
Keywords (track): hasta 400
Location: hasta 25 cajas
Requiere una cuenta twitter
El follow te da tweets, RT’s origen y destino; replies
Empieza a limitar si el volumen que te dan > 1%
ADQUISICIÓN DE DATOS: TWITTER API
‣ El API REST completa
‣ Anatomía de un Tweet
‣ Herramientas para acceder
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: EJERCICIO 1 (TWITTER)
‣
‣
‣
‣
‣
‣
Friday, March 8, 2013
Vamos a ‘enchufarnos’ al streaming de twitter
La librería que vamos a usar es tweetstream
Seguiremos un hashtag que sea trending topic ahora mismo
Cogeremos 1000 tweets y los volcaremos en un fichero json
Simplemente ejecutarlo y probar != hashtags
El ejercicio está en Twitter/twitterStreamGet.py
ADQUISICIÓN DE DATOS: EJERCICIO 2 (TWITTER)
‣
‣
Queremos empezar a hacer análisis
Para ello, hay que modificar el ejercicio para que:
‣
‣
‣
‣
Friday, March 8, 2013
Almace cada tweet en un array cronologico
Salga despues de coger 1000 tweets
Analice el número de impactos (sumando los followers de
cada tweet en un conteo global
Fuente para modificar en Twitter/twitterStreamEjercicio.py
ADQUISICIÓN DE DATOS: VOLCADO A CSV
Friday, March 8, 2013
‣
Volcaremos los 100 tweets a un fichero csv para importarlo
desde otros programas
‣
‣
Usaremos la librería CSV de Python
El código de ejemplo es Twitter/twitterStreamOutCSV.py
ADQUISICIÓN DE DATOS: VOLCADO A JSON
Friday, March 8, 2013
‣
Volcaremos los 100 tweets a un fichero json para importarlo
desde otros programas
‣
‣
Usaremos la librería JSON de Python
El código de ejemplo es Twitter/twitterStreamOutJSON.py
ANÁLISIS
Friday, March 8, 2013
ANÁLISIS DE DATOS
‣ Análisis cuantitativos (métricas)
‣ Análisis de contenido (cuantitativo y
cualitativo: sentiment, entidades, NLP)
‣ Análisis de relaciones
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: HISTOGRAMA FOLLOWERS
‣ ¿Todos los HT siguen el mismo perfil de
followers?
‣ ¿Cuál es el número medio de followers
por HT?
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: EJERCICIO
‣ Abrir Twitter/
histogramFollowersEjercicio.py
‣ Se trata de:
‣ Leer el fichero .json ya volcado con los
100 tweets
‣ Generar una tabla de pares ‘usuariofollower’
‣ Calcular la media
‣ Exportarlo a CSV para consumirlo en R
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: R
‣ R: Lenguaje de programación para análisis
estadístico y gráfico
‣ Instalación
‣ Usaremos la librería ggplot2, en concreto los
histogramas . Se instala con ‘install.packages
(ggplot2)’
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: IMPORTACIÓN Y ANÁLISIS
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: IMPORTACIÓN Y ANÁLISIS
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: HISTOGRAMAS
qplot(Followers, data=myData, geom="histogram")
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: HISTOGRAMAS
qplot(Followers, data=myData, geom="histogram",binwidth=50)
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: HISTOGRAMAS
qplot(Followers, data=myData, geom="histogram",binwidth=25,xlim=c(0, 2000))
Friday, March 8, 2013
ANÁLISIS CUANTITATIVO: DISPERSIÓN RT/FOLLOWERS
‣ Abrir Twitter/dispersionFollowersRetweet.py
‣ Ejecutar sobre un .json de tweets previo
generado (FILE_IN)
‣ Cargar el csv generado (FILE_OUT) en R
‣ Hacer un diagrama de dispersión (scatterplot)
‣ Ídem con escala logarítmica
Friday, March 8, 2013
ANÁLISIS: LIBRERÍA ‘PATTERN’
‣ Instalar la librería desde PyCharm (Preferences/
Python Interpreters/ (Ventana Derecha) /
Install)
‣ En github: https://github.com/clips/pattern
‣ Ejemplos en https://github.com/clips/pattern/
tree/master/examples
‣ Documentación en http://www.clips.ua.ac.be/
pages/pattern
Friday, March 8, 2013
ADQUISICIÓN FÁCIL: PATTERN.WEB
‣ http://www.clips.ua.ac.be/pages/pattern-web
‣ Descarga de urls genéricas
‣ Web crawling (clase web.Spider)
‣ Conversión de HTML a texto
‣ Acceso a través de web.SearchEngine: Google,
Bing, Yahoo, Twitter, Facebook, Wikipedia, Flickr...
‣ Abrir Pattern/web.py
Friday, March 8, 2013
ANÁLISIS NLP: PATTERN.TEXT
‣ http://www.clips.ua.ac.be/pages/pattern-en
‣ Lematización y Conjugación
‣ POS-Tagging
‣ Chunking
‣ Abrir Pattern/text.py
Friday, March 8, 2013
ANÁLISIS DE PATRONES: PATTERN.SEARCH
‣ http://www.clips.ua.ac.be/pages/pattern-search
‣ Matching sintáctico, semántico y de raíces
‣ Taxonomías
‣ Abrir Pattern/match.py
Friday, March 8, 2013
SENTIMENT ANALYSIS
‣ Con apoyo de la librería Pattern
‣ Tipo I: ‘Las sucias calles de la ciudad’
‣ Tipo II: ‘Barcelona tiene buen clima’
‣ Tipo III: ‘Odio el servicio técnico de Movistar’
‣ Tipo IV: ‘Vodafone apesta’
‣ Abrir Pattern/basicSentiment.py
Friday, March 8, 2013
MOOD ANALYSIS
‣ Con apoyo de la librería Pattern
‣ Es una categorización
‣ No haremos caso de las negaciones
‣ Dos mood: Tristeza y Alegría
‣ Abrir Pattern/basicMood.py
Friday, March 8, 2013
MINERÍA DE RELACIONES
‣
‣
Con apoyo de la librería networkx
Visualizaremos los resultados con gephi de dos maneras:
‣
‣
‣
‣
Friday, March 8, 2013
Tiempo real: Con el streaming de Gephi (tiempo real)
Diferido: Volcando a formato graphml
Abrir Gephi/pyGephi.py
Abrir Gephi/pyGephiStatic.py
MINERÍA DE RELACIONES
‣
Algunas métricas de red
‣
‣
‣
‣
‣
‣
Friday, March 8, 2013
Centralidad: Closeness, Betweeness, PageRank
Densidad
Diámetro
Separación media
Coeficiente de clustering
Componentes conectadas
CO-OCURRENCIAS: DEL CONTENIDO A LAS RELACIONES
Coca-cola en Facebook
Friday, March 8, 2013
CO-OCURRENCIAS: DEL CONTENIDO A LAS RELACIONES
Pepsi en Facebook
Friday, March 8, 2013
CO-OCURRENCIAS: DEL CONTENIDO A LAS RELACIONES
Led Zeppelin en Facebook
Friday, March 8, 2013
REFERENCIAS
Friday, March 8, 2013
http://shop.oreilly.com/product/9780596516499.do
Friday, March 8, 2013
http://shop.oreilly.com/product/9780596153823.do
Friday, March 8, 2013
http://shop.oreilly.com/product/9780596529321.do
Friday, March 8, 2013
http://shop.oreilly.com/product/0636920010203.do
Friday, March 8, 2013
http://shop.oreilly.com/product/0636920018261.do
Friday, March 8, 2013
http://shop.oreilly.com/product/0636920020424.do
Friday, March 8, 2013
http://www.amazon.com/Speech-Language-Processing-Daniel-Jurafsky/dp/0131873210
Friday, March 8, 2013
http://www.amazon.com/Foundations-Statistical-Natural-Language-Processing/dp/0262133601
Friday, March 8, 2013
http://www.amazon.com/Web-Data-Mining-Data-Centric-Applications/dp/3540378812
Friday, March 8, 2013
http://www.springer.com/computer/communication+networks/book/978-1-84882-228-3
Friday, March 8, 2013
http://www.amazon.com/Network-Analysis-Methodological-Foundations-Theoretical/dp/3540249796
Friday, March 8, 2013
www.outliers.es
@outliers_es
Este trabajo está licenciado como Creative Commons Attribution 3.0 Unported License
Friday, March 8, 2013