Deaths and Births
[1]:
# dependencies
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from pynsee.macrodata import get_dataset_list, get_series_list, get_series
[2]:
import logging
import sys
logging.basicConfig(stream=sys.stdout,
level=logging.INFO,
format="%(message)s")
[3]:
# Feature engineering
insee_data = get_dataset_list()
df_idbank = get_series_list("DECES-MORTALITE", "NAISSANCES-FECONDITE")
df_idbank = df_idbank.loc[(df_idbank.FREQ == "M") & # monthly
(df_idbank.REF_AREA == "FM") & # metropolitan France
(df_idbank.DEMOGRAPHIE.isin(["NAISS","DECES"]))]
# get data
data = get_series(df_idbank.IDBANK)
Previously saved data has been used:
/home/tfardet/.cache/pynsee/pynsee/48719b3a81bc306982ce59585ceb295f.parquet
Creation date: 2025-02-28, 6 days ago
Set update=True to get the most up-to-date data
Previously saved data has been used:
/home/tfardet/.cache/pynsee/pynsee/a40cf62baf86bf9c0c9248cef61926f6.parquet
Creation date: 2025-03-06, today
Set update=True to get the most up-to-date data
Previously saved data has been used:
/home/tfardet/.cache/pynsee/pynsee/42ec32a8c7e30d601bbb010a3bb39cce.parquet
Creation date: 2025-03-06, today
Set update=True to get the most up-to-date data
[15]:
data['period'] = pd.cut(
pd.to_datetime(data['DATE']),
bins = pd.to_datetime(
['1946-01-01', '1975-01-01', '2000-01-01', pd.Timestamp.today().normalize()]),
labels = ['1946-1975','1975-2000','2000-today']
)
conditions = (data.IDBANK.values=="000436391").astype(int)
values_label = np.array(["Births", "Deaths"])
values_color = np.array(["blue", "red"])
data['label'] = values_label[conditions]
data['color'] = values_color[conditions]
[16]:
fig, axes = plt.subplots(3,1, figsize=(15,5))
plt.suptitle("Deaths and Births in France since 1946")
for (period, group), ax in zip(data.groupby('period'), axes.flatten()):
for (var, group2) in group.groupby(['color', 'DEMOGRAPHIE_label_en']):
group2.plot(x='DATE', y='OBS_VALUE',
kind='line', ax=ax,
color = var[0], label = var[1],
legend=False).xaxis.label.set_visible(False)
ax.set_yticks(list(range(30000,100000,20000)))
handles, labels = ax.get_legend_handles_labels()
fig.legend(handles, labels, loc='lower center')
plt.show()
/tmp/ipykernel_41636/2457606856.py:3: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.
for (period, group), ax in zip(data.groupby('period'), axes.flatten()):
