presentacionparainfotec

92
Avances 2014. 16 de Diciembre de 2014 Presentación a personal de INFOTEC

Upload: abel-alejandro-coronado-iruegas

Post on 18-Jul-2015

127 views

Category:

Technology


0 download

TRANSCRIPT

Avances 2014.

16 de Diciembre de 2014

Presentación a personal de INFOTEC

Ciencia de Datos en Acción (2013)

www.inegi.org.mx/est/contenidos/Proyectos/estratificador/ @abxda

Julio 2013 a Diciembre 2014

Tecnologías Involucradas (2013)

@abxda

Ciencia de Datos en Acción (2013)

Ciencia de Datos en Acción (2013)

@abxda

¿Qué es Big Data?Octubre 2013

@abxda

Estratificación Multivariada de 1’221,180

manzanas

Censo de Población y Vivienda 2010

8 Segundos

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

¿Qué es Big Data?Octubre 2013

@abxda

Estratificación Multivariada de 1’221,180

manzanas

8 Segundos

Tecnologías Involucradas (2013)

http://drewconway.com/zia/2013/3/26/the-data-science-venn-diagram

Experto en

computación y

desarrollo

avanzados

Experto en

estadística

matemática

Experto en

el dominio de

datos

CIENCIA

DE

DATOS

Zona

peligrosa!

Investigación

tradicional

Machine

learning

Ciencia de Datos V 1.0

@abxda

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

http://www.r-bloggers.com/data-science-toolbox-survey-results-surprise-r-and-python-win/

Comprender

Recolectar

Explorar, Visualizar

Limpiar

Transformar/

Caracterizar

Modelar / Entrenar

Validar

Comunicar ?

Un Proceso de Ciencia de Datos

Imaginar /

Considerar la

Integración

de Otras Fuentes

Analizar Fuente(s) Conceptualizar

¿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

Crudoshdfs://

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

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 MultivariadoMachine 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ógicoInfraestructura de Cómputo

Twitter como fuente de Big Data

@abxda@hbcolectivo

¿Cuántos caracteres?

@abxda

140 ???

@abxda

Todo listo para la presentación de #BigData en el @FSLmx .

1482

Json: Formato de Intercambio

Nuestra huella en las Redes

Sociales

@abxda

Todos los tuits están disponibles para

su recolección en tiempo real.

@abxda

Incluso permite consultas

geográficas

@abxda

¿Dónde recolectar?

@abxda

http://www.elasticsearch.org/

@abxda

¿Por qué ElasticSearch?

@abxda

SwitchPuertos (a) 10.200.2.xPuertos (b)10.1.1.X

Hydra 2 – [10.1.1.X | 10.200.X.X]

Hydra1 – Master 10.1.1.X

Acceso a Internet [Recolecta información Redes Sociales]

< ESCALABILIDAD HORIZONTAL >

¿Por qué ElasticSearch?

@abxda

Hydra

@abxda

Hydra

@abxda

Twitter River

https://github.com/elasticsearch/elasticsearch-river-twitter

curl -XPUT localhost:9200/_river/my_twitter_river/_meta -d'

{

"type" : "twitter",

"twitter" : {

"oauth" : {

"consumer_key" :”XXXxxXXxXxX",

"consumer_secret" : "XXXxxXXxXxXXXXxxXXxXxXXXXxxXXxXxX",

"access_token" : "XXXxxXXxXxXXXXxxXXxXxXXXXxxXXxXxX",

"access_token_secret" : "XXXxxXXxXxXXXXxxXXxXxX"

},

"filter" : {

"locations" :"-118.40764955,14.53209836,-86.71040527,32.71865357"

}

}

}

'

@abxda

La recolección 2014

@abxda

Extractor

es = Elasticsearch(['10.200.2.41:9200'])

rs = es.search(index=['my_twitter_river'],

scroll=duracion, search_type='scan', size=int(noTuits),

body={

"query": {

"range" : {

"created_at" : {

"gte": fechaInicio,

"lte": fechaFin

}

}

}})

@abxda

CSV

@abxda

Se extraen los puntos del CSV

$cat tweets_feb_sep_ord_loc.csv | awk -F',' '{print $3 "," $4}'

20.281523,-100.809407

20.281523,-100.809407

20.281667,-100.809311

20.281479,-100.809394

20.281526,-100.809377

20.281422,-100.809428

20.281478,-100.809406

20.281495,-100.809371

20.281521,-100.80937

25.767972,-103.274890

25.768021,-103.274900

25.768059,-103.274955

25.768019,-103.274900

25.768098,-103.274992@abxda

Quantum GIS

http://www.qgis.org/@abxda

Resultado de la recolección

95M Tuits

@abxda

Un acercamiento

@abxda

Red Nacional de Caminosy

Twitter

Hadoop Distributed File System

hdfs://

@abxda

Hadoop / Apache Spark

@abxda

ó

Procesamiento70 Cores > 3 Ghz

>250 Gb Ram

5 TB

+Recolección20 Cores > 3 Ghz

100 Gb Ram

1 TB

¿Por qué Apache Spark?

http://spark.apache.org/

@abxdahttp://www.slideshare.net/pacoid/how-spark-fits-into-the-big-data-landscape

