Commit 43bc9749 authored by Lionel DURAND's avatar Lionel DURAND
Browse files

Livraison master Janvier

parents de23d618 2b90da1f
This diff is collapsed.
This diff is collapsed.
......@@ -18,7 +18,8 @@ from crater.reglages import (
CHEMIN_CRATER_DATA_SOURCES,
CHEMIN_SOURCE_COMMUNES_ET_ARRONDISSEMENTS, CHEMIN_DOSSIER_SOURCE_GEOMETRIES_COMMUNES,
CHEMIN_SOURCE_MOUVEMENTS_COMMUNES,
CHEMIN_SOURCE_EPCIS, CHEMIN_SOURCE_DEPARTEMENTS, CHEMIN_SOURCE_REGIONS, CHEMIN_SOURCE_CODES_POSTAUX,
CHEMIN_SOURCE_EPCIS, FICHIERS_REGROUPEMENTS_COMMUNES, CHEMIN_SOURCE_DEPARTEMENTS, CHEMIN_SOURCE_REGIONS,
CHEMIN_SOURCE_CODES_POSTAUX,
CHEMIN_SOURCE_POPULATION_TOTALE, CHEMIN_SOURCE_POPULATION_TOTALE_HISTORIQUE,
CHEMIN_SOURCE_POPULATION_AGRICOLE,
CHEMIN_SOURCE_ARTIFICIALISATION, CHEMIN_SOURCE_NB_LOGEMENTS, CHEMIN_SOURCE_NB_LOGEMENTS_VACANTS,
......@@ -127,7 +128,7 @@ def lancer_calcul_referentiel_territoires():
CHEMIN_SOURCE_DEPARTEMENTS,
CHEMIN_SOURCE_REGIONS,
CHEMIN_SOURCE_CODES_POSTAUX,
DOSSIER_CONFIG / "regroupements_geographiques",
FICHIERS_REGROUPEMENTS_COMMUNES,
CHEMIN_OUTPUT_DATA / DOSSIER_TERRITOIRES
)
stocker_duree_etape('CALCUL_REFERENTIEL_TERRITOIRES', time.time() - debut)
......
......@@ -11,7 +11,8 @@ from crater.politique_fonciere.synthese_politique_fonciere import ajouter_synthe
from crater.crater_logger import log
from crater.outils import reinitialiser_dossier, DictDataFrames
from crater.territoires import outils as outils_territoires
from crater.territoires.outils import IDS_CATEGORIES_TERRITOIRES_SUPRACOMMUNAUX
from crater.reglages import IDS_CATEGORIES_TERRITOIRES_SUPRACOMMUNAUX
def calculer_politique_fonciere(
territoires: DataFrame,
......
......@@ -2,7 +2,7 @@ import pandas as pd
from pandas import DataFrame
from crater.crater_logger import log
from crater.territoires.outils import traduire_code_insee_vers_id_commune_crater
from crater.territoires.outils import traduire_code_insee_vers_id_commune_crater, verifier_absence_doublons
def charger(chemin_fichier):
......@@ -112,11 +112,12 @@ def charger(chemin_fichier):
]
)
_traduire_code_insee_vers_id_crater(df)
df = _traduire_code_insee_vers_id_crater(df)
verifier_absence_doublons(df, 'id_commune')
return df
def _traduire_code_insee_vers_id_crater(communes: DataFrame) -> DataFrame:
communes.id_commune = traduire_code_insee_vers_id_commune_crater(communes.id_commune)
return communes
def _traduire_code_insee_vers_id_crater(df: DataFrame) -> DataFrame:
df.id_commune = traduire_code_insee_vers_id_commune_crater(df.id_commune)
return df
......@@ -3,7 +3,7 @@ import pandas as pd
from pandas import DataFrame
from crater.crater_logger import log
from crater.territoires.outils import traduire_code_insee_vers_id_commune_crater
from crater.territoires.outils import traduire_code_insee_vers_id_commune_crater, verifier_absence_doublons
def charger(chemin_fichier: Path, nom_variable : 'str') -> DataFrame:
......@@ -43,12 +43,13 @@ def charger(chemin_fichier: Path, nom_variable : 'str') -> DataFrame:
2018: nom_variable + '_2018'
})
_traduire_code_insee_vers_id_crater(df)
df = _traduire_code_insee_vers_id_crater(df)
verifier_absence_doublons(df, 'id_commune')
return df
def _traduire_code_insee_vers_id_crater(communes: DataFrame) -> DataFrame:
communes.id_commune = traduire_code_insee_vers_id_commune_crater(communes.id_commune)
return communes
def _traduire_code_insee_vers_id_crater(df: DataFrame) -> DataFrame:
df.id_commune = traduire_code_insee_vers_id_commune_crater(df.id_commune)
return df
from pandas import DataFrame
import crater.outils as outils
import crater.reglages
import crater.territoires.outils as outils_territoires
from crater.crater_logger import log
......@@ -22,7 +23,7 @@ def ajouter_rythme_artificialisation_sau(donnees_politique_fonciere: DataFrame)
)
)
if donnees_politique_fonciere.query(f"id_territoire=='{outils_territoires.ID_FRANCE}'")[
if donnees_politique_fonciere.query(f"id_territoire=='{crater.reglages.ID_FRANCE}'")[
'rythme_artificialisation_sau_valeur_pourcent'][0] <= 0:
raise ValueError('Attention, la valeur moyenne française pose problème vu la définition de calcul de la note !')
......@@ -31,7 +32,7 @@ def ajouter_rythme_artificialisation_sau(donnees_politique_fonciere: DataFrame)
lambda x:
outils.calculerNoteParInterpolation2Seuils(
x['rythme_artificialisation_sau_valeur_pourcent'],
0, donnees_politique_fonciere.query(f"id_territoire=='{outils_territoires.ID_FRANCE}'")[
0, donnees_politique_fonciere.query(f"id_territoire=='{crater.reglages.ID_FRANCE}'")[
'rythme_artificialisation_sau_valeur_pourcent'][0],
10, 0
),
......
......@@ -12,7 +12,8 @@ from crater.population_agricole.evolution_part_population_agricole import \
from crater.population_agricole.part_population_agricole_1988 import ajouter_colonne_part_population_agricole_1988
from crater.population_agricole.part_population_agricole_2010 import ajouter_colonne_part_population_agricole_2010
from crater.population_agricole.synthese_population_agricole import ajouter_colonne_synthese_population_agricole
from crater.territoires.outils import IDS_CATEGORIES_TERRITOIRES_SUPRACOMMUNAUX, trier_territoires
from crater.territoires.outils import trier_territoires
from crater.reglages import IDS_CATEGORIES_TERRITOIRES_SUPRACOMMUNAUX
def calculer_population_agricole(
......
......@@ -4,7 +4,7 @@ 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
traduire_code_insee_vers_id_region_crater, traduire_code_insee_vers_id_pays_crater, verifier_absence_doublons
def charger_agreste_actifs_agricoles(chemin_fichier_zip, fichier):
log.info(" => Chargement fichier AGRESTE des actifs agricoles permanents depuis %s/%s", chemin_fichier_zip, fichier)
......@@ -67,6 +67,9 @@ def charger_agreste_actifs_agricoles(chemin_fichier_zip, fichier):
df = df.rename(columns={
'Nombre de personnes': 'actifs_agricoles_permanents'
})
verifier_absence_doublons(df, 'id_territoire')
return df
def charger_agreste_nb_exploitation_par_classes_ages_chef_exploitation(chemin_fichier_zip, fichier):
......@@ -129,6 +132,9 @@ def charger_agreste_nb_exploitation_par_classes_ages_chef_exploitation(chemin_fi
'De 50 à 59 ans': 'nb_exploitations_par_classes_ages_chef_exploitation.50_a_59_ans',
'60 ans ou plus': 'nb_exploitations_par_classes_ages_chef_exploitation.plus_60_ans',
})
verifier_absence_doublons(df, 'id_territoire')
return df
......@@ -208,7 +214,8 @@ def charger_agreste_nb_exploitations_et_sau_par_classes_superficies(chemin_fichi
]
]
verifier_absence_doublons(df, 'id_territoire')
return df
......@@ -228,8 +235,6 @@ def _renommer_groupes_colonnes_par_indicateur(df, nom_indicateur_prefixe_initial
return df
def _filtrer_et_ajouter_colonne_id_territoire(df):
mask_communes = df['COM'] != '............'
df.loc[mask_communes, "id_territoire"] = traduire_code_insee_vers_id_commune_crater(df.loc[mask_communes, 'COM'])
......
......@@ -3,6 +3,7 @@ import pandas as pd
import numpy as np
import crater.outils as outils
import crater.reglages
import crater.territoires.outils as outils_territoires
from crater.crater_logger import log
......@@ -19,7 +20,7 @@ def ajouter_colonne_evolution_part_population_agricole(population_agricole: Data
# (voir https://pandas.pydata.org/pandas-docs/dev/user_guide/missing_data.html#missing-data-na) ou https://pandas.pydata.org/pandas-docs/dev/whatsnew/v1.2.0.html?highlight=float64dtype
).round(2).astype('float64')
seuil_france = population_agricole.at[outils_territoires.ID_FRANCE,
seuil_france = population_agricole.at[crater.reglages.ID_FRANCE,
'evolution_part_population_agricole_valeur_pt_de_pourcentage']
population_agricole.loc[:, 'evolution_part_population_agricole_note'] = \
......
......@@ -3,6 +3,7 @@ import pandas as pd
import numpy as np
import crater.outils as outils
import crater.reglages
import crater.territoires.outils as outils_territoires
from crater.crater_logger import log
......@@ -18,7 +19,7 @@ def ajouter_colonne_part_population_agricole_1988(donnees_population_agricole: D
# (voir https://pandas.pydata.org/pandas-docs/dev/user_guide/missing_data.html#missing-data-na) ou https://pandas.pydata.org/pandas-docs/dev/whatsnew/v1.2.0.html?highlight=float64dtype
).round(2).astype('float64')
seuil_valeur_france = donnees_population_agricole.query(f"id_territoire=='{outils_territoires.ID_FRANCE}'")[
seuil_valeur_france = donnees_population_agricole.query(f"id_territoire=='{crater.reglages.ID_FRANCE}'")[
'part_population_agricole_1988_valeur_pourcent'][0]
donnees_population_agricole.loc[:, 'part_population_agricole_1988_note'] = \
outils.calculer_note_par_interpolation_2_seuils(
......
......@@ -3,6 +3,7 @@ import pandas as pd
import numpy as np
import crater.outils as outils
import crater.reglages
import crater.territoires.outils as outils_territoires
from crater.crater_logger import log
......@@ -18,7 +19,7 @@ def ajouter_colonne_part_population_agricole_2010(donnees_population_agricole: D
# (voir https://pandas.pydata.org/pandas-docs/dev/user_guide/missing_data.html#missing-data-na) ou https://pandas.pydata.org/pandas-docs/dev/whatsnew/v1.2.0.html?highlight=float64dtype
).round(2).astype('float64')
seuil_valeur_france = donnees_population_agricole.query(f"id_territoire=='{outils_territoires.ID_FRANCE}'")[
seuil_valeur_france = donnees_population_agricole.query(f"id_territoire=='{crater.reglages.ID_FRANCE}'")[
'part_population_agricole_2010_valeur_pourcent'][0]
donnees_population_agricole.loc[:, 'part_population_agricole_2010_note'] = \
outils.calculer_note_par_interpolation_2_seuils(donnees_population_agricole['part_population_agricole_2010_valeur_pourcent'], 0, 0, seuil_valeur_france, 5)
......
......@@ -2,6 +2,7 @@ import numpy as np
import pandas as pd
from pandas import DataFrame
import crater.reglages
import crater.territoires.outils as outils_territoires
import crater.outils as outils
from crater.crater_logger import log
......@@ -19,7 +20,7 @@ def ajouter_colonne_synthese_population_agricole(population_agricole: DataFrame)
# (pour l'instant Int64 et Float6' sont encore expérimentaux)
).round(0).clip(lower=0, upper=10).astype('Int64')
part_population_agricole_2010_valeur_pourcent_FRANCE= population_agricole.query(f"id_territoire=='{outils_territoires.ID_FRANCE}'")[
part_population_agricole_2010_valeur_pourcent_FRANCE= population_agricole.query(f"id_territoire=='{crater.reglages.ID_FRANCE}'")[
'part_population_agricole_2010_valeur_pourcent'][0]
population_agricole.loc[:, 'synthese_message'] = outils.construire_message(
......
......@@ -7,7 +7,7 @@ from crater.pratiques_agricoles.indicateur_part_sau_bio import ajouter_indicateu
from crater.pratiques_agricoles.synthese_pratiques_agricoles import ajouter_synthese_pratiques_agricoles
from crater.outils import reinitialiser_dossier
from crater.territoires.outils import IDS_CATEGORIES_TERRITOIRES_SUPRACOMMUNAUX
from crater.reglages import IDS_CATEGORIES_TERRITOIRES_SUPRACOMMUNAUX
def calculer_pratiques_agricoles(
......
......@@ -6,14 +6,15 @@ from crater.territoires.outils import (
traduire_code_insee_vers_id_commune_crater,
traduire_code_insee_vers_id_epci_crater,
traduire_code_insee_vers_id_departement_crater,
traduire_code_insee_vers_id_region_crater
traduire_code_insee_vers_id_region_crater,
verifier_absence_doublons
)
def charger_source_hvn(chemin_fichier: Path) -> pd.DataFrame:
log.info(" => Chargement HVN depuis %s", chemin_fichier)
return pd.read_excel(
df = pd.read_excel(
chemin_fichier,
sheet_name='Feuil1',
usecols='A:J',
......@@ -43,6 +44,10 @@ def charger_source_hvn(chemin_fichier: Path) -> pd.DataFrame:
'hvn_score'
]
)
verifier_absence_doublons(df, 'id_commune')
return df
def importer_hvn(chemin_fichier_hvn: Path):
......@@ -54,7 +59,7 @@ def importer_hvn(chemin_fichier_hvn: Path):
def charger_surfaces_bio(chemin_fichier: Path) -> pd.DataFrame:
log.info(" => Chargement des surfaces bio depuis %s", chemin_fichier)
return pd.read_excel(
df = pd.read_excel(
chemin_fichier,
sheet_name='PV_Echelles',
usecols='A:S',
......@@ -96,6 +101,8 @@ def charger_surfaces_bio(chemin_fichier: Path) -> pd.DataFrame:
).query(
'typologie_territoire != "Toute_Zone"'
)
return df
def importer_surfaces_bio(chemin_fichier_surfaces_bio: Path) -> pd.DataFrame:
......@@ -116,4 +123,7 @@ def importer_surfaces_bio(chemin_fichier_surfaces_bio: Path) -> pd.DataFrame:
surfaces_bio.typologie_territoire)
# les na correspondent aux donnees non renseignées pour cause de confidentialité => on remplace par -1 pour pouvoir les repérer par la suite
surfaces_bio = surfaces_bio.fillna(-1)
verifier_absence_doublons(surfaces_bio, 'id_territoire')
return surfaces_bio.loc[:, ['id_territoire', 'surface_bio_ha']]
......@@ -5,8 +5,9 @@ from pandas import DataFrame
from crater.crater_logger import log
from crater.outils import calculerNoteParInterpolation2Seuils
from crater.pratiques_agricoles.gestionnaire_sources_pratiques_agricoles import importer_surfaces_bio
from crater.territoires.outils import ajouter_donnees_regroupements_de_communes_par_somme_donnees_communales, \
ajouter_donnees_pays_par_somme_donnees_regions, ID_FRANCE
from crater.territoires.outils import ajouter_donnees_regroupements_communes_par_somme_donnees_communales, \
ajouter_donnees_pays_par_somme_donnees_regions
from crater.reglages import ID_FRANCE
def ajouter_indicateur_part_sau_bio(
......@@ -39,7 +40,7 @@ def _ajouter_donnees_surfaces_bio(
donnees_pratiques_agricoles.loc[
donnees_pratiques_agricoles.annee_dernier_mouvement_commune > 2020, 'surface_bio_ha'] = np.nan
donnees_pratiques_agricoles = ajouter_donnees_regroupements_de_communes_par_somme_donnees_communales(
donnees_pratiques_agricoles = ajouter_donnees_regroupements_communes_par_somme_donnees_communales(
donnees_pratiques_agricoles,
'surface_bio_ha'
)
......
......@@ -78,7 +78,7 @@ def _ajouter_colonne_region_appartenance_principale(donnees_besoins):
def _ajouter_colonnes_donnees_besoins_parcel(donnees_besoins, fichier_besoins_parcel, territoires):
besoins_parcel_arrondis_2_decimales = charger_besoins_parcel(fichier_besoins_parcel).round(2)
besoins_parcel_arrondis_2_decimales = _ajouter_besoins_regroupements_de_communes(
besoins_parcel_arrondis_2_decimales = _ajouter_besoins_regroupements_communes(
besoins_parcel_arrondis_2_decimales,
territoires
)
......@@ -91,7 +91,7 @@ def _ajouter_colonnes_donnees_besoins_parcel(donnees_besoins, fichier_besoins_pa
).drop(columns='id_territoire_crater')
def _ajouter_besoins_regroupements_de_communes(besoins_parcel_arrondis_2_decimales, territoires):
def _ajouter_besoins_regroupements_communes(besoins_parcel_arrondis_2_decimales, territoires):
communes = filtrer_et_dupliquer_communes_appartenant_a_une_categorie_de_territoire(territoires, 'REGROUPEMENT_COMMUNES')
besoins_regroupements_communes = communes.reset_index().loc[:,
['id_territoire', 'categorie_territoire', 'id_regroupement_communes']]
......
import pandas
from crater.territoires.outils import CATEGORIES_TERRITOIRES
from crater.reglages import CATEGORIES_TERRITOIRES
def _exporter_sau_par_culture(df_production, chemin_dossier_resultats):
_exporter_df_indicateur_par_territoire(df_production,
......
......@@ -6,8 +6,10 @@ from crater.production_besoins.chargeur_sources_production_besoins import _charg
_charger_definition_cultures_et_groupes_cultures_production
from crater.production_besoins.export_production_besoins import _exporter_sau_par_culture
import crater.surface_agricole_utile.chargeur_sau_par_commune_et_culture as chargeur_sau_par_commune_et_culture
from crater.territoires.outils import CATEGORIES_TERRITOIRES, categories_territoires_hors_communes, \
from crater.territoires.outils import categories_territoires_hors_communes, \
traduire_categorie_territoire_vers_id_categorie_territoire, filtrer_et_dupliquer_communes_appartenant_a_une_categorie_de_territoire
from crater.reglages import CATEGORIES_TERRITOIRES
#TODO est-ce qu'on vérifie à un moment que tous les codes RPG ont une translation CRATer, pour ne pasoublie des surfaces
# agricoles? ie que le fichier codes_rpg_vers_codes_cultures.csv est complet
......
Markdown is supported
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