big data with r
Post on 01-Dec-2014
2.503 Views
Preview:
DESCRIPTION
TRANSCRIPT
www.bluestone.fr 55 rue du Faubourg Montmartre – 75009 Paris
+33 (0)1 53 25 02 10 contact@bluestone.fr
BS TEMPLATE 20120625
BASTIEN RIERA
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
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
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
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
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
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
BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 11
rmr
BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 13
Association clef/valeur
Dualité Map/Reduce Map = une observation
Reduce = agrégation
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’’)
}
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>
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>
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’’) } )
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>
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
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
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
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)))
}
)
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>
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
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
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)))
}
)
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
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" }
BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 30
F. Hollande : 1er personne
Candidat sortant
N. Sarkozy : 3eme personne
@fhollande
BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 31
F. Hollande : 1er personne
Candidat sortant
#rennes…
N. Sarkozy : 3eme personne
@fhollande
#dpda…
BIG DATA - INTRODUCTION À LA PROGRAMMATION MAPREDUCE AVEC R 32
F. Hollande : 228 776
N. Sarkozy : 174 967
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
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
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)
…
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
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>
…
…
…
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) } }, …
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
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)) } )
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)
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’))
}
)
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)
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)
top related