--- title: Boîte à outils comportant les différentes fonctions utilisées de façon récurrente dans le traitement des données keywords: fastai sidebar: home_sidebar nb_path: "notebooks/retraitement_erfs-fpr/modules/ToolBase.ipynb" ---
{% raw %}
{% endraw %}

Imports

{% raw %}
{% endraw %} {% raw %}
{% endraw %}

Conversion des noms ERFS en noms OpenFisca

{% raw %}

convert_erfr_to_openfisca[source]

convert_erfr_to_openfisca(data)

Conversion des noms ERFS en noms OpenFisca

Traduction des roles attribués au format openfisca ::data:: Le dataset à convertir

{% endraw %} {% raw %}
{% endraw %}

Création d'une simulation

{% raw %}

create_simulation[source]

create_simulation(period, data, tbs)

{% endraw %} {% raw %}
{% endraw %}

Regroupe une base d'individus en foyers fiscaux

{% raw %}

individus_to_foyers_fiscaux[source]

individus_to_foyers_fiscaux(sample_individus)

Regroupe un échantillon par individus en échantillon par foyers fiscaux

{% endraw %} {% raw %}
{% endraw %}

Intègre des colonnes en foyers fiscaux dans une base en individus

{% raw %}

prepare_ff_to_concat[source]

prepare_ff_to_concat(sample_ind_origin, sample_ff_to_merge, to_update)

{% endraw %} {% raw %}
{% endraw %} {% raw %}

foyers_fiscaux_to_individus[source]

foyers_fiscaux_to_individus(sample_ind_origin, sample_ff_to_merge, to_update, cols_declarant_principal)

Ajoute les données d'un échantillon de foyers fiscaux dans un échantillon par individus sample_ind_origin: l' échantillon par individus originel sample_ff_to_merge : l'échantillon de foyers fiscaux to_update : les colonnes de sample_ff_to_merge qui ont bougé et qu'on veut merger cols_declarant_principal : les colonnes que l'on ne donne qu'au déclarant principal de chaque foyer new_ppl=True : on peut le mettre à False si est sûrs qu'on n'a ajouté personne entre-temps (par exemple en calib) et qu'on veut gagner du temps de calcul

{% endraw %} {% raw %}
{% endraw %} {% raw %}
def foyers_fiscaux_to_individus_old(
    sample_ind_origin,
    sample_ff_to_merge,
    to_update,
    cols_declarant_principal,
    new_ppl,
):
    """
    Ajoute les données d'un échantillon de foyers fiscaux dans un échantillon par individus
    sample_ind_origin: l' échantillon par individus originel
    sample_ff_to_merge : l'échantillon de foyers fiscaux
    to_update : les colonnes de sample_ff_to_merge qui ont bougé et qu'on veut merger
    cols_declarant_principal : les colonnes que l'on ne donne qu'au déclarant principal de chaque foyer
    new_ppl=True : on peut le mettre à False si est sûrs qu'on n'a ajouté personne entre-temps (par exemple en calib)
    et qu'on veut gagner du temps de calcul
    """

    sample_individus_new = sample_ind_origin.copy(deep=True)

    print(
        "Il s'agit ici de fusionner un échantillon de ",
        sample_ff_to_merge["idfoy"].nunique(),
        " foyers fiscaux, dans notre base qui en contient déjà ",
        sample_ind_origin["idfoy"].nunique(),
    )

    # 1 On commence par le cas où l'on a des gens 'ajoutés'
    if new_ppl is True:
        # On prépare l'échantillon
        sample_to_concat = prepare_ff_to_concat(
            sample_ind_origin, sample_ff_to_merge, to_update
        )
        print("Il y a ", len(sample_to_concat), " foyers à ajouter")
        tc.assertEqual(len(sample_to_concat), sample_to_concat["idfoy"].nunique())
        # On les ajoute à la base
        sample_individus_new = pd.concat([sample_individus_new, sample_to_concat])
        tc.assertEqual(
            len(sample_ind_origin) + len(sample_to_concat), len(sample_individus_new)
        )
        print("on a bien concaténé")

    # 2 On va ensuite updater les idfoy connus
    # On ne garde que ce qui sera updaté
    sample_ff_to_merge = sample_ff_to_merge[["idfoy"] + to_update]

    #  On enlève de l'échantillon individus les colonnes que l'on va ajouter
    for col in to_update:
        if col in sample_individus_new:
            sample_individus_new = sample_individus_new.drop(col, axis=1)

    # On update les valeurs dans l'échantillon par individus
    sample_individus_new = pd.merge(
        sample_individus_new,
        sample_ff_to_merge,
        left_on="idfoy",
        right_on="idfoy",
        indicator=False,
    )

    # Contrôles
    if new_ppl is True:
        tc.assertEqual(
            sample_individus_new["idfoy"].nunique(),
            sample_ind_origin["idfoy"].nunique() + sample_to_concat["idfoy"].nunique(),
        )
        print("On a bien concaténé les nouveaux foyers")
    else:
        tc.assertEqual(
            sample_individus_new["idfoy"].nunique(),
            sample_ind_origin["idfoy"].nunique(),
        )
        print("Pas d'ajout de foyers fiscaux")

    # On supprime les valeurs qui ne s'appliquent qu'au déclarant principal pour les autres déclarants
    for col in cols_declarant_principal:
        sample_individus_new.loc[sample_individus_new["quifoy"] != 0, col] = 0

    return sample_individus_new
{% endraw %}

Calcule une variable qui ne se calcule que par foyers fiscaux, en partant et en revenant sur une base de données en individus

{% raw %}

compute_var_in_ff[source]

compute_var_in_ff(my_simu, annee_de_calcul, sample_individus, var_list, cols_declarant_principal)

Calcule une variable qui ne se calcule que par foyers fiscaux, en partant et en revenant sur une base de données en individus

{% endraw %} {% raw %}
{% endraw %}