Récupérer les fonds de carte
Récupérez les limites communales généralisées sur le site de l’Office fédéral des statistiques en choisissant l’année correspondant à vos données. Pour cet exemple: 2016, respectivement du 30.01.2017 ou du 30.06.2015. Récupérez également les métainformations sur les géodonnées qui vous permettront de comprendre la signification des noms de fichiers et des variables (noms des colonnes des tables de données) que vous venez de télécharger.
Créez un nouveau projet qGIS comme dans un exercice précédent. Décompressez l’archive zip et ajoutez le fond de cartes correspondant aux “Communes, lacs, territoires spéciaux” à qGIS en vous référant aux métainformations. Indice: le fichier des métainformations fourni par l’OFS est strictement valable pour les données 2017 seulement, il se peut que certains …17… dans la documentation veulent en fait dire …16… dans votre cas; même un office fédéral peut fournir des métadonnées plus ou moins complètes et cohérentes…
Préparer les fonds de carte pour une cartographie en cercles proportionnels
Comme nous l’avons vu en cours, une carte choroplèthe (plages de couleurs) n’est pas adaptée à la cartographie des votations. Il est donc nécessaire d’attribuer vos données non pas à des polygones mais à des points. Comment faire cela dans le logiciel ArcMap est expliqué ici (en anglais). Comment faire cela avec D3.js est expliqué ici (en anglais). Dans cet exercice, nous allons travailler avec qGIS.
Vous pourriez créer les centroïdes des communes à l’aide du module realcentroids ou, si vous utilisez QGIS 3.0, avec la fonction intégrée Vector:Geometry:Point on Surface. Mais il est plus pertinent de placer les cercles proportionnels d’une donnée liée à la politique sur les centres des chefs-lieux politiques des communes; pour peu que leurs coordonnées soient disponibles. Dans les données que vous avez téléchargé au début de l’exercice, elles le sont.
Importer un fichier de coordonnées en format CSV
Les coordonnées des chefs-lieux se cachent dans le fichier txt/g1g16.csv, sous le nom de variables X_CNTR et Y_CNTR. Importez-le fichier CSV dans qGIS. N.B. la projection implicite qui donne sens à ces coordonnées est CH1903/LV03 (EPSG:21781); veillez à bien la spécifier pendant l’importation.
À ce stade vous devriez voir une carte similaire à celle-ci:
Associer (joindre) les données tabulaires au fond de carte
Il nous faut à présent, joindre les données aux points de votre carte. Le tableau suivant est une version user-friendly du tableau présenté sur le site du canton de Neuchâtel et récupérable sur l’interface Géoclip du canton. Il présente les résultats de l’initiative législative populaire cantonale ’’Pour deux hôpitaux sûrs, autonomes et complémentaires’’ ? 12.2.2017 et sa contre-initiative. Copiez ce tableau dans LibreOffice Calc ou Excel et sauvegardez-le sous le nom de fichier csv de votre choix, par exemple votations.csv.
Code | Communes2016 | init_particip | init_non | init_oui | conprj_particip | conprj_non | conprj_oui |
6402 | Bevaix | 50.5 | 891 | 546 | 50.5 | 473 | 939 |
6404 | Boudry | 39.2 | 1000 | 597 | 39.2 | 521 | 1035 |
6407 | Corcelles-Cormondrèche | 53.8 | 1321 | 574 | 53.8 | 503 | 1387 |
6408 | Cortaillod | 44.7 | 1010 | 572 | 44.7 | 521 | 1044 |
6409 | Fresens | 59.6 | 62 | 45 | 59.6 | 47 | 55 |
6410 | Gorgier | 53.3 | 445 | 343 | 53.3 | 292 | 486 |
6411 | Montalchez | 61.6 | 66 | 36 | 61.6 | 34 | 63 |
6412 | Peseux | 40.2 | 952 | 716 | 40.2 | 602 | 1031 |
6413 | Rochefort | 55.1 | 333 | 192 | 55.1 | 192 | 337 |
6414 | St-Aubin | 44.8 | 468 | 329 | 44.8 | 272 | 517 |
6415 | Vaumarcus | 47 | 53 | 35 | 47 | 33 | 54 |
6416 | Milvignes | 49.8 | 2217 | 1070 | 49.8 | 950 | 2296 |
6421 | La Chaux-de-Fonds | 48.8 | 2045 | 11842 | 48.8 | 10520 | 2765 |
6422 | Les Planchettes | 54.2 | 10 | 85 | 54.2 | 74 | 15 |
6423 | La Sagne | 58.3 | 84 | 423 | 58.3 | 378 | 107 |
6431 | Les Brenets | 58.2 | 78 | 442 | 58.2 | 395 | 94 |
6432 | La Brévine | 59 | 96 | 210 | 59 | 174 | 116 |
6433 | Brot-Plamboz | 59.5 | 39 | 79 | 59.5 | 74 | 43 |
6434 | Le Cerneux-Péquignot | 61.3 | 55 | 112 | 61.3 | 92 | 66 |
6435 | La Chaux-du-Milieu | 62.9 | 78 | 154 | 62.9 | 136 | 87 |
6436 | Le Locle | 48.8 | 586 | 3277 | 48.8 | 2844 | 788 |
6437 | Les Ponts-de-Martel | 59 | 186 | 426 | 59 | 355 | 225 |
6451 | Cornaux | 47.2 | 319 | 234 | 47.2 | 218 | 326 |
6452 | Cressier | 43.3 | 366 | 231 | 43.3 | 205 | 388 |
6453 | Enges | 55.6 | 74 | 42 | 55.6 | 42 | 75 |
6454 | Hauterive | 47.6 | 617 | 310 | 47.6 | 285 | 632 |
6455 | Le Landeron | 43.3 | 857 | 560 | 43.3 | 516 | 912 |
6456 | Lignières | 49.3 | 198 | 135 | 49.3 | 131 | 199 |
6458 | Neuchâtel | 42 | 6143 | 3741 | 42 | 3119 | 6643 |
6459 | St-Blaise | 51.4 | 856 | 394 | 51.4 | 325 | 906 |
6461 | La Tène | 45.3 | 993 | 636 | 45.3 | 532 | 1056 |
6485 | Valangin | 46.7 | 97 | 61 | 46.7 | 51 | 108 |
6487 | Val-de-Ruz | 48.2 | 3391 | 2511 | 48.2 | 2411 | 3380 |
6504 | La Côte-aux-Fées | 56.8 | 89 | 107 | 56.8 | 100 | 103 |
6511 | Les Verrières | 43.2 | 130 | 113 | 43.2 | 94 | 143 |
6512 | Val-de-Travers | 39.8 | 1873 | 1467 | 39.8 | 1289 | 1997 |
Glissez-déposez le fichier créé dans la liste des couches spatiales de qGIS. Dans les propriétés (accessibles depuis le menu contextuel) de la couche points des centres de chefs-lieux, choisissez Joins (Jointure) et joignez les données en vous basant sur l’équivalence des valeurs “Code” et “GMDNR” (Gemeindenummer), comme l’illustre l’image suivante:
Les données de votre fichier CSV sont désormais disponibles dans le tableau de données de votre couche de points:
Le calculateur de champ
Pour corriger les données importées avec le mauvais format
Il arrive fréquemment que qGIS ait de la peine à reconnaître une colonne de chiffres comme colonne de chiffres, notamment à cause de la différence de signification du point (.) et de la virgule (,) comme délimiteur de décimales en fonction du langage du logiciel. QGIS a tendance à tout comprendre comme des colonnes de caractères (str). Dans ce cas, on peut soit essayer de corriger le fichier CSV ou, plus simplement, convertir les str en chiffres, en créant une nouvelle variable à l’aide du calculateur de champ . Créez une variable de type nombre décimal nommée “init_particip” qui reprendra la valeur numérique de la variable de type caractères (str) votation_init_particip, comme ceci:
Faites la même chose pour le contreprojet (conprj_particip).
Pour calculer de nouvelles données
Le résultat d’un vote n’est pas déterminé par le nombre de “oui” mais par leur proportion. Dans le calculateur de champs, calculez une nouvelle variable de type nombre décimal, nommée init_pctoui, et donnant le % de “oui” pour l’initiative avec la formule suivante:
toreal(“votations_init_oui”) / (toreal(“votations_init_oui”) + toreal(“votations_init_non”) )
Notez l’usage de la fonction toreal(). Elle permet de s’assurer que les colonnes votations_init_oui et votations_init_non soient traitées comme des nombres décimaux, faute de quoi la division donnera des résultats étranges.
Calculez aussi une variable donnant le nombre total de votants, init_votants
toint(“votatios_init_non”) + toint(“votatios_init_oui”)
Notez l’usage de la fonction toint() similaire à toreal(). Elle permet de s’assurer que les colonnes votations_init_oui et votations_init_non soient bien traitées comme des nombres entiers. toreal() aurait aussi pu être utilisée ici. Sans une telle fonction de conversion, l’expression “1302” + “120” risque d’être traitée comme une concaténation de chaînes de caractères, ce qui donnerait “1302120” au lieu de 1422.
Cartographier le résultat
Il ne reste plus qu’à mapper les variables quantitatives obtenues sur des variables visuelles.
D’abord la couleur, en veillant à choisir un nombre de couleurs pair et en plaçant le seuil central sur 0.5 (50%) – nous cartographions les résultats d’un vote:
Et la taille des cercles. Celle-ci est essentielle pour interpréter un vote, car on veut savoir non seulement le résultat par zone géographique mais, dans une perspective démocratique, aussi le nombre de votants ayant pris une décision.
Sur la couche de fond, n’affichez enfin que les communes du canton de Neuchâtel (canton nr. 24):
Vous devriez obtenir l’image suivante
Ajouter des éléments d’interprétation
La carte obtenue permet d’observer une différence nette du résultat entre le haut et le bas du canton. Ajoutons maintenant d’autres éléments d’interprétation, par exemple la localisation des hôpitaux actuels. Voici une liste des hôpitaux, en coordonnées latitude, longitude. La même méthode d’importation s’applique que pour l’importation des chefs-lieux. Attention, cependant : les coordonnées ne font plus référence au système de projection suisse CH1903LV05 mais au WGS84; veillez à bien la spécifier pendant l’importation.
Nom | type | latlon | lat | lon |
La Chaux-de-Fonds | HNE | 47°06’49.5″N 6°49’54.6″E | 47.113611 | 6.831872 |
Neuchâtel | HNE | 46°59’47.3″N 6°56’34.2″E | 46.996459 | 6.942831 |
Val-de-Travers | HNE | 46°55’31.6″N 6°37’47.7″E | 46.925454 | 6.629920 |
Val-de-Ruz | HNE | 47°01’56.7″N 6°54’22.1″E | 47.032402 | 6.906130 |
Le Locle | HNE | 47°03’25.8″N 6°44’33.7″E | 47.057162 | 6.742701 |
La Chrysalide (cdf) | HNE | 47°05’56.7″N 6°49’12.4″E | 47.099084 | 6.820099 |
Policlinique pédiatrique des Montagnes (cdf) | HNE | 47°06’02.5″N 6°49’30.9″E | 47.100700 | 6.825245 |
GSMN La Providence | privé | 46°59’43.4″N 6°56’20.6″E | 46.995375 | 6.939042 |
GSMN Montbrillant | privé | 47°06’19.6″N 6°49’09.3″E | 47.105448 | 6.819247 |
La Tour (cdf) | privé | 47°05’58.8″N 6°49’35.4″E | 47.099655 | 6.826497 |
Tilia (ne) | privé | 46°59’31.3″N 6°54’44.9″E | 46.992034 | 6.912479 |
Après l’importation, ajoutez une légende aux hôpitaux, pour afficher leurs noms.
Faire apparaître les hôpitaux HNE en souligné, et les hôpitaux privés sans soulignement.
Vous obtenez la carte suivante, qu’il faudrait ajouter au Print Composer, exporter en SVG ou PDF et finaliser avec Inkscape ou Illustrator.
Défis supplémentaires
Quelles autres éléments graphiques et données faudrait-il ajouter à cette carte pour mieux la comprendre?
Essayez de les trouver et de les ajouter, par exemple en allant les chercher sur le site de l’OFS, du canton de Neuchâtel ou en les important des données OpenStreetMap.