Post on 30-Apr-2018
TELENOIKA_ MARZO 2013
Óscar Marín Miró@oscarmarinmirooscar@outliers.es
Taller de Minería y Análisis de Datos
Friday, March 8, 2013
CONTENIDOSINTRODUCCIÓ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
Datos
Información
Conocimiento
Sabiduría
•Registros de observaciones
•Estructuración de los datos•Semántica•Narrativa
•Asimilación personal•Aplicación de la información•‘Insights’
•No transmisible•Aplicación ‘ética’ de los conocimientos
Com
plej
idad
Cog
nitiv
a
Friday, March 8, 2013
¿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
AnálisisAdquisición Presentación
DatosInformación /
Datos
•API’s•Scraping•Ficheros•BBDD•Proveedores
•Minería de texto•Minería emocional•Minería de perfiles•Machine Learning•Métricas de Influencia•Métricas de Red•Estadística
InformaciónDatos
•Visualización•Narrativa
Friday, March 8, 2013
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 LinuxWindows‣Instalación de setuptools (para 2.6/2.7)Mac OSLinuxWindows (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
‣ 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)
Friday, March 8, 2013
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
• 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()
Friday, March 8, 2013
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
‣ 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
Friday, March 8, 2013
PYTHON: ORDENACIÓN
‣ 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
Friday, March 8, 2013
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-to-the-public
http://www.google.com/publicdata/directory
http://data.worldbank.org
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: APIS
‣ API’s
‣ Facebook Open Graph API
‣ YouTube, API
‣ Google :-(
‣ Foursquare, Venues
Application Programming Interface
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:
‣ 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%
Friday, March 8, 2013
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)
‣ 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
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: EJERCICIO 2 (TWITTER)
‣ Queremos empezar a hacer análisis
‣ Para ello, hay que modificar el ejercicio para que:
‣ 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
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: VOLCADO A CSV
‣ 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
Friday, March 8, 2013
ADQUISICIÓN DE DATOS: VOLCADO A JSON
‣ 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
Friday, March 8, 2013
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 ‘usuario-follower’
‣ 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
qplot(Followers, data=myData, geom="histogram",binwidth=50)
ANÁLISIS CUANTITATIVO: HISTOGRAMAS
Friday, March 8, 2013
qplot(Followers, data=myData, geom="histogram",binwidth=25,xlim=c(0, 2000))
ANÁLISIS CUANTITATIVO: HISTOGRAMAS
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:
‣ Tiempo real: Con el streaming de Gephi (tiempo real)
‣ Diferido: Volcando a formato graphml
‣ Abrir Gephi/pyGephi.py
‣ Abrir Gephi/pyGephiStatic.py
Friday, March 8, 2013
MINERÍA DE RELACIONES
‣ Algunas métricas de red
‣ Centralidad: Closeness, Betweeness, PageRank
‣ Densidad
‣ Diámetro
‣ Separación media
‣ Coeficiente de clustering
‣ Componentes conectadas
Friday, March 8, 2013
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
Este trabajo está licenciado como Creative Commons Attribution 3.0 Unported License
www.outliers.es@outliers_es
Friday, March 8, 2013