Projet:Communes de France/Mise à jour automatique des données démographiques

Une page de Wikipédia, l'encyclopédie libre.
Débats : Mise à jour automatique des données démographiques

Pour les impatients, voir Projet:Communes de France/Mise à jour automatique des données démographiques/Antony.

Rappel : la page de discussion est ouverte à toutes les contributions (constructives, évidemment).

Ce projet a pour objectif de faciliter l'insertion de tableaux ou graphiques au sein des articles concernant les communes de France. Un modèle wiki, simple d'emploi, doit permettre d'insérer un tableau ou un graphique sans avoir à se soucier d'entrer des données.

Il s'agit donc d'éviter les saisies manuelles qui sont fastidieuses et sources d'erreur.

Le domaine concerné est le suivant :

  • les articles sur les 36 682 communes de France ;
  • les données démographiques de base.

(Ce domaine peut-être appelé à évoluer.)

Le projet s'articule en deux phases :

  1. . l'importation des données dans des pages de WP ;
  2. . l'utilisation de ces données dans les articles.

L'importation des données[modifier | modifier le code]

Interroger depuis Wikipédia des bases de données externes nécessiterait la programmation d'une extension spécifique qui devrait être mise en production par la fondation Wikimédia. Si ce choix n'est pas à exclure à l'avenir, il a été décidé d'importer les données dans Wikipédia.

Ces données sont issues de bases de données accessibles au public. Elles doivent être importées sous Wikipédia par un bot.

Aspect légal[modifier | modifier le code]

Ce paragraphe reproduit en partie les informations obtenues sur WP:Legifer. Voir Wikipédia:Legifer/octobre 2011#Utilisation_massive_et_automatisée_de_données_INSEE.

Voici l'analyse de la situation par Biem (d · c) :

« les données de l'INSEE et de Cassini accessibles en ligne proviennent de toute évidence d'une base de données, régies (en France) par les articles L341-1 à L343-7 du code de la propriété intellectuelle. Comme ces articles sont la transcription en droit national d'accords internationaux (GATT, Cycle d'Uruguay) la législation sera sensiblement la même quel que soit le pays civilisé.

  • La loi est que « Le producteur de bases de données a le droit d'interdire : 1° L'extraction, par transfert permanent ou temporaire de la totalité ou d'une partie qualitativement ou quantitativement substantielle du contenu d'une base de données sur un autre support, par tout moyen et sous toute forme que ce soit ; [...] » (Article L342-1 CPI). Donc, si l'INSEE ou Cassini décident d'interdire une telle reproduction, ils en ont le droit, et il faut le respecter.
  • Ce que la loi dit aussi, c'est que « Lorsqu'une base de données est mise à la disposition du public par le titulaire des droits, celui-ci ne peut interdire : 1° L'extraction ou la réutilisation d'une partie non substantielle, appréciée de façon qualitative ou quantitative, du contenu de la base, par la personne qui y a licitement accès [...]  » (Article L342-3 CPI). »

La suggestion de Biem est la suivante :

« 

  • Dans un premier temps, charger les données sur une petite fraction de la base INSEE - les communes commençant par la même lettre, pour avoir un échantillon sur toutes les tailles (ou n'importe quoi d'équivalent). C'est légal, même en cas d'interdiction manifestée de recopie, c'est la loi, donc pas de problème. Mettre en forme ces données avec le modèle qui va bien, et rappeler dans le tableau résultant (via le modèle) que ces données sont issues du site de l'INSEE, avec le lien correspondant.
  • A ce stade, envoyer un courriel à l'INSEE pour leur signaler la chose, et leur demander s'ils ont des observations ou des suggestions ; et s'ils ne voient pas de problème à ce que l'intégralité de leur base soit ainsi téléchargée, ainsi que d'éventuelles mises à jour régulières, et surtout s'ils sont d'accord d'envoyer un courriel de confirmation à OTRS.
  • Une fois que le courriel OTRS a été reçu, autorisant la recopie massive et les mises à jour ultérieure, il ne peut plus y avoir de problème juridique tant que l'autorisation n'est pas révoquée (ce qui reste toujours possible, mais est en pratique très improbable).
  • S'ils ne répondent pas, la recopie massive est théoriquement légale, mais juridiquement reste un peu risquée - je suggère dans ce cas de mettre dans le modèle que l'INSEE n'interdit pas la recopie de ses données, avec lien sur une copie d'archive de leur page de "mentions légales" ; s'ils protestent ce sera l'occasion de discuter et de mettre à plat la situation. »

