Répartition des cadrans solaires de France

À la Société astronomique de France (SAF), la Commission des cadrans solaires tient un inventaire des cadrans solaires français (et de cadrans à l’étranger).

Cette carte s’appuie sur les données par département de l’inventaire tenu par Serge Grégori.

Ici ne figurent que les départements (métropole et outremer). Il existe aussi des cadrans solaires recensés à Saint-Martin et en Polynésie française.

Cette carte sera mise à jour en fonction de l’inventaire annuel de la SAF. Chaque année des cadrans solaires disparaissent (volent, destruction du bâtiment qui les porte…), des cadrans anciens sont découverts, restaurés ; enfin des cadranier.es amateurs.trices ou professionnel.le.s en créent de nouveaux.

J’ai produit cette carte choroplèthe avec un script Python et le module Geopandas de cartographie.

Le script Python et les fichiers annexes nécessaires (23,1 Mo):


Chaque cadran solaire référencé est représenté par un point à l’emplacement de sa commune. Les points sont translucides ; ainsi un point plus sombre désigne une commune possédant plusieurs cadrans solaires.

Chaque point désigne une commune où est référencé au moins un cadran solaire. La couleur du point varie du orange clair au marron, selon le nombre de cadrans solaires répertoriés dans la commune.

Étapes de la conception de cette carte

À partir de l’inventaire de la SAF (commission des cadrans solaires), j’ai établi un tableau comprenant une ligne pour chaque cadran, avec le nom de sa commune.

Avec l’outil fourni par data.gouv.fr, j’obtiens un fichier csv comportant les coordonnées géographiques de la commune, pour chaque cadran. Sans cet outil, un tel projet aurait été plus difficile ; cependant certaines coordonnées sont erronées.

La carte a été générée par un script Python, et notamment le module cartographique Geopandas. Il a fallu sélectionner les lieux de France métropolitaine, et créer une variable séparée pour les cadrans de région parisienne.

À ce stade on obtient un nuage de points assez satisfaisant, et en apparence proche du résultat final. Mais le diable se cache dans les détails… Les fluctuations de densité des points rend bien compte des variations locales, à une échelle inférieure à celle du département, mais une commune comportant plusieurs dizaines de cadrans est représentée comme celle qui n’en a qu’un. La solution d’appliquer une transparence aux points ne convient pas. Il faut donc un colormap pour traduire en intensité de couleur le nombre de cadrans de la commune.

Ceci nécessite de modifier le tableau initial (appelé ‘comm‘), qui comportait une ligne par cadran (et donc parfois plusieurs lignes pour une même commune), afin d’obtenir un tableau comportant une ligne par commune, avec le nombre de cadrans par commune. On obtient ceci avec :

counts = comm[['commune', 'dep']].value_counts(sort=False)

qui compte le nombre de lignes ayant à la fois la même commune et le même département. La variable counts contient :

commune              dep             
 Acy-En-Multien      Oise                1
 Saint-Aubin         Côte-D'Or           2
 Savigny-Lès-Beaune  Côte-D'Or           2
Abbaretz             Loire-Atlantique    1
Abbecourt            Oise                4
                                        ..
Ézanville            Val-D'Oise          1
Île-De-Batz          Finistère           5
Île-De-Sein          Finistère           1
Île-Molène           Finistère           2
Île-Tudy             Finistère           5
Name: count, Length: 10938, dtype: int64

La ligne

comm = comm.sort_values(by=['commune', 'dep'])

classe les lignes par ordre alphabétique de commune et de département. On peut maintenant supprimer les lignes redondantes correspondant à la même commune, avec :

comm = comm.drop_duplicates()

Le tableau comm ne comporte plus que 10920 lignes au lieu de plus de 31000.

On ajoute ensuite à comm une nouvelle colonne donnant le nombre de cadrans par commune :

comm['nombre'] = counts.values

Cette attribution affecte bien une commune à son nombre de cadrans, parce que le tableau ‘comm’ est classé alphabétiquement de la même manière que la variable counts.

Le colormap Wistia présente une gamme du orange clair au marron, en passant par un orange foncé. On affecte les couleurs initiale et final aux valeurs limites du nombre de cadran par commune en normalisant le colormap :

norm = mpl.colors.Normalize(vmin=min(counts),vmax=max(counts))

Pour l’affichage des points, il y a une dernière contrainte importante, due au fait que les points se recouvrent les uns les autres. Si un point clair recouvre un point sombre, on perd l’information importante d’une commune comportant de nombreux cadrans solaires. Je décide que les points les plus sombres recouvrent systématiquement les points les plus clairs ; il suffit de reclasser le tableau comm, non plus par nom de commune mais pas nombre de cadrans croissant :

comm = comm.sort_values(by='nombre')

Histogramme des 5 premières communes

J’ai voulu placer les communes arrivant en tête, ce qui permet d’identifier les points les plus sombres de la carte. Initialement, les cadrans parisiens sont placé selon les arrondissements, et dans le département Paris. Il faut donc faire quelques opérations pour rassembler les cadrans parisiens (après affichage des points).

tot_paris = comm.loc[comm.dep == 'Paris'].nombre.sum()

contient le total des cadrans parisiens. Ensuite, je fais un nouveau tableau uniquement avec la ville de Paris, puis je le fusionne avec le tableau comm :

paris = pd.DataFrame({'commune': ['Paris'],
                      'nombre': [tot_paris]})
comm = pd.concat([comm, paris])  # fusion entre les deux tableaux

Enfin je sélectionne les lignes de comm des 5 communes les plus dotées :

podium = comm.sort_values('nombre', ascending=False)[:5]

Ce tableau contient :

                       dep    commune   latitude  longitude  nombre
0                      NaN      Paris        NaN        NaN     266
1617          Hautes-Alpes   Briançon  44.895517   6.634829     122
21879  Pyrénées-Orientales  Perpignan  42.695769   2.888513     112
3281       Alpes-Maritimes       Nice  43.674468   7.196837      91
9541               Corrèze      Ussel  45.554238   2.314010      83

3 Comments

  1. David ALBERTO said:

    Merci beaucoup pour votre commentaire.
    Contrairement à mes habitudes, je n’ai pas partagé ce script, parce que les données ne sont pas libres de droit, malheureusement.
    Cordialement.

    3 octobre 2024
  2. Anonyme said:

    Bonjour,
    La nouvelle répartition des cadrans solaires sous forme de points est magnifique (publication du 29 septembre 2024). Merci beaucoup pour les explications concernant les étapes de la conception de la carte. Mais je n’arrive pas à trouver le script associé. Est-il disponible ? Encore bravo pour vos réalisations de très grande qualité.
    Bien cordialement

    3 octobre 2024
  3. Anonyme said:

    Bonjour,
    Serait-il possible d’obtenir le script ?
    Encore merci pour ce travail remarquable.
    Bien cordialement

    22 août 2024

Laisser un commentaire