Commit dccad0cc authored by Benjam's avatar Benjam
Browse files

correction chargement donnees agreste pour prendre les resultats departement,...

correction chargement donnees agreste pour prendre les resultats departement, regions et france directement dans la source
parent 0e900ed7
......@@ -11,7 +11,7 @@ from crater.population_agricole.synthese_population_agricole import ajouter_synt
import crater.territoires.outils as outils_territoires
from crater.crater_logger import log
from crater.outils import reinitialiser_dossier, DictDataFrames
from crater.territoires.outils import traduire_code_insee_vers_id_commune_crater, IDS_CATEGORIES_TERRITOIRES_SUPRACOMMUNAUX
from crater.territoires.outils import IDS_CATEGORIES_TERRITOIRES_SUPRACOMMUNAUX, trier_territoires
def calculer_population_agricole(
......@@ -64,22 +64,19 @@ def _charger_sources(
chargeur_actifs_agricoles_permanents.charger(
chemin_fichier_actifs_agricoles_permanents,
"FDS_G_2005_2010.txt"
)[['id_commune', 'valeur']].rename(
)[['id_territoire', 'valeur']].rename(
columns={'valeur': 'actifs_agricoles_permanents_2010'}, errors='raise'
),
chargeur_actifs_agricoles_permanents.charger(
chemin_fichier_actifs_agricoles_permanents,
"FDS_G_2005_1988.txt"
)[['id_commune', 'valeur']].rename(
)[['id_territoire', 'valeur']].rename(
columns={'valeur': 'actifs_agricoles_permanents_1988'}, errors='raise'
),
how="outer",
on="id_commune"
on="id_territoire"
)
actifs_agricoles_permanents.id_commune = traduire_code_insee_vers_id_commune_crater(
actifs_agricoles_permanents.id_commune)
return {
'actifs_agricoles_permanents': actifs_agricoles_permanents
}
......@@ -93,9 +90,7 @@ def _calculer_donnees_population_agricole(
'annee_dernier_mouvement_commune', 'population_totale_2010', 'population_totale_1990']
donnees_population_agricole = territoires[colonnes]
donnees_actifs_agricoles_permanents = sources_population_agricole['actifs_agricoles_permanents'].rename(
columns={'id_commune': 'id_territoire'}).set_index(
'id_territoire')
donnees_actifs_agricoles_permanents = sources_population_agricole['actifs_agricoles_permanents'].set_index('id_territoire')
donnees_population_agricole = donnees_population_agricole.join(donnees_actifs_agricoles_permanents)
......@@ -115,15 +110,17 @@ def _calculer_donnees_population_agricole(
donnees_population_agricole.annee_dernier_mouvement_commune > 2011, 'actifs_agricoles_permanents_1988'] = np.nan
donnees_population_agricole = outils_territoires.ajouter_donnees_supracommunales_par_somme_donnees_communales(
donnees_population_agricole = outils_territoires.ajouter_donnees_epcis_et_regroupements_communes_par_somme_donnees_communales(
donnees_population_agricole,
'actifs_agricoles_permanents_2010',
type='Int64'
)
donnees_population_agricole = outils_territoires.ajouter_donnees_supracommunales_par_somme_donnees_communales(
donnees_population_agricole = outils_territoires.ajouter_donnees_epcis_et_regroupements_communes_par_somme_donnees_communales(
donnees_population_agricole,
'actifs_agricoles_permanents_1988',
type='Int64'
)
donnees_population_agricole = trier_territoires(donnees_population_agricole)
return donnees_population_agricole
import zipfile
import pandas as pd
import numpy as np
from crater.crater_logger import log
from crater.territoires.outils import traduire_code_insee_vers_id_commune_crater, traduire_code_insee_vers_id_departement_crater, \
traduire_code_insee_vers_id_region_crater, traduire_code_insee_vers_id_pays_crater
def charger(chemin_fichier, fichier):
log.info(" => Chargement actifs agricoles permanents depuis %s", chemin_fichier / fichier)
archive = zipfile.ZipFile(chemin_fichier, 'r')
log.info(" => Chargement actifs agricoles permanents depuis %s contenu dans %s", fichier, chemin_fichier)
return pd.read_csv(
archive.open(fichier),
df = pd.read_csv(
zipfile.ZipFile(chemin_fichier, 'r').open(fichier),
sep=';',
dtype={
'NOM': 'str',
......@@ -35,6 +34,10 @@ def charger(chemin_fichier, fichier):
}
).rename(
columns={
'FRANCE': 'id_pays',
'FRDOM': 'id_frdom',
'REGION': 'id_region',
'DEP': 'id_departement',
'COM': 'id_commune',
'G_2005_LIB_DIM1': 'taille_exploitation',
'G_2005_LIB_DIM2': 'lien_avec_exploitation',
......@@ -43,12 +46,15 @@ def charger(chemin_fichier, fichier):
'QUALITE': 'qualite'
},
errors='raise'
).query("id_commune != '............'" +
" & taille_exploitation == 'Ensemble des exploitations (hors pacages collectifs)'" +
).query("taille_exploitation == 'Ensemble des exploitations (hors pacages collectifs)'" +
" & lien_avec_exploitation == 'Ensemble'" +
" & indicateur == 'Nombre de personnes'"
).reindex(
columns=['id_commune',
columns=['id_pays',
'id_frdom',
'id_region',
'id_departement',
'id_commune',
'taille_exploitation',
'lien_avec_exploitation',
'indicateur',
......@@ -57,6 +63,26 @@ def charger(chemin_fichier, fichier):
]
).astype(
{"valeur": "Int64"}
).loc[
lambda df: ~df['id_commune'].astype(str).str[0:2].isin(["97", "98"])
]
\ No newline at end of file
)
df.insert(0, "id_territoire", np.nan)
df_communes = df.query("id_commune != '............'")
df_departements = df.query("id_commune == '............' & id_departement != '............'")
df_regions = df.query("id_departement == '............' & id_region != '............'")
df_pays = df.query("id_frdom == 'METRO' & id_region == '............'")
df_communes.id_territoire = traduire_code_insee_vers_id_commune_crater(df_communes.id_commune)
df_departements.id_territoire = traduire_code_insee_vers_id_departement_crater(df_departements.id_departement)
df_regions.id_region = df_regions.id_region.str.replace('NR', '')
df_regions.id_territoire = traduire_code_insee_vers_id_region_crater(df_regions.id_region)
df_pays.id_territoire = traduire_code_insee_vers_id_pays_crater(df_pays.id_pays)
colonnes_a_supprimer = ['id_pays', 'id_frdom', 'id_region', 'id_departement', 'id_commune']
df_communes.drop(columns=colonnes_a_supprimer, inplace = True)
df_departements.drop(columns=colonnes_a_supprimer, inplace = True)
df_regions.drop(columns=colonnes_a_supprimer, inplace = True)
df_pays.drop(columns=colonnes_a_supprimer, inplace = True)
return pd.concat([df_communes, df_departements, df_regions, df_pays])
\ No newline at end of file
from pandas import DataFrame
import pandas as pd
import numpy as np
import crater.outils as outils
import crater.territoires.outils as outils_territoires
from crater.crater_logger import log
......@@ -20,8 +23,9 @@ def ajouter_evolution_part_population_agricole(donnees_population_agricole: Data
)
)
if donnees_population_agricole.query(f"id_territoire=='{outils_territoires.ID_FRANCE}'")[
'evolution_part_population_agricole_valeur_pt_de_pourcentage'][0] >= 0:
valeur_France = donnees_population_agricole.query(f"id_territoire=='{outils_territoires.ID_FRANCE}'")[
'evolution_part_population_agricole_valeur_pt_de_pourcentage'][0]
if valeur_France >= 0 or np.isnan(valeur_France):
raise ValueError('Attention, la valeur moyenne française pose problème vu la définition de calcul de la note !')
donnees_population_agricole.loc[:, 'evolution_part_population_agricole_note'] = (
......@@ -48,13 +52,12 @@ def _evolution_part_population_agricole_valeur_pt_de_pourcentage(
population_agricole_finale,
population_agricole_initiale
):
try:
if not pd.isnull(population_agricole_finale) and not pd.isnull(population_finale) and not pd.isnull(population_agricole_initiale) and not pd.isnull(population_initiale) and population_agricole_finale >= 0 and population_finale > 0 and population_agricole_initiale >= 0 and population_initiale > 0:
x = round(
(population_agricole_finale / population_finale -
population_agricole_initiale / population_initiale
) * 100,
2)
except:
x = ""
population_agricole_initiale / population_initiale) * 100,
2)
else:
x = np.nan
return x
from pandas import DataFrame
import pandas as pd
import numpy as np
import crater.outils as outils
import crater.territoires.outils as outils_territoires
......@@ -39,8 +41,8 @@ def _part_population_agricole_1988_valeur_pourcent(
actifs_agricoles_permanents_1988,
population_totale_1990
):
try:
if not pd.isnull(actifs_agricoles_permanents_1988) and not pd.isnull(population_totale_1990) and actifs_agricoles_permanents_1988 >= 0 and population_totale_1990 > 0:
x = round(actifs_agricoles_permanents_1988 / population_totale_1990 * 100, 2)
except:
x = ""
else:
x = np.nan
return x
from pandas import DataFrame
import pandas as pd
import numpy as np
import crater.outils as outils
import crater.territoires.outils as outils_territoires
......@@ -36,8 +38,8 @@ def ajouter_part_population_agricole_2010(donnees_politique_fonciere: DataFrame)
def _part_population_agricole_2010_valeur_pourcent(actifs_agricoles_permanents_2010, population_totale_2010):
try:
x = round(actifs_agricoles_permanents_2010 / population_totale_2010 * 100, 2)
except:
x = ""
if not pd.isnull(actifs_agricoles_permanents_2010) and not pd.isnull(population_totale_2010) and actifs_agricoles_permanents_2010 >= 0 and population_totale_2010 > 0:
x = round(actifs_agricoles_permanents_2010 / population_totale_2010 * 100, 2)
else:
x = np.nan
return x
import numpy as np
import pandas as pd
from pandas import DataFrame
import crater.territoires.outils as outils_territoires
......@@ -19,7 +20,7 @@ def ajouter_synthese_population_agricole(donnees_politique_fonciere: DataFrame)
),
axis=1
)
)
).astype('Int64')
donnees_politique_fonciere.loc[:, 'synthese_message'] = (
donnees_politique_fonciere.apply(
lambda x:
......@@ -40,9 +41,9 @@ def _note(
part_population_agricole_2010_note,
evolution_part_population_agricole_note
):
try:
if not pd.isnull(part_population_agricole_2010_note) and not pd.isnull(evolution_part_population_agricole_note) :
x = round(min(10, max(0, round(part_population_agricole_2010_note + (evolution_part_population_agricole_note / 2 - 2.5), 0))))
except:
else:
x = np.nan
return x
......
......@@ -33,6 +33,10 @@ def traduire_code_insee_vers_id_region_crater(df_colonne):
return 'R-' + df_colonne
def traduire_code_insee_vers_id_pays_crater(df_colonne):
return 'P-' + df_colonne
def obtenir_arrondissements_depuis_territoires(territoires: DataFrame) -> DataFrame:
arrondissements = territoires.query("categorie_territoire == 'COMMUNE'"
).reset_index(
......@@ -104,6 +108,15 @@ def ajouter_donnees_regroupements_de_communes_par_somme_donnees_communales(
return _ajouter_donnees_supracommunales_par_agregation_donnees_communales(territoires, colonne, fun, ['REGROUPEMENT_COMMUNES'], type)
def ajouter_donnees_epcis_et_regroupements_communes_par_somme_donnees_communales(
territoires: DataFrame,
colonne: str,
type: str = None,
) -> DataFrame:
fun = lambda x: pd.Series(np.sum(x[colonne]), index=[colonne])
return _ajouter_donnees_supracommunales_par_agregation_donnees_communales(territoires, colonne, fun, ['EPCI', 'REGROUPEMENT_COMMUNES'], type)
def _ajouter_donnees_supracommunales_par_agregation_donnees_communales(
territoires: DataFrame,
colonne: str,
......@@ -145,3 +158,11 @@ def differences_territoires(
log.info("Communes absentes du réferentiel: " + '|'.join(sorted(list(set(territoires2) - set(territoires1)))))
log.info("Communes manquantes par rapport au réferentiel: " + '|'.join(sorted(list(set(territoires1) - set(territoires2)))))
def trier_territoires(territoires):
territoires['categorie_territoire_pour_tri'] = pd.Categorical(
territoires['categorie_territoire'],
categories=CATEGORIES_TERRITOIRES[::-1],
ordered=True)
return territoires.sort_values(by=['categorie_territoire_pour_tri', 'id_territoire']).drop(columns='categorie_territoire_pour_tri')
\ No newline at end of file
id_territoire;nom_territoire;categorie_territoire;population_totale_2010;population_totale_1990;actifs_agricoles_permanents_2010;actifs_agricoles_permanents_1988;part_population_agricole_2010_valeur_pourcent;part_population_agricole_2010_note;part_population_agricole_1988_valeur_pourcent;part_population_agricole_1988_note;evolution_part_population_agricole_valeur_pt_de_pourcentage;evolution_part_population_agricole_note;synthese_note;synthese_message
P-FR;France;PAYS;26494;8421;102;344;0.38;5.00;4.09;5.00;-3.7;5.00;5;Population agricole <strong>en proportion proche de la moyenne française</strong> mais <strong>en déclin</strong>
R-11;Île-de-France;REGION;20000;2000;0;0;0.0;0.00;0.0;0.00;0.0;10.00;2;Population agricole <strong>stable</strong> mais <strong>en proportion plus faible que la moyenne française</strong>
R-75;Nouvelle-Aquitaine;REGION;6445;6370;78;257;1.21;10.00;4.03;4.90;-2.82;6.20;10;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
R-76;Occitanie;REGION;49;51;24;87;48.98;10.00;170.59;10.00;-121.61;0.00;8;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
D-32;Gers;DEPARTEMENT;49;51;24;87;48.98;10.00;170.59;10.00;-121.61;0.00;8;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
D-40;Landes;DEPARTEMENT;6445;6370;78;257;1.21;10.00;4.03;4.90;-2.82;6.20;10;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
D-75;Paris;DEPARTEMENT;20000;2000;0;0;0.0;0.00;0.0;0.00;0.0;10.00;2;Population agricole <strong>stable</strong> mais <strong>en proportion plus faible que la moyenne française</strong>
P-FR;France;PAYS;26494;8421;102;344;0.38;5.00;4.09;5.00;-3.70;5.00;5;Population agricole <strong>en proportion proche de la moyenne française</strong> mais <strong>en déclin</strong>
R-11;Île-de-France;REGION;20000;2000;;;;;;;;;;Données non disponibles
R-75;Nouvelle-Aquitaine;REGION;6445;6370;;;;;;;;;;Données non disponibles
R-76;Occitanie;REGION;49;51;;;;;;;;;;Données non disponibles
D-32;Gers;DEPARTEMENT;49;51;;;;;;;;;;Données non disponibles
D-40;Landes;DEPARTEMENT;6445;6370;;;;;;;;;;Données non disponibles
D-75;Paris;DEPARTEMENT;20000;2000;;;;;;;;;;Données non disponibles
PAT-1;Le PAT monocommunal du Gée-Rivière;REGROUPEMENT_COMMUNES;49;51;24;87;48.98;10.00;170.59;10.00;-121.61;0.00;8;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
PAT-2;Le PAT interdepartemental D-32 (3 communes) D-40 (2 communes);REGROUPEMENT_COMMUNES;6494;6421;102;344;1.57;10.00;5.36;6.60;-3.79;4.90;10;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
SCOT-1;Le SCOT monocommunal de Paris;REGROUPEMENT_COMMUNES;20000;2000;0;0;0.0;0.00;0.0;0.00;0.0;10.00;2;Population agricole <strong>stable</strong> mais <strong>en proportion plus faible que la moyenne française</strong>
SCOT-1;Le SCOT monocommunal de Paris;REGROUPEMENT_COMMUNES;20000;2000;0;0;0.00;0.00;0.00;0.00;0.00;10.00;2;Population agricole <strong>stable</strong> mais <strong>en proportion plus faible que la moyenne française</strong>
SCOT-2;Le SCOT monocommunal de Gée-Rivière;REGROUPEMENT_COMMUNES;49;51;24;87;48.98;10.00;170.59;10.00;-121.61;0.00;8;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
SCOT-3;Le SCOT interdepartemental D-32 (3 communes) D-40 (2 communes);REGROUPEMENT_COMMUNES;6494;6421;102;344;1.57;10.00;5.36;6.60;-3.79;4.90;10;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
E-200030435;CC d'Aire-sur-l'Adour;EPCI;6494;6421;102;344;1.57;10.00;5.36;6.60;-3.79;4.90;10;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
E-200054781;Métropole du Grand Paris;EPCI;20000;2000;0;0;0.0;0.00;0.0;0.00;0.0;10.00;2;Population agricole <strong>stable</strong> mais <strong>en proportion plus faible que la moyenne française</strong>
E-200054781;Métropole du Grand Paris;EPCI;20000;2000;0;0;0.00;0.00;0.00;0.00;0.00;10.00;2;Population agricole <strong>stable</strong> mais <strong>en proportion plus faible que la moyenne française</strong>
C-32145;Gée-Rivière;COMMUNE;49;51;24;87;48.98;10.00;170.59;10.00;-121.61;0.00;8;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
C-32333;Projan(scission2020);COMMUNE;;;;;;;;;;;0;Données non disponibles
C-32424;Ségos(fusion2017);COMMUNE;;;;;;;;;;;0;Données non disponibles
C-32333;Projan(scission2020);COMMUNE;;;;;;;;;;;;Données non disponibles
C-32424;Ségos(fusion2017);COMMUNE;;;;;;;;;;;;Données non disponibles
C-40001;Aire-sur-l'Adour;COMMUNE;6279;6205;14;71;0.22;2.90;1.14;1.40;-0.92;8.80;5;Population agricole <strong>en proportion plus faible que la moyenne française</strong> et <strong>en déclin</strong>
C-40146;Latrille;COMMUNE;166;165;64;186;38.55;10.00;112.73;10.00;-74.17;0.00;8;Population agricole <strong>en proportion plus élevée que la moyenne française</strong> mais <strong>en déclin</strong>
C-75056;Paris;COMMUNE;20000;2000;0;0;0.0;0.00;0.0;0.00;0.0;10.00;2;Population agricole <strong>stable</strong> mais <strong>en proportion plus faible que la moyenne française</strong>
C-75056;Paris;COMMUNE;20000;2000;0;0;0.00;0.00;0.00;0.00;0.00;10.00;2;Population agricole <strong>stable</strong> mais <strong>en proportion plus faible que la moyenne française</strong>
......@@ -25,7 +25,7 @@ class TestPopulationAgricole(unittest.TestCase):
# when
calculer_population_agricole(
territoires,
CHEMIN_INPUT_DATA / DOSSIER_POPULATION_AGRICOLE / 'population_agricole.zip',
CHEMIN_INPUT_DATA / DOSSIER_POPULATION_AGRICOLE / 'FDS_G_2005.zip',
CHEMIN_OUTPUT_DATA / DOSSIER_POPULATION_AGRICOLE
)
# then
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment