Skip to content

Commit

Permalink
Corrige les différences de colonnes potentielles entre plusieurs vers…
Browse files Browse the repository at this point in the history
…ions de l'ERFS (qui pourtant portent le même millésime)
  • Loading branch information
magemax committed Oct 24, 2019
1 parent b6a62ad commit 10e6ea8
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def build_merged_dataframes(temporary_store = None, year = None):
add_suffix_retropole_years = [2012]

survey = erfs_fpr_survey_collection.get_survey(f"erfs_fpr_{year}")
eec_menage = survey.get_values(table = f"fpr_mrf{yr}e{yr}t4")
eec_menage = survey.get_values(table = f"fpr_mrf{yr}e{yr}t4") if year<2015 else survey.get_values(table = f"fpr_mrt{yr}e{yr}t4")
eec_individu = survey.get_values(table = f"fpr_irf{yr}e{yr}t4")

if year in add_suffix_retropole_years:
Expand All @@ -37,6 +37,8 @@ def build_merged_dataframes(temporary_store = None, year = None):
fpr_individu = survey.get_values(table = f"fpr_indiv_{year}")
fpr_menage = survey.get_values(table = f"fpr_menage_{year}")

for table in (fpr_menage, eec_menage, eec_individu, fpr_individu):
table.columns = [k.lower() for k in table.columns]
individus, menages = merge_tables(fpr_menage, eec_menage, eec_individu, fpr_individu, year)
temporary_store[f"menages_{year}"] = menages
del eec_menage, fpr_menage, menages
Expand Down Expand Up @@ -79,15 +81,15 @@ def merge_tables(fpr_menage = None, eec_menage = None, eec_individu = None, fpr_
'naia',
'noicon',
'noimer',
'noiper',
prosa,
retrai,
'rstg',
'statut',
'stc',
'titc',
txtppb,
])
]
+ (["noiper"] if "noiper" in individus.loc else []))

for var in var_list:
assert np.issubdtype(individus[var].dtype, np.integer), \
Expand Down Expand Up @@ -195,6 +197,10 @@ def check_naia_naim(individus, year):
individus.naim == 99,
'naim'
] = 1 # np.random.randint(1, 13, sum(~valid_naim))
individus.loc[
individus.naim == 0,
'naim'
] = 1

assert individus.naim.isin(range(1, 13)).all()
good = ((year >= individus.naia) & (individus.naia > 1890))
Expand All @@ -218,7 +224,6 @@ def check_naia_naim(individus, year):
'noi',
'noicon',
'noimer',
'noiper',
prosa,
retrai,
'rstg',
Expand All @@ -233,6 +238,7 @@ def check_naia_naim(individus, year):
'rnc_i',
'salaires_i',
]
+ (["noiper"] if "noiper" in individus.loc else [])
]
)
except AssertionError:
Expand Down
111 changes: 55 additions & 56 deletions openfisca_france_data/erfs_fpr/input_data_builder/step_04_famille.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ def build_famille(temporary_store = None, year = None):
'noidec',
'noimer',
'noindiv',
'noiper',
'persfip',
'quelfic',
retrai,
Expand All @@ -79,7 +78,7 @@ def build_famille(temporary_store = None, year = None):
'year',
'ztsai',
'wprm',
]
] + (["noiper"] if "noiper" in indivi.columns else [])

enfants_a_naitre = temporary_store['enfants_a_naitre_{}'.format(year)][individual_variables].copy()
enfants_a_naitre.drop_duplicates('noindiv', inplace = True)
Expand Down Expand Up @@ -466,64 +465,63 @@ def famille_3(base = None, famille = None, kind = 'erfs_fpr', year = None):

log.info(u" 4.2 : enfants avec père")
avec_pere = subset_base(base, famille)
assert avec_pere.noiper.notnull().all()
avec_pere = avec_pere[
(avec_pere[lpr].isin([4,5,6])) &
(avec_pere.jeune_non_eligible_rsa | avec_pere.moins_de_15_ans_inclus) &
(avec_pere.noiper > 0)
].copy()
log.info(u"Il y a {} enfants rattachés à leur père".format(
len(avec_pere.index)))
avec_pere['noifam'] = (100 * avec_pere.ident + avec_pere.noiper).astype(int)
avec_pere['famille'] = 44
avec_pere['kid'] = True
assert avec_pere['noifam'].notnull().all(), 'presence of NaN in avec_pere'
for series_name in ['famille', 'noifam']:
try:
assert_dtype(avec_pere[series_name], "int")
except Exception:
assert_dtype(avec_pere[series_name], "int64")

assert_dtype(avec_pere.kid, "bool")

pere = (
pd.DataFrame(avec_pere['noifam'])
.rename(columns = {'noifam': 'noindiv'})
.drop_duplicates()
.merge(base)
)
pere['noifam'] = (100 * pere.ident + pere.noi).astype(int)
pere['famille'] = 45
famille = famille[~(famille.noindiv.isin(pere.noindiv.values))].copy() # Avoid duplication in famille

