big data with r

Post on 01-Dec-2014

2.503 Views

Category:

Documents

6 Downloads

Preview:

Click to see full reader

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