Commit 522b06bf authored by Lionel's avatar Lionel
Browse files

Recharger systématiquement le ref territoire + petits nettoyages dans crater_data

parent e8699eaa
import argparse
import crater.politique_fonciere.calculateur as calculateur_politique_fonciere
import crater.population_agricole.calculateur as calculateur_population_agricole
from crater.cartographie.calculateur_cartographie import calculer_cartes
from crater.crater_logger import log
from crater.outils import reinitialiser_dossier
from crater.parcel import collecteur_besoins_api_parcel
from crater.parcel.collecteur_besoins_api_parcel import ID_ASSIETTE_ACTUELLE, ID_ASSIETTE_MOINS_25_POURCENT, \
ID_ASSIETTE_MOINS_50_POURCENT
from crater.politique_fonciere.calculateur import calculer_politique_fonciere
from crater.population_agricole.calculateur import calculer_population_agricole
from crater.pratiques_agricoles.calculateur_pratiques_agricoles import calculer_pratiques_agricoles
from crater.production_besoins.calculateur_production_besoins import calculer_axe_production_besoins
from crater.reglages import (
......@@ -29,51 +29,6 @@ from crater.surface_agricole_utile import collecteur_rpg, calculateur_surface_ag
from crater.territoires.calculateur import calculer_territoires, charger_referentiel_territoires
def calculer_population_agricole(
referentiel_territoires,
chemin_fichier_actifs_agricoles_permanents,
chemin_dossier_output,
dossier_source,
dossier_population_agricole
) -> None:
sources = calculateur_population_agricole.charger_sources(
chemin_fichier_actifs_agricoles_permanents
)
calculateur_population_agricole.exporter_sources(
sources,
chemin_dossier_output / dossier_source / dossier_population_agricole
)
axe = calculateur_population_agricole.calculer(referentiel_territoires, sources)
calculateur_population_agricole.exporter(
axe,
chemin_dossier_output / dossier_population_agricole
)
def calculer_politique_fonciere(
referentiel_territoires,
chemin_fichier_artificialisation,
chemin_dossier_output,
dossier_source,
dossier_politique_fonciere
) -> None:
sources = calculateur_politique_fonciere.charger_sources(
chemin_fichier_artificialisation
)
calculateur_politique_fonciere.exporter_sources(
sources,
chemin_dossier_output / dossier_source / dossier_politique_fonciere
)
axe = calculateur_politique_fonciere.calculer(
referentiel_territoires,
sources
)
calculateur_politique_fonciere.exporter(
axe,
chemin_dossier_output / dossier_politique_fonciere
)
def lancer_calcul_surface_agricole_utile():
referentiel_territoires = charger_referentiel_territoires(
CHEMIN_OUTPUT_DATA / DOSSIER_TERRITOIRES
......@@ -96,8 +51,8 @@ def lancer_calcul_surface_agricole_utile():
)
def generer_fichiers_resultats_crater():
referentiel_territoires = calculer_territoires(
def lancer_calcul_complet_referentiel_crater():
calculer_territoires(
CHEMIN_SOURCE_COMMUNES_ET_ARRONDISSEMENTS,
CHEMIN_SOURCE_MOUVEMENTS_COMMUNES,
CHEMIN_SOURCE_EPCIS,
......@@ -110,6 +65,11 @@ def generer_fichiers_resultats_crater():
CHEMIN_CRATER_DATA_SOURCES / DOSSIER_PARCEL / 'correspondance_territoires_parcel_crater.csv',
CHEMIN_OUTPUT_DATA / DOSSIER_TERRITOIRES
)
referentiel_territoires = charger_referentiel_territoires(
CHEMIN_OUTPUT_DATA / DOSSIER_TERRITOIRES
)
calculer_population_agricole(
referentiel_territoires,
CHEMIN_SOURCE_POPULATION_AGRICOLE,
......@@ -165,7 +125,7 @@ def lancer_calcul_population_agricole():
CHEMIN_OUTPUT_DATA / DOSSIER_TERRITOIRES
)
reinitialiser_dossier(CHEMIN_OUTPUT_DATA / DOSSIER_PRODUCTION_BESOINS)
reinitialiser_dossier(CHEMIN_OUTPUT_DATA / DOSSIER_POPULATION_AGRICOLE)
calculer_population_agricole(
referentiel_territoires,
......@@ -240,42 +200,43 @@ def lancer_calcul_cartes():
)
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser = argparse.ArgumentParser(usage='%(prog)s ETAPE [options]\n'
parser = argparse.ArgumentParser(usage='%(prog)s ETAPE_CALCUL\n'
+ 'Permet de lancer les différentes étapes des traitements de crater-data\n'
+ "Valeurs possible pour ETAPE :\n"
+ "Valeurs possible pour ETAPE_CALCUL :\n"
+ "\tparcel-besoins-assiette-actuelle\tgénérer le fichier des besoins en SAU à partir de l'api PARCEL, pour l'assiette actuelle\n"
+ "\tparcel-besoins-assiette-25p\t\tgénérer le fichier des besoins en SAU à partir de l'api PARCEL, pour une assiette avec -25 pourcent de produit de l'élevage\n"
+ "\tparcel-besoins-assiette-50p\t\tgénérer le fichier des besoins en SAU à partir de l'api PARCEL, pour une assiette avec -50 poucent de produit de l'élevage\n"
+ "\trpg\t\ttélécharger les fichiers régionales du RPG\n"
+ "\tcrater\t\t\t\t\tgénérer l'ensemble des fichiers résultat crater-data, à partir des fichiers sources et des fichiers générés lors des autres étapes\n"
+ "\tsurface-agricole-utile\t\t\tgénérer les fichiers résultat crater-data des surfaces agricoles utiles\n"
+ "\tterritoires\t\t\tgénérer les fichiers résultat crater-data, pour les territoires\n"
+ "\tpopulation-agricole\t\t\tgénérer les fichiers résultat crater-data, pour l'axe population agricole\n"
+ "\tpolitique-fonciere\t\t\tgénérer les fichiers résultat crater-data, pour l'axe politique foncière\n"
+ "\tpratiques-agricoles\t\t\tgénérer les fichiers résultat crater-data, pour l'axe pratiques agricoles\n"
+ "\tproduction-besoins\t\t\tgénérer les fichiers résultat crater-data, pour l'axe production-besoins\n"
+ "\tsau-telecharger-rpg\t\t\ttélécharger les fichiers régionales du RPG\n"
+ "\tsau-calculer-surfaces\t\t\tgénérer les fichiers résultat crater-data des surfaces agricoles utiles\n"
+ "\tcrater-complet\t\t\t\tgénérer l'ensemble des fichiers résultat crater-data. Exécute toutes les étapes carter-* dans l'ordre\n"
+ "\tcrater-territoires\t\t\tgénérer les fichiers résultat crater-data, pour les territoires\n"
+ "\tcrater-population-agricole\t\tgénérer les fichiers résultat crater-data, pour l'axe population agricole\n"
+ "\tcrater-politique-fonciere\t\tgénérer les fichiers résultat crater-data, pour l'axe politique foncière\n"
+ "\tcrater-pratiques-agricoles\t\tgénérer les fichiers résultat crater-data, pour l'axe pratiques agricoles\n"
+ "\tcrater-production-besoins\t\tgénérer les fichiers résultat crater-data, pour l'axe production-besoins\n"
+ "\tcrater-cartes\t\t\t\tgénérer les fichiers geojson contenant les contours géographiques des territoires et certains indicateurs\n"
)
parser.add_argument("ETAPE",
parser.add_argument("ETAPE_CALCUL",
help="Nom de l'étape à exécuter",
choices=['parcel-besoins-assiette-actuelle',
'parcel-besoins-assiette-25p',
'parcel-besoins-assiette-50p',
'rpg',
'surface-agricole-utile',
'crater',
'territoires',
'pratiques-agricoles',
'politique-fonciere',
'production-besoins',
'population-agricole'
'sau-telecharger-rpg',
'sau-calculer-surfaces',
'crater-complet',
'crater-territoires',
'crater-pratiques-agricoles',
'crater-politique-fonciere',
'crater-production-besoins',
'crater-population-agricole',
'crater-cartes'
])
args = parser.parse_args()
if (args.ETAPE == 'parcel-besoins-assiette-actuelle'):
if (args.ETAPE_CALCUL == 'parcel-besoins-assiette-actuelle'):
log.info(
"Génération du fichier des besoins SAUs pour les territoires à partir de l'API PARCEL, assiette actuelle")
collecteur_besoins_api_parcel.collecter_donnees_besoins_parcel(
......@@ -284,7 +245,7 @@ if __name__ == '__main__':
CHEMIN_CRATER_DATA_SOURCES / DOSSIER_PARCEL / 'parcel_produits_et_categories_202008.csv',
CHEMIN_OUTPUT_DATA / DOSSIER_PARCEL / 'reponse_api_parcel_besoins_sau_par_produits_assiette_actuelle.csv'
)
elif (args.ETAPE == 'parcel-besoins-assiette-25p'):
elif (args.ETAPE_CALCUL == 'parcel-besoins-assiette-25p'):
log.info(
"Génération du fichier des besoins SAUs pour les territoires à partir de l'API PARCEL, assiette -25% viande")
collecteur_besoins_api_parcel.collecter_donnees_besoins_parcel(
......@@ -293,7 +254,7 @@ if __name__ == '__main__':
CHEMIN_CRATER_DATA_SOURCES / DOSSIER_PARCEL / 'parcel_produits_et_categories_202008.csv',
CHEMIN_OUTPUT_DATA / DOSSIER_PARCEL / 'reponse_api_parcel_besoins_sau_par_produits_assiette_moins_25p.csv'
)
elif (args.ETAPE == 'parcel-besoins-assiette-50p'):
elif (args.ETAPE_CALCUL == 'parcel-besoins-assiette-50p'):
log.info(
"Génération du fichier des besoins SAUs pour les territoires à partir de l'API PARCEL, assiette -50% viande")
collecteur_besoins_api_parcel.collecter_donnees_besoins_parcel(
......@@ -302,7 +263,7 @@ if __name__ == '__main__':
CHEMIN_CRATER_DATA_SOURCES / DOSSIER_PARCEL / 'parcel_produits_et_categories_202008.csv',
CHEMIN_OUTPUT_DATA / DOSSIER_PARCEL / 'reponse_api_parcel_besoins_sau_par_produits_assiette_moins_50p.csv'
)
elif (args.ETAPE == 'rpg'):
elif (args.ETAPE_CALCUL == 'sau-telecharger-rpg'):
log.info("Téléchargmeent des fichiers source RPG")
collecteur_rpg.telecharger_rpg_toutes_les_regions(
URL_SOURCE_RPG,
......@@ -310,28 +271,28 @@ if __name__ == '__main__':
2017,
CHEMIN_CRATER_DATA_SOURCES / DOSSIER_RPG
)
elif (args.ETAPE == 'surface-agricole-utile'):
elif (args.ETAPE_CALCUL == 'sau-calculer-surfaces'):
log.info("Génération des fichiers résultats CRATER des surfaces agricoles utiles")
lancer_calcul_surface_agricole_utile()
elif (args.ETAPE == 'crater'):
elif (args.ETAPE_CALCUL == 'crater-complet'):
log.info("Génération des fichiers résultats CRATER")
generer_fichiers_resultats_crater()
elif (args.ETAPE == 'territoires'):
lancer_calcul_complet_referentiel_crater()
elif (args.ETAPE_CALCUL == 'crater-territoires'):
log.info("Génération des fichiers résultats CRATER pour les territoires")
lancer_generation_territoires()
elif (args.ETAPE == 'production-besoins'):
elif (args.ETAPE_CALCUL == 'crater-production-besoins'):
log.info("Génération des fichiers résultats CRATER pour l'axe production/besoins")
lancer_calcul_production_besoins()
elif (args.ETAPE == 'pratiques-agricoles'):
elif (args.ETAPE_CALCUL == 'crater-pratiques-agricoles'):
log.info("Génération des fichiers résultats CRATER pour l'axe pratiques agricoles")
lancer_calcul_pratiques_agricoles()
elif (args.ETAPE == 'politique-fonciere'):
elif (args.ETAPE_CALCUL == 'crater-politique-fonciere'):
log.info("Génération des fichiers résultats CRATER pour l'axe politique foncière")
lancer_calcul_politique_fonciere()
elif (args.ETAPE == 'population-agricole'):
elif (args.ETAPE_CALCUL == 'crater-population-agricole'):
print("Génération des fichiers résultats CRATER pour l'axe population agricole")
lancer_calcul_population_agricole()
elif (args.ETAPE == 'cartes'):
elif (args.ETAPE_CALCUL == 'crater-cartes'):
print("Génération des fichiers résultats CRATER pour les cartes")
lancer_calcul_cartes()
else:
......
......@@ -2,15 +2,39 @@ import pandas as pd
import crater.politique_fonciere.chargeur_artificialisation as chargeur_artificialisation
import crater.politique_fonciere.politique_artificialisation as politique_artificialisation
import crater.politique_fonciere.rythme_artificialisation_sau as rythme_artificialisation_sau
import crater.politique_fonciere.sau_par_habitant as sau_par_habitant
import crater.politique_fonciere.synthese_politique_fonciere as synthese_politique_fonciere
import crater.politique_fonciere.rythme_artificialisation_sau as rythme_artificialisation_sau
from crater.crater_logger import log
from crater.outils import reinitialiser_dossier, DictTerritoires, supprimer_donnees_apres_annee_mouvement_commune
from crater.territoires import outils as outils_territoires
from crater.territoires.outils import traduire_code_insee_vers_id_commune_crater
def calculer_politique_fonciere(
referentiel_territoires,
chemin_fichier_artificialisation,
chemin_dossier_output,
dossier_source,
dossier_politique_fonciere
) -> None:
sources = charger_sources(
chemin_fichier_artificialisation
)
exporter_sources(
sources,
chemin_dossier_output / dossier_source / dossier_politique_fonciere
)
axe = calculer(
referentiel_territoires,
sources
)
exporter(
axe,
chemin_dossier_output / dossier_politique_fonciere
)
def calculer(
referentiel_territoires,
sources_politique_fonciere
......@@ -142,5 +166,3 @@ def exporter_sources(
encoding="utf-8",
index=False
)
......@@ -12,6 +12,27 @@ from crater.outils import reinitialiser_dossier, DictTerritoires, supprimer_donn
from crater.territoires.outils import traduire_code_insee_vers_id_commune_crater
def calculer_population_agricole(
referentiel_territoires,
chemin_fichier_actifs_agricoles_permanents,
chemin_dossier_output,
dossier_source,
dossier_population_agricole
) -> None:
sources = charger_sources(
chemin_fichier_actifs_agricoles_permanents
)
exporter_sources(
sources,
chemin_dossier_output / dossier_source / dossier_population_agricole
)
axe = calculer(referentiel_territoires, sources)
exporter(
axe,
chemin_dossier_output / dossier_population_agricole
)
def calculer(referentiel_territoires, sources_population_agricole):
log.info("##### CALCUL POPULATION AGRICOLE #####")
......
......@@ -400,8 +400,8 @@ def calculer_territoires(
chemin_fichiers_sau,
chemin_fichier_territoires_parcel,
chemin_dossier_output
) -> DictTerritoires:
sources = charger_sources(
) -> None:
sources = _charger_sources(
chemin_fichier_communes_et_arrondissements,
chemin_fichier_mouvements_communes,
chemin_fichier_epcis,
......@@ -422,11 +422,8 @@ def calculer_territoires(
chemin_dossier_output
)
return territoires
# TODO : rendre privé, ne plus utiliser cela depuis les autres modules
def charger_sources(
def _charger_sources(
chemin_fichier_communes_et_arrondissements: Path,
chemin_fichier_mouvements_communes: Path,
chemin_fichier_epcis: Path,
......
import unittest
from crater.outils import DictTerritoires
from crater.reglages import DOSSIER_TERRITOIRES, DOSSIER_SURFACE_AGRICOLE_UTILE, DOSSIER_PARCEL
from crater.territoires import calculateur
from tests.test_outils import assert_list_of_csv_files_are_equals, \
CHEMIN_INPUT_DATA, CHEMIN_OUTPUT_DATA, CHEMIN_EXPECTED_DATA, \
assert_dict_are_equals
CHEMIN_INPUT_DATA, CHEMIN_OUTPUT_DATA, CHEMIN_EXPECTED_DATA
class TestTerritoires(unittest.TestCase):
def test_chargement_referentiel_territoire(self):
# given
dataframes_territoires_calcules: DictTerritoires = calculateur.calculer_territoires(
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'communes_et_arrondissements.xlsx',
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'table_passage_communes.xlsx',
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'epcis.xlsx',
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'departements.csv',
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'regions.csv',
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'codes_postaux.csv',
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'population_totale_2017.csv',
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'population_totale_historique_2015.xlsx',
CHEMIN_INPUT_DATA / DOSSIER_SURFACE_AGRICOLE_UTILE / 'sau_par_commune_et_culture',
CHEMIN_INPUT_DATA / DOSSIER_PARCEL / 'correspondance_territoires_parcel_crater.csv',
CHEMIN_OUTPUT_DATA / DOSSIER_TERRITOIRES
)
# when
dataframes_territoires_charges: DictTerritoires = calculateur.charger_referentiel_territoires(
CHEMIN_OUTPUT_DATA / DOSSIER_TERRITOIRES
)
# then
assert_dict_are_equals(
dataframes_territoires_calcules,
dataframes_territoires_charges)
def test_generation_referentiel_territoires_csv_a_partir_sources(self):
calculateur.calculer_territoires(
CHEMIN_INPUT_DATA / DOSSIER_TERRITOIRES / 'communes_et_arrondissements.xlsx',
......
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