# On récupère les conjoints des pères
assert pere.noicon.notnull().all()
conjoint_pere_id = pere.loc[pere.noicon > 0, ['ident', 'noicon', 'noifam']].copy()
log.info(u"et dont les conjoints sont au nombre de {}".format(
len(conjoint_pere_id)))

if len(conjoint_pere_id.index) > 0:
conjoint_pere_id['noindiv'] = (100 * conjoint_pere_id.ident + conjoint_pere_id.noicon).astype(int)
conjoint_pere = (conjoint_pere_id[['noindiv', 'noifam']].copy()
.merge(base)
)
conjoint_pere['famille'] = 46
if "noiper" in base.columns:
assert avec_pere.noiper.notnull().all()
avec_pere = avec_pere[
(avec_pere[lpr].isin([4,5,6])) &
(avec_pere.jeune_non_eligible_rsa | avec_pere.moins_de_15_ans_inclus) &
(avec_pere.noiper > 0)
].copy()
log.info(u"Il y a {} enfants rattachés à leur père".format(
len(avec_pere.index)))
avec_pere['noifam'] = (100 * avec_pere.ident + avec_pere.noiper).astype(int)
avec_pere['famille'] = 44
avec_pere['kid'] = True
assert avec_pere['noifam'].notnull().all(), 'presence of NaN in avec_pere'
for series_name in ['famille', 'noifam']:
try:
assert_dtype(conjoint_pere[series_name], "int")
assert_dtype(avec_pere[series_name], "int")
except Exception:
assert_dtype(conjoint_pere[series_name], "int64")
assert_dtype(avec_pere[series_name], "int64")

famille = famille[~(famille.noindiv.isin(conjoint_pere.noindiv.values))].copy() # Avoid duplication in famille
famille = pd.concat([famille, avec_pere, pere, conjoint_pere])
else:
conjoint_pere = None
famille = pd.concat([famille, avec_pere, pere], sort = True)

control_04(famille, base)
assert_dtype(avec_pere.kid, "bool")

del avec_pere, pere, conjoint_pere, conjoint_pere_id
pere = (
pd.DataFrame(avec_pere['noifam'])
.rename(columns = {'noifam': 'noindiv'})
.drop_duplicates()
.merge(base)
)
pere['noifam'] = (100 * pere.ident + pere.noi).astype(int)
pere['famille'] = 45
famille = famille[~(famille.noindiv.isin(pere.noindiv.values))].copy() # Avoid duplication in famille

# On récupère les conjoints des pères
assert pere.noicon.notnull().all()
conjoint_pere_id = pere.loc[pere.noicon > 0, ['ident', 'noicon', 'noifam']].copy()
log.info(u"et dont les conjoints sont au nombre de {}".format(
len(conjoint_pere_id)))

if len(conjoint_pere_id.index) > 0:
conjoint_pere_id['noindiv'] = (100 * conjoint_pere_id.ident + conjoint_pere_id.noicon).astype(int)
conjoint_pere = (conjoint_pere_id[['noindiv', 'noifam']].copy()
.merge(base)
)
conjoint_pere['famille'] = 46
for series_name in ['famille', 'noifam']:
try:
assert_dtype(conjoint_pere[series_name], "int")
except Exception:
assert_dtype(conjoint_pere[series_name], "int64")

famille = famille[~(famille.noindiv.isin(conjoint_pere.noindiv.values))].copy() # Avoid duplication in famille
famille = pd.concat([famille, avec_pere, pere, conjoint_pere])
else:
conjoint_pere = None
famille = pd.concat([famille, avec_pere, pere], sort = True)
control_04(famille, base)

del avec_pere, pere, conjoint_pere, conjoint_pere_id
if kind == 'erfs_fpr':
log.info(u" 4.3 : enfants avec déclarant (ignorée dans erfs_fpr)")
pass
Expand Down Expand Up @@ -602,7 +600,6 @@ def famille_5(base = None, famille = None, kind = 'erfs_fpr', year = None):
'noidec',
'noimer',
'noindiv',
'noiper',
'persfip',
'quelfic',
retrai,
Expand All @@ -613,7 +610,7 @@ def famille_5(base = None, famille = None, kind = 'erfs_fpr', year = None):
'titc',
'year',
'ztsai',
]
] + (["noiper"] if "noiper" in base.columns else [])
# TODO: temporary_store is not defined here
fip = temporary_store['fipDat_{}'.format(year)][individual_variables_fip].copy()
# Variables auxilaires présentes dans base qu'il faut rajouter aux fip'
Expand Down Expand Up @@ -868,6 +865,8 @@ def get_smic(year):
smic = int(1398.37)
elif year == 2014:
smic = int(1445.38)
elif year == 2016:
smic = int(1466.62)
else:
log.info("smic non défini")
return None
Expand Down

0 comments on commit 10e6ea8

Please sign in to comment.