Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 143-memo-aides-au-logement
  • 163-memo-niveaux-de-vie-choix-des-cas-types
  • 175-ajout-code-casd
  • 177-integration-erfs-2021-pipeline
  • aides-logement
  • baby-memo
  • casd-juillet-2022-dads
  • cdhr_reform
  • documentations-html-ab2ff75179b3a97939d5c802e370f32c1978b99b
  • documentations-html-e96b6fd1b3963bc54903d8de1e23ea3f7dbb2e00
  • ines-python
  • master
  • memo-aah-modif
  • memo-aides-logement
  • memo-navbar-color
  • memo-rsa-rmi
  • memo_pfu
  • statistiques_impot
  • statistiques_impot_corrections_chloe
19 results

Target

Select target project
  • leximpact/simulateur-socio-fiscal/budget/leximpact-prepare-data
1 result
Select Git revision
  • 143-memo-aides-au-logement
  • 163-memo-niveaux-de-vie-choix-des-cas-types
  • 175-ajout-code-casd
  • 177-integration-erfs-2021-pipeline
  • aides-logement
  • baby-memo
  • casd-juillet-2022-dads
  • cdhr_reform
  • documentations-html-ab2ff75179b3a97939d5c802e370f32c1978b99b
  • documentations-html-e96b6fd1b3963bc54903d8de1e23ea3f7dbb2e00
  • ines-python
  • master
  • memo-aah-modif
  • memo-aides-logement
  • memo-navbar-color
  • memo-rsa-rmi
  • memo_pfu
  • statistiques_impot
  • statistiques_impot_corrections_chloe
