El documento resume los avances realizados entre julio de 2013 y diciembre de 2014 en ciencia de datos utilizando Twitter como fuente de datos masivos. Se recolectaron más de 95 millones de tweets durante este periodo los cuales fueron procesados utilizando herramientas como Apache Spark y Elasticsearch para extraer información sobre temas, ubicaciones y patrones temporales. El análisis reveló eventos importantes como el mundial de fútbol de 2014 y permitió generar visualizaciones que muestran la movilidad de usuarios de Twitter en México.
7. ¿Qué es Big Data?
Octubre 2013
@abxda
Estratificación Multivariada de 1’221,180
manzanas
Censo de Población y Vivienda 2010
8 Segundos
8.
9. Spark y MLBase
import org.apache.spark.mllib.clustering._
val manzanas = sc.textFile("/Users/abxda/…/datos.csv")
val subconjunto = manzanas.map(manzana => extractColumn(manzana))
points_nacional.cache
var modelo = KMeans.train(subconjunto, k=5, maxIterations=10)
val out = new PrintWriter("/Users/abxda/…/salida.csv")
subconjunto.collect.foreach(x => out.println(modelo.predict(x)))
out.close()
@abxda
¿Qué es Big Data?
2013
10. ¿Qué es Big Data?
Octubre 2013
@abxda
Estratificación Multivariada de 1’221,180
manzanas
8 Segundos
13. Ciencia de Datos V 2.0
http://www.anlytcs.com/2014/01/data-science-venn-diagram-v20.html
Experto en
computación y
desarrollo
avanzados
Experto en
estadística
matemática
Experto en
el dominio de
datos
Unicornio
Zona
peligrosa!
Investigación
tradicional
Machine
learning
@abxda
CIENCIA DE DATOS
15. ¿qué?
¿quién?
¿dónde?
¿cuántos?
¿por qué?
Análisis de Datos
Estadística Machine Learning
Estratificaciones
Análisis de Regresión
Muestreo
Mucho más…
Análisis de Redes (Grafos)
Minería de Datos
Ciencia de Datos y Big Data
Computo en Paralelo
Datos
Crudos
hdfs://
Ciencia de Datos
(Transforma/Modela)
Cómputo Concurrente y Paralelo
Información
(Significado)
Tomar
Decisiones
Actuar
Volumen
Almacenamiento
Distribuido
Internet de las Cosas
Internet de las Personas
Internet de las Ideas
Internet de Todo
@abxda
16. Internet de las Personas
Internet de las Cosas
Sensores
{ json }
< xml >
c,s,v
Redes Sociales
Internet de las Ideas
Crowdsourcing
Sistemas de Archivos
Distribuidos
Computo Paralelo y
Concurrente
Programación Funcional
Razonamiento Algebraico
Estadística
Análisis Multivariado
Machine Learning
Análisis de Interacción Espacial
{ json }
< xml >
c,s,v
{ json }
< xml >
c,s,v
Bases de Datos
NoSQL
Visualización
Panorama Tecnológico
Infraestructura de Cómputo
51. http://www.slideshare.net/deanwampler/spark-the-next-top-compute-model-39976454
¿Por qué Apache Spark?
Tuesday, September 30, 14 Why is Spark so good (and
Java MapReduce so bad)? Because fundamentally, data
analytics is Mathematics and programming tools
inspired by Mathematics - like Functional Programming -
are ideal tools for working with data. This is why Spark
code is so concise, yet powerful. This is why it is a great
platform for performance optimizations. This is why Spark is
a great platform for higher-level tools, like SQL, graphs, etc.
Interest in FP started growing ~10 years ago as a tool to
attack concurrency. I believe that data is now driving FP
adoption even faster. I know many Java shops that switched
to Scala when they adopted tools like Spark and Scalding
(https://github.com/twitter/scalding).
52. Recorte Geográfico
object SimpleApp {
def main(args: Array[String]){
…
val csvPath = "hdfs://m01/user/acoronado/mov/2014-02_al_2014-09-23.csv"
val csv = sc.textFile(csvPath)
csv.cache()
val clipPoints = csv.map({line: String =>
val Array(usuario, lat, lon, date) = line.split(",").map(_.trim)
val geometryFactory = JTSFactoryFinder.getGeometryFactory();
val reader = new WKTReader(geometryFactory);
val point = reader.read("POINT ("+lon+" "+ lat + ")" )
val envelope = point.getEnvelopeInternal
val internal = geoDataMun.get(envelope)
val (cve_est, cve_mun) = internal match {
case l => {
val existe = l.find( f => f match { case (g:Geometry,e:String,m:String) => g.intersects(point)
case _ => false} )
existe match {
case Some(t) => t match {
case (g:Geometry,e:String,m:String) => (e,m)
case _ => ("0","0")}
case None => ("0", "0")
}
}
case _ => ("0", "0")
}
val time = …
line+","+time+","+cve_est+","+cve_mun
})
clipPoints.coalesce(5,true).saveAsTextFile("hdfs://m01/user/acoronado/mov/resultados_movilidad_parts.csv")
}
}
@abxda
53. Más de 700,000 tuiteros
dentro del territorio
Mexicano.
cat tweets_feb_sep.csv | awk -F',' '{print $1}'|sort| uniq | wc -l
@abxda
54. Calcular total de tuits por
Hora
val hours =
csv.map({line:String =>
val campos = line.split(",").map(_.trim)
val d1 = new Date(campos(8).toLong)
val format = new SimpleDateFormat("dd-MM-yyyy,HH")
(format.format(d1),1)}).reduceByKey((a,b) => a+b)
val csvPath ="hdfs://master/user/acoronado/tweets_feb_sep.csv"
val csv = sc.textFile(csvPath)
csv.cache
hours.coalesce(1).saveAsTextFile("hdfs://…/days_hours_string.csv")
@abxda
61. Busca tuits en la fecha especifica
object Main extends App {
val fecha1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse("2014-06-12T00:00:00")
val fecha2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").parse("2014-07-13T23:59:59")
scala.io.Source.fromFile(”/abxda/BigData/tweets_feb_sep_ord_loc.csv")
.getLines()
.grouped(250000)
.flatMap { y=>
y.par.filter({line: String =>
val campos = line.split(",").map(_.trim)
val time = new Date(campos(8).toLong)
time.after(fecha1) && time.before(fecha2)
})
}.foreach({ x: String =>
println(x.toString)
})
}
@abxda
63. Encuentra Hashtags
# coding=utf-8
import codecs
import re
cnt = 0
with codecs.open('/abxda/BigData/Periodo.csv','r','utf-8') as f:
for line in f:
try:
csv = line.split(',')
text = csv[7]
hashtags=re.findall(u"#([áéíóúÁÉÍÓÚñÑA-Za-z0-9_]+)",text,re.U)
for ht in hashtags:
print '#'+ht
except Exception:
pass
@abxda
78. BIENESTAR SUBJETIVO
Cuando se habla de Bienestar se trata de
determinar si una persona cuenta con
determinados satisfactores y si puede
ejercer capacidades fundamentales del ser
humano.
Significa que el bienestar no es sólo una
mera propiedad o conjunto de propiedades
que un analista o un experto puede atribuir
a objetos de medición, sino también una
condición o estado experimentado por
sujetos quienes algo tienen qué decir al
respecto.
¿SUBJETIVO?
@abxda
79. ANTECEDENTES
Conferencia Latinoamericana para la Medición del Bienestar y la
Promoción del Progreso de las Sociedades
Cd. de México del 11 al 13 de mayo de 2011
BIARE Bienestar Autorreportado
@abxda
86. Twitter-Bienestar Subjetivo.
• Estructura del tuit
• Disponibilidad
• aleatorización
• filtros
georreferenciados
“Análisis de sentimiento” Universidad de
Pensilvania
“Mood of the Nation” de los Británicos
“Big Data and Official Statistics” de los
Holandeses
“Taller de Análisis de Sentimiento 2013”
de la SEPLN
Naive Bayes, Support Vector
Machines (SVM)
KNN
Word Count
Spanish Emotion Lexicon (SEL)KNN
AFINN
WordNet
ANEW
@abxda
87. Estudios de movilidad.
Exploración para el desarrollo de una metodología de
análisis para medir la movilidad transfronteriza con los
tuits georreferenciados.
Actividad de los tuiteros
en la frontera
Azul =tuiteros de origen EUA
Rojo=tuiteros de origen MX.
Actividad solamente de
tuiteros MX
@abxda
91. Los Retos: Infraestructura y Personal
Experto en
computación y
desarrollo
avanzados
Experto en
estadística
matemática
Experto en
el dominio de
datos
Unicornio
Zona
peligrosa!
Investigación
tradicional
Machine
learning
CIENCIA DE DATOS
@abxda
El bienestar subjetivo (felicidad, satisfacción con la vida, emociones positivas y negativas) constituye un elemento central de la calidad de vida de las personas.
Tener mediciones del bienestar subjetivo y de las variables que se relacionan con éste permite desarrollar políticas públicas (y privadas) que ayuden a que las personas vivan vidas más gratas y significativas.
Como parte de los compromisos que se desprendieron de la Conferencia Latinoamericana para la Medición del Bienestar y la Promoción del Progreso de las Sociedades que tuviera lugar en la Cd. de México del 11 al 13 de mayo de 2011, el INEGI decidió emprender una primera exploración de medición del Bienestar Subjetivo, sus dominios, sus condicionantes y su contexto; mediante el diseño de un módulo de preguntas que acompañaría el levantamiento de la Encuesta Nacional de Gastos de los Hogares.
Solución PIOANALISIS
Automatización del proceso de clasificación del primer intento en Excel.
Ventajas
Llegar masivamente a los usuarios
Interactividad
Una manera entretenida de evaluar
Público objetivo: chavos de preparatoria
Diseñada a manera de juego, donde existen niveles (Bronce, Plata, Oro y diamante) conforme se evalúan series de 20 tuits se avanza de nivel obteniendo trofeos
Diseño de personaje PIO
Va obteniendo los trofeos
Definición de elementos, modelo, método y proceso para la investigación.
Para el proceso de recolección de tuits se tuvo que descubrir y analizar la estructura de un tuit, investigar su disponibilidad y la forma en que se hace la aleatorización del 1% que se puede extraer, así como la forma de poder aplicar filtros georreferenciados antes de la extracción del flujo en tiempo real, y saber que la cantidad de tuits de México no ha llegado a ese 1%.
En paralelo, se estudió lo que se había hecho en otros países: “Análisis de sentimiento” de la Universidad de Pensilvania, "Mood of the Nation" de los Británicos, "Big Data and Official Statistics" de los Holandeses y el material del “Taller de Análisis de Sentimiento 2013” de la SEPLN. Conocimos de diferentes métodos de clasificadores como Naive Bayes, Support Vector Machines (SVM), KNN, y Word Count. Y también conocimos listas de Palabras y diccionarios utilizados en los ejercicios de análisis de sentimientos estudiados, incluyendo Spanish Emotion Lexicon (SEL), AFINN, WordNet, ANEW, etc.
Se decidió en el grupo, con base en la investigación realizada, que en vez de contabilizar y calificar palabras sueltas y tokenizadas (2 o 3 palabras juntas), para nuestro proceso de análisis de los tuits se utilizará un esquema de correlación o método supervisado de aprendizaje, en el que manualmente se calificará el sentimiento y se clasificará el tema de un conjunto de tuits, los cuales serán utilizados para “enseñarle” al sistema a reconocerlos y a utilizarlos por similitudes para calificar y clasificar el resto de los tuits
En otros países para medir la movilidad interna e internacional se está utilizando la actividad en la infraestructura de antenas de telefonía celular.
Sin embargo, sabemos que no es trivial conseguir el acceso a los registros de las compañías celulares, por lo que en el grupo se está considerando como una alternativa factible el iniciar el desarrollo de una metodología de análisis para medir la movilidad transfronteriza con los tuits georreferenciados, ya que esta misma metodología podría servir en caso de que se consiguieran los registros telefónicos.
Estas dos gráficas son solamente exploratorias pero permiten al área de investigación considerar que puede valer la pena el desarrollo de una metodología de análisis para estudiar la movilidad en zonas fronterizas.
En la gráfica se muestra visualmente la actividad de los tuiteros en la frontera, cada punto corresponde a un tuit emitido con georreferencia, en azul los tuits provenientes de usuarios registrados con país de origen EUA y en rojo los usuarios registrados con país de origen MX.
En la gráfica para evitar la contaminación visual de los tuits de los usuarios registrados con país de origen EUA, se muestran solamente los tuits emitidos por usuarios con país de origen MX.