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.

Import Centroids CSV qGIS

À 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.

CodeCommunes2016init_participinit_noninit_ouiconprj_participconprj_nonconprj_oui
6402Bevaix50.589154650.5473939
6404Boudry39.2100059739.25211035
6407Corcelles-Cormondrèche53.8132157453.85031387
6408Cortaillod44.7101057244.75211044
6409Fresens59.6624559.64755
6410Gorgier53.344534353.3292486
6411Montalchez61.6663661.63463
6412Peseux40.295271640.26021031
6413Rochefort55.133319255.1192337
6414St-Aubin44.846832944.8272517
6415Vaumarcus475335473354
6416Milvignes49.82217107049.89502296
6421La Chaux-de-Fonds48.820451184248.8105202765
6422Les Planchettes54.2108554.27415
6423La Sagne58.38442358.3378107
6431Les Brenets58.27844258.239594
6432La Brévine599621059174116
6433Brot-Plamboz59.5397959.57443
6434Le Cerneux-Péquignot61.35511261.39266
6435La Chaux-du-Milieu62.97815462.913687
6436Le Locle48.8586327748.82844788
6437Les Ponts-de-Martel5918642659355225
6451Cornaux47.231923447.2218326
6452Cressier43.336623143.3205388
6453Enges55.6744255.64275
6454Hauterive47.661731047.6285632
6455Le Landeron43.385756043.3516912
6456Lignières49.319813549.3131199
6458Neuchâtel42614337414231196643
6459St-Blaise51.485639451.4325906
6461La Tène45.399363645.35321056
6485Valangin46.7976146.751108
6487Val-de-Ruz48.23391251148.224113380
6504La Côte-aux-Fées56.88910756.8100103
6511Les Verrières43.213011343.294143
6512Val-de-Travers39.81873146739.812891997

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

Bertin 1967 Variables Visuelles
Bertin 1967 : Variables visuelles

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.

Nomtypelatlonlatlon
La Chaux-de-FondsHNE47°06’49.5″N 6°49’54.6″E47.1136116.831872
NeuchâtelHNE46°59’47.3″N 6°56’34.2″E46.9964596.942831
Val-de-TraversHNE46°55’31.6″N 6°37’47.7″E46.9254546.629920
Val-de-RuzHNE47°01’56.7″N 6°54’22.1″E47.0324026.906130
Le LocleHNE47°03’25.8″N 6°44’33.7″E47.0571626.742701
La Chrysalide (cdf)HNE47°05’56.7″N 6°49’12.4″E47.0990846.820099
Policlinique pédiatrique des Montagnes (cdf)HNE47°06’02.5″N 6°49’30.9″E47.1007006.825245
GSMN La Providenceprivé46°59’43.4″N 6°56’20.6″E46.9953756.939042
GSMN Montbrillantprivé47°06’19.6″N 6°49’09.3″E47.1054486.819247
La Tour (cdf)privé47°05’58.8″N 6°49’35.4″E47.0996556.826497
Tilia (ne)privé46°59’31.3″N 6°54’44.9″E46.9920346.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.