19 results
Show changes
Commits on Source (2)
%% Cell type:markdown id: tags:
Ce script tourne avec le kernel jupyter leximpact2024 issu de l'environnement conda leximpa construit à partir des dépendances de leximpact-prepare-data
%% Cell type:code id: tags:
``` python
import pandas as pd
import numpy as np
from openfisca_survey_manager.statshelpers import mark_weighted_percentiles
import plotly.graph_objects as go
import plotly.express as px
from plotly.subplots import make_subplots
```
%% Cell type:code id: tags:
``` python
path_erfs_brut = "//casd.fr/casdfs/Projets/LEXIMPA/Data/ERFS_ERFS_2021"
output_path = "C:/Users/Public/Documents/TRAVAIL/code_cas_type_ERFS_2021/sorties"
```
%% Cell type:code id: tags:
``` python
menages = pd.read_parquet(f"{path_erfs_brut}/menage21_aus.parquet")
print(f"nb menages avant selection : {len(menages)}")
print(f"poids menages avant selection : {round(menages.wprm.sum())}")
menages = menages.loc[menages['champm'] == 1 ].loc[menages["nivviem"] > 0].sort_values("nivviem").reset_index()
print(f"nb menages après selection : {len(menages)}")
print(f"poids menages après selection : {round(menages.wprm.sum())}")
```
%% Cell type:code id: tags:
``` python
individus = pd.read_parquet(f"{path_erfs_brut}/indivi21_aus.parquet")
print(f"nb individus avant selection : {len(individus)}")
print(f"poids individus avant selection : {round(individus.wprm.sum())}")
individus = individus.loc[individus['ident21'].isin(set(menages.ident21.unique().tolist()))].sort_values("nivviem").reset_index()
print(f"nb individus après selection : {len(individus)}")
print(f"poids individus après selection : {round(individus.wprm.sum())}")
individus["rev_activite_decl"] = individus.zindi + individus.zsali
individus.rename(columns = {"zchoi":"chomage_decl","zperi":"pensions_decl"}, inplace = True)
```
%% Cell type:code id: tags:
``` python
# individus.groupby("ident21").agg({'noindiv':'count',
# 'wprm':'min'}).groupby('noindiv').agg({"wprm":"sum"})
```
%% Cell type:markdown id: tags:
### Type de ménage
- 1: personne seule
- 2: famille monoparentale
- 3: couple sans enfant
- 4: couple avec enfant
- 5: autre
%% Cell type:code id: tags:
``` python
personne_reference = individus.loc[individus["noi"] == "01"][["ident21", "TYPMEN5","ETAMATRI_Y_comp","NBENFMENCHAMP","rev_activite_decl", "chomage_decl", "pensions_decl"]]
personne_reference.TYPMEN5.isna().sum()
personne_reference.groupby("TYPMEN5").agg({'ident21':'count'})
```
%% Cell type:code id: tags:
``` python
conjoint = individus.loc[individus["noi"] == "02"][["ident21", "rev_activite_decl", "chomage_decl", "pensions_decl"]].rename(columns = {"rev_activite_decl":"rev_activite_conj","chomage_decl":"chomage_conj","pensions_decl":"pensions_conj"})
```
%% Cell type:code id: tags:
``` python
menages = pd.merge(menages,personne_reference, how='outer', on='ident21')
menages = pd.merge(menages,conjoint, how='outer', on='ident21')
menages.TYPMEN5.isna().sum()
menages["TYPMEN5"] = np.where(menages.TYPMEN5.isna(),"5",menages["TYPMEN5"])
```
%% Cell type:code id: tags:
``` python
for conj_col in ["rev_activite_decl", "chomage_decl", "pensions_decl","rev_activite_conj", "chomage_conj", "pensions_conj"]:
menages[conj_col] = menages[conj_col].fillna(0)
```
%% Cell type:code id: tags:
``` python
menages["acteu5pr_lab"] = menages.acteu5pr.map({"1":"salarié", "2":"indépendant","3":"chomeur","4":"retraité","5":"inactif autre"})
menages["acteu5cj_lab"] = menages.acteu5cj.map({"1":"salarié", "2":"indépendant","3":"chomeur","4":"retraité","5":"inactif autre"})
menages["TYPMEN5_lab"] = menages.TYPMEN5.map({"1":"personne seule", "2":"famille monoparentale","3":"couple sans enfant","4":"couple avec enfant(s)","5":"autre / n.a"})
```
%% Cell type:code id: tags:
``` python
ret, quant = mark_weighted_percentiles(a = menages['nivviem'], labels = np.arange(1, 11), weights = menages['wprm'], method = 2, return_quantiles = True)
menages["dixieme"] = ret
```
%% Cell type:code id: tags:
``` python
quant
```
%% Cell type:code id: tags:
``` python
menages.groupby("dixieme").agg({"nivviem": "min"})
# Les résultats sont cohérants avec la distribution publiée par l'INSEE en date du 14/11/2023 "Distribution des niveaux de vie, données annuelles de 1996 à 2021"
# --> Prendre les résutlats de cette publication pour les dixièmes de cas types dans l'interface
```
%% Cell type:markdown id: tags:
## nombre d'enfants dans le ménage
%% Cell type:code id: tags:
``` python
menages['categ_nbenfc'] = np.where(menages["NBENFMENCHAMP"] > 3,3,menages["NBENFMENCHAMP"])
menages['categ_nbenfc'] = menages.categ_nbenfc.map({0.0:"Pas d'enfant", 1.0:"1 enfant",2.0:"2 enfants",3.0:"3 enfants et plus"})
nb_enfc = menages.groupby(["dixieme", "categ_nbenfc"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb_enfc["prop"] = round(100 * nb_enfc.wprm /nb_enfc.groupby("dixieme")['wprm'].transform("sum"))
nb_enfc["distrib"] = round(100 * nb_enfc.wprm /nb_enfc.groupby("categ_nbenfc")['wprm'].transform("sum"))
nb_enfc.rename(columns={"ident21":"count"},inplace = True)
nb_enfc.to_csv(f"{output_path}/nb_encf.csv")
print("Nombre de ménages selon le nombre d'enfants dans le ménage : ")
nb_enfc.groupby("categ_nbenfc")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig = px.histogram(nb_enfc,
x = "dixieme",
y = "prop",
#barmode="group",
color = "categ_nbenfc",
text_auto = True,
nbins = 10
)
fig.update_layout(title = "Part des menages en fonction du nombre d'enfants dans ménage par dixieme de niveau de vie", bargap = 0.2)
fig.show()
fig = go.Figure()
fig = px.histogram(nb_enfc,
x = "dixieme",
y = "distrib",
color = "categ_nbenfc",
barmode = "group",
text_auto = True,
nbins= 10,
)
fig.update_layout(title = "Distribution des ménages en fonction du nombre d'enfants")
fig.show()
```
%% Cell type:markdown id: tags:
## nombre de parents / couple
%% Cell type:code id: tags:
``` python
nb_typmen = menages.groupby(["dixieme", "TYPMEN5_lab"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb_typmen["prop"] = round(100 * nb_typmen.wprm /nb_typmen.groupby("dixieme")['wprm'].transform("sum"))
nb_typmen["distrib"] = round(100 * nb_typmen.wprm /nb_typmen.groupby("TYPMEN5_lab")['wprm'].transform("sum"))
nb_typmen.rename(columns={"ident21":"count"},inplace = True)
nb_typmen.to_csv(f"{output_path}/nb_typmen.csv")
nb_typmen.groupby("TYPMEN5_lab")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig = px.histogram(nb_typmen,
x = "dixieme",
y = "prop",
#barmode="group",
color = "TYPMEN5_lab",
text_auto = True,
nbins = 10
)
fig.update_layout(title = "Part des menages en fonction du type de ménage par dixieme de niveau de vie", bargap = 0.2)
fig.show()
fig = go.Figure()
fig = px.histogram(nb_typmen,
x = "dixieme",
y = "distrib",
color = "TYPMEN5_lab",
barmode = "group",
text_auto = True,
nbins= 10,
)
fig.update_layout(title = "Distribution des ménages en fonction de leur type")
fig.show()
```
%% Cell type:markdown id: tags:
### focus sur le nombre d'enfants en fonction de en couple / familles monoparentales
%% Cell type:code id: tags:
``` python
nb_enfc_couple = menages.loc[menages["categ_nbenfc"] != "Pas d'enfant"].groupby(["dixieme", "TYPMEN5", "TYPMEN5_lab", "categ_nbenfc"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb_enfc_couple.rename(columns = {"ident21":"count"},inplace = True)
nb_enfc_couple["prop"] = round(100 * nb_enfc_couple.wprm /nb_enfc_couple.groupby(["dixieme","TYPMEN5","TYPMEN5_lab"])['wprm'].transform("sum"))
nb_enfc_couple["distrib"] = round(100 * nb_enfc_couple.wprm /nb_enfc_couple.groupby(["categ_nbenfc", "TYPMEN5","TYPMEN5_lab"])['wprm'].transform("sum"))
nb_enfc_couple["somme_categ_parents"] = nb_enfc_couple.groupby(["categ_nbenfc", "TYPMEN5","TYPMEN5_lab"])['wprm'].transform("sum")
nb_enfc_couple["wprm"] = np.where((nb_enfc_couple.categ_nbenfc != "1 enfant") & (nb_enfc_couple.dixieme >= 6), np.nan, nb_enfc_couple["wprm"])
nb_enfc_couple = nb_enfc_couple.loc[nb_enfc_couple.wprm.isna() == False]
nb_enfc_couple.to_csv(f"{output_path}/nb_enfc_couple.csv")
nb_enfc_couple.groupby("categ_nbenfc")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
data_fig = nb_enfc_couple[["categ_nbenfc", "somme_categ_parents","TYPMEN5","TYPMEN5_lab"]].drop_duplicates()
fig = make_subplots(
rows = 1,
cols = 2,
specs=[
[{"type":"domain"},{"type":"domain"}]
],
subplot_titles= [f"Familles monoparentales : {round(data_fig.loc[nb_enfc_couple['TYPMEN5'] == '2'].somme_categ_parents.sum()/1e6, ndigits = 2)} millions de ménages", f"Couples : {round(data_fig.loc[nb_enfc_couple['TYPMEN5'] == '4'].somme_categ_parents.sum()/1e6, ndigits = 2)} millions de ménages"]
)
fig.add_trace(
go.Pie(
labels = data_fig.loc[data_fig["TYPMEN5"] == "2"].categ_nbenfc,
values = data_fig.loc[data_fig["TYPMEN5"] == "2"].somme_categ_parents,
scalegroup="one",
name = "Famille monoparentale"
),
1,
1
)
fig.add_trace(
go.Pie(
labels = data_fig.loc[data_fig["TYPMEN5"] == "4"].categ_nbenfc,
values = data_fig.loc[data_fig["TYPMEN5"] == "4"].somme_categ_parents,
scalegroup="one",
name = "Couple"
),
1,
2
)
fig.update_layout(legend = dict(title = "Nombre d'enfants"))
fig.show()
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig = px.histogram(nb_enfc_couple,
x = "dixieme",
y = "prop",
#barmode="group",
color = "categ_nbenfc",
text_auto = True,
nbins = 10,
facet_col = "TYPMEN5_lab"
)
fig.update_layout(title = "Part des menages en fonction du nombre d'enfants à charge par dixieme de niveau de vie, à gauche les familles monoparentales, à droite les couples", bargap = 0.2)
fig.show()
fig = go.Figure()
fig = px.histogram(nb_enfc_couple,
x = "dixieme",
y = "distrib",
color = "categ_nbenfc",
barmode = "group",
text_auto = True,
nbins= 10,
facet_col = "TYPMEN5_lab"
)
fig.update_layout(title = "Distribution des ménages en fonction du nombre d'enfants, à gauche les familles monoparentales, à droite les couples")
fig.show()
```
%% Cell type:markdown id: tags:
### statut marital des couples
- 1: Marié.e
- 2: Pacsé.e
- 3: union libre
- 4: veuf.ve
- 5: divorcé.e
- 6: dépacsé.e
- 7: séparé.e
- 8: célibataire
- 9: non répose
%% Cell type:code id: tags:
``` python
menages['categ_etamatri'] = menages.ETAMATRI_Y_comp.map({"1":"Marié/Pacsé","2":"Marié/Pacsé","3":"Union libre","4":"Célibataire","5":"Célibataire","6":"Célibataire","7":"Célibataire","8":"Célibataire","9":"n.a"})
```
%% Cell type:code id: tags:
``` python
nb_enfc_couple = menages.groupby(["dixieme", "TYPMEN5", "categ_etamatri"]).agg({"wprm":"sum"}).reset_index()
nb_enfc_couple["prop"] = round(100 * nb_enfc_couple.wprm /nb_enfc_couple.groupby(["dixieme","TYPMEN5"])['wprm'].transform("sum"))
nb_enfc_couple["distrib"] = round(100 * nb_enfc_couple.wprm /nb_enfc_couple.groupby(["categ_etamatri", "TYPMEN5"])['wprm'].transform("sum"))
nb_enfc_couple.groupby("categ_etamatri")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig = px.histogram(nb_enfc_couple,
x = "dixieme",
y = "prop",
#barmode="group",
color = "categ_etamatri",
text_auto = True,
nbins = 10,
facet_col = "TYPMEN5"
)
fig.update_layout(title = "Part des menages en fonction du nombre d'enfants à charge par dixieme de niveau de vie, à gauche les familles monoparentales, à droite les couples", bargap = 0.2)
fig.show()
fig = go.Figure()
fig = px.histogram(nb_enfc_couple,
x = "dixieme",
y = "distrib",
color = "categ_etamatri",
barmode = "group",
text_auto = True,
nbins= 10,
facet_col = "TYPMEN5"
)
fig.update_layout(title = "Distribution des ménages en fonction du nombre d'enfants, à gauche les familles monoparentales, à droite les couples")
fig.show()
# - 1: Marié.e
# - 2: Pacsé.e
# - 3: union libre
# - 4: veuf.ve
# - 5: divorcé.e
# - 6: dépacsé.e
# - 7: séparé.e
# - 8: célibataire
# - 9: non répose
```
%% Cell type:markdown id: tags:
## Statuts d'activité de la personne de référence et du conjoint
- 1: salarié
- 2: indépendant
- 3: chômeur
- 4: retraité
- 5: inactif non retraité
%% Cell type:code id: tags:
``` python
print(f"Nombre de na pour le conjoint : {menages.acteu5cj.isna().sum()}")
menages.groupby("acteu5cj_lab").agg({"wprm":"count"})
```
%% Cell type:code id: tags:
``` python
menages.loc[menages.acteu5cj.isna()].groupby("TYPMEN5_lab").agg({"wprm": "sum"}) # que 300 "anomalie" de couple où pas de conjoint retrouvé
```
%% Cell type:code id: tags:
``` python
menages.loc[menages.acteu5cj.isna() == False].groupby("TYPMEN5_lab").agg({"wprm": "sum"}) # plus d'anomalie
```
%% Cell type:code id: tags:
``` python
print(f"Nombre de na pour la personne de référence : {menages.acteu5pr.isna().sum()}")
menages.groupby("acteu5pr_lab").agg({"wprm":"count"})
```
%% Cell type:code id: tags:
``` python
nb = menages.groupby(["dixieme", "acteu5pr_lab"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb["prop"] = round(100 * nb.wprm /nb.groupby("dixieme")['wprm'].transform("sum"))
nb["distrib"] = round(100 * nb.wprm /nb.groupby("acteu5pr_lab")['wprm'].transform("sum"))
nb.to_csv(f"{output_path}/nb_acteu5pr.csv")
nb.groupby("acteu5pr_lab")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig = px.histogram(nb,
x = "dixieme",
y = "prop",
#barmode="group",
color = "acteu5pr_lab",
text_auto = True,
nbins = 10
)
fig.update_layout(title = "Part des menages en fonction du statut d'activité de la personne de référence par dixieme de niveau de vie", bargap = 0.2)
fig.show()
fig = go.Figure()
fig = px.histogram(nb,
x = "dixieme",
y = "distrib",
color = "acteu5pr_lab",
barmode = "group",
text_auto = True,
nbins= 10,
)
fig.update_layout(title = "Distribution des ménages en fonction du statut d'activité de la personne de référence")
fig.show()
```
%% Cell type:code id: tags:
``` python
nb = menages.loc[menages["TYPMEN5"] != "1"].loc[menages["TYPMEN5"] != "2"].loc[menages["TYPMEN5"] != "5"].groupby(["dixieme", "acteu5cj_lab"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb["prop"] = round(100 * nb.wprm /nb.groupby("dixieme")['wprm'].transform("sum"))
nb["distrib"] = round(100 * nb.wprm /nb.groupby("acteu5cj_lab")['wprm'].transform("sum"))
nb.to_csv(f"{output_path}/nb_acteu5cj.csv")
nb.groupby("acteu5cj_lab")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
#new_name = {"1":"salarié.e", "2":"indépendant.e","3":"chomeureuse","4":"retraité","5":"inactif.ve autre"}
fig = go.Figure()
fig = px.histogram(nb,
x = "dixieme",
y = "prop",
#barmode="group",
color = "acteu5cj_lab",
text_auto = True,
nbins = 10
)
fig.update_layout(title = "Part des menages en fonction du statut d'activité du conjoint par dixieme de niveau de vie", bargap = 0.2)
#fig.for_each_trace(lambda t: t.update(name = new_name[t.name]))
fig.show()
fig = go.Figure()
fig = px.histogram(nb,
x = "dixieme",
y = "distrib",
color = "acteu5cj_lab",
barmode = "group",
text_auto = True,
nbins= 10,
)
fig.update_layout(title = "Distribution des ménages en fonction du statut d'activité du conjoint")
#fig.for_each_trace(lambda t: t.update(name = new_name[t.name]))
fig.show()
```
%% Cell type:code id: tags:
``` python
nb = menages.loc[menages["TYPMEN5"] != "1"].loc[menages["TYPMEN5"] != "2"].loc[menages["TYPMEN5"] != "5"].groupby(["dixieme", "acteu5pr", "acteu5cj"]).agg({"wprm":"sum"}).reset_index()
nb["prop"] = round(100 * nb.wprm /nb.groupby(["dixieme","acteu5pr"])['wprm'].transform("sum"))
nb["distrib"] = round(100 * nb.wprm /nb.groupby(["acteu5cj", "acteu5pr"])['wprm'].transform("sum"))
nb.groupby("acteu5cj")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
fig = make_subplots(
rows = 3,
cols = 2,
specs=[
[{"type":"domain"},{"type":"domain"}],
[{"type":"domain"},{"type":"domain"}],
[{"type":"domain"},{"type":"domain"}]
],
horizontal_spacing=0,
vertical_spacing=0
#subplot_titles= [f"Familles monoparentales : {round(nb_enfc_couple.loc[nb_enfc_couple['TYPMEN5'] == '2'].wprm.sum()/1e6, ndigits = 2)} millions de ménages", f"Couples : {round(nb_enfc_couple.loc[nb_enfc_couple['TYPMEN5'] == '4'].wprm.sum()/1e6, ndigits = 2)} millions de ménages"]
)
fig.add_trace(
go.Pie(
labels = nb.loc[nb["acteu5pr"] == "1"].acteu5cj,
values = nb.loc[nb["acteu5pr"] == "1"].wprm,
scalegroup="one",
name = "Salarié"
),
1,
1
)
fig.add_trace(
go.Pie(
labels = nb.loc[nb["acteu5pr"] == "2"].acteu5cj,
values = nb.loc[nb["acteu5pr"] == "2"].wprm,
scalegroup="one",
name = "Indépendant.e"
),
1,
2
)
fig.add_trace(
go.Pie(
labels = nb.loc[nb["acteu5pr"] == "3"].acteu5cj,
values = nb.loc[nb["acteu5pr"] == "3"].wprm,
scalegroup="one",
name = "Chomeureuse"
),
2,
1
)
fig.add_trace(
go.Pie(
labels = nb.loc[nb["acteu5pr"] == "4"].acteu5cj,
values = nb.loc[nb["acteu5pr"] == "4"].wprm,
scalegroup="one",
name = "Retraité.e"
),
2,
2
)
fig.add_trace(
go.Pie(
labels = nb.loc[nb["acteu5pr"] == "5"].acteu5cj,
values = nb.loc[nb["acteu5pr"] == "5"].wprm,
scalegroup="one",
name = "Inactif.ve autre"
),
3,
1
)
fig.update_layout(legend = dict(title = "Statut d'activité",x= 0.75,y=0.005), margin = dict(l=10,r=10,b=0,t=0))
fig.show()
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig = px.histogram(nb,
x = "dixieme",
y = "prop",
#barmode="group",
color = "acteu5cj",
text_auto = True,
nbins = 10,
facet_col = "acteu5pr"
)
fig.update_layout(title = "Part des menages en fonction du nombre d'enfants à charge par dixieme de niveau de vie, à gauche les familles monoparentales, à droite les couples", bargap = 0.2)
fig.show()
fig = go.Figure()
fig = px.histogram(nb,
x = "dixieme",
y = "distrib",
color = "acteu5cj",
barmode = "group",
text_auto = True,
nbins= 10,
facet_col = "acteu5pr"
)
fig.update_layout(title = "Distribution des ménages en fonction du nombre d'enfants, à gauche les familles monoparentales, à droite les couples")
fig.show()
```
%% Cell type:markdown id: tags:
## statut d'occupation du logement
- 1 accédant à la propriété
- 2 propriétaire
- 3 locataire HLM
- 4 locataire vide
- 5 locataire meublé
- 6 logé gratuitement
- 7 usufruitier
- 9 non réponse
%% Cell type:code id: tags:
``` python
menages.groupby("logT")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
menages['categ_logmnt'] = np.where(menages["logT"] == "5","4",menages["logT"])
menages['categ_logmnt'] = np.where(menages["logT"] == "9","6", menages["categ_logmnt"])
menages['categ_logmnt'] = np.where(menages["logT"] == "1","2", menages["categ_logmnt"])
menages['categ_logmnt_lab'] = menages.categ_logmnt.map({"2":"Propriétaire","3":"Locataire HLM","4":"Locataire privé","6":"Autre"})
nb_logtm = menages.groupby(["dixieme", "categ_logmnt_lab"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb_logtm["prop"] = round(100 * nb_logtm.wprm /nb_logtm.groupby("dixieme")['wprm'].transform("sum"))
nb_logtm["distrib"] = round(100 * nb_logtm.wprm /nb_logtm.groupby("categ_logmnt_lab")['wprm'].transform("sum"))
nb_logtm.rename(columns = {"ident21":"count"},inplace = True)
nb_logtm.to_csv(f"{output_path}/nb_logtm.csv")
nb_logtm.groupby("categ_logmnt_lab")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
#new_name = {"2":"Propriétaire","3":"Locataire HLM","4":"Locataire privé","6":"Autre"}
fig = go.Figure()
fig = px.histogram(nb_logtm,
x = "dixieme",
y = "prop",
#barmode="group",
color = "categ_logmnt_lab",
text_auto = True,
nbins = 10
)
fig.update_layout(title = "Part des menages en fonction de leur statut d'occupation du logement", bargap = 0.2)
#fig.for_each_trace(lambda t: t.update(name = new_name[t.name]))
fig.show()
fig = go.Figure()
fig = px.histogram(nb_logtm,
x = "dixieme",
y = "distrib",
color = "categ_logmnt_lab",
barmode = "group",
text_auto = True,
nbins= 10
)
fig.update_layout(title = "Distribution des ménages en fonction de leur statut d'occupation du logement")
#fig.for_each_trace(lambda t: t.update(name = new_name[t.name]))
fig.show()
```
%% Cell type:markdown id: tags:
### Part des propriétaires en fonction du statut d'occupation du type de ménage
%% Cell type:code id: tags:
``` python
nb_logtm = menages.groupby(["dixieme", "categ_logmnt_lab", "TYPMEN5_lab"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb_logtm["prop"] = round(100 * nb_logtm.wprm /nb_logtm.groupby(["dixieme", "TYPMEN5_lab"])['wprm'].transform("sum"))
#nb_logtm["distrib"] = round(100 * nb_logtm.wprm /nb_logtm.groupby("categ_logmnt_lab")['wprm'].transform("sum"))
nb_logtm.rename(columns = {"ident21":"count"},inplace = True)
nb_logtm = nb_logtm.loc[nb_logtm["categ_logmnt_lab"] == "Propriétaire"]
nb_logtm = nb_logtm.loc[nb_logtm["TYPMEN5_lab"] != "autre / n.a"]
nb_logtm.to_csv(f"{output_path}/nb_logtm_typmen.csv")
#nb_logtm.groupby("categ_logmnt_lab")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig = px.histogram(nb_logtm,
x = "dixieme",
y = "prop",
barmode="group",
color = "TYPMEN5_lab",
text_auto = True,
nbins = 10
)
fig.update_layout(title = "Part des menages en fonction de leur statut d'occupation du logement", bargap = 0.2)
fig.show()
```
%% Cell type:code id: tags:
``` python
nb_logtm = menages.groupby(["dixieme", "categ_logmnt_lab", "acteu5pr_lab"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb_logtm["prop"] = round(100 * nb_logtm.wprm /nb_logtm.groupby(["dixieme", "acteu5pr_lab"])['wprm'].transform("sum"))
#nb_logtm["distrib"] = round(100 * nb_logtm.wprm /nb_logtm.groupby("categ_logmnt_lab")['wprm'].transform("sum"))
nb_logtm.rename(columns = {"ident21":"count"},inplace = True)
nb_logtm = nb_logtm.loc[nb_logtm["categ_logmnt_lab"] == "Propriétaire"]
nb_logtm.to_csv(f"{output_path}/nb_logtm_acteu5pr.csv")
#nb_logtm.groupby("categ_logmnt_lab")['wprm'].agg("sum")
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig = px.histogram(nb_logtm,
x = "dixieme",
y = "prop",
barmode="group",
color = "acteu5pr_lab",
text_auto = True,
nbins = 10
)
fig.update_layout(title = "Part des propriétaires en fonction du statut d'activité de la personne de référence", bargap = 0.2)
fig.show()
```
%% Cell type:markdown id: tags:
## Revenus déclarés
%% Cell type:markdown id: tags:
revdispm =
+ revperm (revdecm (ztsam (zsalm + zchom) + zperm (zrstm + zpim + zrtom + zalrm) + zragm + zricm + zrncm + zfonm + zvamm + zvalm + zracm + zetrm -zalvm) + revexom + produitfin - csgim (csgsalim + csghsupim + csgchoim + csgrstim + csgragim + csgricim + csgrncim + csgpiim) - crdsm ( crdssalm + crdshsupm + crdschom + crdsrstm + crdsragm + crdsricm + crdsrncm + crdspim) - csgimpm (produits financiers imputés) - csgvalm (csg crds valeurs mobilières) - zimpvalm (prélèvement libératoire sur valeur mobilière du ménage))
+ psocm (pfamm + mibim + logtm)
- zimpom (impot sur le revenu)
- zthabm
- csgpatm (csg-crds sur revenus du patrimoine)
%% Cell type:markdown id: tags:
prelevements = zimpom + zthabm + csgpatm + zimpvalm + csgvalm + csgimpm + crdsm + csgim
prestations = pfamm + minim + logtm
revenus = revenus_activite + revenus_remplacement + revenus_foncier_capital
revenus_activite = zsalm + revexom + zragm + zricm + zrncm + zracm - zalvm + zetrm
revenus_remplacement = zchom + zrstm + zpim + zrtom + zalrm
revenus_foncier_capital = zfonm + zvamm + zvalm + produitfin
%% Cell type:code id: tags:
``` python
menages["prelevements"] = menages.zimpom + menages.zthabm + menages.csgpatm + menages.zimpvalm + menages.csgvalm + menages.csgimpm + menages.crdsm + menages.csgim
menages["impots"] = menages.zimpom + menages.zthabm + menages.zimpvalm
# prelevements = impots + csg imposable + crds
menages.rename(columns = {"psocm":"prestations"},inplace = True)
menages["revenus_activite"] = menages.zsalm + menages.revexom + menages.zragm + menages.zricm + menages.zrncm + menages.zracm - menages.zalvm + menages.zetrm
# traitement et salaires hors chomage, revenus exonérés (primes / heures sup.) + revenus des indépendants + revenus étrangers - pensions alimentaires versées
menages["revenus_remplacement"] = menages.zchom + menages.zrstm + menages.zpim + menages.zrtom + menages.zalrm
# chomage + retraite + pension invalidite + rente viagière à titre onéreux + pension alimentaire recue
menages["revenus_foncier_capital"] = menages.zfonm + menages.zvamm + menages.zvalm + menages.produitfin
menages["revenus"] = menages["revenus_activite"] + menages["revenus_remplacement"] + menages["revenus_foncier_capital"]
menages["diff"] = menages["revdispm"] - (menages["revenus"] - menages["prelevements"] + menages["prestations"])
```
%% Cell type:code id: tags:
``` python
sum(abs(menages["diff"]) > 1)
```
%% Cell type:code id: tags:
``` python
menages["revdecm_net"] = menages["revdecm"] - menages["csgdm"]
# revenus = [
# "ztsam", # zchom + zsalm
# "zchom",
# "zsalm",
# "zperm",
# "zalrm", # pensions alim recues, dans zalrm
# "zragm",
# "zricm",
# "zrncm",
# "zfonm",
# "zvamm",
# "zvalm",
# "zracm",
# "zetrm",
# "zalvm",
# ]
revenus = [
"revenus_activite",
"revenus_remplacement",
"revenus_foncier_capital"
]
prelevements = ["prelevements", "impots"]
rev_tot = [
"revdecm",
"revdecm_net",
"revdispm",
"revenus",
"prestations"]
for rev in revenus + rev_tot + prelevements:
menages[f"{rev}_pond"] = menages[rev].fillna(0) * menages.wprm
menages[f"{rev}_uc_pond"] = menages[rev].fillna(0) / menages["nb_UCI"].fillna(1) * menages.wprm
agg = {f"{rev}_pond":"sum" for rev in revenus + rev_tot + prelevements}
agg.update({"wprm":"sum","ident21":"count"})
agg.update({f"{rev}_uc_pond":"sum" for rev in revenus + rev_tot + prelevements})
menages["revenus_individus"] = (np.maximum(0,menages["rev_activite_conj"]) + menages["chomage_conj"] + menages["pensions_conj"] + np.maximum(0,menages["rev_activite_decl"]) + menages["chomage_decl"] + menages["pensions_decl"])
menages["part_rev_decl"] = np.where(menages["revenus_individus"] > 0, np.maximum(0,menages["rev_activite_decl"]) + menages["chomage_decl"] + menages["pensions_decl"] / menages["revenus_individus"],0)
menages["prestations_positives"] = (menages["prestations"] > 0) * menages["wprm"]
menages["revenus_positifs"] = (menages["revenus"] > 0) * menages["wprm"]
menages["revenus_act_positifs"] = (menages["revenus_activite"] > 0) * menages["wprm"]
menages["revenus_remp_positifs"] = (menages["revenus_remplacement"] > 0) * menages["wprm"]
menages["revenus_fon_cap_positifs"] = (menages["revenus_foncier_capital"] > 0) * menages["wprm"]
menages["impot_negatif"] = (menages["impots"] > 0) * menages["wprm"]# si impot positif alors le menage paie de l'impot
menages["ni_impot_ni_presta"] =(menages["prestations"] == 0) * (menages["impots"] == 0) * menages["wprm"]
agg.update({"impot_negatif":"sum","revenus_positifs":"sum","revenus_act_positifs":"sum","revenus_remp_positifs":"sum","revenus_fon_cap_positifs":"sum","prestations_positives":"sum","ni_impot_ni_presta":"sum"})
```
%% Cell type:code id: tags:
``` python
# agg = {f"{rev}":"max" for rev in revenus + rev_tot + prelevements}
# nb_max = menages.groupby(["dixieme"]).agg(agg).reset_index()
# nb_max.rename(columns = {rev:f"{rev}_max" for rev in nb_max.columns if rev != "dixieme"}, inplace = True)
# agg = {f"{rev}":"sum" for rev in revenus + rev_tot + prelevements}
# nb = menages.groupby(["dixieme"]).agg(agg).reset_index()
# nb = pd.merge(nb_max,nb,on = "dixieme")
# for rev in revenus + rev_tot + prelevements:
# nb[f"{rev}_part_max"] = nb[f"{rev}_max"] / nb[f"{rev}"]
# nb.to_csv(f"{output_path}/check_part_max_nb_revenus.csv")
```
%% Cell type:code id: tags:
``` python
nb = menages.groupby(["dixieme"]).agg(agg).reset_index()
nb.to_csv(f"{output_path}/nb_revenus.csv")
for rev in revenus + rev_tot + prelevements:
nb[f"{rev}_prop"] = nb[f"{rev}_pond"] / nb["revenus_pond"]
nb[f"{rev}_moy"] = nb[f"{rev}_pond"] / nb["wprm"]
nb[f"{rev}_uc_prop"] = nb[f"{rev}_uc_pond"] / nb["revenus_uc_pond"]
nb[f"{rev}_uc_moy"] = nb[f"{rev}_uc_pond"] / nb["wprm"]
nb["prestations_positives_prop"] = nb["prestations_positives"] / nb["wprm"]
nb["revenus_positifs_prop"] = nb["revenus_positifs"] / nb["wprm"]
nb["revenus_act_positifs_prop"] = nb["revenus_act_positifs"] / nb["wprm"]
nb["revenus_remp_positifs_prop"] = nb["revenus_remp_positifs"] / nb["wprm"]
nb["revenus_fon_cap_positifs_prop"] = nb["revenus_fon_cap_positifs"] / nb["wprm"]
nb["impot_negatif_prop"] = nb["impot_negatif"] / nb["wprm"]
nb["ni_impot_ni_presta_prop"] = nb["ni_impot_ni_presta"] / nb["wprm"]
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
fig.add_trace(
go.Line(
x = nb.dixieme,
y = nb["revdecm_uc_moy"],
name = "revdecm_uc_moy",
)
)
fig.add_trace(
go.Line(
x = nb.dixieme,
y = nb["revdispm_uc_moy"],
name = "revdispm_uc_moy",
)
)
#fig.update_layout(title = "Part des menages en fonction de leur statut d'occupation du logement", bargap = 0.2)
fig.show()
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
for rev in revenus:
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb[f"{rev}_prop"],
name = rev,
)
)
fig.update_layout(title = "Part des différentes catégories de revenus par dixième de niveau de vie", bargap = 0.2)
fig.show()
fig = go.Figure()
for rev in revenus:
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb[f"{rev}_uc_prop"],
name = rev,
)
)
fig.update_layout(title = "Part des différentes catégories de revenus par uc par dixième de niveau de vie", bargap = 0.2)
fig.show()
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
for rev in ["prestations_positives_prop", "impot_negatif_prop", "ni_impot_ni_presta_prop","revenus_positifs_prop","revenus_act_positifs_prop","revenus_remp_positifs_prop","revenus_fon_cap_positifs_prop"]:
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb[f"{rev}"],
name = rev,
)
)
fig.update_layout(title = "Part des personnes payant des impots, recevant des prestations sociales ou aucun des deux par dixième de niveau de vie", bargap = 0.2)
fig.show()
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
#for rev in ["prestations_positives_prop", "impot_negatif_prop", "ni_impot_ni_presta_prop"]:
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb["prestations_uc_pond"] / nb["prestations_positives"],
name = "Montant moyen de prestation",
)
)
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb["impots_uc_pond"] / nb["impot_negatif"],
name = "Montant moyen d'impot",
)
)
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb["revenus_activite_uc_pond"] / nb["revenus_act_positifs"],
name = "Montant moyen de revenus d'activité",
)
)
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb["revenus_remplacement_uc_pond"] / nb["revenus_remp_positifs"],
name = "Montant moyen de revenus de remplacement",
)
)
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb["revenus_foncier_capital_uc_pond"] / nb["revenus_fon_cap_positifs"],
name = "Montant moyen de revenus fonciers et du capital",
)
)
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb["revenus_uc_pond"] / nb["revenus_positifs"],
name = "Montant moyen de revenus",
)
)
fig.update_layout(title = "Part des personnes payant des impots, recevant des prestations sociales ou aucun des deux par dixième de niveau de vie", bargap = 0.2)
fig.show()
```
%% Cell type:code id: tags:
``` python
fig = go.Figure()
for rev in ["revenus","prestations","revenus_activite","revenus_remplacement"]:
fig.add_trace(
go.Bar(
x = nb.dixieme,
y = nb[f"{rev}_uc_moy"],
name = rev,
)
)
fig.update_layout(title = "Montants moyens de revenus imposables et de prestations par dixième de niveau de vie", bargap = 0.2)
fig.show()
```
%% Cell type:markdown id: tags:
# Analyse par dixième
%% Cell type:code id: tags:
``` python
menages["acteu5pr"] = menages.acteu5pr.map({"1":"1", "2":"1","3":"2","4":"3","5":"2"})
menages["acteu5cj"] = menages.acteu5cj.map({"1":"1", "2":"1","3":"2","4":"3","5":"2"})
menages["acteu5pr_lab"] = menages.acteu5pr.map({"1":"en emploi", "2":"sans emploi","3":"retraité"})
menages["acteu5cj_lab"] = menages.acteu5cj.map({"1":"en emploi", "2":"sans emploi","3":"retraité"})
menages["categ_logmnt_lab"] = np.where(menages["categ_logmnt_lab"] == "Autre", 'Propriétaire',menages["categ_logmnt_lab"])
```
%% Cell type:code id: tags:
``` python
test = menages.groupby(["dixieme","TYPMEN5_lab","acteu5pr_lab"]).agg({"revenus_uc_pond":"sum","wprm":"sum","ident21":"count"}).reset_index().sort_values(["dixieme","TYPMEN5_lab", "wprm"])
test_check = menages.groupby(["dixieme","TYPMEN5_lab","acteu5pr_lab"]).agg({"revenus_uc_pond":"max"}).reset_index()
test_check.rename(columns = {"revenus_uc_pond":"revenus_uc_max"}, inplace = True)
test = pd.merge(test_check,test, on = ["dixieme","TYPMEN5_lab","acteu5pr_lab"])
test["check_poids_max"] = test["revenus_uc_max"] / test["revenus_uc_pond"]
test["revenus_uc_moy"] = test.revenus_uc_pond / test.wprm
test = test.loc[test["TYPMEN5_lab"]!= "autre / n.a"]
test.rename(columns = {'ident21':'count'},inplace = True)
test = test.loc[test["wprm"] > 200000]
test.to_csv(f"{output_path}/check_cas_majoritaire_dixieme.csv")
test = test.drop(columns = ["check_poids_max", "revenus_uc_max"])
test.to_csv(f"{output_path}/cas_majoritaire_dixieme.csv")
```
%% Cell type:code id: tags:
``` python
# SMIC net 2021 après csg et crds, source série chornologique INSEE, pour 35h de travail
smic = 9 * 1230.6 + 3 * 1258.22
smic
```
%% Cell type:code id: tags:
``` python
menages["part_rev_decl_pond"] = menages.part_rev_decl * menages.wprm
```
%% Cell type:code id: tags:
``` python
def compute_moy(data, group_var):
moy = data.groupby(group_var).agg({"ident21":"count","wprm":"sum","revenus_pond":"sum","prestations_pond":"sum","agprl_pond":"sum","revenus_remplacement_pond":"sum","revenus_activite_pond":"sum","revenus_foncier_capital_pond":"sum","part_rev_decl_pond":"sum"})
moy.rename(columns={"ident21":"count"},inplace = True)
moy["revenus_moy"] = moy.revenus_pond / moy.wprm
moy["revenus_remplacement_moy"] = moy.revenus_remplacement_pond / moy.wprm
moy["revenus_activite_moy"] = moy.revenus_activite_pond / moy.wprm
moy["revenus_fon_cap_moy"] = moy.revenus_foncier_capital_pond / moy.wprm
moy["prestations_moy"] = moy.prestations_pond / moy.wprm
moy["age_moy"] = moy.agprl_pond / moy.wprm
#moy["part_rev_decl_moy"] = moy.part_rev_decl_pond / moy.wprm
moy["rev_pourc_smic"] = moy.revenus_moy / smic
moy = moy.drop(["revenus_pond","prestations_pond","agprl_pond","revenus_remplacement_pond","revenus_activite_pond","revenus_foncier_capital_pond","part_rev_decl_pond"], axis = 1)
return moy
```
%% Cell type:code id: tags:
``` python
def compute_logmnt(data,group_var):
nb_logtm = data.groupby([group_var, "categ_logmnt_lab"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb_logtm.rename(columns={"ident21":"count"},inplace = True)
nb_logtm["prop"] = round(100 * nb_logtm.wprm /nb_logtm.groupby(group_var)['wprm'].transform("sum"))
nb_logtm["distrib"] = round(100 * nb_logtm.wprm /nb_logtm.groupby("categ_logmnt_lab")['wprm'].transform("sum"))
nb_logtm.groupby("categ_logmnt_lab")['wprm'].agg("sum")
print(nb_logtm)
fig = go.Figure()
fig = px.histogram(nb_logtm,
x = group_var,
y = "prop",
#barmode="group",
color = "categ_logmnt_lab",
text_auto = True,
nbins = 5
)
fig.update_layout(title = "Part des menages en fonction de leur statut d'occupation du logement", bargap = 0.2)
fig.show()
```
%% Cell type:code id: tags:
``` python
def analyse_personne_seule(data):
print("Répartition des statut d'activité de la personne : ")
print(100*data.groupby('acteu5pr_lab').agg({"wprm":"sum"})/data.wprm.sum())
moy = compute_moy(data, "acteu5pr_lab")
print("Moyenne des revenus par catégorie d'actitivité : ")
print(moy)
compute_logmnt(data, "acteu5pr_lab")
```
%% Cell type:code id: tags:
``` python
def compute_statut_couple(data):
nb = data.groupby(["acteu5pr_lab", "acteu5cj_lab"]).agg({"wprm":"sum","ident21":"count"}).reset_index()
nb.rename(columns = {"ident21":"count"})
nb["prop"] = round(100 * nb.wprm /nb.groupby("acteu5pr_lab")['wprm'].transform("sum"))
nb["distrib"] = round(100 * nb.wprm /nb.groupby("acteu5cj_lab")['wprm'].transform("sum"))
nb.groupby("acteu5cj_lab")['wprm'].agg("sum")
print(nb)
fig = go.Figure()
fig = px.histogram(nb,
x = "acteu5pr_lab",
y = "prop",
#barmode="acteu5cj",
color = "acteu5cj_lab",
text_auto = True,
nbins = 5
)
fig.update_layout(title = "Part des menages en fonction de leur statut d'activité", bargap = 0.2)
fig.show()
```
%% Cell type:code id: tags:
``` python
def analyse_couple(data):
print("Statut activité adulte 1")
print(100*data.groupby('acteu5pr_lab').agg({"wprm":"sum"})/data.wprm.sum())
print("Statut activité adulte 2")
print(100*data.groupby('acteu5cj_lab').agg({"wprm":"sum"})/data.wprm.sum())
compute_statut_couple(data)
print("Nombre d'apporteur de ressources du ménage")
#temp = data.groupby('nbres').agg({"wprm":"sum","part_rev_decl_pond":"sum"})
#temp["part_rev_decl_moy"] = 100*temp.part_rev_decl_pond / temp.wprm
temp = data.groupby('nbres').agg({"wprm":"sum"}).reset_index()
temp["wprm"] = 100 * temp.wprm/data.wprm.sum()
#print(temp[["wprm","part_rev_decl_moy"]])
print(temp.loc[temp['nbres'] < 3][["wprm"]])
moy = compute_moy(data, "acteu5pr_lab")
print("Moyenne des revenus par catégorie d'actitivité de l'adulte 1 : ")
print(moy)
compute_logmnt(data, "acteu5pr_lab")
```
%% Cell type:code id: tags:
``` python
def analyse_quantile(quantile):
print(f" \n __________________ QUANTILE {quantile} ____________________")
print(" \n ***** Personne seule ***** \n")
focus_type = focus.loc[focus["TYPMEN5"] == "1"]
if quantile >= 5:
focus_type = focus_type.loc[focus.acteu5pr != "2"] # on enlève les sans emploi dans le haut de la distribution car pas assez de monde
analyse_personne_seule(focus_type)
#menages = menages.loc[menages["TYPMEN5"] != "5"]
print(" \n ***** Couple sans enfant ***** \n")
focus_type = focus.loc[focus["TYPMEN5"] == "3"]
analyse_couple(focus_type)
print(" \n ***** Couple avec enfant(s) ***** \n")
focus_type = focus.loc[focus["TYPMEN5"] == "4"]
focus_type['acteu5pr_lab'] = np.where(focus_type['acteu5pr_lab'] == "retraité","sans emploi",focus_type['acteu5pr_lab'])
focus_type['acteu5cj_lab'] = np.where(focus_type['acteu5cj_lab'] == "retraité","sans emploi",focus_type['acteu5cj_lab'])
analyse_couple(focus_type)
if quantile < 4:
print(" \n ***** Famille monoparentale ***** \n")
focus_type = focus.loc[focus["TYPMEN5"] == "2"]
focus_type['acteu5pr_lab'] = np.where(focus_type['acteu5pr_lab'] == "retraité","sans emploi",focus_type['acteu5pr_lab'])
analyse_personne_seule(focus_type)
```
%% Cell type:code id: tags:
``` python
for i in range(1,2):
analyse_quantile(i)
```
%% Cell type:code id: tags:
``` python
for quantile in range(1,11):
analyse_quantile(quantile)
```
This diff is collapsed.
This diff is collapsed.