-
Notifications
You must be signed in to change notification settings - Fork 0
/
quebec.py
81 lines (67 loc) · 2.57 KB
/
quebec.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import os
import folium
import numpy as np
import geopandas
from pprint import pprint
import json
import pandas as pd
# Définir les couleurs attribuée à chacun des partis ayant
# fait élire au moins 1 personne comme députée
couleurs = {
'C.A.Q.-É.F.L.': 'lightblue',
'P.L.Q./Q.L.P.': 'red',
'Q.S.': 'orange',
'P.Q.': 'blue'
}
# Utilisons les données publiées par le DGEQ pour extraire
# les résultats pour chacune des circonscriptons
dgeq2018_path = os.path.join('data', 'resultats.json')
dgeq2018_file = open(dgeq2018_path)
dgeq2018_json = json.load(dgeq2018_file)
#On commence avec un tables vide
resultats_par_circonscripton = []
# Que l'on remplit avec les données lues
# Pour chaque circonscription:
# On crée un dictionnaire (c_res)
# On ajoute le code identifiant la circonscripton (CO_CEP)
# Le parti vainqueur dans cette circonscripton (vainqueur)
# Et la couleur associée à ce parti.
for c in dgeq2018_json['circonscriptions']:
c_res = {
'CO_CEP': int(c['numeroCirconscription']),
'vainqueur': c['candidats'][0]['abreviationPartiPolitique'],
'couleur': couleurs[c['candidats'][0]['abreviationPartiPolitique']]
}
# Enfin on ajoute le dictionnaire c_rest au tableau des résultats
resultats_par_circonscripton.append(c_res)
# Enfin, à l'aide du tableau, on crée un "dataFrame" à l'aide de la
# blibliothèque pandas.
resultats_df = pd.DataFrame(resultats_par_circonscripton)
resultats_df.set_index('CO_CEP', inplace=True)
#Utilison sles données publuiées par le DGEQ pour extraire
#les limites territoriales de chacune des circonscripton
#le résultat (circonscriptons) est un dataframe créé par
#la bibliotèque geopandas
circ_path = os.path.join('data', 'circ.json')
circonscriptions = geopandas.read_file(circ_path)
circonscriptions.set_index('CO_CEP', inplace=True)
#Enfin fusionnons les deux dataframes pour avoir en même temps
#les limites territoriales et les résultats des élections du
#1er octobre 2018
r2 = circonscriptions.join(resultats_df)
#Créons une carte géographique centrée sur le Québec
m = folium.Map([46, -73.5], tiles='stamentoner', zoom_start=8)
# Et ajoutons une couche supplémentaire conduite par le
# dataframe r2
folium.GeoJson(r2,
style_function=lambda dd: {
'fillColor': dd['properties']['couleur'],
'color' : 'green',
'weight' : 1.5,
'fillOpacity' : 0.7,
},
tooltip = folium.features.GeoJsonTooltip(fields=['NM_CEP'], labels=False)
).add_to(m)
#Enfin sauvegardons la carte
quebec_html = os.path.join('docs', 'quebec.html')
m.save(quebec_html)