Mini-Rapport
Notre application a pour but de présenter de manière visuelle la répartition des votes du 1er tour des présidentielles 2017 en France métropolitaine par cantons, en fonction de leur densité de population.
Sources des données
Nous avons utilisé deux sources différentes afin d'obtenir les données nécessaires :
Les contours des cantons de Paris et de la métropole de Lyon ne sont pas présents dans le jeu de données et ne figurent par conséquent pas sur la carte.
Traitements opérés
- A partir des données des contours des cantons,
nous avons éstimé la superficie de chaque canton à l'aide notamment de la librairie Python pyshp ainsi
que des données au format Shapefile. Ce calcul n'était pas exact car l'algorithme utilisé nécessitait
comme précondition des polygones uniques ne se recoupant pas. Ceci n'était pas exactement le cas des cantons.
En effet certains cantons électoraux possèdent des îles (donc plusieurs polygones) tandis que d'autres se recoupent
(à la manière d'un 8). L'experience montre cependant que la superficie estimée est relativement assez proche
de la vraie superficie et que les imprécisions sont minimisées par le fait que la tendance générale est à la baisse
pour tous les cantons ce qui préserve l'ordre réel (ce qui nous intéresse plus que la valeur en elle même). Certaines valeurs abérentes ont été corrigées à la main (3-4),
et de par le manque de données sur les contours des cantons de Paris et de la métropole de Lyon nous avons dû renseigner manuellement la densité pour le graphe.
- Nous avons supprimé les données inutiles, par exemple les données concernant la population par département/région, le nombre d'inscrit pour les votes, les noms des cantons, etc. Nous avons également
remanié les données pour gagner en place et en efficacité pour la suite des traitements : par exemple, les données de votes utilisaient les noms des candidats à chaque ligne du fichier ; ces noms ont été remplacés par des numéros qui serviront d'indices plus tard.
- Nous avons ordonné les résultats des candidats dans le même ordre pour chacun des cantons à l'aide de javascript.
- Toutes les données (excepté les contours geo-json) ont été agrégées dans un même fichier puis ordonnées selon la densité de population, afin de produire un graphe simple à comprendre et de faciliter les traitements.
La pre processing des données a en effet permi d'augmenter grandement l'efficacité des calculs.
Au cours de l'exécution de l'application, les données n'ont plus qu'à être filtrées en fonction de la fourchette de densités choisie et des candidats à afficher.
- Nous avons converti les données xls au format csv pour faciliter et accélérer le parsing des données dans l'application.
Architecture
Notre projet est constitué de plusieurs parties :
- Le StreamGraph, dont le comportement est implémenté dans le fichier streamgraph.js.
- La carte dans le fichier carte.js.
- Le slider qui communique avec ces deux parties et qui est implémenté directement dans le fichier principal index.html car il a besoin d'intéragir directement avec des éléments de cette page.
- Les fichiers canton.js et csvFileToProcess.js qui permettent de récupérer les données nécessaires.
Choix des technologies
Pour le graphe, nous avons décidé d'utiliser un streamgraph de d3.js car le type de
représentation proposé nous paraissait original et permet d'afficher plus de données qu'un type de graphique plus traditionnel comme un histogramme.
De plus la bibliothèque est plutôt simple d'utilisation, ce qui a son importance étant donné le peu de temps consacré à ce projet.
Pour la carte, on utilise aussi d3.js pour ne pas s'éparpiller sur trop de technologies différentes et pour pouvoir réutiliser nos données de contours de cantons facilement.
Nous avions besoin de sliders pour pouvoir régler le filtre de densité. Nous avons décidé d'utiliser la bibliothèque
Javascript noUiSlider car elle est très facile d'utilisation et permet
de gérer une échelle non linéaire (ce qui est nécessaire dans notre cas étant donné la répartition très inégale de la population et l'écart énorme entre le canton le moins dense et le plus dense).
La bibliothèque PapaParse a été utilisée pour parser nos fichiers csv.