FAIR and interactive data graphics from a scientific knowledge graph
Sommaire
Utilisation
Fonctions liées au chargement et à l'exploitation des données de population d'une commune/département/région/…
Voir Discussion module:Population de France/Données pour une description du format des données.
Les fonctions sont :
p.charge_donnees(nom)
: charge et retourne les données associées à l'entiténom
(cherche le module de données « Module:Données/nom/évolution population ». Retourne une table contenant les informations stockées, ainsi que certaines autres calculées à partir de celles présentes. Retourne true en deuxième valeur si le chargement s'est bien passé. Sinon à la place retourne un numéro d'erreur (voir le sous-module /Constantes pour les erreurs existantes).p.variation(data)
: retourne la variation de population (par rapport aux données les plus récentes), en pourcentage avec deux chiffres après la virgule, pour l'entité dont les données sont dansdata
.p.variation_texte(data)
: retourne un texte décrivant la variation de population : « en augmentation/diminution de X % par rapport à AAAA », pour l'entité dont les données sont dansdata
.p.valeur_recente(data)
: retourne une table contenant l'année et la valeur de la population pour l'entrée la plus récente, pour l'entité dont les données sont dansdata
.
La documentation de ce module est générée par le modèle {{Documentation module}}.
Elle est incluse depuis sa sous-page de documentation. Veuillez placer les catégories sur cette page-là.
Les éditeurs peuvent travailler dans le bac à sable ().
Voir les statistiques d'appel depuis le wikicode sur l'outil wstat et les appels depuis d'autres modules.
--[[
Sous-module de Module:Tableau population d'article de commune de France contenant
les fonctions de génération des notes associées à des données de population
--]]
local p = {}
p.outils = require("Module:Population de France/Outils")
p.constantes = require("Module:Population de France/Constantes")
--[[
fonction de chargement des données, via module de données
retourne la structure de données (ou nil si échec de chargement)
et en seconde valeur true si les données sont complètes, un numéro d'erreur sinon
--]]
function p.charge_donnees(nom)
-- vérification
if ((nom == nil) or (nom == "")) then
return nil, 1
end
local donnees = "Module:Données/" .. nom .. "/évolution population"
-- données présentes ?
local etat, data = pcall(require, donnees)
if (etat == false) then
return nil, 2
end
data.module = donnees
-- on vérifie la présence des données nécessaires
-- données communes
if ((data["nom"] == nil) or (data["division"] == nil)) then
return data, 3
end
-- division prise en charge ?
if (p.constantes.divisions[data["division"]] == nil) then
return data, 4
end
-- superficie présente ?
if ((data["superficie"] == nil) or (tonumber(data["superficie"]) == nil)) then
return data, 4
end
data["superficie"] = tonumber(data["superficie"])
-- données spécifiques (selon la division)
-- spécifiques aux communes
if ((data["division"] == "commune") or (data["division"] == "commune en DROM") or
(data["division"] == "commune en COM1") or (data["division"] == "commune nouvelle") or
(data["division"] == "commune en COM2") or (data["division"] == "commune en COM3") or
(data["division"] == "commune déléguée") or (data["division"] == "ancienne commune") or
(data["division"] == "commune associée")) then
if ((data["nom-dep"] == nil) and (data["division"] ~= "commune en DROM")) then
return data, 5 -- obligatoire, sauf pour DROM
end
if (data["insee"] == nil) then
return data, 5
end
if (data["recens-prem"] == nil) then
return data, 5
end
if (data["recens-prem"] ~= "annuel") then
if (tonumber(data["recens-prem"]) == nil) then
return data, 5 -- vaut annuel ou une année
end
data["recens-prem"] = tonumber(data["recens-prem"]) -- en cas de "
end
else
-- pour les autres il faut un recens-prem = annuel
data["recens-prem"] = "annuel"
end
-- À FAIRE pour les autres
-- on "calcule" les données qui peuvent être reconstruites
if (data["nom-wp"] == nil) then
-- reconstruction du wikilien
local nom = data.nom:gsub( ' %(.+', '' )
if (nom == data.nom) then
data["nom-wp"] = '[[' .. nom .. ']]'
else
data["nom-wp"] = '[[' .. data.nom .. '|' .. nom .. ']]'
end
end
-- le type (permet de regrouper toutes les communes)
data["type"] = p.constantes.divisions[data["division"]]
-- données calculées
local nb = 0 -- nombre d'années dans les données
local mmin = -1 -- min/max des années avec référence
local mmax = -1
local pmin = -1 -- population min/max
local pmax = -1
local premier = -1 -- première et dernière année
local dernier = -1
-- on reconstruit les valeurs min/max/nb
for annee, pop in pairs(data) do
if (type(annee) == "number") then
nb = nb + 1
if (pop["ref"] ~= nil) then
if (annee > mmax) then
mmax = annee
end
if ((mmin == -1) or (annee < mmin)) then
mmin = annee
end
end
vpop = tonumber(pop["pop"])
if (vpop > pmax) then
pmax = vpop
end
if (vpop > 0) then -- on ne compte pas "-1" qui indique "pas de valeur"
if ((pmin == -1) or (vpop < pmin)) then
pmin = vpop
end
end
-- idem premier/dernier
if (annee > dernier) then
dernier = annee
end
if ((premier == -1) or (annee < premier)) then
premier = annee
end
end
end
if (mmin ~= -1) then
data["minref"] = mmin
end
if (mmax ~= -1) then
data["maxref"] = mmax
end
if (pmin ~= -1) then
data["popmin"] = pmin
end
if (pmax ~= -1) then
data["popmax"] = pmax
end
if (premier ~= -1) then
data["premier"] = premier
end
if (dernier ~= -1) then
data["dernier"] = dernier
end
data["nombre"] = nb-1
-- on retourne les données
return data, true
end
--[[
Calcule la variation de population (en %, signé, arrondi à 2 digits)
sur les 5 dernières années, ou nil si pas trouvé / problème
--]]
function p.variation(data)
-- vérifications
if (data == nil) then
return nil
end
if ((data["dernier"] == nil) or (data[data["dernier"]] == nil)) then
return nil
end
-- s'il n'y a pas 5 ans, on prend le plus ancien
local cible = data["dernier"]-6 -- On prend 6 ans de 2022 à 2027 en raison de l'absence de collecte en 2021, cf https://www.insee.fr/fr/statistiques/fichier/6005800/fichereport_EAR_20211115.pdf
if (data["nom-dep"] == "Mayotte" or data["nom-dep"] == "Nouvelle-Calédonie" or data["nom-dep"] == "Wallis-et-Futuna" or data["nom-dep"] == "Polynésie française") then -- Ces collectivités ne sont pas concernées par l'absence de collecte en 2021 (autre méthode de recensement)
cible = data["dernier"]-5
end
if (data[cible] == nil) then
return nil
-- désactivé
-- cible = data["premier"]
end
if (data[cible]["pop"] == 0) then -- gestion particulière pour éviter division par zéro
if (data[data["dernier"]]["pop"] == 0) then
return 0, cible -- la commune était, et est restée à 0 : pas d'évolution
else
return 999, cible -- la commune est passée de 0 à N habitants : évolution au taux "infini"
end
else
return p.outils.round((data[data["dernier"]]["pop"] * 100 / data[cible]["pop"]) - 100, 2), cible
end
end
--[[
Utilise la fonction précédente pour créer la phrase "en évolution de +/−X % par rapport à NNN"
retourne en seconde valeur +1 si augmentation, -1 si réduction, 0 si stagnation
--]]
function p.variation_texte(data)
local delta, cible = p.variation(data)
if (delta ~= nil) then
--[[
if (delta ~= delta) then -- check for NaN (p.variation has been fixed and should no longer return such value)
return nil
end
--]]
if (delta < 0) then
return "en évolution de " .. mw.language.getContentLanguage():formatNum(delta) .. " % par rapport à " .. cible, -1
elseif (delta > 0) then
return "en évolution de +" .. mw.language.getContentLanguage():formatNum(delta) .. " % par rapport à " .. cible, 1
else -- égal
return "en stagnation par rapport à " .. cible, 0
end
else
return nil
end
end
--[[
Retourne une table contenant { année, population } correspondant
aux données les plus récentes pour cette commune
--]]
function p.valeur_recente(data)
if ((data["dernier"] == nil) or (data[data["dernier"]]["pop"] == nil)) then
return nil
end
return { data["dernier"], data[data["dernier"]]["pop"] }
end
return p