Cette suggestion, qui vaut pour l'INSEE, peut également être valable pour l'EHESS (base Cassini).

Aspects métier[modifier | modifier le code]

Identifiant d'une commune[modifier | modifier le code]

Le code officiel géographique servira d'identifiant unique pour les communes. Il permet d'identifier une commune à la fois dans les bases de l'INSEE et dans la base Cassini :

  • dans les tableaux de l'INSEE, ce code officiel géographique figure tel quel ;
  • sur le site Cassini de l'EHESS, un code INSEE fourni est composé de quatre séquences de nombres (2 chiffres (sauf Corse 2A ou 2B) - 1 chiffre - 2 chiffres - 3 chiffres) ; la concaténation des première et quatrième séquences correspond au code officiel géographique.

Précisions : le code INSEE qui est affiché dans les infobox des communes est en fait leur code officiel géographique ; il est constitué de la manière suivante :

Code officiel géographique = 5 chiffres (ou 4 chiffres et une lettre pour la Corse)
  • en France métropolitaine :
les deux premiers (01 à 95) correspondent au département (sauf 2A ET 2B pour les départements corses)
les trois derniers identifient la commune à l'intérieur du département
exemples : 02054 pour Bazoches-sur-Vesles et 2A041 pour Bonifacio
  • dans les DOM :
les trois premiers (971 à 976) correspondent au département
les deux derniers identifient la commune à l'intérieur du département
exemple 97105 pour Basse-Terre
il n'y a pas de commune des départements d'Outre-mer recensée sur le site Cassini

Les recensements à utiliser[modifier | modifier le code]

Avant 2002[modifier | modifier le code]

Les recensement à utiliser sont :

  • de manière générale, ceux des années 1793, 1800, 1806, 1821, 1831, 1836, 1841, 1846, 1851, 1856, 1861, 1866, 1872, 1876, 1881, 1886, 1891, 1896, 1901, 1906, 1911, 1921, 1926, 1931, 1936, 1946, 1954, 1962, 1968, 1975, 1982, 1990, 1999.
  • pour l'Alsace-Moselle, ceux des années 1793, 1800, 1806, 1821, 1831, 1836, 1841, 1846, 1851, 1856, 1861, 1866, 1871, 1875, 1880, 1885, 1890, 1895, 1900, 1905, 1910, 1921, 1926, 1931, 1936, 1946, 1954, 1962, 1968, 1975, 1982, 1990, 1999.
  • pour la Savoie et le Comté de Nice, ceux des années 1793, 1800, 1806, 1822, 1838, 1848, 1858, 1861, 1866, 1872, 1876, 1881, 1886, 1891, 1896, 1901, 1906, 1911, 1921, 1926, 1931, 1936, 1946, 1954, 1962, 1968, 1975, 1982, 1990, 1999.
Après 2002[modifier | modifier le code]

Les modalités de recensement ont été modifiées par la loi du 27 février 2002, dite « loi de démocratie de proximité », afin de permettre, après une période transitoire courant de 2004 à 2008, la publication annuelle de la population légale des différentes circonscriptions administratives françaises. Il y a deux cas de figure :

  • pour les communes dont la population est supérieure à 10 000 habitants, une enquête par sondage est effectuée chaque année. La totalité du territoire de ces communes est prise en compte au terme d'une période de cinq ans.
  • pour les communes dont la population est inférieure à 10 000 habitants, un recensement réel est effectué tous les cinq ans. Ces recensements ont commencé en 2004 et sont effectués tous les ans par roulement sur un cinquième de ces communes.

