Big data with r

45
www.bluestone.fr 55 rue du Faubourg Montmartre 75009 Paris +33 (0)1 53 25 02 10 [email protected] BS TEMPLATE 20120625 BASTIEN RIERA

description

 

Transcript of Big data with r

Page 1: Big data with r

www.bluestone.fr 55 rue du Faubourg Montmartre – 75009 Paris

+33 (0)1 53 25 02 10 [email protected]

BS TEMPLATE 20120625

BASTIEN RIERA

Page 2: Big data with r

Contexte

Qu’est-ce que le Big Data ?

Hadoop

RHadoop

Le MapReduce en pratique

Pour aller plus loin

Hollande vs Sarkozy

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 2

Page 3: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 3

Stage de fin d’étude : Ensai 2012 – Marketing quantitatif et gestion de la relation client

Bluestone Consulting – Maître de stage : Julien Damon

Monitoring de la campagne présidentielle sur Twitter

Étude de l’influence de François Hollande et Nicolas Sarkozy

Analyse statistique en environnement Big Data

Choix du logiciel R

Page 4: Big data with r
Page 5: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 5

« La Big Data est caractérisée par une accumulation continue de tous les types de données atteignant une taille et un niveau de granularité difficile à exploiter » (Zouheir Guédri – Mars 2012)[1]

Les quatre V du Big Data (Alex Popescu – Fev 2012)[2] : Volume

Variété

Vitesse

Valeur

Page 6: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 6

Volume : 2011 : 1,8 ZettaOctet[3] au niveau mondial

Réseaux Sociaux : 400 millions de tweets publiés par jour en 2012[4]

Variété : Structuré / Non structuré

Open Data

Réseaux Sociaux

Vitesse : Flux d’information

Valeur : 5% des données sont compatibles avec l’analyse décisionnelle[3]

Open Data

API

Page 7: Big data with r
Page 8: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 8

Open-source, fondation Apache

Exploité par : Microsoft, IBM, Oracle, EMC, …

Avantages Stockage et calculs distribués

Nombre de nœuds évolutif

Fiable face aux défaillances matérielles

Inconvénients Pas d’interface utilisateur

Aucune méthode d’analyse statistique

Hadoop Distributed File System (HDFS) Division par bloc

Stockage distribué

MapReduce

Page 9: Big data with r
Page 10: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 10

RHadoop RevolutionAnalytics (Github)

Trois package R, rhbase, rhdfs, rmr

MapReduce : rmr

Avantages Environnement R[5]

Transparent

Définition des fonctions Map et Reduce

Deux environnements : « local » et « hadoop »

Inconvénients Peu de méthodes directement implémentées

Gestion des erreurs

Page 11: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 11

rmr

Page 12: Big data with r
Page 13: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 13

Association clef/valeur

Dualité Map/Reduce Map = une observation

Reduce = agrégation

Page 14: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 14

map=function(k,v){

k’= …

v’= …

keyval(k’,v’)

}

reduce = function(k’,list_v’){

k’’= …

v’’= …

keyval(k’’, v’’)

}

Page 15: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 15

Association clef/valeur

Dualité Map/Reduce Map = une observation

Reduce = agrégation

Nombre de tweets :

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<NULL,1> <NULL,1> <NULL,1> <NULL,1>

<NULL,1> <NULL,1> <NULL,1> <NULL,1>

<NULL,1> <NULL,1> <NULL,1>

Page 16: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 16

Association clef/valeur

Dualité Map/Reduce Map = une observation

Reduce = agrégation

Nombre de tweets :

Reduce

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<NULL,1> <NULL,1> <NULL,1> <NULL,1>

<NULL,1> <NULL,1> <NULL,1> <NULL,1>

<NULL,1> <NULL,1> <NULL,1>

<NULL,11>

Page 17: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 17

mapreduce(input=input, map=function(k,v){ k’ = NULL v’ = 1 keyval(k’, v’) }, reduce = function(k’,list_v’){ k’’ = NULL v’’= sum(unlist(list_v’)) keyval(k’’,v’’) } )

Page 18: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 18

Nombre de tweets par utilisateur :

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<id1,1> <id2,1> <id3,1> <id1,1>

<id1,1> <id1,1> <id2,1> <id3,1>

<id2,1> <id1,1> <id2,1>

Page 19: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 19

Nombre de tweets par utilisateur :

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<id1,1> <id2,1> <id3,1> <id1,1>

<id1,1> <id1,1> <id2,1> <id3,1>

<id2,1> <id1,1> <id2,1>

Map Clef :

identifiant utilisateur

Valeur : 1

Page 20: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 20

Nombre de tweets par utilisateur :

Regroupement Automatique

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<id1,1> <id2,1> <id3,1> <id1,1>

<id1,1> <id1,1> <id2,1> <id3,1>

<id2,1> <id1,1> <id2,1>

<id1,1> <id1,1> <id1,1> <id1,1> <id1,1>

<id2,1> <id2,1> <id2,1> <id2,1>

<id3,1> <id3,1>

Map Clef :

