Base de départ

Exemple de mise en forme des données

Il est important de noter que les données populationnelles de base pour ce modèle provienennt de la Base de données de simulation de politiques sociales (BDSPS) qui est produite par Statistiques Canada (https://www.statcan.gc.ca/fra/microsimulation/bdmsps/bdmsps). La BDSPS est une base non confidentielle, statistiquement représentative, de données sur des particuliers canadiens dans leur contexte familial, contenant suffisamment de renseignements sur chaque particulier pour calculer les impôts payés au gouvernement et les transferts de fonds versés par ce dernier.

La Base de données de simulation de politiques sociales (BDSPS) est disponible au moyen L’Initiative de démocratisation des données (IDD). Les professeurs et étudiants dans les établissements postsecondaires participants peuvent accéder au modèle par l’entremise de leurs contacts avec l’IDD.

Pour plus de renseignements sur le programme de l’IDD, consultez le site Web de l’Initiative de démocratisation des données (https://www.statcan.gc.ca/fra/idd/idd).

Dans cette section, on illustre comment effectuer la mise en forme des données provenant de la BDSPS, par contre le modèle pourrait fonctionner avec une base de données différentes permettant une mise en forme identiques.

Une version de base des fichiers de départ est fournie dans le répertoire params, soit startpop.pkl et newimmpop.pkl, tous deux en format pickle.

On utilise trois fonctions de simgen: * bdsps: manipule la base BDSPS de Statistiques Canada pour mettre en forme certaines variables et créer les registres avec NAS de dominants. * parse: reformule les noms de variables à l’aide de dictionnaires * population: crée la structure de population

from simgen import bdsps, population, parse

Nettoyage de la BDSPS

SimGen vient avec une fonction, bdsps qui nettoie les données de la BDSPS, crée les NAS et les trois registres. Cette fonction peut être adapté pour d’autres bases de données. Fait important à noter, la fonction BDSPS calibre aussi les poids des répondants, par âge et sexe pour s’arrimer sur la population québécoise de 2017, selon l’ISQ.

hh,sp,kd = bdsps('../raw/bdsps2017.dta')

Voici ce à quoi ressemble les registres des dominants, conjoints et enfants avant la mise en forme finale.

hh.head()
hhid age byr male immig newimm yrsimm educ4 inschool married spflag wgt pn nkids
nas
0 0 33 1984 True False False NaN none False False 0 397.943 0 2.0
1 0 13 2004 False False False NaN none True False 0 414.793 2 0.0
2 0 15 2002 True False False NaN none True False 0 450.728 2 0.0
3 1 33 1984 True False False NaN none False False 0 398.808 0 2.0
4 1 13 2004 False False False NaN none True False 0 415.695 2 0.0
sp.head()
hhid age byr male immig newimm yrsimm educ4 inschool married spflag wgt pn
nas
21 7 39 1978 True False False NaN des False True 1 26.9994 1
22 7 47 1970 False False False NaN none False True 1 24.59 0
26 8 39 1978 True False False NaN des False True 1 26.9994 1
27 8 47 1970 False False False NaN none False True 1 24.59 0
31 9 39 1978 True False False NaN des False True 1 26.9994 1
kd.head()
hhid age byr male immig newimm yrsimm educ4 inschool married spflag wgt pn nparents
nas
0 0 13 2004 False False False NaN none True False 0 414.793 2 1
0 0 15 2002 True False False NaN none True False 0 450.728 2 1
3 1 13 2004 False False False NaN none True False 0 415.695 2 1
3 1 15 2002 True False False NaN none True False 0 451.708 2 1
6 2 13 2004 False False False NaN none True False 0 415.695 2 1

On partitionne pour obtenir seulement les nouveaux immigrants dans des registres différents.

imm = hh[hh.newimm]
imm_nas = imm.index
sp_imm = sp.loc[sp.index.isin(imm_nas),:]
kd_imm = kd.loc[kd.index.isin(imm_nas),:]

Adapter les noms de variables pour SimGen

Une étape importante est de faire la correspondance entre les noms de variables des registres de la BDSPS et ceux dans SimGen. Pour ce faire, nous avons la classe parse(). Cette classe permet, à l’aide d’un dictionnaire de faire cette correspondance, pour chaque registre. Par défaut, parse() suppose les mêmes noms de variables que dans SimGen.

parsing = parse()
parsing.map_hh
{'wgt': 'wgt',
 'byr': 'byr',
 'male': 'male',
 'educ': 'educ',
 'insch': 'insch',
 'nkids': 'nkids',
 'married': 'married'}

On fait ensuite notre correspondance propre à la BDSPS.

parsing.map_hh['educ'] = 'educ4'
parsing.map_hh['insch'] = 'inschool'
parsing.map_sp['educ'] = 'educ4'
parsing.map_sp['insch'] = 'inschool'
parsing.map_kd['insch'] = 'inschool'

On ajuste ensuite à l’aide de ces dictionnaires les trois registres.

hh = parsing.dominants(hh)
sp = parsing.spouses(sp)
kd = parsing.kids(kd)
hh.head()
wgt byr male educ insch nkids married
nas
0 397.942563 1984 True NaN NaN 2 False
1 414.793316 2004 False NaN NaN 0 False
2 450.727786 2002 True NaN NaN 0 False
3 398.807655 1984 True NaN NaN 2 False
4 415.695040 2004 False NaN NaN 0 False
imm = parsing.dominants(imm)
sp_imm = parsing.spouses(sp_imm)
kd_imm = parsing.kids(kd_imm)

Création des structures de population et sauvegarde des données

Après avoir ajusté les registres, on peut les introduire dans des structures de population. La classe population permet de faire ceci. On peut ensuite sauvegarder les objets en format pickle en donnant le nom du fichier.

pop = population()
pop.input(hh,sp,kd)
pop.save('startpop')
newimm = population()
newimm.input(imm,sp_imm,kd_imm)
newimm.save('newimmpop')