La première population légale postérieure à celle de 1999 et s’inscrivant dans ce nouveau dispositif correspond au recensement de l’année 2006. Elle est entrée en vigueur au 1er janvier 2009.

Remarque : le point suivant doit encore être validé

Les recensements à utiliser sont :

  • pour les communes qui dépassent 10 000 habitants, les recensements de toutes les années avec populations légales publiées parmi 2006, 2011, 2016, etc. (pour l'instant, seulement 2006) ;
  • pour communes de moins de 10 000 habitants réellement recensées en n (n = 2004, 2005, 2006, 2007 ou 2008), tous les recensements réels avec populations officielles publiées parmi n, n+5, n+10, etc. (pour l'instant, seulement n) et 2006 (populations légales).
  • dans tous les cas, les dernières populations légales publiées (pour l'instant 2008).

Nom d'une commune dans Wikipédia[modifier | modifier le code]

Le nom d'une commune dans Wikipédia peut-être :

  1. <Nom officiel de la commune> ;
  2. <Nom officiel de la commune> (<nom du département>) ;

Les données à stocker[modifier | modifier le code]

Dans un premier temps, on se limitera aux données requises pour les tableaux et les graphiques sur l'évolution de la population :

  • nom : le nom de la commune (utile lorsqu'il y a parenthèses d'homonymie) ;
  • type : commune (utilisé comme charte et pour les titres) ;
  • ann : la nième année ;
  • popn : la population de la nième année ;
  • max : la population maximale (pour le graphique) ;
  • nombre : le nombre de couples année/population utilisés ;
  • sourcei (i variant de 1 à 3) : les sources des données ;

Aspects techniques : récupération des données[modifier | modifier le code]

Un bot récupère les données sur les sources externes et les stocke dans une base locale.

L'origine des données[modifier | modifier le code]

Les données sont issues des sources externes suivantes :

Données avec leurs sources externes
Données à récupérer Nom du fichier Type de fichier Contenu Organisme source Lien
Code officiel géographique, Nom officiel de la commune BTX_CC_POP_2008.xls Excel Évolution et structure de la population pour les recensements de 1962 à 2008 INSEE [1]
Correspondance Code du département - Nom du département depts2011.txt CSV Liste des départements INSEE [2]
Année/Population de 1793 à 1999 exclu (métropole) fiche.php?select_resultat=<numéro Cassini> HTML Évolution et structure de la population pour les recensements de 1793 à 2006 EHESS exemple
Année/Population de 1961 inclus à 2006 inclus (DOM) PG09cDOM.xls Excel Évolution et structure de la population pour les recensements de 1961 à 2006 INSEE [3]
Année/Population de 1999 inclus à 2006 inclus (métropole) BTX_CC_POP_2006.xls Excel Évolution et structure de la population pour les recensements de 1968 à 2006 INSEE [4]
Année/Population de 2007 (métropole et DOM) BTX_CC_POP_2007.xls Excel Évolution et structure de la population pour les recensements de 1968 à 2007 INSEE [5]
Année/Population de 2008 (métropole et DOM) BTX_CC_POP_2008.xls Excel Évolution et structure de la population pour les recensements de 1968 à 2008 INSEE [6] et [7]
Année de recensement réel (si pertinent) Donnée calculée à partir du calendrier de recensement, publics/default.asp?page=communication recensement particuliers repartition comd<code_département>.htm HTML Année du prochain recensement par commune d'un département INSEE exemple
max, nombre Données calculées - - - -
Nom Wikipédia de la commune Donnée calculée API WP - - -

Les données intermédiaires suivantes seront nécessaires :

Données intermédiaires
Données intérmédiaires Nom du fichier Type de fichier Contenu Organisme source Lien
Correspondance Code officiel géographique - numéro Cassini 6d_index.php?alpha=<lettre de l'alphabet> HTML Index des communes EHESS [8]

Particularité à prendre en compte : La table de la fiche Cassini contient une liste fixe d'années, mais ces années ne correspondent pas toujours aux recensements. Le texte d'explication de la fiche précise les substitutions à opérer :

« Pour l'Alsace-Lorraine, les recensements de la période 1870-1919 ont eu lieu aux années 0 et 5 sauf 1871, et 1915 qui n'a pas été réalisé.

Pour Nice et la Savoie, les recensements de la période 1814-1860 ont eu lieu en 1815, 1822, 1838, 1848 et 1858. »

Par conséquent :

  • pour les communes dont le code officiel géographique commence par 67, 68 ou 57 (départements du Bas-Rhin, du Haut-Rhin et de la Moselle), les années doivent être transformées de la manière suivante :
matrice de transformation 67, 68, 57
Année affichée ...1866 1872 1876 1881 1886 1891 1896 1901 1906 1911 1921...
Année réelle 1871 1875 1880 1885 1890 1895 1900 1905 1910
  • pour les communes de Savoie et du Comté de Nice, la situation est plus compliquée.
    1. identification de ces communes : le code officiel géographique commence par 06, 73 et 74 (départements des Alpes-Maritimes, de la Savoie et de la Haute-Savoie) et le recensement de 1831 porte la mention "abs."
    2. les années doivent être transformées de la manière suivante :
matrice de transformation Savoie et Comté de Nice
Année affichée ...1806 1821 1831 1836 1841 1846 1851 1856 1861...
Année réelle 1822 - 1838 - 1848 - 1858

Le stockage intermédiaire des données[modifier | modifier le code]

Les données sont stockées dans une base SQL locale, avec les tables suivantes :

table commune
Nom du champ Description du champ Type du champ
code_commune code géographique CHAR(5)
nom_commune nom officiel de la commune VARCHAR(100)
recensement_reel année de premier recensement réel YEAR
num_cassini numéro de la fiche Cassini UNSIGNED MEDIUMINT
maj_commune TimeStamp de la dernière mise à jour de la commune DATETIME
insertion_wp TimeStamp de la dernière insertion dans WP DATETIME
table anpop
Nom du champ Description du champ Type du champ
code_commune code géographique CHAR(5)
an année du recensement YEAR
pop population au recensement UNSIGNED BIGINT
source Source des données ('I' pour INSEE, 'C' pour Cassini) ENUM('I', 'C')
table departement
Nom du champ Description du champ Type du champ
code_departement code du département CHAR(3)
nom_departement nom officiel du département VARCHAR(100)

Les tables sont remplies de la manière suivante :

  1. lecture du fichier BTX_CC_POP_2008.xls :
    1. insertion d'une ligne dans la table commune : code_commune, nom_commune ;
    2. insertion d'une ligne dans la table anpop : code_commune, an (=2008), pop, source (='I') ;
  2. lecture du fichier BTX_CC_POP_2007.xls :
    1. insertion d'une ligne dans la table anpop : code_commune, an (=2007), pop, source (='I') ;
  3. lecture du fichier BTX_CC_POP_2006.xls :
    1. insertion de plusieurs lignes dans la table anpop : code_commune, an, pop, source (='I') ;
  4. lecture des pages 6d_index.php?alpha= :
    1. ajouts dans la table comune : num_cassini ;
  5. lecture des pages fiche.php?select_resultat= :
    1. insertion de plusieurs lignes dans la table anpop : code_commune, an, pop, source (='C').

À ce point, la base contient des données redondantes sur les recensements à partir de 1968 (Cassini et Insee) : c'est au moment de l'exploitation des données que le tri se fera.

Aspects techniques : insertion des données dans WP[modifier | modifier le code]

Un bot insère les données récupérées depuis les bases dans des sous-pages de l'espace "Modèle".

Les pages de données[modifier | modifier le code]

Le choix d'utiliser des sous-pages a été fait afin de ne pas polluer l'espace « Modèle ». Leur nommage répond à la convention suivante :

Modèle:Données/<Nom de la page concernée>/<nature des données>.

Par exemple, pour des données concernant l'évolution de la population d'Antony, le stockage se fera dans la page Modèle:Données/Antony/évolution population.

Ce système de nommage est suffisamment souple pour gérer plusieurs types de données pour un article et pour s'appliquer à d'autres domaines que les communes de France.

Le format de stockage[modifier | modifier le code]

Les données sont stockées dans un modèle selon la technique suivante : le modèle prend en argument le paramètre souhaité et renvoie la valeur de ce paramètre.

Techniquement, il s'agit d'un #switch sur l'argument qui est comparé à chaque paramètre de la manière suivante :

{{#switch:{{{1|}}}
|param1=valeur1
...
|#default=}}

La construction des pages de données[modifier | modifier le code]

Un bot est chargé de construire le contenu des pages de données et de les insérer dans Wikipédia.

Ces pages sont construites sous forme de chaînes de caractères à partir de la base SQL locale.

Remarque : Les requêtes SQL suivantes ne visent qu'à donner une idée de la manière dont les pages qui contiennent les données vont être construites.

  • L'ensemble des codes communes pour les commues qui commencent par une lettre :
SELECT code_commune
FROM commune
WHERE SUBSTRING(nom_commune, 1, 1)="<lettre>"
  • L'ensemble des données an/pop pour une commune à partir de son code commune :
SELECT ap.an, ap.pop
FROM commune AS c INNER JOIN anpop AS ap
  ON c.code_commune = ap.code_commune
WHERE
  c.code_commune = "<code commune>"
  AND ((ap.an<1968 AND ap.source='C') -- depuis cassini
  OR (ap.an>=1968 AND ap.source='I')) -- depuis insee
  • Le max et le nombre des an/pop pour une commune à partir de son code commune :
SELECT COUNT(*), MAX(ap.pop)
FROM commune AS c INNER JOIN anpop AS ap
  ON c.code_commune = ap.code_commune
WHERE
  c.code_commune = "<code commune>"
  AND ((ap.an<1968 AND ap.source='C') -- depuis cassini
  OR (ap.an>=1968 AND ap.source='I')) -- depuis insee

L'insertion des données[modifier | modifier le code]

Les données mises en forme sont introduites par le bot sur Wikipédia.

On dispose d'un TimeStamp du début de session.

Pour chaque code commune sélectionné :

  1. tester si insertion_wp est postérieur au TimeStamp de début de session
    • si oui : page à jour, passer au code commune suivant ;
    • si non :
      1. trouver le nom de la commune dans WP (par essais) ;
      2. tester l'existence de la page de données Données/<nom WP commune>/évolution population:
        • si la page existe :
          1. récupérer le texte de la page de données ;
          2. tester la présence d'un modèle {{Données mises à jour manuellement}}
            • si oui : page à ne pas mettre à jour, passer au code commune suivant ;
            • si non :
              1. tester la présence d'un modèle {{Données corrigées}} :
                • si oui :
                  1. vérifier s'il manque des années :
                    • si non : les données n'ont pas changé, passer au code commune suivant ;
                    • si oui : ajouter les années manquantes ;
                • si non :
                  1. construire la chaîne de données mises en forme ;
                  2. comparer la chaîne à insérer au texte de la page de données :
                    • si identiques, les données n'ont pas changé, passer au code commune suivant ;
                    • si différentes, remplacer le contenu de la page de données la chaîne ;
        • si la page n'existe pas :
          1. construire la chaîne de données mises en forme ;
          2. placer la chaîne dans la page de données ;
      3. mettre à jour insertion_wp.

La mise à jour des données[modifier | modifier le code]

Une fois les données importées, il convient de les mettre annuellement (et pas manuellement !) à jour.

Aspects techniques : collecte des nouvelles données[modifier | modifier le code]

La base locale constituée lors de la première importation des données est conservée. Elle doit maintenant être complétée par les nouvelles données.

Actualisation de la liste de communes[modifier | modifier le code]

Certaines communes fusionnent, d'autres sont divisées. Il faut donc réactualiser la table des communes.

On dispose d'un TimeStamp de début de session et on parcourt le nouveau fichier INSEE sur l'évolution démographique.

Pour chaque ligne du fichier INSEE

  1. on récupère les données ;
  2. on teste l'existence du code officiel géographique dans la base
    • si le code officiel géographique est dans la base, on met éventuellement à jour le nom_commune en cas de changement de nom.
    • Si le code officiel géographique n'est pas dans la base (en principe une scission) : une nouvelle commune est apparue dans la liste INSEE. On ajoute une ligne à la table. La gestion plus poussée de ce cas de figure doit être décidée.
  3. on met le TimeStamp maj_commune à la date courante.

On parcourt enfin les enregistrements de la base qui n'ont pas été mis à jour (maj_commune < TimeStamp de début de session). Les communes ont disparu de la liste INSEE, soit il y a longtemps, soit dernièrement. On garde la ligne dans la table, mais on arrête les mises à jour : maj_commune et mis au 31/12/9999.

Les dernières valeurs légales[modifier | modifier le code]

Les dernières valeurs légales sont variables. C'est le seul cas où une année va disparaître du modèle, mais le choix est fait de garder toutes les années dans la base.

On ajoute donc une ligne à la table an_pop pour toutes les communes devant être mises à jour, et on laissera le bot faire le tri parmi les années à insérer.

Aspects techniques : mise à jour des données[modifier | modifier le code]

On utilise les règles définies pour savoir quels recensements afficher. On interroge ensuite la base pour trouver toutes les valeurs à récupérer.

Le remplacement pur et simple de la page de données ne pose pas souci : on agit comme pour une insertion initiale.

Pour des données corrigées[modifier | modifier le code]

La mise à jour des données à partir d'un modèle dont les données sont corrigées se fait de la manière suivante :

  1. analyse du modèle pour trouver les données présentes sous forme de tableau associatif ;
  2. vérification du nom ;
  3. ajout des années manquantes ;
  4. mise à jour du max et de la dernière année.

Aspects techniques : traitement des erreurs[modifier | modifier le code]

La liste des communes est évolutive dans le temps. Le nombre de commune peut augmenter ou diminuer, le nom des communes peut changer, il existe des fusions et des scissions de communes... Pour toutes ces raisons, le bot peut connaitre quelques difficultés pour la mise à jour de certains articles. Ainsi, l'une des solutions envisageable peut être la création d'une page de rapport où le bot inscrit la liste des modèles de données où il y a eu une erreur. De plus, on peut dès à présent retenir l'adresse suivante http://projetbabel.org/gl/cog.pdf, ce document constitue une source importante pour constater certaines évolutions de certaines communes et pour pouvoir ainsi rectifier les erreurs rencontrées par le bot.

L'utilisation des données[modifier | modifier le code]

Le principe est de laisser le contributeur se concentrer sur la rédaction de l'article. Il doit suffire d'insérer un modèle pour qu'un tableau ou un graphique apparaisse automatiquement.

Les modèles à insérer sont :

Aspects techniques[modifier | modifier le code]

Le choix a été fait de découpler l'utilisation des données en deux étapes : la première consiste à utiliser un modèle existant ou à développer un modèle qui prend l'ensemble des données en argument ; la seconde consiste à créer un modèle enveloppe qui appelle le modèle précédent en lui transmettant les données issues des pages de données. C'est ce modèle enveloppe qui doit être utilisé dans l'article.

Par exemple, dans le cas du modèle {{Tableau population commune}}, il est fait appel au modèle préexistant {{Démographie}} (préalablement mis à jour et adapté aux besoins du projet). Le modèle {{Tableau population commune}} transmet au modèle {{Démographie}} les données de la sous-page Modèle:Données/<nom commune>/évolution population. Lorsque ce modèle est inséré dans la page d'une commune, la sous-page adéquate est appelée et le tableau construit dynamiquement.

Les modèles de bases de données servant de tests[modifier | modifier le code]

Liens internes[modifier | modifier le code]

Les contributeurs :

La page de discussion est ouverte.