identifiant utilisateur

Valeur : 1

Page 21: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 21

Nombre de tweets par utilisateur :

Regroupement Automatique

Map

Reduce

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<id1,1> <id2,1> <id3,1> <id1,1>

<id1,1> <id1,1> <id2,1> <id3,1>

<id2,1> <id1,1> <id2,1>

<id2,4>

<id1,1> <id1,1> <id1,1> <id1,1> <id1,1>

<id2,1> <id2,1> <id2,1> <id2,1>

<id3,1> <id3,1>

<id3,2>

<id1,5>

<id1,5> <id2,4> <id3,2>

Map Clef :

identifiant utilisateur

Valeur : 1

Reduce Agrégation par clef

Page 22: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 22

mapreduce(input = input ,

map=function(k,v){

k’ = v$user$id_str

v’ = 1

keyval(k’, v’)

},

reduce = function(k,list_v){

keyval(k, sum(unlist(list_v)))

}

)

Page 23: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 23

Nombre de tweets moyen par utilisateur :

Reduce 1

Regroupement Automatique

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<id1,1> <id2,1> <id3,1> <id1,1>

<id1,1> <id1,1> <id2,1> <id3,1>

<id2,1> <id1,1> <id2,1>

<NULL,5>

<NULL,4>

<NULL,2>

<id1,1> <id1,1> <id1,1> <id1,1> <id1,1>

<id2,1> <id2,1> <id2,1> <id2,1>

<id3,1> <id3,1>

Page 24: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 24

Nombre de tweets moyen par utilisateur :

Reduce 1

Regroupement Automatique

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<id1,1> <id2,1> <id3,1> <id1,1>

<id1,1> <id1,1> <id2,1> <id3,1>

<id2,1> <id1,1> <id2,1>

<NULL,5>

<NULL,4>

<NULL,2>

<id1,1> <id1,1> <id1,1> <id1,1> <id1,1>

<id2,1> <id2,1> <id2,1> <id2,1>

<id3,1> <id3,1>

Reduce 1 : Agrégation par clef

Changement de clef

Page 25: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 25

Nombre de tweets moyen par utilisateur :

Reduce 2

Reduce 1

Regroupement Automatique

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<id1,1> <id2,1> <id3,1> <id1,1>

<id1,1> <id1,1> <id2,1> <id3,1>

<id2,1> <id1,1> <id2,1>

<NULL,5>

<NULL,4>

<NULL,2>

<NULL, 3.7>

<id1,1> <id1,1> <id1,1> <id1,1> <id1,1>

<id2,1> <id2,1> <id2,1> <id2,1>

<id3,1> <id3,1>

Reduce 1 : Agrégation par clef

Changement de clef

Reduce 2 : Moyenne sur tous

les individus

Page 26: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 26

input2=mapreduce( input = input ,

map= function(k,v) {

keyval(v$user$id_str,1)

},

reduce = function(k,list_v){

keyval(NULL, sum(unlist(list_v)))

}

)

mapreduce(input=input2,

reduce=function(k,list_v){

keyval(k,mean(unlist(list_v)))

}

)

Page 27: Big data with r
Page 28: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 28

Étude de l’influence sur Twitter

Début : 19 mars 2012 (publication de la liste des candidats)

Fin : 5 mai 2012 (la veille des résultats du second tour)

130 mots clefs

16 millions de tweets récoltés

4 500 000 utilisateurs

53 Go

Page 29: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 29

{ "_id":{ "$oid": "4f625e47e2a3f33c79000002" }, "truncated":false, "retweet_count":0, "source":"web", "user":{ "screen_name":"Expat00007", "followers_count":0, "time_zone":"Amsterdam", "location":null, "lang":"fr", "profile_image_url_https":"https://si0.twimg.com/sticky/default_profile_images/default_profile_5_normal.png", "name":"Expat00007", "id":525747899, "geo_enabled":false, "created_at":"Thu Mar 15 21:02:35 +0000 2012", "friends_count":0, "id_str":"525747899", "profile_image_url":"http://a0.twimg.com/sticky/default_profile_images/default_profile_5_normal.png" }, "place":null, "geo":null, "text":"#FH réveille toi, Sarkozy lui, envoyait sévère, il a du punch, il répond du tac o tac, il sait de quoi il parle... il tergiverse pas !", "coordinates":null, "created_at":"Thu Mar 15 21:25:27 +0000 2012", "entities":{ "hashtags": [{ "text":"FH", "indices":[0,3] }], "urls":[], "user_mentions":[]}, "id":180404368162570240, "id_str":"180404368162570240" }

Page 30: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 30

F. Hollande : 1er personne

Candidat sortant

N. Sarkozy : 3eme personne

@fhollande

Page 31: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 31

F. Hollande : 1er personne

Candidat sortant

#rennes…

N. Sarkozy : 3eme personne

@fhollande

#dpda…

Page 32: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 32

F. Hollande : 228 776

N. Sarkozy : 174 967

Page 33: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 33

Nombre de Tweets

Nombre de Retweets

