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 oscar@outliers.es 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