¿Por qué Apache Spark?

http://databricks.com/blog/2014/10/10/spark-petabyte-sort.html

@abxda

¿Por qué Apache Spark?

http://databricks.com/blog/2014/10/10/spark-petabyte-sort.html

@abxda

¿Por qué Apache Spark?

http://databricks.com/blog/2014/10/10/spark-petabyte-sort.html @abxda

¿Por qué Apache Spark?

http://databricks.com/blog/2014/10/10/spark-petabyte-sort.html @abxda

¿Por qué Apache Spark?

¿Por qué Apache Spark?

https://www.edx.org/course/introduction-big-data-apache-spark-uc-berkeleyx-cs100-1x#.VJBNC6SG_Jg

¿Por qué Apache Spark?

https://www.edx.org/course/scalable-machine-learning-uc-berkeleyx-cs190-1x#.VJBNC6SG9D8

¿Por qué Apache Spark?

@abxda

Scala = Object + FunctionalProgramming

https://twitter.com/deanwampler/status/458032648552603648

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).

Recorte Geográficoobject 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

Más de 700,000 tuiteros

dentro del territorio

Mexicano.

cat tweets_feb_sep.csv | awk -F',' '{print $1}'|sort| uniq | wc -l

@abxda

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

Map-Reduce

https://twitter.com/francesc/status/507942534388011008 @abxda

@abxda

Generar la Gráfica

@abxda

A lo largo del tiempo

@abxda

¿Qué pasó entre el 12 de Junio y el 13

de Julio?

@abxda

Pregúntale a Twitter

?@abxda

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

Cómputo paraleloy.par.filter

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

Prepara archivo para Wordle

cat hashtagsMundial.txt | sort | uniq -c | sort -n | awk -F' '

'{print $2 ":" $1}' > wordleMun.txt

#NED:8313

#MundialBrasil2014:8777

#VamosMexico:8947

#BRA:10098

#CallMeCam:14531

#ARG:15663

#Brasil2014:16428

#GER:18030

#MEX:34035

http://www.wordle.net/

@abxda

¿Qué pasó entre el 12 de junio y el

13 de julio?

http://www.wordle.net/ @abxda

¿Qué pasó el 23 de junio?

@abxda

¿Qué pasó el 29 de junio?

@abxda

¿Con qué tuiteamos?

@abxda

¿A qué hora tuiteamos?

0:00 1:00 2:00 3:00 4:00 5:00 6:00 7:00 8:00 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 19:00 20:00 21:00 22:00 23:00

@abxda

¿Qué tuiteamos?

@abxda

¿Cómo nos desplazamos mientras tuiteamos?

@abxda

Gráfica de Movilidad

library(circlize)

testados = read.table("/abxda/TransladosConDFMexMUNICIPAL.csv", sep=";",

header=TRUE, stringsAsFactors = FALSE, quote = "" )

m = table(testados$estadoorigen, testados$estadodestino)

states = union(rownames(m), colnames(m))

circos.clear()

par(mar = c(1, 1, 1, 1))

chordDiagram(m, directional = TRUE, transparency = 0.3,annotationTrack = "grid",

annotationTrackHeight = 0.01,

preAllocateTracks = 1)

for(si in get.all.sector.index()) {

xlim = get.cell.meta.data("xlim", sector.index = si, track.index = 1)

ylim = get.cell.meta.data("ylim", sector.index = si, track.index = 1)

circos.text(mean(xlim), ylim[1], si, facing = "clockwise", adj = c(0, 0.5),

niceFacing = TRUE, cex = 0.9, col = "black", sector.index = si,

track.index = 1)

}

http://cran.r-project.org/web/packages/circlize/vignettes/circlize.pdf @abxda

@abxda

R

https://twitter.com/abxda/status/527937889624027136 @abxda

Paquetes de R

http://www.jottr.org/2014/10/milestone-6000-packages-on-cran.html @abxda

Paquetes de R

Municipios donde más se tuitea.

@abxda

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

ANTECEDENTESConferencia Latinoamericana para la Medición del Bienestar y la

Promoción del Progreso de las SociedadesCd. de México del 11 al 13 de mayo de 2011

BIARE Bienestar Autorreportado

@abxda

Twitter-Bienestar Subjetivo.

http://cienciadedatos.inegi.org.mx/pioanalisis

Para generar nuestro conjunto de entrenamiento sedesarrolló una aplicación para calificar el sentimiento delos tuits en positivo, negativo o neutro, y clasificarlos envarios temas.

@abxda

@hbcolectivo @ricardoaolvera

CONOCIENDO A PIO

@hbcolectivo @ricardoaolvera

@abxda

Tecnologías Involucradas

@abxda

@hbcolectivo @ricardoaolvera @abxda

http://cienciadedatos.inegi.org.mx/pioanalisis

@hbcolectivo @ricardoaolvera

@abxda

RESULTADOS

@hbcolectivo @ricardoaolvera

@abxda

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

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 fronteraAzul =tuiteros de origen EUA

Rojo=tuiteros de origen MX.

Actividad solamente de tuiteros MX

@abxda

Actividad solamente de tuiteros MX

@abxda

@abxda

Herramientas

@abxda

D3.js

Spark - MLib

Mahaut

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

Gracias