Récupération des données#

Links: notebook, html, PDF, python, slides, GitHub

Ce notebook donne quelques exemples de codes qui permettent de récupérer les données utilisées par d’autres notebooks. Le module actuariat_python est implémenté avec Python 3. Pour les utilisateurs de Python 2.7, il suffira de recopier le code chaque fonction dans le notebook (suivre les liens insérés dans le notebook).

%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('ggplot')
# le code qui suit n'est pas indispensable, il génère automatiquement un menu
# dans le notebook
from jyquickhelper import add_notebook_menu
add_notebook_menu()
Populating the interactive namespace from numpy and matplotlib

Population française janvier 2017#

Les données sont disponibles sur le site de l’INSEE Pyramide des âges au 1er janvier. Elles sont disponibles au format Excel. Le format n’est pas le plus simple et il a le don d’être parfois illisible avec pandas. Le plus simple est de le convertir au format texte avec Excel.

url = "https://www.insee.fr/fr/statistiques/fichier/1892086/pop-totale-france.xls"
url = "pop-totale-france.txt"
import pandas
df=pandas.read_csv(url, sep="\t", encoding="latin-1")
df.head(n=5)
Population totale par sexe et âge au 1er janvier 2017, France Unnamed: 1 Unnamed: 2 Unnamed: 3 Unnamed: 4
0 Mis à jour : janvier 2017 NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 Année de naissance Âge révolu Nombre d'hommes Nombre de femmes Ensemble
3 2016 0 382 585 364 392 746 977
4 2015 1 390 810 373 164 763 974
df=pandas.read_csv(url, sep="\t", encoding="latin-1", skiprows=3)
df.head(n=5)
Année de naissance Âge révolu Nombre d'hommes Nombre de femmes Ensemble
0 2016 0 382 585 364 392 746 977
1 2015 1 390 810 373 164 763 974
2 2014 2 402 728 386 467 789 195
3 2013 3 405 636 387 097 792 733
4 2012 4 416 074 396 365 812 439
df.tail(n=5)
Année de naissance Âge révolu Nombre d'hommes Nombre de femmes Ensemble
100 1916 ou avant 100 ou plus 3 015 15 617 18 632
101 NaN Total 32 455 859 34 534 967 66 990 826
102 NaN NaN NaN NaN NaN
103 Champ : France inclus Mayotte. NaN NaN NaN NaN
104 Source : Insee, estimations de population (rés... NaN NaN NaN NaN

La récupération de ces données est implémentée dans la fonction population_france_year :

from actuariat_python.data import population_france_year
df = population_france_year()
df.head(n=3)
naissance age hommes femmes ensemble
0 2016 0 382585 364392 746977
1 2015 1 390810 373164 763974
2 2014 2 402728 386467 789195
df.tail(n=3)
naissance age hommes femmes ensemble
98 1918 98 2474 10089 12563
99 1917 99 1362 6765 8127
100 1916 100 3015 15617 18632

D’après cette table, il y a plus de personnes âgées de 110 ans que de 109 ans. C’est dû au fait que la dernière ligne aggrège toutes les personnes âgées de plus de 110 ans.

Table de mortalité 2000-2002 (France)#

On utilise quelques raccourcis afin d’éviter d’y passer trop de temps. Les données sont fournis au format Excel à l’adresse : http://www.institutdesactuaires.com/gene/main.php?base=314. La fonction table_mortalite_france_00_02 permet de les récupérer.

from actuariat_python.data import table_mortalite_france_00_02
df=table_mortalite_france_00_02()
df.head()
Age Homme Femme
0 0.0 100000.0 100000.0
1 1.0 99511.0 99616.0
2 2.0 99473.0 99583.0
3 3.0 99446.0 99562.0
4 4.0 99424.0 99545.0
df.plot(x="Age",y=["Homme", "Femme"],xlim=[0,100])
<matplotlib.axes._subplots.AxesSubplot at 0x193a55bee48>
../_images/population_recuperation_donnees_13_1.png

Taux de fécondité (France)#

On procède de même pour cette table avec la fonction fecondite_france. Source : INSEE : Fécondité selon l’âge détaillé de la mère.

from actuariat_python.data import fecondite_france
df=fecondite_france()
df.head()
age 2005 2015
3 15.0 0.1 0.0
4 16.0 0.2 0.2
5 17.0 0.5 0.5
6 18.0 1.0 1.1
7 19.0 2.0 2.1
df.plot(x="age", y=["2005","2015"])
<matplotlib.axes._subplots.AxesSubplot at 0x193a583fba8>
../_images/population_recuperation_donnees_16_1.png

Table de mortalité étendue 1960-2010#

table de mortalité de 1960 à 2010 qu’on récupère à l’aide de la fonction table_mortalite_euro_stat.

from actuariat_python.data import table_mortalite_euro_stat
table_mortalite_euro_stat()
'mortalite.txt'
import os
os.stat("mortalite.txt")
os.stat_result(st_mode=33206, st_ino=9007199255282328, st_dev=311511962, st_nlink=1, st_uid=0, st_gid=0, st_size=105741052, st_atime=1480548419, st_mtime=1480548432, st_ctime=1480548419)
import pandas
df = pandas.read_csv("mortalite.txt", sep="\t", encoding="utf8", low_memory=False)
df.head()
annee valeur age age_num indicateur genre pays
0 2012 0.00000 Y01 1.0 DEATHRATE F AD
1 2014 0.00042 Y01 1.0 DEATHRATE F AL
2 2009 0.00080 Y01 1.0 DEATHRATE F AM
3 2008 0.00067 Y01 1.0 DEATHRATE F AM
4 2007 0.00052 Y01 1.0 DEATHRATE F AM
df [ ((df.age=="Y60") | (df.age=="Y61")) & (df.annee == 2000) & (df.pays=="FR") & (df.genre=="F")]
annee valeur age age_num indicateur genre pays
87406 2000 5.020000e-03 Y60 60.0 DEATHRATE F FR
88955 2000 4.860000e-03 Y61 61.0 DEATHRATE F FR
485730 2000 2.580000e+01 Y60 60.0 LIFEXP F FR
487268 2000 2.490000e+01 Y61 61.0 LIFEXP F FR
882568 2000 5.010000e-03 Y60 60.0 PROBDEATH F FR
884117 2000 4.850000e-03 Y61 61.0 PROBDEATH F FR
1281364 2000 9.949900e-01 Y60 60.0 PROBSURV F FR
1282913 2000 9.951500e-01 Y61 61.0 PROBSURV F FR
1679610 2000 9.307600e+04 Y60 60.0 PYLIVED F FR
1681148 2000 9.261800e+04 Y61 61.0 PYLIVED F FR
2075898 2000 9.331000e+04 Y60 60.0 SURVIVORS F FR
2077436 2000 9.284300e+04 Y61 61.0 SURVIVORS F FR
2472219 2000 2.405594e+06 Y60 60.0 TOTPYLIVED F FR
2473757 2000 2.312517e+06 Y61 61.0 TOTPYLIVED F FR