Skip to content
Snippets Groups Projects
Commit eb1fec52 authored by sandcha's avatar sandcha
Browse files

Vérifie la cohérence des inputs dsu_montant_eligible entre data DGCL et...

Vérifie la cohérence des inputs dsu_montant_eligible entre data DGCL et simulation pour une commune en 2024
parent d48ff739
No related branches found
No related tags found
1 merge request!7Ajoute un notebook d'analyse d'une unique commune configurable pour 2024
%% Cell type:markdown id: tags:
# Analyse des critères et dotations d'une commune
%% Cell type:code id: tags:
``` python
YEAR = 2024
CODE_INSEE_COMMUNE = "01317" # code postal = "01250"
NOM_COMMUNE = "Ramasse"
```
%% Cell type:markdown id: tags:
## Données brutes
%% Cell type:code id: tags:
``` python
# Activate multi-output in notebook
# %matplotlib inline (pour des graphes)
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
```
%% Cell type:code id: tags:
``` python
import logging
from leximpact_dotations_back import logger
logger.setLevel(logging.INFO)
```
%% Cell type:code id: tags:
``` python
from os import getcwd
from os.path import join
from leximpact_dotations_back.data_building.build_dotations_data import load_criteres
DATA_DIRECTORY = join(getcwd(), "..", "..", "data")
data_brutes_criteres_2023 = load_criteres(DATA_DIRECTORY, YEAR-1)
data_brutes_criteres_2024 = load_criteres(DATA_DIRECTORY, YEAR)
# data_brutes_criteres_2024.columns
# data_brutes_criteres_2024.columns[data_brutes_criteres_2024.columns.str.contains("rural")]
```
%% Output
🔹 INFO
Loading /Users/sch/dev/gitruc/data-exploration/data/criteres_repartition_2023.csv...
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:50: DtypeWarning: Columns (2,19,37,39,43,45,52,57,59,65,66,79,98,102,108,130,138,140,141,142,143,149,151,152,157,166,167,168,169,171,175,176,177) have mixed types. Specify dtype option on import or set low_memory=False.
dgcl_data = read_csv(csv_path, decimal=DECIMAL_SEPARATOR_2024, dtype={CODE_INSEE_2024: CODE_INSEE_DTYPE_2024})
🔹 INFO
Loading /Users/sch/dev/gitruc/data-exploration/data/criteres_repartition_2024.csv...
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:50: DtypeWarning: Columns (2,19,25,26,35,36,38,42,44,51,57,59,63,64,77,105,119,120,121,122,135,137,138,139,145,147,148,154,159) have mixed types. Specify dtype option on import or set low_memory=False.
dgcl_data = read_csv(csv_path, decimal=DECIMAL_SEPARATOR_2024, dtype={CODE_INSEE_2024: CODE_INSEE_DTYPE_2024})
%% Cell type:code id: tags:
``` python
def get_commune_in_data_criteres(data_brutes_criteres, code_insee_commune):
filter_code_insee = data_brutes_criteres['Informations générales - Code INSEE de la commune'] == code_insee_commune
commune_in_data = data_brutes_criteres[filter_code_insee]
return commune_in_data
print("2023 - Données brutes :")
commune_in_data_2023 = get_commune_in_data_criteres(data_brutes_criteres_2023, CODE_INSEE_COMMUNE)
commune_in_data_2023
print("2024 - Données brutes :")
commune_in_data_2024 = get_commune_in_data_criteres(data_brutes_criteres_2024, CODE_INSEE_COMMUNE)
commune_in_data_2024
```
%% Output
2023 - Données brutes :
Informations générales - Code INSEE de la commune \
267 01317
Informations générales - Nom de la commune \
267 RAMASSE
Informations générales - Code département de la commune \
267 1
Informations générales - Code SIREN de l'EPCI \
267 200071751
Informations générales - Nom de l'EPCI Informations générales - Exercice \
267 CA DU BASSIN DE BOURG-EN-BRESSE 2023
Informations générales - Régime fiscal de l'EPCI N \
267 FPU
Informations générales - Population DGF de l'année N \
267 348
Informations générales - Population INSEE de l'année N \
267 337
Informations générales - Résidences secondaires de l'année N ... \
267 11 ...
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Montant total de DACOM réparti \
267 0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Centimes additionnels \
267 0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Eloignement par rapport au chef-lieu du territoire \
267 0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Impôts ménages \
267 0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Commune aurifère \
267 0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Indice synthétique DPOM \
267 0.0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Coefficient de majoration de l'IS \
267 0.0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Potentiel financier majoré de l'octroi de mer \
267 0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Potentiel financier majoré de l'octroi de mer par habitant \
267 0
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Nombre de foyers bénéficiaires du RSA
267 0
[1 rows x 178 columns]
2024 - Données brutes :
Informations générales - Code INSEE de la commune \
267 01317
Informations générales - Nom de la commune \
267 RAMASSE
Informations générales - Code département de la commune \
267 1
Informations générales - Code SIREN de l'EPCI \
267 200071751
Informations générales - Nom de l'EPCI Informations générales - Exercice \
267 CA DU BASSIN DE BOURG-EN-BRESSE 2024
Informations générales - Régime fiscal de l'EPCI N \
267 FPU
Informations générales - Population DGF de l'année N \
267 348
Informations générales - Population INSEE de l'année N \
267 337
Informations générales - Résidences secondaires de l'année N ... \
267 11 ...
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Coefficient de majoration de l'IS \
267 n.c
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Potentiel financier majoré de l'octroi de mer \
267 n.c
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Potentiel financier majoré de l'octroi de mer par habitant \
267 n.c
Dotation d’aménagement des communes et circonscriptions territoriales d’outre-mer - Nombre de foyers bénéficiaires du RSA \
267 n.c
Dotation en faveur des communes nouvelles - Commune éligible à la part de garantie \
267 0
Dotation en faveur des communes nouvelles - DGF de référence de la commune nouvelle \
267 0
Dotation en faveur des communes nouvelles - Montant de la part garantie \
267 0
Dotation en faveur des communes nouvelles - Commune éligible à la part d'amorçage \
267 0
Dotation en faveur des communes nouvelles - Montant de la part d'amorçage \
267 0
Dotation en faveur des communes nouvelles - Montant total réparti
267 0
[1 rows x 180 columns]
%% Cell type:markdown id: tags:
### Dotations de la commune dans les données brutes
%% Cell type:code id: tags:
``` python
# from leximpact_dotations_back.mapping.criteres_dgcl_2024 import montants_dotations_2024
# montants_dotations_2024
DGCL_VALUE__STRING_NON_BREAKING_SPACE = '\xa0'
# numeric_value : chaîne de caractères représentant une valeur numérique
# (si déjà un nombre, renvoyé sans modification)
def format_string_numeric_with_spaces_to_numeric(numeric_value):
if type(numeric_value) == str:
clean_value = numeric_value
is_float = ("," in numeric_value) or ("." in numeric_value)
if is_float:
clean_value = numeric_value.replace(',', '.')
clean_value = clean_value.replace(DGCL_VALUE__STRING_NON_BREAKING_SPACE, "")
return float(clean_value) if is_float else int(clean_value)
else :
return numeric_value
df_notifiee_2024 = format_string_numeric_with_spaces_to_numeric(commune_in_data_2024['Dotation forfaitaire - Dotation forfaitaire notifiée N'].values[0])
dsr_notifiee_2024 = format_string_numeric_with_spaces_to_numeric(commune_in_data_2024['Dotation de solidarité rurale - Montant total réparti'].values[0])
dsu_notifiee_2024 = format_string_numeric_with_spaces_to_numeric(commune_in_data_2024['Dotation de solidarité urbaine et de cohésion sociale - Montant total réparti'].values[0])
dcn_notifiee_2024 = format_string_numeric_with_spaces_to_numeric(commune_in_data_2024['Dotation en faveur des communes nouvelles - Montant total réparti'].values[0])
print(f"[{YEAR}][🧳 DF] Notification : {df_notifiee_2024}")
print(f"[{YEAR}][🌻 DSR] Notification : {dsr_notifiee_2024}")
print(f"[{YEAR}][🏢 DSU] Notification : {dsu_notifiee_2024}")
print(f"[{YEAR}][🪴 DCN] Notification : {dcn_notifiee_2024}")
```
%% Output
[2024][🧳 DF] Notification : 15288
[2024][🌻 DSR] Notification : 10783
[2024][🏢 DSU] Notification : 0
[2024][🪴 DCN] Notification : 0
%% Cell type:markdown id: tags:
### Dotations de la commune dans les données calculées par leximpact-dotations-back
%% Cell type:code id: tags:
``` python
# Option 1) from leximpact_dotations_back.preload import dotations_adapted_criteres_2024, simulation_2024
# (mais contraintes de chemins de données à adapter)
## Option 2)
## from pandas import DataFrame
## from leximpact_dotations_back.computing.simulation_2024 import build_data_2024, get_simulation_2024
## (oui, on charge les données une seconde fois ici)
## dotations_adapted_criteres_2024: DataFrame = build_data_2024(data_directory = DATA_DIRECTORY, year = YEAR)
### Option 3) pour vérification rapide sans contraintes de chemins de données
from data_exploration.utils.simulation_2024 import buid_data_2023_for_2024, build_data_2024, create_simulation_2024
dotations_adapted_criteres_2024 = build_data_2024()
selection_data_2023 = buid_data_2023_for_2024()
simulation_2024 = create_simulation_2024(dotations_adapted_criteres_2024, selection_data_2023)
```
%% Output
🔹 INFO
Loading /Users/sch/dev/gitruc/data-exploration/data/criteres_repartition_2024.csv...
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:50: DtypeWarning: Columns (2,19,25,26,35,36,38,42,44,51,57,59,63,64,77,105,119,120,121,122,135,137,138,139,145,147,148,154,159) have mixed types. Specify dtype option on import or set low_memory=False.
dgcl_data = read_csv(csv_path, decimal=DECIMAL_SEPARATOR_2024, dtype={CODE_INSEE_2024: CODE_INSEE_DTYPE_2024})
🔸 WARNING
Specific treatment applied to some communes: 57163 and 87116
🔹 INFO
Loading /Users/sch/dev/gitruc/data-exploration/data/criteres_repartition_2023.csv...
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:50: DtypeWarning: Columns (2,19,37,39,43,45,52,57,59,65,66,79,98,102,108,130,138,140,141,142,143,149,151,152,157,166,167,168,169,171,175,176,177) have mixed types. Specify dtype option on import or set low_memory=False.
dgcl_data = read_csv(csv_path, decimal=DECIMAL_SEPARATOR_2024, dtype={CODE_INSEE_2024: CODE_INSEE_DTYPE_2024})
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:117: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits[nom_ofdl] = data[nom_dgcl]
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:126: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits["dsu_montant_eligible"] = (
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:136: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits["dsr_montant_hors_garanties_fraction_perequation"] = data[
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:144: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits["dsr_montant_eligible_fraction_perequation"] = (
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/leximpact_dotations_back/data_building/build_dotations_data.py:153: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
resultats_extraits["dsr_montant_hors_garanties_fraction_cible"] = data[
%% Cell type:code id: tags:
``` python
from numpy import where
codes_insee_2024 = simulation_2024.calculate("code_insee", f"{YEAR}-01")
index_commune_in_simulation = where(codes_insee_2024 == CODE_INSEE_COMMUNE)[0][0]
df_simulee_2024 = simulation_2024.calculate("dotation_forfaitaire", YEAR)[index_commune_in_simulation]
dsr_simulee_2024 = simulation_2024.calculate("dotation_solidarite_rurale", YEAR)[index_commune_in_simulation]
dsu_simulee_2024 = simulation_2024.calculate("dsu_montant", YEAR)[index_commune_in_simulation]
dcn_simulee_2024 = simulation_2024.calculate("dotation_communes_nouvelles", YEAR)[index_commune_in_simulation]
print(f"[{YEAR}][🧳 DF] Simulée : {df_simulee_2024}")
print(f"[{YEAR}][🌻 DSR] Simulée : {dsr_simulee_2024}")
print(f"[{YEAR}][🏢 DSU] Simulée : {dsu_simulee_2024}")
print(f"[{YEAR}][🪴 DCN] Simulée : {dcn_simulee_2024}")
```
%% Output
[2024][🧳 DF] Simulée : 13512.0
[2024][🌻 DSR] Simulée : 44.650325775146484
[2024][🏢 DSU] Simulée : nan
[2024][🪴 DCN] Simulée : nan
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/openfisca_france_dotations_locales/variables/dotation_forfaitaire.py:190: RuntimeWarning: divide by zero encountered in log10
dotation_supp_par_habitant = facteur_minimum + (facteur_maximum - facteur_minimum) * max_(0, min_(1, facteur_du_coefficient_logarithmique * log10(safe_divide(population_majoree_dgf, plancher_dgcl_population_dgf_majoree, 1))))
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/openfisca_france_dotations_locales/variables/dotation_forfaitaire.py:40: RuntimeWarning: divide by zero encountered in log10
coefficient_logarithmique = max_(1, min_(2, 1 + facteur_du_coefficient_logarithmique * log10(population_dgf / plancher_dgcl_population_dgf)))
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/openfisca_france_dotations_locales/variables/dotation_forfaitaire.py:72: RuntimeWarning: divide by zero encountered in divide
potentiel_fiscal_moyen_commune = where(population_logarithmee > 0, potentiel_fiscal / population_logarithmee, 0)
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/openfisca_france_dotations_locales/variables/dotation_forfaitaire.py:157: RuntimeWarning: divide by zero encountered in divide
potentiel_fiscal_moyen_commune = where(population_logarithmee > 0, potentiel_fiscal / population_logarithmee, 0)
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/openfisca_france_dotations_locales/variables/dotation_solidarite_urbaine.py:411: RuntimeWarning: invalid value encountered in divide
pourcentage_augmentation_dsu = dsu_montant_total / dsu_an_precedent - 1
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/openfisca_france_dotations_locales/variables/dotation_solidarite_urbaine.py:425: RuntimeWarning: invalid value encountered in divide
facteur_qpv = (1 + np.where(population_insee > 0, poids_quartiers_prioritaires_ville * population_qpv / population_insee, 0))
/Users/sch/Library/Caches/pypoetry/virtualenvs/data-exploration-VsNz68cn-py3.11/lib/python3.11/site-packages/openfisca_france_dotations_locales/variables/dotation_solidarite_urbaine.py:426: RuntimeWarning: invalid value encountered in divide
facteur_zfu = (1 + np.where(population_insee > 0, poids_zone_franche_urbaine * population_zfu / population_insee, 0))
%% Cell type:markdown id: tags:
## Analyse de [in]cohérence
%% Cell type:code id: tags:
``` python
index_commune_in_criteres_bruts_2024 = data_brutes_criteres_2024.index[data_brutes_criteres_2024['Informations générales - Code INSEE de la commune'] == CODE_INSEE_COMMUNE][0]
index_commune_in_adapted_criteres_2024 = dotations_adapted_criteres_2024.index[dotations_adapted_criteres_2024['code_insee'] == CODE_INSEE_COMMUNE][0]
assert index_commune_in_criteres_bruts_2024 == index_commune_in_adapted_criteres_2024
assert index_commune_in_criteres_bruts_2024 == index_commune_in_simulation
```
%% Cell type:code id: tags:
``` python
ecart_df_2024 = df_simulee_2024 - df_notifiee_2024
ecart_dsr_2024 = dsr_simulee_2024 - dsr_notifiee_2024
ecart_dsu_2024 = dsu_simulee_2024 - dsu_notifiee_2024
ecart_dcn_2024 = dcn_simulee_2024 - dcn_notifiee_2024
print(f"[{YEAR}][🧳 DF] Écart dotation calculée par simulation [{df_simulee_2024}] - officielle notifiée [{df_notifiee_2024}] : {ecart_df_2024}")
print(f"[{YEAR}][🌻 DSR] Écart dotation calculée par simulation [{dsr_simulee_2024}] - officielle notifiée [{dsr_notifiee_2024}] : {ecart_dsr_2024}")
print(f"[{YEAR}][🏢 DSU] Écart dotation calculée par simulation [{dsu_simulee_2024}] - officielle notifiée [{dsu_notifiee_2024}] : {ecart_dsu_2024}")
print(f"[{YEAR}][🪴 DCN] Écart dotation calculée par simulation [{dcn_simulee_2024}] - officielle notifiée [{dcn_notifiee_2024}] : {ecart_dcn_2024}")
```
%% Output
[2024][🧳 DF] Écart dotation calculée par simulation [13512.0] - officielle notifiée [15288] : -1776.0
[2024][🌻 DSR] Écart dotation calculée par simulation [44.650325775146484] - officielle notifiée [10783] : -10738.349674224854
[2024][🏢 DSU] Écart dotation calculée par simulation [nan] - officielle notifiée [0] : nan
[2024][🪴 DCN] Écart dotation calculée par simulation [nan] - officielle notifiée [0] : nan
%% Cell type:code id: tags:
``` python
def calculate_ecart_2023(dgcl_column_name, openfisca_variable_name, print_prefix = ""):
# écarts entre données DGCL de référence 2023
# et calculs de simulation chargée sur données 2023 et 2024
notifiee_2023 = format_string_numeric_with_spaces_to_numeric(
commune_in_data_2023[dgcl_column_name].values[0]
)
LAST_YEAR = YEAR-1
simulee_2023 = simulation_2024.calculate(openfisca_variable_name, LAST_YEAR)[index_commune_in_simulation]
ecart_2023 = simulee_2023 - notifiee_2023
print(f"[{LAST_YEAR}]{print_prefix} Écart calculé par simulation [{simulee_2023}] - officiellement notifié [{notifiee_2023}] : {ecart_2023}")
def calculate_ecart_2024(dgcl_column_name, openfisca_variable_name, print_prefix = ""):
# écarts entre données DGCL de référence 2024
# et calculs de simulation chargée sur données 2023 et 2024
notifiee_2024 = format_string_numeric_with_spaces_to_numeric(
commune_in_data_2024[dgcl_column_name].values[0]
)
simulee_2024 = simulation_2024.calculate(openfisca_variable_name, YEAR)[index_commune_in_simulation]
ecart_2024 = simulee_2024 - notifiee_2024
print(f"[{YEAR}]{print_prefix} Écart calculé par simulation [{simulee_2024}] - officiellement notifié [{notifiee_2024}] : {ecart_2024}")
```
%% Cell type:markdown id: tags:
### 🪴 DCN
%% Cell type:code id: tags:
``` python
# variables intervenant dans le calcul de dotation_communes_nouvelles_part_garantie
print(f"dotation_communes_nouvelles_eligible_part_garantie = {simulation_2024.calculate('dotation_communes_nouvelles_eligible_part_garantie', YEAR)[index_commune_in_simulation]}")
print(f"dotation_globale_fonctionnement_reference_communes = {simulation_2024.calculate('dotation_globale_fonctionnement_reference_communes', YEAR)[index_commune_in_simulation]}")
print(f"dotation_globale_fonctionnement_communes = {simulation_2024.calculate('dotation_globale_fonctionnement_communes', YEAR)[index_commune_in_simulation]}")
# variables intervenant dans le calcul de dotation_globale_fonctionnement_communes (appelée par dotation_communes_nouvelles_part_garantie)
print(f"dotation_forfaitaire = {simulation_2024.calculate('dotation_forfaitaire', YEAR)[index_commune_in_simulation]}")
print(f"dotation_solidarite_rurale = {simulation_2024.calculate('dotation_solidarite_rurale', YEAR)[index_commune_in_simulation]}")
print(f"dsu_montant = {simulation_2024.calculate('dsu_montant', YEAR)[index_commune_in_simulation]}")
print(f"dotation_nationale_perequation = {simulation_2024.calculate('dotation_nationale_perequation', YEAR)[index_commune_in_simulation]}")
```
%% Output
dotation_communes_nouvelles_eligible_part_garantie = 0.0
dotation_globale_fonctionnement_reference_communes = 0.0
dotation_globale_fonctionnement_communes = nan
dotation_forfaitaire = 13512.0
dotation_solidarite_rurale = 44.650325775146484
dsu_montant = nan
dotation_nationale_perequation = 0.0
%% Cell type:code id: tags:
``` python
# dotation_communes_nouvelles
# = dotation_communes_nouvelles_part_amorcage + dotation_communes_nouvelles_part_garantie
calculate_ecart_2024(
"Dotation en faveur des communes nouvelles - Montant de la part d'amorçage",
"dotation_communes_nouvelles_part_amorcage",
"[🪴 DCN][part amorçage]"
)
calculate_ecart_2024(
"Dotation en faveur des communes nouvelles - Montant de la part garantie",
"dotation_communes_nouvelles_part_garantie",
"[🪴 DCN][part garantie]"
)
```
%% Output
[2024][🪴 DCN][part amorçage] Écart calculé par simulation [0.0] - officiellement notifié [0] : 0.0
[2024][🪴 DCN][part garantie] Écart calculé par simulation [nan] - officiellement notifié [0] : nan
%% Cell type:markdown id: tags:
### 🧳 DF
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
### 🌻 DSR
%% Cell type:markdown id: tags:
#### Fraction cible
Toutes les colonnes disponibles dans les données brutes 2024 :
* 'Dotation de solidarité rurale - Fraction cible - Revenu imposable moyen par habitant sur 3 ans'
* 'Dotation de solidarité rurale - Fraction cible - Indice synthétique DSR Cible'
* 'Dotation de solidarité rurale - Fraction cible - Rang DSR Cible'
* 'Dotation de solidarité rurale - Fraction cible - Commune éligible'
* 'Dotation de solidarité rurale - Fraction cible - Part Pfi'
* 'Dotation de solidarité rurale - Fraction cible - Part VOIRIE'
* 'Dotation de solidarité rurale - Fraction cible - Part ENFANTS'
* 'Dotation de solidarité rurale - Fraction cible - Part Pfi/hectare (Pfis)'
* 'Dotation de solidarité rurale - Fraction cible - Montant de la garantie de sortie cible des communes devenues inéligibles en N'
* 'Dotation de solidarité rurale - Fraction cible - Montant global réparti'
%% Cell type:code id: tags:
``` python
calculate_ecart_2024(
"Dotation de solidarité rurale - Fraction cible - Montant global réparti",
"dsr_fraction_cible",
"[🌻 DSR][cible]"
)
```
%% Output
[2024][🌻 DSR][cible] Écart calculé par simulation [-0.0] - officiellement notifié [0] : -0.0
%% Cell type:markdown id: tags:
#### Fraction bourg-centre
Toutes les colonnes disponibles dans les données brutes 2024 :
* 'Dotation de solidarité rurale - Fraction bourg-centre - Montant de la commune éligible'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Montant de la garantie de sortie BC'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Montant global réparti'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Population DGF plafonnée'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Population DGF des communes du canton d'appartenance en 2014'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Pourcentage de la population communale dans le canton d'appartenance en 2014'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Population DGF des communes de l'unité urbaine'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Population départementale de référence de l'unité urbaine'
* 'Dotation de solidarité rurale - Fraction bourg-centre - La commune appartient à une UU avec un CL de département ?'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Code commune chef-lieu de canton au 1er janvier 2014'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Nom commune chef-lieu de canton au 1er janvier 2014'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Bureaux centralisateurs'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Chef-lieu d'arrondissement au 31 décembre 2014'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Commune située en ZRR'
* 'Dotation de solidarité rurale - Fraction bourg-centre - Grille de densité de l'INSEE'
%% Cell type:code id: tags:
``` python
# dsr_fraction_bourg_centre
# = max_(
# dsr_montant_eligible_fraction_bourg_centre,
# max_(dsr_montant_garantie_non_eligible_fraction_bourg_centre, dsr_garantie_commune_nouvelle_fraction_bourg_centre))
print(f'dsr_montant_garantie_non_eligible_fraction_bourg_centre = {simulation_2024.calculate("dsr_montant_garantie_non_eligible_fraction_bourg_centre", YEAR)[index_commune_in_simulation]}')
print(f'dsr_garantie_commune_nouvelle_fraction_bourg_centre = {simulation_2024.calculate("dsr_garantie_commune_nouvelle_fraction_bourg_centre", YEAR)[index_commune_in_simulation]}')
print(f'dsr_montant_eligible_fraction_bourg_centre = {simulation_2024.calculate("dsr_montant_eligible_fraction_bourg_centre", YEAR)[index_commune_in_simulation]}')
# dsr_montant_eligible_fraction_bourg_centre (montant attribué fraction bourg-centre incluant garanties de stabilité)
# = where(
# (dsr_montant_hors_garanties_fraction_bourg_centre > 0) & (montant_an_precedent > 0),
# max_(plancher_progression * montant_an_precedent,
# min_(plafond_progression * montant_an_precedent, dsr_montant_hors_garanties_fraction_bourg_centre)),
# dsr_montant_hors_garanties_fraction_bourg_centre)
print(f'[{YEAR-1}] dsr_montant_eligible_fraction_bourg_centre = {simulation_2024.calculate("dsr_montant_eligible_fraction_bourg_centre", YEAR-1)[index_commune_in_simulation]}')
print(f'dsr_montant_hors_garanties_fraction_bourg_centre = {simulation_2024.calculate("dsr_montant_hors_garanties_fraction_bourg_centre", YEAR)[index_commune_in_simulation]}')
# dsr_montant_hors_garanties_fraction_bourg_centre
# = dsr_score_attribution_fraction_bourg_centre * dsr_valeur_point_fraction_bourg_centre
print(f'dsr_score_attribution_fraction_bourg_centre = {simulation_2024.calculate("dsr_score_attribution_fraction_bourg_centre", YEAR)[index_commune_in_simulation]}')
print(f'dsr_valeur_point_fraction_bourg_centre = {simulation_2024.calculate("dsr_valeur_point_fraction_bourg_centre", YEAR)[0]}') # Entité État
print("-----")
calculate_ecart_2024(
"Dotation de solidarité rurale - Fraction bourg-centre - Montant global réparti",
"dsr_fraction_bourg_centre",
"[🌻 DSR][bourg-centre]"
)
```
%% Output
dsr_montant_garantie_non_eligible_fraction_bourg_centre = 0.0
dsr_garantie_commune_nouvelle_fraction_bourg_centre = 0.0
dsr_montant_eligible_fraction_bourg_centre = 44.650325775146484
[2023] dsr_montant_eligible_fraction_bourg_centre = 0.0
dsr_montant_hors_garanties_fraction_bourg_centre = 44.650325775146484
dsr_score_attribution_fraction_bourg_centre = 228.64430236816406
dsr_valeur_point_fraction_bourg_centre = 0.19528290629386902
-----
[2024][🌻 DSR][bourg-centre] Écart calculé par simulation [44.650325775146484] - officiellement notifié [0] : 44.650325775146484
%% Cell type:markdown id: tags:
#### Fraction péréquation
Toutes les colonnes disponibles dans les données brutes 2024 :
* 'Dotation de solidarité rurale - Fraction péréquation - Part Pfi'
* 'Dotation de solidarité rurale - Fraction péréquation - Part VOIRIE'
* 'Dotation de solidarité rurale - Fraction péréquation - Part ENFANTS'
* 'Dotation de solidarité rurale - Fraction péréquation - Part Pfi/hectare'
* 'Dotation de solidarité rurale - Fraction péréquation - Commune éligible'
* 'Dotation de solidarité rurale - Fraction péréquation - Montant global réparti'
* 'Dotation de solidarité rurale - Fraction péréquation - Commune située en zone de montagne'
* 'Dotation de solidarité rurale - Fraction péréquation - Commune insulaire'
* 'Dotation de solidarité rurale - Fraction péréquation - Population 3 à 16 ans'
* 'Dotation de solidarité rurale - Fraction péréquation - Longueur de voirie en mètres'
%% Cell type:code id: tags:
``` python
# variables intervenant dans le calcul de dsr_fraction_perequation
print(f'dsr_garantie_commune_nouvelle_fraction_perequation = {simulation_2024.calculate("dsr_garantie_commune_nouvelle_fraction_perequation", YEAR)[index_commune_in_simulation]}') # input value
print(f'dsr_montant_eligible_fraction_perequation = {simulation_2024.calculate("dsr_montant_eligible_fraction_perequation", YEAR)[index_commune_in_simulation]}')
# variables intervenant dans le calcul de dsr_montant_eligible_fraction_perequation 2024
print(f'[{YEAR-1}] dsr_montant_eligible_fraction_perequation = {simulation_2024.calculate("dsr_montant_eligible_fraction_perequation", YEAR-1)[index_commune_in_simulation]}')
print(f'dsr_montant_hors_garanties_fraction_perequation = {simulation_2024.calculate("dsr_montant_hors_garanties_fraction_perequation", YEAR)[index_commune_in_simulation]}')
```
%% Output
dsr_garantie_commune_nouvelle_fraction_perequation = 0.0
dsr_montant_eligible_fraction_perequation = 0.0
[2023] dsr_montant_eligible_fraction_perequation = 9897.0
dsr_montant_hors_garanties_fraction_perequation = 0.0
%% Cell type:markdown id: tags:
> variables intervenant dans le calcul de dsr_montant_hors_garanties_fraction_perequation
##### Part Pfi
%% Cell type:code id: tags:
``` python
# dsr_fraction_perequation_part_potentiel_financier_par_habitant
# = dsr_score_attribution_perequation_part_potentiel_financier_par_habitant * dsr_valeur_point_fraction_perequation_part_potentiel_financier_par_habitant
print(f'dsr_score_attribution_perequation_part_potentiel_financier_par_habitant = {simulation_2024.calculate("dsr_score_attribution_perequation_part_potentiel_financier_par_habitant", YEAR)[index_commune_in_simulation]}')
print(f'dsr_valeur_point_fraction_perequation_part_potentiel_financier_par_habitant = {simulation_2024.calculate("dsr_valeur_point_fraction_perequation_part_potentiel_financier_par_habitant", YEAR)[index_commune_in_simulation]}')
# dsr_valeur_point_fraction_perequation_part_potentiel_financier_par_habitant
# = dsr_montant_total_eligibles_fraction_perequation_part_potentiel_financier_par_habitant / somme(dsr_score_attribution_perequation_part_potentiel_financier_par_habitant)
print(f'dsr_montant_total_eligibles_fraction_perequation_part_potentiel_financier_par_habitant = {simulation_2024.calculate("dsr_montant_total_eligibles_fraction_perequation_part_potentiel_financier_par_habitant", YEAR)[index_commune_in_simulation]}')
print(f'dsr_score_attribution_perequation_part_potentiel_financier_par_habitant = {simulation_2024.calculate("dsr_score_attribution_perequation_part_potentiel_financier_par_habitant", YEAR).sum()}')
# dsr_montant_total_eligibles_fraction_perequation_part_potentiel_financier_par_habitant
# = dsr_montant_total_eligibles_fraction_perequation * paramètre de poids
print(f'dsr_montant_total_eligibles_fraction_perequation = {simulation_2024.calculate("dsr_montant_total_eligibles_fraction_perequation", YEAR)[index_commune_in_simulation]}')
# dsr_montant_total_eligibles_fraction_perequation
# = dsr_montant_total_fraction_perequation - ((~dsr_eligible_fraction_perequation) * dsr_garantie_commune_nouvelle_fraction_perequation).sum()
print(f'dsr_montant_total_fraction_perequation = {simulation_2024.calculate("dsr_montant_total_fraction_perequation", YEAR)[index_commune_in_simulation]}')
print(f'dsr_garantie_commune_nouvelle_fraction_perequation = {simulation_2024.calculate("dsr_garantie_commune_nouvelle_fraction_perequation", YEAR)[index_commune_in_simulation]}')
print(f'dsr_eligible_fraction_perequation = {simulation_2024.calculate("dsr_eligible_fraction_perequation", YEAR)[index_commune_in_simulation]}')
# dsr_montant_total_fraction_perequation
print(f'dsr_montant_total_fraction_perequation = {simulation_2024.calculate("dsr_montant_total_fraction_perequation", YEAR-1)[index_commune_in_simulation]}') # TODO ajouter à l'initialisation
print(f'dsr_perequation_accroissement_metropole = {simulation_2024.calculate("dsr_perequation_accroissement_metropole", YEAR)[0]}') # Entité État
print("-----")
calculate_ecart_2024(
"Dotation de solidarité rurale - Fraction péréquation - Part Pfi",
"dsr_fraction_perequation_part_potentiel_financier_par_habitant",
"[🌻 DSR][péréquation][part potentiel financier / hab.]"
)
```
%% Output
dsr_score_attribution_perequation_part_potentiel_financier_par_habitant = 176.2482452392578
dsr_valeur_point_fraction_perequation_part_potentiel_financier_par_habitant = 0.0
dsr_montant_total_eligibles_fraction_perequation_part_potentiel_financier_par_habitant = 0.0
dsr_score_attribution_perequation_part_potentiel_financier_par_habitant = 38454660.0
dsr_montant_total_eligibles_fraction_perequation = 0.0
dsr_montant_total_fraction_perequation = 0.0
dsr_garantie_commune_nouvelle_fraction_perequation = 0.0
dsr_eligible_fraction_perequation = True
dsr_montant_total_fraction_perequation = 0.0
dsr_perequation_accroissement_metropole = 0.1075957790017128
-----
[2024][🌻 DSR][péréquation][part potentiel financier / hab.] Écart calculé par simulation [0.0] - officiellement notifié [1190.0] : -1190.0
%% Cell type:markdown id: tags:
##### Part voirie
%% Cell type:code id: tags:
``` python
calculate_ecart_2024(
"Dotation de solidarité rurale - Fraction péréquation - Part VOIRIE",
"dsr_fraction_perequation_part_longueur_voirie",
"[🌻 DSR][péréquation][part voirie]"
)
```
%% Output
[2024][🌻 DSR][péréquation][part voirie] Écart calculé par simulation [0.0] - officiellement notifié [4167] : -4167.0
%% Cell type:markdown id: tags:
##### Part enfants
%% Cell type:code id: tags:
``` python
calculate_ecart_2024(
"Dotation de solidarité rurale - Fraction péréquation - Part ENFANTS",
"dsr_fraction_perequation_part_enfants",
"[🌻 DSR][péréquation][part enfants]"
)
```
%% Output
[2024][🌻 DSR][péréquation][part enfants] Écart calculé par simulation [0.0] - officiellement notifié [3340] : -3340.0
%% Cell type:markdown id: tags:
##### Part Pfi/hectare
%% Cell type:code id: tags:
``` python
calculate_ecart_2024(
"Dotation de solidarité rurale - Fraction péréquation - Part Pfi/hectare",
"dsr_fraction_perequation_part_potentiel_financier_par_hectare",
"[🌻 DSR][péréquation][part potentiel financier / hectare]"
)
```
%% Output
[2024][🌻 DSR][péréquation][part potentiel financier / hectare] Écart calculé par simulation [0.0] - officiellement notifié [2086] : -2086.0
%% Cell type:code id: tags:
``` python
calculate_ecart_2024(
"Dotation de solidarité rurale - Fraction péréquation - Montant global réparti",
"dsr_fraction_perequation",
"[🌻 DSR][péréquation]"
)
```
%% Output
[2024][🌻 DSR][péréquation] Écart calculé par simulation [0.0] - officiellement notifié [10783] : -10783.0
%% Cell type:markdown id: tags:
### 🏢 DSU
%% Cell type:markdown id: tags:
#### DSU éligibilité
%% Cell type:code id: tags:
``` python
dsu_eligible_notifiee_2024_deduite = dsu_notifiee_2024 > 0
dsu_eligible_simulee_2024 = simulation_2024.calculate("dsu_eligible", YEAR)[index_commune_in_simulation]
print(f"[🏢 DSU][éligibilité] Écarts calculée par simulation [{dsu_eligible_simulee_2024}] v.s officielle notifiée (déduite du montant) [{dsu_eligible_notifiee_2024_deduite}].")
```
%% Output
[🏢 DSU][éligibilité] Écarts calculée par simulation [False] v.s officielle notifiée (déduite du montant) [False].
%% Cell type:markdown id: tags:
### DSU - non éligible - garantie
%% Cell type:code id: tags:
``` python
calculate_ecart_2024(
"Dotation de solidarité urbaine et de cohésion sociale - Montant de la garantie effectivement appliquée à la commune",
"dsu_montant_garantie_non_eligible",
"[🏢 DSU][non éligible][garantie]"
)
```
%% Output
[2024][🏢 DSU][non éligible][garantie] Écart calculé par simulation [0.0] - officiellement notifié [0] : 0.0
%% Cell type:markdown id: tags:
### DSU - éligible (de l'année, sans garantie de fin d'éligibilité)
%% Cell type:code id: tags:
``` python
# dsu_montant_eligible
# (montant communes éligibles actuellement à la DSU
# sans cas des communes qui ne sont plus éligibles actuellement mais perçoivent un montant pour garantie)
dsu_montant_eligible = simulation_2024.calculate("dsu_montant_eligible", YEAR)[index_commune_in_simulation]
print(f'dsu_montant_eligible = {dsu_montant_eligible}')
# pas de colonne équivalente dans les données DGCL
dgcl_dsu_montant_total_reparti = format_string_numeric_with_spaces_to_numeric(commune_in_data_2024['Dotation de solidarité urbaine et de cohésion sociale - Montant total réparti'].values[0])
dgcl_dsu_montant_garantie_effective = format_string_numeric_with_spaces_to_numeric(commune_in_data_2024['Dotation de solidarité urbaine et de cohésion sociale - Montant de la garantie effectivement appliquée à la commune'].values[0])
dgcl_dsu_montant_eligible_deduit = dgcl_dsu_montant_total_reparti - dgcl_dsu_montant_garantie_effective
print(f'[{YEAR}][🏢 DSU][éligible][montant] Écart calculé par simulation [{dsu_montant_eligible}] vs. officiel notifié (déduit)[{dgcl_dsu_montant_eligible_deduit}]')
# print("-----")
# montants_an_precedent
# TODO données dgcl : soustraire les garanties des communes non éligibles pour correspondre à dsu_montant_eligible
# calculate_ecart_2023(
# "Dotation de solidarité urbaine et de cohésion sociale - Montant total réparti",
# "dsu_montant_eligible",
# "[🏢 DSU][montant]"
# )
```
%% Output
dsu_montant_eligible = nan
[2024][🏢 DSU][éligible][montant] Écart calculé par simulation [nan] vs. officiel notifié (déduit)[0]
%% Cell type:code id: tags:
``` python
# variables appelées par dsu_montant_eligible en 2024
print(f'dsu_montant_total = {simulation_2024.calculate("dsu_montant_total", YEAR)[index_commune_in_simulation]}')
print(f'dsu_montant_total = {simulation_2024.calculate("dsu_montant_total", YEAR-1)[index_commune_in_simulation]}')
print(f'dsu_montant_eligible = {simulation_2024.calculate("dsu_montant_eligible", YEAR-1)[index_commune_in_simulation]}')
print(f'[{YEAR-1}] dsu_montant_total = {simulation_2024.calculate("dsu_montant_total", YEAR-1)[index_commune_in_simulation]}')
print(f'[{YEAR-1}] dsu_montant_eligible = {simulation_2024.calculate("dsu_montant_eligible", YEAR-1)[index_commune_in_simulation]}')
print(f'dsu_eligible = {simulation_2024.calculate("dsu_eligible", YEAR)[index_commune_in_simulation]}')
print(f'dsu_montant_total_eligibles = {simulation_2024.calculate("dsu_montant_total_eligibles", YEAR)[index_commune_in_simulation]}')
print(f'rang_indice_synthetique_dsu_seuil_bas = {simulation_2024.calculate("rang_indice_synthetique_dsu_seuil_bas", YEAR)[index_commune_in_simulation]}')
print(f'rang_indice_synthetique_dsu_seuil_haut = {simulation_2024.calculate("rang_indice_synthetique_dsu_seuil_haut", YEAR)[index_commune_in_simulation]}')
print(f'dsu_nombre_communes_eligibles_seuil_bas = {simulation_2024.calculate("dsu_nombre_communes_eligibles_seuil_bas", YEAR)[index_commune_in_simulation]}')
print(f'dsu_nombre_communes_eligibles_seuil_haut = {simulation_2024.calculate("dsu_nombre_communes_eligibles_seuil_haut", YEAR)[index_commune_in_simulation]}')
print(f'effort_fiscal = {simulation_2024.calculate("effort_fiscal", YEAR)[index_commune_in_simulation]}') # 'Effort fiscal - Effort fiscal final'
print(f'population_insee = {simulation_2024.calculate("population_insee", YEAR)[index_commune_in_simulation]}') # 'Informations générales - Population INSEE de l'année N'
print(f'population_qpv = {simulation_2024.calculate("population_qpv", YEAR)[index_commune_in_simulation]}') # 'Dotation de solidarité urbaine et de cohésion sociale - Population QPV'
print(f'population_zfu = {simulation_2024.calculate("population_zfu", YEAR)[index_commune_in_simulation]}') # 'Dotation de solidarité urbaine et de cohésion sociale - Population ZFU'
print(f'population_dgf = {simulation_2024.calculate("population_dgf", YEAR)[index_commune_in_simulation]}') # 'Informations générales - Population DGF de l'année N'
print(f'indice_synthetique_dsu = {simulation_2024.calculate("indice_synthetique_dsu", YEAR)[index_commune_in_simulation]}') # 'Dotation de solidarité urbaine et de cohésion sociale - Valeur de l'indice synthétique de classement de la commune à la DSU'
print(f'effort_fiscal = {simulation_2024.calculate("effort_fiscal", YEAR)[index_commune_in_simulation]}')
# OK commune_in_data_2024['Effort fiscal - Effort fiscal final'].values[0]
# mais précision différente DGCL '0.630673' / SIMU 0.6306729912757874 !
print(f'population_insee = {simulation_2024.calculate("population_insee", YEAR)[index_commune_in_simulation]}')
# OK commune_in_data_2024["Informations générales - Population INSEE de l'année N"].values[0]
print(f'population_qpv = {simulation_2024.calculate("population_qpv", YEAR)[index_commune_in_simulation]}')
# OK commune_in_data_2024['Dotation de solidarité urbaine et de cohésion sociale - Population QPV'].values[0]
print(f'population_zfu = {simulation_2024.calculate("population_zfu", YEAR)[index_commune_in_simulation]}')
# OK commune_in_data_2024['Dotation de solidarité urbaine et de cohésion sociale - Population ZFU'].values[0]
print(f'population_dgf = {simulation_2024.calculate("population_dgf", YEAR)[index_commune_in_simulation]}')
# OK commune_in_data_2024["Informations générales - Population DGF de l'année N"].values[0]
print(f'indice_synthetique_dsu = {simulation_2024.calculate("indice_synthetique_dsu", YEAR)[index_commune_in_simulation]}')
# OK commune_in_data_2024["Dotation de solidarité urbaine et de cohésion sociale - Valeur de l'indice synthétique de classement de la commune à la DSU"].values[0]
# data_brutes_criteres_2024.columns[data_brutes_criteres_2024.columns.str.contains("urbain")]
```
%% Output
dsu_montant_total = 0.0
dsu_montant_total = 0.0
dsu_montant_eligible = 0.0
[2023] dsu_montant_total = 0.0
[2023] dsu_montant_eligible = 0.0
dsu_eligible = False
dsu_montant_total_eligibles = -2479241.0
rang_indice_synthetique_dsu_seuil_bas = 23643
rang_indice_synthetique_dsu_seuil_haut = 23569
dsu_nombre_communes_eligibles_seuil_bas = 127
dsu_nombre_communes_eligibles_seuil_haut = 706
effort_fiscal = 0.6306729912757874
population_insee = 337
population_qpv = 0
population_zfu = 0
population_dgf = 348
indice_synthetique_dsu = 0.0
%% Cell type:markdown id: tags:
### DSU - éligible - part spontanée
%% Cell type:code id: tags:
``` python
# dsu_part_spontanee
# = np.where((montants_an_precedent > 0) * dsu_eligible, montants_an_precedent, dsu_montant_eligible)
calculate_ecart_2024(
"Dotation de solidarité urbaine et de cohésion sociale - Montant attribution spontanée DSU",
"dsu_part_spontanee",
"[🏢 DSU][part spontanée]"
)
```
%% Output
[2024][🏢 DSU][part spontanée] Écart calculé par simulation [nan] - officiellement notifié [0] : nan
%% Cell type:markdown id: tags:
### DSU - éligible - part augmentation
%% Cell type:code id: tags:
``` python
# progression = augmentation ?
# 'Dotation de solidarité urbaine et de cohésion sociale - Montant progression de la DSU'
# dsu_part_augmentation = dsu_montant_eligible - dsu_part_spontanee
```
%% Cell type:markdown id: tags:
### DSU - total montant
%% Cell type:code id: tags:
``` python
# dsu_montant_eligible
# = montant_toujours_eligible_groupe_bas + montant_toujours_eligible_groupe_haut
# + montant_nouvellement_eligible_groupe_bas + montant_nouvellement_eligible_groupe_haut
# "Montant total reçu par la commune au titre de son éligibilité à la DSU (incluant part spontanée et augmentation)"
# dsu_montant
# = dsu_montant_eligible + dsu_montant_garantie_non_eligible
```
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment