Projection de codes communes dans un millésime donné : set_vintage
french-cities
peut tenter de “projeter” un dataframe dans un millésime donné, la date initiale demeurant inconnue (voire inexistante, les cas de fichiers “multi-millésimés” étant fréquents dans la vie réelle).
Des erreurs peuvent survenir, notamment pour les communes restaurées (dans la mesure où la date initiale de la donnée est inconnue ou inexistante).
Dans le cas où la date des données est connue, il peut être préférable d’utiliser l’API de projection mise à disposition par l’INSEE et accessible au travers de
pynsee
. Il convient de noter que cette utilisation peut être lente, dans la mesure ou chaque commune devra être testée via l’API (qui n’autorise que 30 requêtes par minute).
En substance, l’algorithme de french-cities
contrôle si le code commune existe dans le millésime souhaité :
- s’il existe il sera conservé (modulo un risque d’erreur pour les communes restaurées) ;
- s’il n’existe pas, le code est recherché dans des millésimes antérieurs (et l’API de projection de l’INSEE sera mobilisée de manière ciblée).
Cet algorithme va également :
- convertir les codes des éventuels arrondissements municipaux en celui de leurs communes de rattachement;
- convertir les codes des communes associées et déléguées en celui de leurs communes de rattachement.
Exemple d’utilisation:
from french_cities import set_vintage
import pandas as pd
df = pd.DataFrame(
[
["07180", "Fusion"],
["02077", "Commune déléguée"],
["02564", "Commune nouvelle"],
["75101", "Arrondissement municipal"],
["59298", "Commune associée"],
["99999", "Code erroné"],
["14472", "Oudon"],
],
columns=["A", "Test"],
index=["A", "B", "C", "D", 1, 2, 3],
)
df = set_vintage(df, 2023, field="A")
print(df)
Docstring de la fonction set_vintage
set_vintage(
df: pandas.DataFrame,
year: int,
field: str,
) -> pandas.DataFrame:
Project (approximatively) the cities codes of a dataframe into a desired
vintage.
Note that this may **NOT** work for cities which used to whole, then
merged to another and finally reset as a whole city;
the algorithm has 50% chances of setting wrong results for any dataset of
an initial vintage set during this transition period (this should be rare
enough).
In case of failure, the projected city code will be set to None.
Parameters
----------
df : pd.DataFrame
DataFrame containing city codes
year : int
Year to project the dataframe's city codes into
field : str
Field (column) of dataframe containing the city code
Returns
-------
pd.DataFrame
Projected DataFrame