L’évaluation se fera sous la forme de deux projets :
-
Le projet 1 est à rendre pour le 15/12/2023
-
Le projet 2 est à rendre pour le 05/12/2023. Une présentation orale aura lieu le 06/12 durant la séance de cours
Projet 1 : Le calcul du PageRank
C’est l’exemple par lequel Google a mis en place son infrastructure.
On a un réseau de \$N\$ pages qui se citent ; i→j
traduit le fait que la page i cite la page j.
Principe de l’algorithme du PageRank :
-
Initialement toutes les pages sont affectées d’un même poids \$w_i^0=1/N\$.
-
Pour chaque sommet \$i\$, on calcule le nombre \$n_i\$ de liens
i→j
. -
Ensuite, dans un premier mouvement, on affecte chaque sommet \$i\$ d’un nouveau poids : \[ w_i^1 = c w_i^0+(1-c)\sum_{j\to i} \frac{w_j^0}{n_j} \] où \$c\$ est un coefficient qui est souvent pris égal à \$0.15\$ pour des raisons heuristiques.
-
On itère le processus une dizaine de fois (là encore, le choix du nombre d’itération est essentiellement heuristique) : \[ w_i^{k+1} = c w_i^0+(1-c)\sum_{j\to i} \frac{w_j^k}{n_j} \]
-
Le vecteur des poids des sommets tend vers une valeur limite qu’on appelle le page rank de chaque sommet.
Comment traduire cela en algorithme map-reduce ?
Voici un pseudo-code extrait de Jimmy Lin and Chris Dyer - Data-Intensive Text Processing with MapReduce.
Class Mapper
method Map(nid n, node N )
p <- N.PageRank/|N.AdjacencyList|
Emit(nid n, N ) # Pass along graph structure
for all nodeid m in N.AdjacencyList do
Emit(nid m, p) # Pass PageRank mass to neighbors
Class Reducer
method Reduce(nid m, [p1 , p2 ,...])
M <- empty
for all p in counts [p1 , p2 ,...] do
if IsNode(p) then
M <- p # Recover graph structure
else
s <- s + p # Sum incoming PageRank contributions
M.PageRank <- s
Emit(nid m, node M )
Ce code n’est pas entièrement complet puisqu’ici \$c=0\$.
Ce projet peut se faire en binôme. Il est attendu un script python clair et commenté (un seul script par groupe) utilisant le module
et doit renvoyer le calcul du PageRank des liens web du fichier (avec éventuellement un classement par ordre décroissant). |
Projet 2 : Accidents de la circulation en France
Les accidents de la circulation en France sont recensés chaque année. Pour une année xxxx
, on a 4 fichiers appelés
caracteristiques_xxxx.csv
, lieux_xxxx.csv
, usagers_xxxx.csv
et vehicules_xxxx.csv
.
Les fichiers correspondant aux années 2011 à 2018 sont disponibles dans cette archive. Un document complet disponible ici décrit ces fichiers de données.
-
Le fichier
caracteristiques_xxxx.csv
contient un enregistrement par accident pour l’annéexxxx
:
Num_Acc | an | mois | jour | hrmn | lum | … |
---|---|---|---|---|---|---|
201800000001 |
18 |
1 |
24 |
1505 |
1 |
… |
201800000002 |
18 |
2 |
12 |
1015 |
1 |
… |
201800000003 |
18 |
3 |
4 |
1135 |
1 |
… |
lum
décrit par exemple les conditions d’éclairage dans lesquelles l’accident s’est produit :
-
Plein jour,
-
Crépuscule ou aube,
-
Nuit sans éclairage public,
-
Nuit avec éclairage public non allumé,
-
Nuit avec éclairage public allumé.
-
Le fichier
vehicules_xxxx.csv
contient un enregistrement par véhicule mis en cause dans un accident pour l’annéexxxx
:
-
Num_Acc | senc | catv | occutc | obs | obsm | choc | manv | num_veh |
---|---|---|---|---|---|---|---|---|
201400000001 |
0 |
33 |
0 |
0 |
2 |
1 |
1 |
A01 |
201400000001 |
0 |
7 |
0 |
0 |
0 |
6 |
15 |
B01 |
obs
= obstacle fixe heurté : 0 : rien, 1 : véhicule , 2 : arbre, etc.
obsm
= obstacle mobile : 0 : rien, 1 : piéton, 2 : véhicule, etc.
-
Le fichier
usagers_xxxx.csv
contient un enregistrement par usager mis en cause dans un accident pour l’annéexxxx
:
Num_Acc | place | catu | grav | sexe | trajet | secu | locp | actp | etatp | an_nais | num_veh |
---|---|---|---|---|---|---|---|---|---|---|---|
201400000001 |
1 |
1 |
3 |
1 |
5 |
21 |
0 |
0 |
0 |
1971 |
A01 |
201400000001 |
1 |
1 |
1 |
1 |
5 |
11 |
0 |
0 |
0 |
1992 |
B02 |
catu
désigne la catégorie d’usager : 1 : conducteur, 2: passager, 3 piéton
grav
désigne la gravité de l’accident : 1 : indemne, 2 : tué, 3: blessé hospitalisé, 4 : blessé léger.
-
Le fichier
usagers_xxxx.csv
contient les descriptifs des lieux d’accidents ayant eu lieu l’annéexxxx
Ce travail se fera de manière individuelle. Il est attendu un script python clair et commenté utilisant obligatoirement le framework Spark (par l’intermédiaire du module La note reposera principalement sur la présentation orale de votre programme et sur la mise en oeuvre des concepts étudiés ensemble (même si la quantité de données à votre disposition reste largement raisonnable, il est attendu que votre programme puisse permettre le passage à une échelle plus importante). Le respect du temps imparti ainsi que la clarté de l’exposé seront également évalués. |