Nombre de tracts équivalent

François Hollande 712 30 854 12 107 411

Nicolas Sarkozy 609 42 796 13 769 105

Page 34: Big data with r
Page 35: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 35

Structure des retweets

Estimation de la matrice « qui a retweeté qui » Matrice stochastique

Matrice creuse de dimension 4 500 000 * 4 500 000

Évolution d’une mesure de probabilité Produit matriciel

Mesure récursive du pouvoir d’influence Prise en compte de la capacité d’influence des proches

Convergence itérative

Solution unique

Page 36: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 36

François Hollande : 12eme

Nicolas Sarkozy : 14eme

Analystes politiques : Le Véritomètre (rang 3)

Owni (rang 4)

Journalistes : Soren Seelow (rang 24)

Leparmentier Arnaud (rang 26)

Politiques : Vincent Feltesse (rang 17)

Jean-Luc Mélenchon (rang 20)

Etrangers : Barack Obama (rang 6-7)

Breaking news (rang 13)

Page 37: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 37

Structure des retweets

Estimation de la matrice « qui a retweeté qui » Matrice stochastique

Matrice creuse de dimension 4 500 000 * 4 500 000

Évolution d’une mesure de probabilité Produit matriciel

Mesure récursive du pouvoir d’influence Prise en compte de la capacité d’influence des proches

Convergence itérative

Solution unique

Page 38: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 38

Regroupement Automatique

Map

tweet1 tweet2 tweet3 tweet4

tweet5 tweet6 tweet7 tweet8

tweet9 tweet10 tweet11

<id_Retweeter1,id_Author4> <id_Retweeter2,id_Author4>

<id_Retweeter1,id_Author6> <id_Retweeter1,id_Author6>

<id_Retweeter3,id_Author4>

<id_Retweeter3,id_Author5>

<id_Retweeter1,id_Author4> <id_Retweeter1,id_Author6> <id_Retweeter1,id_Author6>

<id_Retweeter2,id_Author4>

<id_Retweeter3,id_Author4> <id_Retweeter3,id_Author5>

Page 39: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 39

mapreduce(input=input, map=function(k,v){ if(is.null(v$retweeted_status$user$id_str)){return()} else{ retweeteur=v$user$id_str retweete=v$retweeted_status$user$id_str keyval(retweeteur,retweete) } }, …

Page 40: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 40

Reduce

id_author4 | id_author6 <id_Retweeter1, 0.333 | 0.667 > …

id_author4 | <id_Retweeter2, 1 | >

id_author4 | id_author5 <id_Retweeter1, 0.5 | 0.5 >

Matrice creuse

Page 41: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 41

mapreduce(input=input, map=function(k,v){ if(is.null(v$retweeted_status$user$id_str)){return()} retweeteur=v$user$id_str retweete=v$retweeted_status$user$id_str keyval(retweeteur,retweete) }, reduce=function(k,vv){ keyval(k,table(unlist(vv))/length(vv)) } )

Page 42: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 42

Matrice creuse

clef : id_Retweeter valeur : data.frame : (id_user, coefficient)

Vecteur de score d’influence

clef : id_user valeur : score

Reduce

Reduce

Equijoin() (Jointure sur les clefs)

Clef : id_Retweeter Valeur 1 : (id_user, coefficient) Valeur 2 : (score)

Clef : id_user Valeur : coefficient*score

Nouveau vecteur de score Clef : id_user Valeur : nouveau_score = SUM(coefficient*score)

Page 43: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 43

tmp=equijoin(

left.input=score,

right.input=matrice,

outer="left",

#map.right=function(…)

#map.left=function(…)

reduce.all=function(k, v.left, v.right){

k’=unlist(v.right[,1])

v’=unlist(as.numeric(v.right[,2])*as.numeric(v.left))

keyval(k’,v’)

}

)

mapreduce(

input=tmp,

reduce=function(k,v){

keyval(k’,sum(unlist(v’))

}

)

Page 44: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 44

Autres fonctions R disponibles dans le package rmr

mapreduce(…) Cadre fonctionnel permettant de définir et de réaliser les traitements au format MapReduce.

rmr.str(…) Équivalent de la fonction str() de R

rmr.sample(input, output = NULL, method = c("any", "Bernoulli"), ...)

Réalise des échantillonnages aléatoires dans les fichiers de l’hdfs. On peut y définir un effectif cible ou une probabilité d’échantillonnage.

equijoin(…) Permet de réaliser des jointures en MapReduce (cf. exemple)

Page 45: Big data with r

BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 45

1. Zouheir Guédri Congrès BigData Paris. (2012)

2. Alex Popescu Big data causes concern and big confusion. A big data definition to help

clarify the confusion. (2012)

3. Stephane Fermigier Big data & open source : une convergence inévitable ? (2012)

4. Semiocast Twitter reaches half a billion accounts - More than 140 millions in the U.S.

(2012)

5. R development core team R : A language and environment for statistical computing. (2008) (3-900051-

07-0)

6. Michael Eisermann 1. Comment fonctionne Google ? (2009)