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
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 |
|
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()
|
naissance |
age |
hommes |
femmes |
ensemble |
0 |
2016 |
0 |
382585 |
364392 |
746977 |
1 |
2015 |
1 |
390810 |
373164 |
763974 |
2 |
2014 |
2 |
402728 |
386467 |
789195 |
|
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.
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>
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>
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()
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 |