Projet:Communes de France/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).
Le projet[modifier | modifier le code]
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 :
- . l'importation des données dans des pages de WP ;
- . 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 :
- <Nom officiel de la commune> ;
- <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 à 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 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 :
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.
- 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."
- les années doivent être transformées de la manière suivante :
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 :
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
|
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')
|
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 :
- lecture du fichier BTX_CC_POP_2008.xls :
- insertion d'une ligne dans la table
commune
:code_commune
,nom_commune
; - insertion d'une ligne dans la table
anpop
:code_commune
,an
(=2008),pop
,source
(='I') ;
- insertion d'une ligne dans la table
- lecture du fichier BTX_CC_POP_2007.xls :
- insertion d'une ligne dans la table
anpop
:code_commune
,an
(=2007),pop
,source
(='I') ;
- insertion d'une ligne dans la table
- lecture du fichier BTX_CC_POP_2006.xls :
- insertion de plusieurs lignes dans la table
anpop
:code_commune
,an
,pop
,source
(='I') ;
- insertion de plusieurs lignes dans la table
- lecture des pages 6d_index.php?alpha= :
- ajouts dans la table
comune
:num_cassini
;
- ajouts dans la table
- lecture des pages fiche.php?select_resultat= :
- insertion de plusieurs lignes dans la table
anpop
:code_commune
,an
,pop
,source
(='C').
- insertion de plusieurs lignes dans la table
À 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é :
- 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 :
- trouver le nom de la commune dans WP (par essais) ;
- tester l'existence de la page de données
Données/<nom WP commune>/évolution population
:- si la page existe :
- récupérer le texte de la page de données ;
- 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 :
- tester la présence d'un modèle
{{Données corrigées}}
:- si oui :
- 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 ;
- vérifier s'il manque des années :
- si non :
- construire la chaîne de données mises en forme ;
- 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 oui :
- tester la présence d'un modèle
- si la page n'existe pas :
- construire la chaîne de données mises en forme ;
- placer la chaîne dans la page de données ;
- si la page existe :
- 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
- on récupère les données ;
- 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.
- si le code officiel géographique est dans la base, on met éventuellement à jour le
- 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 :
- analyse du modèle pour trouver les données présentes sous forme de tableau associatif ;
- vérification du nom ;
- ajout des années manquantes ;
- 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 :
- {{Tableau population commune}}
- {{Graphique population commune}}
- {{Infobox Commune de France}} (ses paramètres population, année de population et densité se mettront à jour automatiquement)
- {{Section démographie d'article de commune de France}}
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]
- Modèle:Données/Antony/évolution population
- Modèle:Données/Aillant-sur-Milleron/évolution population
- Modèle:Données/Amilly/évolution population
- Modèle:Données/Andonville/évolution population
- Modèle:Données/Ardon/évolution population
- Modèle:Données/Artenay/évolution population
- Modèle:Données/Aschères-le-Marché/évolution population
- Modèle:Données/Ascoux/évolution population
- Modèle:Données/Attray/évolution population
- Modèle:Données/Audeville/évolution population
- Modèle:Données/Ouvrouer-les-Champs/évolution population
Liens internes[modifier | modifier le code]
Les contributeurs :
- Wikialine (d · c · b)
- Juju2004 (d · c · b)
- Roland45 (d · c · b)
- AntonyB (d · c · b)
- Erkethan (d · c · b)
- N'hésitez pas à vous inscrire
La page de discussion est ouverte.