{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"# Le pouvoir d'achat des ouvriers anglais du XVIe au XIXe siècle\n",
"\n",
"Dans le cadre de cette exercice évalué par les pairs (Mooc RR, mod3) j'ai choisi le sujet n°2 intitulé :\n",
"**Le pouvoir d'achat des ouvriers anglais du XVIe au XIXe siècle**\n",
"\n",
"## Contexte de l'étude\n",
"\n",
"William Playfair un des pionnier de la représentation graphique des données, a réalisé un graphique montrant l'évolution du prix du blé et du salaire moyen entre 1565 et 1821. Ce graphique a été publié en 1822 dans son livre *A Letter on our Agricultural Distresses, Their Causes and Remedies*. Ci-dessous une reproduction hébergée sur [Wikipédia][graph original].\n",
"\n",
"\n",
"\n",
"[graph original]:https://fr.wikipedia.org/wiki/William_Playfair#/media/File:Chart_Showing_at_One_View_the_Price_of_the_Quarter_of_Wheat,_and_Wages_of_Labour_by_the_Week,_from_1565_to_1821.png\n",
"\n",
"Le premier objectif de l'étude est de reproduire ce graphe, puis dans un second temps de corriger le graphique.Een effet W. Playfair a utilisé la même unité pour représenter deux quantités différentes sur l'axe des ordonnées. Enfin dans un troisième temps le but sera d'améliorer la représentation du pouvoir d'achat des agriculteurs anglais sur cette période.\n",
"\n",
"## Les données\n",
"\n",
"### Sources\n",
"\n",
"W. Playfair n'a pas publié les données numériques brutes de son étude. Néanmoins une version numérisée est diponible [ici][data_url], réalisé par [Vincent Arel-Bundock] et publié sur son site [R datasets][vab r datasets].\n",
"\n",
"[data_url]: https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/HistData/Wheat.csv\n",
"[Vincent Arel-Bundock]: https://github.com/vincentarelbundock\n",
"[vab r datasets]: https://vincentarelbundock.github.io/Rdatasets/\n"
]
},
{
"cell_type": "code",
"execution_count": 138,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"# import des bibliothèques\n",
"import urllib\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"from os import listdir\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Fichier déjà téléchargé\n"
]
},
{
"data": {
"text/plain": [
"['exercice_python_en.org',\n",
" 'exercice_fr.ipynb',\n",
" 'Wheat.csv',\n",
" 'exercice.ipynb',\n",
" 'exercice_fr.Rmd',\n",
" 'playfair_ori_prixble_salaire.png',\n",
" 'exercice_python_fr.org',\n",
" 'exercice_R_en.org',\n",
" 'exercice_R_fr.org',\n",
" 'exercice_en.Rmd',\n",
" 'exercice_en.ipynb',\n",
" '.ipynb_checkpoints']"
]
},
"execution_count": 139,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# téléchargement du fichier\n",
"data_url = 'https://raw.githubusercontent.com/vincentarelbundock/Rdatasets/master/csv/HistData/Wheat.csv'\n",
"filename = 'Wheat.csv'\n",
"\n",
"curFiles = set(listdir())\n",
"\n",
"# téléchargement automatique du fichier\n",
"# si non présent dans le répertoire\n",
"if not(filename in curFiles):\n",
" print('Téléchargement du fichier')\n",
" urllib.request.urlretrieve(data_url, filename)\n",
"else:\n",
" print('Fichier déjà téléchargé')\n",
"\n",
"listdir()"
]
},
{
"cell_type": "code",
"execution_count": 140,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"# lecture du fichier\n",
"rawdata = pd.read_csv(filename, index_col=0)"
]
},
{
"cell_type": "code",
"execution_count": 141,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Year
\n",
"
Wheat
\n",
"
Wages
\n",
"
\n",
" \n",
" \n",
"
\n",
"
1
\n",
"
1565
\n",
"
41.0
\n",
"
5.00
\n",
"
\n",
"
\n",
"
2
\n",
"
1570
\n",
"
45.0
\n",
"
5.05
\n",
"
\n",
"
\n",
"
3
\n",
"
1575
\n",
"
42.0
\n",
"
5.08
\n",
"
\n",
"
\n",
"
4
\n",
"
1580
\n",
"
49.0
\n",
"
5.12
\n",
"
\n",
"
\n",
"
5
\n",
"
1585
\n",
"
41.5
\n",
"
5.15
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Year Wheat Wages\n",
"1 1565 41.0 5.00\n",
"2 1570 45.0 5.05\n",
"3 1575 42.0 5.08\n",
"4 1580 49.0 5.12\n",
"5 1585 41.5 5.15"
]
},
"execution_count": 141,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"rawdata.head()"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"### Vérification des données\n",
"\n",
"Les données sont vérifiées sur les critères suivants :\n",
"\n",
"* présence de lignes vides\n",
"* rupture de date, ou division non régulière\n",
"\n",
"Il est à noter les données sont enregistrées tous les 5 ans."
]
},
{
"cell_type": "code",
"execution_count": 142,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
Year
\n",
"
Wheat
\n",
"
Wages
\n",
"
\n",
" \n",
" \n",
"
\n",
"
51
\n",
"
1815
\n",
"
78.0
\n",
"
NaN
\n",
"
\n",
"
\n",
"
52
\n",
"
1820
\n",
"
54.0
\n",
"
NaN
\n",
"
\n",
"
\n",
"
53
\n",
"
1821
\n",
"
54.0
\n",
"
NaN
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Year Wheat Wages\n",
"51 1815 78.0 NaN\n",
"52 1820 54.0 NaN\n",
"53 1821 54.0 NaN"
]
},
"execution_count": 142,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# présence de lignes vides\n",
"rawdata[rawdata.isnull().any(axis=1)]"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"Les 3 dernières lignes sont vides pour la colonne *Wages*, ce qui explique l'arrêt de la ligne rouge et de la surface bleue dans le document originale."
]
},
{
"cell_type": "code",
"execution_count": 143,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Années de rupture :\n",
"1820\n"
]
}
],
"source": [
"# rupture de date, ou division non régulière\n",
"print(\"Années de rupture :\")\n",
"expect_delta = 5\n",
"for y1, y2 in zip(rawdata['Year'][:-1], rawdata['Year'][1:]):\n",
" delta_y = y2 - y1\n",
" if delta_y != expect_delta :\n",
" print(y1)"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"Seule l'année 1820 présente une rupture. En effet l'enregistrement suivant est 1821. Ce qui explique la barre moins large sur le graphique original, pour les années 1820 à 1821.\n",
"\n",
"### Commentaire sur les unités\n",
"\n",
"Pour rappel les untités originales des données sont les suivantes :\n",
"* Blé (Wheat) : Shillings pour un quart de boisseau (8,6 kg)\n",
"* Salaire (Wages) : Shillings par semaine\n",
"\n",
"Avant 1971, la monnaie anglaise était découpée de la manière suivante :\n",
"* 1 Livre valait 20 shillings\n",
"* 1 Shilling valait 12 penses"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"## Reproduction du graphique original\n",
"\n",
"Ci-dessous le graphique original est reproduit à l'aide de `Matplotlib`.\n",
"(Pour représenter des dégradés voir ce lien : https://matplotlib.org/3.2.1/gallery/lines_bars_and_markers/gradient_bar.html?highlight=gradient)\n",
"\n",
"Les années 1820 et 1821 sont représentées séparémment du reste des données afin d'avoir une barre de largeur différente (voir le code ci-dessous)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [],
"source": [
"from matplotlib.ticker import MultipleLocator\n",
"from matplotlib.dates import DateFormatter\n",
"\n",
"fig1, ax1 = plt.subplots(1,1)\n",
"\n",
"fig1.set_size_inches(2.54*6, 2.54*3)\n",
"\n",
"# === représentation du prix du blé === #\n",
"ax1.bar(rawdata['Year'][:-2], rawdata['Wheat'][:-2], align='edge', width=5, color='dimgrey')\n",
"# bar de largeur 1 année pour les deux années 1820 et 1821\n",
"ax1.bar(rawdata['Year'][-2:], rawdata['Wheat'][-2:], align='edge', width=1, color='dimgrey')\n",
"\n",
"# graduation proche de l'original, avec les siècles comme majeure\n",
"# et une graduation mineure tous les 5 ans\n",
"# aide sur les ticks locator :\n",
"# https://matplotlib.org/gallery/ticks_and_spines/tick-locators.html#sphx-glr-gallery-ticks-and-spines-tick-locators-py\n",
"ax1.xaxis.set_major_locator(MultipleLocator(100))\n",
"ax1.xaxis.set_minor_locator(MultipleLocator(5))\n",
"\n",
"ax1.grid(True, which='both')\n",
"\n",
"# les marges de l'axe x sont diminuées\n",
"ax1.set_xlim([int(rawdata['Year'][0:1]), int(rawdata['Year'][-1:]+5)])\n",
"\n",
"ax1.set_xlabel('5 Years each division')\n",
"\n",
"# === représentation du salaire === #\n",
"# l'axe 2 partage l'axe x de l'axe 1\n",
"ax2 = ax1.twinx()\n",
"ax2.fill_between(rawdata['Year'], rawdata['Wages'])\n",
"ax2.plot(rawdata['Year'], rawdata['Wages'], 'r', linewidth=2)\n",
"\n",
"# les deux axes ont les mêmes limites, pour reproduire l'original\n",
"myylim = ax1.get_ylim()\n",
"ax2.set_ylim(myylim)\n",
"\n",
"ax2.set_ylabel('Price of the Quarter of Wheat in Shillings')\n",
"\n",
"ax1.set_title(\"\"\"Chart Showing at One View\n",
"the Price of the Quarter of Wheat, and Wages of Labour\n",
"by the Week, from 1565 to 1821\"\"\")\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"## Graphique avec deux axes des ordonnées\n",
"Le graphique précédent est repris et amélioré avec deux axes distincts cette fois-ci.\n",
"Le jeu de couleur est changé pour un affichage plus lisible.\n",
"La conversion vers l'unité moderne est ajouté en légende de l'axe y, pour information."
]
},
{
"cell_type": "code",
"execution_count": 161,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"text/plain": [
"Text(0.5,1,'Chart Showing at One View\\nthe Price of the Quarter of Wheat, and Wages of Labour\\nby the Week, from 1565 to 1821')"
]
},
"execution_count": 161,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA6oAAAH5CAYAAACI+cNuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzs3XmcXFWd///XOwkQIBBAQHZww40RlEUFFRgVFUEZd0dAFJcZF9x3f4KO+xcX3EZFUBQXENEBFASVVREEXIgigoAEg+xJIJCEJJ/fH/c2VJpeqjvd6Ur69Xw86tFV595z7ueeqlT60+fcc1NVSJIkSZLUK6ZMdACSJEmSJHUyUZUkSZIk9RQTVUmSJElSTzFRlSRJkiT1FBNVSZIkSVJPMVGVJEmSJPUUE1VJ0oglOSLJ8RMdR58keyW5YZyP8f4k3xjPY6wukrwiyZkTHYckadVloipJGlCS/0xySZK7ktyY5PQkTxmnYx2S5IJh9nlskjOT3JFkbpJLk+w7HvEMpKo+XlWvWVnH69PtHwXaPrw8yd1J/pXkf5NsMA7xvC/JeQOUb5xkcZIdquq7VbXPWB9bkjR5mKhKkh4gyduBzwMfBx4MbAN8BXj+OBxrWpe7ngqc1cazKXAYMH+s41kVJXkH8CngXcBM4EnAtsBZSdYc48N9B9g9yUP6lb8MuLyqZo3x8SRJk5CJqiRpOUlmAh8B3lhVJ1fVgqq6t6pOrap3dey6ZpJvJ7kzyZ+T7NLRxnuT/L3d9pck/9Gx7ZAkv07yuSS3AycAXwWe3I7ezh0gpo2BhwBHV9Xi9vHrqrqg337vSHJzOwL8qs5zamO9Jck/knwwyZR22z+S7Nw+PzBJJXlM+/o1SX7SPr9vZDPJdu1+r0xyfZJbk3yg43hrJzmuHf29Ism7h5qanOSoJLOTzG9Hip/alj8beD/w0rZv/jhA3fWBDwNvrqoz2vfqOuAlNMnqgR3xnzjEe7ZFkh+1fXRtksMGirWqbgB+BRzUb9PBwHFtW8uNkCd5VJKzktye5MokL2nLH9KOjve9F99IcnNHveOTvHWwfpMkrb5MVCVJ/T0ZmA78eJj9ngf8ANgAOAX4Use2vwNPpRnd+zBwfJLNO7Y/EbiGZmT0QOC/gAurakZVDTRd9Tbg6radA5I8eIB9NmuPtyVwKPDlJBu2277YbnsosCdNUtWXyJ4L7NU+f1ob154dr88dog+eAjwSeDrwoSSPbssPB7Zrj/fM9hyH8jtgJ2Aj4HvAD5NMr6ozaEa1T2j7ZscB6u5O836d3FlYVXcBp7fH7zPge9YmiqcCf6Tpv6cDb03yrEHiPY6ORDXJI9v4v99/xyTr0oyEf4/m/X458JUkj62qa2lGxR/f7v5U4K6Ofhyu/yVJqykTVUlSfw8Cbq2qJcPsd0FV/ayqltJMB70viaqqH1bVnKpaVlUnAFcBu3XUnVNVX6yqJVV1z3ABVVUBewPXAZ8BbkxyXpJHdOx2L/CRdkTxZ8BdwCOTTAVeCryvqu5sRxs/w/2J1rncn5g+FfhEx+s9GTpR+nBV3VNVf6RJ8vr64CXAx6vqjnYE8gvDnN/xVXVb2x+fAdaiSYC7sTGDv183ttv7DPae7QpsUlUfaUerrwGOppnOO5AfAw9Osnv7+mDg9Kq6ZYB99wOuq6pvtud3GfAj4EXt9nOBPZNs1r4+qX39EGB9mn6VJE0yJqqSpP5uAzbu4trRf3U8vxuY3lcnycFJ/tBO65wL7MDyCdPskQZVVTdU1Zuq6mE0U1oXAN/ujLtfsnY3MKM97prAPzq2/YNm5BCaROmpbaI0lWYq8h5JtqMZhf3DEGH174MZ7fMtWP4chzzfdsryFUnmtf01k+X7ayi3Mvj7tXm7fbB4+96zbYEt+t6vNob301wP/ABVdTfwQ+DgJAFeQTvtdwDbAk/s1/YraEbA4f4R7acB5wHn0PyBYE/g/KpaNtTJS5JWTyaqkqT+LgQWAgeMpnKSbWlG494EPKidyjsLSMdu1a9a/9dDqqrZwJdpEuDh3Eoz2rptR9k2wD/btq6mSdoOA86rqjtpErrX0YxAjiZRuhHYquP11oPt2F6P+h6aUdgN2/6ax/39NVzfXAgsAl7Qr911gecAv+wi3tnAtVW1QcdjvaoaalXl49qYnwmsB5w2RNvn9mt7RlX9d7v9XJqR7L3a5xcAezD8aLYkaTVmoipJWk5VzQM+RHON5wFJ1kmyRpLnJPl0F02sS5Nc3QLQLmo0XEJ5E7BVBlmhNsmGST6c5OFJprSLK70a+G0X57MUOBH4WJL12kT67UDnLV/OpUms+xKjc/q9HqkTgfe1cW/ZtjWY9YAlNP01LcmHaKa89rkJ2K5vwaH+2vfrw8AXkzy7fa+2oxnxvIFmiu9wLgbmJ3lPuxDU1CQ7JNl1iDrnA3OBrwM/qKrFg+x3GrB9koPa2NZIsmvfdahVdRVwD811vOdV1fz2nF+IiaokTVomqpKkB6iqz9Ikcx+kSaBm0yRbP+mi7l9orgG9kCbh+Dfg18NU+xXwZ+BfSW4dYPtimsWJfkGz+M4smlHEQ4Y9mcabaaYKX0MzYvc94NiO7efSJIznDfJ6pD5CkyRe28Z8UhvvQH5Os+jR32imJC9k+anCP2x/3pbksoEaqKpP00zVPZKmfy5q23h6VQ123M76S4H9aRZEupZmFPobNFOQB6tTNFOvt2X5Kdj997sT2Ifmetc5NKPVn6K5DrfPuTRTt6/veB3g98PFLklaPaX5f0aSJI2XJP8NvKyq9hx2Z0mS5IiqJEljLcnmSfZopyk/EngHw9/uR5IktYZb0VGSJI3cmsDXgIfQXMf5A+ArExqRJEmrEKf+SpIkSZJ6ilN/JUmSJEk9xURV0molyXZJKslKv7QhyTZJ7koydSUe88FJzktyZ5LPdFnnuiTPGO/YVidJ/jvJTe37+6AVbGuvJDeMVWy9pP239/CJjmNlSPLIJL9v/+0dNobtfivJR8eqPUlaVZmoSlqljWfS1SYUy9rk5M4kV7b3BB1QVV1fVTPaW32sLK+juZXI+lX1jv4bx/uX3jTeleSqJPckuT7Jxwe7H+oYHfOIJMcPv+eYHW8N4LPAPu37e1u/7T9P8u6O11u2CdtAZZuNc6znJHnNeB5jNJK8PMlf+pWdNUjZe1dudKP2buCcqlqvqr7Qf2OvvheStKowUZWkoc2pqhnA+sB7gKOTPKb/ThMxgtvaFvhLTdyCA1+gSZYPprnv6HOAZ9AsHjTmxqKfR9HGg4HpNPd5Hch5QOdtZ54G/HWAsquq6l8jPPbq4lzg0Uk2gfvegx2BdfqVPZnR37t2ZduWwT8TPW8Cv7MkqSsmqpJWWUm+A2wDnNqOer67Y/Mr2tG9W5N8oKPOlCTvTfL3JLclOTHJRsMdqxo/Ae4AHtMxxfjQJNcDv+o/7TjJRkm+mWROkjuS/KQjjv2S/CHJ3CS/SfK4Ic5z9yS/SzKv/bl7W/4t4JXAu9vzf0a/eq8DXtGx/dSOzTsl+VPb5glJpo80tiSPAN4AvKKqLqyqJVX1Z+CFwHOT7Nnut9zIUpJDklzQ8fqoJLOTzE9yaZKndmw7IslJSY5PMh/4L+D9wEvbc/pju9/MJMckuTHJP5N8NO0U7PZ4v07yuSS3A0cMcC5rJfl8+17NaZ+vlWR74Mp2t7lJfjVAV5wH7JGk7//UpwKfB3bpV7ZcApbkHUlubmN+VUf5WkmObD+/NyX5apK1220bJjktyS3tZ+q0JFu12z7WHudLbd98aaD3rV8MD0vyq/bfwq1Jvptkg47t1yV55xCflXe18c9J8urBjlNVc4BraBJ2gCfQJHnn9iubAlzStt337/TOJH9J8h8dx52a5DNtzNcmeVO/f3tDfR4enuTc9nxuTXLCEP3zvCR/bv8tnJPk0W35r4C9O/p6++H6ul+7P0zyrzaG85I8tt8uG6cZXb6zjXXbjroDfh+025abYZKO2QcZ4DtrJDFL0spmoipplVVVBwHXA/u3UzI/3bH5KcAjgacDH+r7BRM4DDiAZrRrC5rE88vDHStNgvsfwAbA5R2b9gQeDTxrgGrfAdYBHgtsCnyubesJwLHA64EH0dzG5JQkaw1w3I2An9KMXD6IZgrqT5M8qKoOAb4LfLo9/1/065+v99u+f8fmlwDPprl9yuOAQ0YaG03f3lBVF/c77mzgt8A+A9QZyO+AnYCNgO8BP+xMhoDnAyfR9P0xwMeBE9pz2rHd5zhgCfBw4PHtsTunXT6RJlHaFPjYADF8AHhSG8eOwG7AB6vqbzTvH8AGVfXvA9S9GFirrQdN4nUWcHW/ss5EdTNgJrAlcCjw5SQbtts+BWzfxvLwdp8PtdumAN+kGc3bBrgH+BJAVX0AOB94U9s3bxog1v4CfILm38Kjga15YCI/2Gfl2cA7gWcCj6AZSR/KedyflD6tjfWCfmW/rarF7eu/0yTeM4EPA8cn2bzd9lqa0fudaBLcA/oda6jPw/8AZwIbAlsBXxwo2Db5/D7wVmAT4Gc0fxRbs/0cdPb134Y59/5Op+mzTYHLaP6ddnpFG+fGwB/6tg/1fTCCYw/1nSVJPcNEVdLq6sNVdU9V/RH4I/cnDK8HPlBVN1TVIppfyl+UwafBbZFkLs11oIcDB1XVlR3bj6iqBVV1T2el9hfq5wD/VVV3VNW9VXVuu/m1wNeq6qKqWlpVxwGLaBKl/p5LM2X0O+2I5fdpppXuP8C+I/GFqppTVbcDp9L8wj/S2DYGbhyk/RtpfrkfVlUdX1W3tef3GZqk75Edu1xYVT+pqmX9+xmaBaVo+vqt7XtxM80fBV7Wsducqvpie4wHtEGTGHykqm6uqltoEqODuox/EXAR8LQ2kdigqq6hSWT6yh5DM3rY5972ePdW1c+Au4BHJgnNe/C2qrq9qu6kScxf1h7rtqr6UVXd3W77GMtPMR6Rqrq6qs6qqkXteX92gPYG+6y8BPhmVc2qqgUMMFLdT+fo6VNp+uf8fmX39VFV/bA97rKqOgG4iuYPCH3HPqr9d3wH8Mm+el18Hu6lSfS3qKqFVXXf6H4/LwV+2vbPvcCRwNrA7oPs37WqOraq7uz4DtoxycyOXX5aVee12z8APDnJ1ozN98GA31mS1Gu8PkHS6qrzWsC7gRnt822BHydZ1rF9Kc11iP8coJ05VbXVEMeZPUj51sDt7S/R/W0LvDLJmzvK1qQZ1epvC+Af/cr+QTPKtiL690/fsUcS263A5gOU05b/vZtAkryDZrRrC6BorgfeuGOXwfq4z7bAGsCNTZ4HNH+I7aw3XBv9+/kfDHzOg+kbLbyOZpSQ9uer2rLZVdXZ/m1VtaTjdd9ndBOaUfhLO84lQN+01XVokq5n04wIAqyXZOpoFvFKsinN6NxTaa4xnkIzy6DTYJ+VLYBLO7b1/5z2dx5wTDty/CSaKeN3Jdm8LXsKzZTpvtgOBt4ObNcWzeD+z8UWDP7+Dvd5eDfNaOXFSe4APlNVxw4Q73KfiapalmQ2K/hvr52C/DHgxTTvd9930cbAvP7n0/bR7W08Y/F9MNy/BUnqCY6oSlrVjXQRodnAc6pqg47H9KoaKEldkePPBjbqvN6v37aP9YthnXZ0pL85NL94d9qGgZPqkcQ3mJHE9itg6yS7dRa2Iz9P4v7RsQU0yVefzTr2fSrNIlUvATasqg1ofllPx/79z6H/69k0o74bd8S8flU9dog6/fXv523asm6dR5Ps9U1pBfg1sAcPnPY7lFtppvM+tuNcZlazoBfAO2hGm59YVetz/2hkX3+N9P3+RFvncW17B7J83w/lRpo/yPTZZqid21HmOTSLb11fVXe1my5sy2bQTBmnvSbzaOBNwIPaz8WsjthupJm226czjiE/D1X1r6p6bVVtQTPD4isZ+JY6y30m2tHuren+395g/pNmOvszaKY1b9d3iIHOJ8kMmmnxc/rH1Or8Phj031qHiVp4TZJGxERV0qruJuChI9j/q8DH+hYnSbJJkuePdVBVdSPNdWhfSbMAzhpJ+pKKo4H/SvLENNZN8twk6w3Q1M+A7ZP8Z5JpSV5KM430tC5DGWn/dB1be13eV4HvJnlSmgVuHgv8CPgN0HfN7B+AFyRZp00IDu1oZj2aawlvAaYl+RDNiOpw57Rd2oWK2r4+E/hMkvXb64kflnYxpy59H/hg+3nYmOaa0JHcAuc3NNfQHkibqLaj6be0ZV0lqlW1jOY9+Fw72tl3a5u+6wnXo0lk57ZTig/v18QD3u92EaAjBjnkejTTjucm2RJ4Vzdxtk4EDknymHakt38sAzmfZpT0/I6yC9qySzqmo65Lk1Dd0p7Dq4Ad+h37LW3fbEDzxw5g+M9DkhenXYCKZvS4aGZVDHR+z03y9DS3KHoHTQL8my7Os8+0JNM7HmvQ9Pki4DaapPLjA9TbN8lT0tzm6X+Ai6q59nu474M/AC9rv292AV40glglqaeYqEpa1X2CJsGYm+SdXex/FHAKcGaSO2lGcJ44TrEdRHM93F+Bm2kWZaGqLqG5DvFLNL8oX027QE1/1dyzcz+aX5Jvo5m2uF9V3dplDMfQrFI8Nx2rDg9mJLG13gR8gyapu5tm1OsfwAFt0gXNVNXFNEnUcSy/cMzPaRL6v7X1FjL81MQftj9vS3JZ+/xgminKf2njPonBpyUP5KM0q83+iWaxrMvasq5U1d0002DXoumDPufTLJgzkluuvIem33+bZqXjX3D/Nbufp7lO8laaz+4Z/eoeRXPN9R1J+u7tuTXN6O5APkyzGNE8mkV6Tu42yKo6vY3nV2283awiey5Nf3ReF/qAPqqqvwCfoRltvQn4t37ncDRNMvon4Pc0CdwS7k84h/o87ApclOQumu+Ct1TVtQOc35U0f2T4Ik1/70+zcNvi/vsO4X9p/rDQ9/gm8G2az/o/2/h+O0C979Ek/rcDO9NcQ93N98H/BzysPecPt+1I0iopNWG33pMkrW6SfIRmBdanVdXciY5nsmtHDn9YVU+e6FjGU5LnAF+tqv7TYiVJqygTVUnSmEryJuDqquo/2ieNiTT3ld2bZlT1wTTTzX9bVW+d0MAkSWPGRFWSJK1S2mtizwUeRTOl9qc0U3jnT2hgkqQxY6IqSZIkSeopLqYkSZIkSeopJqqStBpKcl2SZ4xT20ckGcmtW3pCkhrkfpnd1P1okluT/Gus45IkSQ9koipJGlSSvZLcME5tPznJ/CRTO8qOHqTsq+MRQzeSbE1zO5DHVNVmE3D8NZOc1P7xoZLs1W/7EUnuTXJXx6P/vVTfkuTaJAuSXJFk+7Z8ryTL+tV95RCxrNAfQJL8T5LLkywZ6N6uSd7cxjk/ySVJntKx7cgkVyW5M8lfkxzcr+7Xk1zZns8ho41RktQbTFQlSRPlEmAqzX08+zwVmNOv7GmM7D6kY21b4LaqunmgjUmmrYQYLqC5p+dgI7onVNWMjsc1HfG9BjgUeC4wg+Y+nJ334Z3Tr+5x43QO0Nxv9d00ix8tJ8kTgU8CLwJm0twD+Mcdf7RYQHMv05nAK4Gjkuze0cQfgTfQ3ANXkrSKM1GVpNXXrkn+kuSOJN9MMh0gyawk+/ftlGSNdlrrTp2Vk6wLnA5s0THatkW7ec0k325Ht/6cZJeOelsk+VGSW9rRscMGCq6q7gV+S5OIkmRTYE3ghH5l29MmqklmJjkmyY1J/tlOye0cfX11O2J4R5KfJxnwvppJnpJkdpK9h+rAdvTwrI4++FaS7dqRzUOTXA/8qt33eW1fzE1yTpJHd7RzXZJ3JflTO6p5TJIHJzm97cNfJNlwkH5aXFWfr6oLgKVDxTtA/FOAw4G3VdVfqvH3qrp9JO20bX0H2AY4te2Ldw933gOcy3FVdTpw5wCbtwP+XFWXVrPS47eBjYFN27qHV9Vfq2pZVV0EnA/cd3/YqvpyVf0SWDjSc5Mk9R4TVUlafb0CeBbwMJpk74Nt+bdpRuf67AvcWFV/6KxcVQuA57D8iNucdvPzgB8AGwCnAF+C+xKjU2lGt7YEng68NcmzBonxPNqktP15QfvoLLu2qvqmHx8HLAEeDjwe2Ad4TXvsA4D3Ay8ANqFJZL7f/4BtLN8HXlhVZw8SV18f/KJfHxzSsXlP4NHAs9qptN8H3toe+2c0Cd2aHfu/EHgmzXuxP80fAd5Pk4xNAQZM6Lu0f5Lb24TxvzvKt2ofO7SJ+bVJPty+T302TXJTu+1z7R8oHqCqDgKuB/Zv++LTXZ53t04HpiZ5YvvHh1cDf2CAUeQ091HdFfjzKI4jSVoFmKhK0urrS1U1ux09+xjw8rb8eGDfJOu3rw8CvjPCti+oqp9V1dK27o5t+a7AJlX1kXYk8BrgaOBlg7RzLvCUJKGZ9ns+cCHwpI6ycwGSPJgmaXxrVS1op+J+rqPt1wOfqKorqmoJ8HFgp36jqi8Gvg7sW1UXj/Cc+zuijeMe4KXAT6vqrHak+EhgbaBzauoXq+qmqvpne54XVdXvq2oR8GOaxHs0TqRJmDcBXgt8KEnfe71V+3Mf4N+AvWk+B4e25X8FdgI2B/4d2Bn47AiO3c15d+tO4Ec0f6hYRDMS/Loa+D56X6X5Y8jPR3EcSdIqwERVklZfszue/wPYAqAdFf018MIkG9Akf98dYdudo1x3A9PbazW3pZkmO7fvQTNq+OBB2vktzXWTO9CMnp5fVXe1sfeV9V2fui2wBnBjR9tfo50a2m4/qmPb7UBoRnb7vBU4saouH+H5DqSzf7eg6WMAqmpZu73z2Dd1PL9ngNczRhNEO6V3TlUtrarfAEfRXOfZ1y7Ap6tqblVdR9Nn+7Z1/9XWX1ZV19JcP/oiutfNeXfrNTSjqI+lmQJ+IHBax3RzAJL8P5rPxksGSWIlSauBlbEAhCRpYmzd8XwbmkWK+hxHkxhMAy5sR/kGMtJEYDbNVN1HdLNzVS1M8juaBX42r6q/tpvOb8sex/2J6myakbaN2xHTgY79saoaKul+MXBMkn9W1ee7iXGo8Duez6EZsQSgHQ3eGhisX8dT0SToAFcCi+n+feysO9j2TmN53jsCp1bV39rXZyS5kWZ09qS2/Q/T/GFlz6qaP4pjSJJWEY6oStLq641JtkqyEc2o5gkd235Cs7LuW2iuWR3MTcCDkszs8pgXA/OTvCfJ2kmmJtkhya5D1DmPZqTzNx1lF7Rl/6qqvwNU1Y3AmcBnkqyfZEqShyXZs63zVeB9SR4L9y289OJ+x5pDc93sYUne0FfYLgJ0RJfnOJATgecmeXqSNWhuZ7Oo3zmNWpK10i6GRbOQ1fQ2KSTJ85NsmMZuNNe6/h9AVd1N876/O8l6SbaimR58Wlt3ryTbtHW3pll19/+GCOUmoPPWNyM67zQLd02n+f1jWnsefYth/a5t66FtPH3X885q674P+E/gmVV12wBtr9m2HWCNtm1/z5GkVZRf4JK0+voeTWJ3Tfv4aN+G9rrKHwEPAU4erIF2hPP7wDXtlNotBtu33X8pzUJBOwHX0twG5Rs0txQZzLk003cv6Ci7oC3rf1uag2mmhf4FuINmpG3z9tg/Bj4F/CDJfJoE5zkDxHg9TbL6njS3boFmFPDXQ53bUKrqSpqpql+kOef9aRYdWjzaNvu5kmYa75Y012XeQzPVGZprdK+mucbz28Cn+t1i5k3AXTRJ+oU0n4tj221PaMsW0CSXsxh6UadPAB9sPwvvHMV5H93G/nLgA+3zg9pt36ZZoOscYD7wBeD1HaPsH6eZGXBV7l+F+v0dbZ/Ztrc7zXXI93D/olySpFVMvLxDkianJB8Ctq+qA4fdeTXWjjL+sKqePOzOkiRppTBRlaRJqJ0O/HvgoKrqP2opSZI0oZz6K0mTTJLX0iw8dLpJqiRJ6kWOqEqSJEmSeoojqpIkSZKknmKiKkmSJEnqKdMmOoAVMWXKlFp77bVXqI1ly5YxZcro8/VVvX4vxLB06VKmTp06/I7jGMNE1++FGCa6fi/E4DnYB70Sw4p+L64OfeA59EYME12/F2LwHHqjD/xeHPv6d999d1VV7w5cVtUq+1hrrbVqRZ199tmTun4vxHDqqaeuUP2xiGGi6/dCDBNdvxdi8Bzsg16JYUW/F1eHPvAceiOGia7fCzF4Dr3RB34vjn19YEH1QE432KN3M2hJkiRJ0qRkoipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKeOWqCY5NsnNSWZ1lG2U5KwkV7U/N+zY9r4kVye5MsmzxisuSZIkSVIXkutILif5A8klbdlGJGeRXNX+3HCYVkZlPEdUvwU8u1/Ze4FfVtUjgF+2r0nyGOBlwGPbOl9JMnUcY5MkSZIkDW9vqnaiapf29XuBX9Ivpxtr45aoVtV5wO39ip8PHNc+Pw44oKP8B1W1qKquBa4Gdhuv2CRJkiRJozJYTjemUlXj0W7TeLIdcFpV7dC+nltVG3Rsv6OqNkzyJeC3VXV8W34McHpVnTRAm68DXgcwbdq0nc8666wVivGuu+5ixowZk7Z+L8Qwb948Zs6cOer6YxHDRNfvhRgmun4vxOA52Ae9EsOKfi+uDn3gOfRGDBNdvxdi8Bx6ow/8Xhz7+i/ee+/Ft8DlHbt8naqvL1cpuRa4Ayjga1R9nWQuHTkdyR1Ujf3036oatwewHTCr4/XcftvvaH9+GTiwo/wY4IXDtb/WWmvVijr77LMndf1eiOHUU09dofpjEcNE1++FGCa6fi/E4DnYB70Sw4p+L64OfeA59EYME12/F2LwHHqjD/xeHPv6wIIaLqeDLdqfmxb8seBp1S+nqzanG+vHyl7196YkmwO0P29uy28Atu7YbytgzkqOTZIkSZLUp2pO+/Nm4Mc0l2feRJvTsXxON6ZWdqJ6CvDK9vkrgf/rKH9ZkrWSPAR4BHDxSo5NkiRJkgSQrEuy3n3PYR9gFoPndGNq2ng0CpDk+8BewMZJbgAOBz4JnJjkUOB64MUAVfXnJCcCfwGWAG+sqqXjFZskSZIkjcTChQuZNWvW8DuuPh4M/JgEmrwqzH/nAAAgAElEQVTxe1SdQfI74ET65XRjbdwS1ap6+SCbnj7I/h8DPjZe8UiSJEmSulR1DbDjAOW3MUhON5ZW9tRfSZIkSZKGZKIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknmKiKkmSJEnqKSaqkiRJkqSeYqIqSZIkSeopJqqSJEmSpJ5ioipJkiRJ6ikmqpIkSZKknjJsoprk00nWT7JGkl8muTXJgSsjOEmSJEnS5NPNiOo+VTUf2A+4AdgeeNe4RiVJkiRJmrS6SVTXaH/uC3y/qm4fx3gkSZIkSZPctC72OTXJX4F7gDck2QRYOL5hSZIkSZImq2FHVKvqvcCTgV2q6l7gbuD54x2YJEmSJGlyGnZENckLOp73PZ2XZFlV3TxegUmSJEnSWFi4cCGzZs2a6DA0At1co3oo8A3gFe3jaODtwK+THDSagyZ5W5I/J5mV5PtJpifZKMlZSa5qf244mrYlSZIkSWMgmUrye5LT2tcbkZxFclX7c9xytm4S1WXAo6vqhVX1QuAxwCLgicB7RnrAJFsCh9FMJd4BmAq8DHgv8MuqegTwy/a1JEmSJGlivAW4ouP1e4FfshJytm4S1e2q6qaO1zcD27er/947yuNOA9ZOMg1YB5hDc93rce3244ADRtm2JEmSJGlFJFsBz6WZXdtnpeVsqaqhd0i+AmwD/LAteiHN/VTfBZxWVXuP+KDJW4CP0awkfGZVvSLJ3KraoGOfO6rqAUPJSV4HvA5g2rRpO5911lkjPfxy7rrrLmbMmDFp6/dCDPPmzWPmzJmjrj8WMUx0/V6IYaLr90IMnoN90CsxrOj34urQB55Db8Qw0fV7IQbPoTf6YEW/F+fPn8+aa6456voAixcvXqE2lixZ0lPv44v33nvxLXB5xy5fp+rr971KTgI+AawHvJOq/Ujm0pGzkdzBADnbmKiqIR9AgBcBnwM+3z7PcPWGaG9D4FfAJjT3aP0JcCAwt99+dwzX1lprrVUr6uyzz57U9XshhlNPPXWF6o9FDBNdvxdimOj6vRCD52Af9EoMK/q9uDr0gefQGzFMdP1eiMFz6I0+WNHvxdNPP70uv/zyFXqsaBsT/T70rw8sqMFyLdiv4Cvt872qGaCk+uVs1UXONtrHsKv+tidxUvsYC88Arq2qWwCSnAzsDtyUZPOqujHJ5jRTjCVJkiRJK9cewPNI9gWmA+uTHA/cRLI5VTcyzjnbsNeoJnlBuxLvvCTzk9yZZP4KHPN64ElJ1klzv5un01ygewrwynafVwL/twLHkCRJkiSNRtX7qNqKqu1oFr79FVUHshJztmFHVIFPA/tX1RXD7tmFqroozXzny4AlwO+BrwMzgBOTHEqTzL54LI4nSZIkadW2bNky74PaGz4JnMhKyNm6SVRvGqsktU9VHQ4c3q94Ec3oqiRJkiSpF1SdA5zTPr+NlZSzdZOoXpLkBJpFjxb1FVbVyeMWlSRJkiRp0uomUV0fuBvYp6OsABNVSZIkSdKY62bV31etjEAkSZIkaXW1cOFCr7MdgUET1STvrqpPJ/kizQjqcqrqsHGNTJIkSZI0KQ01otq3gNIlKyMQSZIkSZJgiES1qk5tfx638sKRJEmSJE12Q039PZUBpvz2qarnjUtEkiRJkqRJbaipv0eutCgkSZIkSWoNNfX33JUZiCRJkiRJMPTU38sZeurv48YlIkmSJEnSpDbU1N/9VloUkiRJklZb3kNUIzXU1N9/rMxAJEmSJEmCoaf+XlBVT0lyJ8tPAQ5QVbX+uEcnSZIkSZp0hhpRfUr7c72VF44kSZIkabIb6hrV+ySZCjy4c/+qun68gpIkSZIkTV7DJqpJ3gwcDtwELGuLC3DVX0mSJEnSmOtmRPUtwCOr6rbxDkaSJEmSpCld7DMbmDfegUiSJEmSBEOv+vv29uk1wDlJfgos6tteVZ8d59gkSZIkSZPQUFN/+1b7vb59rNk+JEmSJEkaN0PdnubD/cuSbAjMraoaoIokSZIkSSts0GtUk3woyaPa52sl+RXwd+CmJM9YWQFKkiRJkiaXoRZTeilwZfv8le2+mwB7Ah8f57gkSZIkSZPUUInq4o4pvs8Cvl9VS6vqCrq7rY0kSZIkSSM2VKK6KMkOSTYB9gbO7Ni2zviGJUmSJEmarIYaGX0LcBLNdN/PVdW1AEn2BX6/EmKTJEmSJE1CQ636exHwqAHKfwb8bDyDkiRJkiRNXkNN/ZUkSZIkaaUzUZUkSZIk9RQTVUmSJElST+nqNjNJdge269y/qr49TjFJkiRJkiaxYRPVJN8BHgb8AVjaFhdgoipJkiRJGnPdjKjuAjymqmq8g5EkSZIkqZtrVGcBm413IJIkSZIkQXcjqhsDf0lyMbCor7CqnjduUUmSJEmSJq1uEtUjxjsISZIkSZL6DJuoVtW5KyMQSZIkSZJgiEQ1yQVV9ZQkd9Ks8nvfJqCqav1xj06SJEmSNOkMmqhW1VPan+utvHAkSZIkSZNdN6v+SpIkSZK00pioSpIkSZJ6iomqJEmSJKmnDJuoJvlUN2WSJEmSJI2FbkZUnzlA2XPGOhBJkiRJkmDo29P8N/AG4KFJ/tSxaT3g1+MdmCRJkiRpcho0UQW+B5wOfAJ4b0f5nVV1+7hGJUmSJEmatAad+ltV86rquqp6eVX9A7gHKGBGkm1WWoSSJEmSpFVLst0AZbt2W72bxZT2T3IVcC1wLnAdzUirJEmSJEkDOZlky/teJXsCx3ZbuZvFlD4KPAn4W1U9BHg6XqMqSZIkSRrc64GfkGxGsi9wFLBvt5WHuka1z71VdVuSKUmmVNXZ3p5GkiRJkjSoqt+RHAacCSwEnknVLd1W7yZRnZtkBnA+8N0kNwNLRhWsJEmSJGn1lZxKs7ZRn3WAecAxJFD1vG6a6SZRfT7NQkpvBV4BzAQ+MrJoJUmSJEmTwJFj0ciwiWpVLUiyLfCIqjouyTrA1LE4uCRJkiRpNVJ17n3P2zySql8wwjyym1V/XwucBHytLdoS+MmIgpUkSZIkTR4rmEd2s+rvG4E9gPkAVXUVsOnIopQkSZIkTSLL5ZGMMI/sJlFdVFWL+14kmcbyF8dKkiRJktRpER15JCPMI7tJVM9N8n5g7STPBH4InDrSKCVJkiRJk8a5tHkko8gju0lU3wvcAlxOc9PWnwEfHEWgkiRJkqTJYYXyyG5W/V0GHN0+pAdYuHAhs2bNmugwJEmSJPWKqmUkxwPnUXXlSKt3s+rvHknOSvK3JNckuTbJNaMKVpIkSZK0+kueB/wBOKN9vRPJKd1WH3ZEFTgGeBtwKbB0FCFKkiRJkiaXw4HdgHMAqPoDyXbdVu4mUZ1XVaePIjBJkiRJ0uS0hKp5JKOqPGiimuQJ7dOzk/w/4GRgUd/2qrpsVEeUJEmSJK3uZpH8JzCV5BHAYcBvuq081IjqZ/q93qXjeQH/3nWIkiRJkqTJ5M3AB2gGO78H/Bz4aLeVB01Uq2rvFQ5NkiRJkjR5JDsBf6TqbppE9QOjaWaoqb+3Ab+lGZ79NXBxNQeTJEmSJGkg3wAeQnIZTR75G+C3VM0fSSND3Z7mIcBRwBrA+4HZSX6X5KgkLxll0JIkSZKk1VXVLsDWwMeAxTTXpl5F8keSr3TbzFBTf+cDZ7YPkqwLvAp4K/Am4MRRBy9JkiRJWj01M3HPIfkdcBGwB3Aw8Oxumxhq6u8WwO7tY9e2+FLgg8CFowxZkiRJkrS6alb63R3YiWYhpb5k9SlU/avbZoZa9fcG4DLgc8B7q2rx6KOVJEmSJE0CXwf+CnwVOI+qv42mkaGuUd2DZhnh/wAuTPKjJO9MskeStUZzsD5JNkhyUpK/JrkiyZOTbJTkrCRXtT83XJFjSJIkSZJGIZlOcnF7XemfST7clm9EchbJVe3PgXK2mcDrgOnAESSXkpxG8gGSrm9xOmiiWlUXVtVnq+pFVbUz8A6aodvjgHkjOM2BHAWcUVWPAnYErgDeC/yyqh4B/LJ9LUmSJEkTYuNjj2Xdiy9ermzdiy9m42OPnaCIVppFwL9TtSPNFN5nkzyJNmdjqJytailVl1H1Jar+E9gXOJ1mvaOzug1gqKm/JHkU91+nugewIc31qV/t9gADtLk+8DTgEIB2SvHiJM8H9mp3Ow44B3jPaI8jSZIkSSvinh12YOt3vINbDzqIuY9+NOvOmcPW73wns488cqJDG19VBdzVvlqjfRQwfM6WPI77c8jdgTVpcsgv0tyupitDLaZ0K3AjzX1vzgc+WVVXd9vwEB4K3AJ8M8mONAs0vQV4cFXdCFBVNybZdAyOJUmSJEldm3r77ax76aWse8klrHPppUydO5fNvvhFpm+/PTNuuYXZRx7Jgt12m+gwx18ylSZXezjwZaouInkwbc5G1Y0MnLN9iyYhPR34/6j6x6gO3yTLA8WVmVW1olN8B2p3F+C3wB5VdVGSo4D5wJuraoOO/e6oqgfMeU7yOpo5z0ybNm3ns87qevR4QHfddRczZsyYtPXHoo358+ez5pprjrr+okWLmDlz5qjrw8T3Yy+8D6t6/V6IwXOwD3olhnnz5q3Q9+Lq0AeeQ2/EMNH1eyEGz2Fs+mAsfl9ca63RL5OzePHiQY+/1m23sdHll7Ph5Zez0eWXM2P27OW2L5s2jUUbbsjat9zC1S9/OVcffPCYx9CNJUuWjOn7+OK99158C1zescvXqfr6AyomGwA/Bt4MXEBHzkZyB/1ztuTrNEnqL6i6c7TxDpqojpckmwG/rart2tdPpZnb/HBgr3Y0dXPgnKp65FBtTZ8+vRYuXLhC8Zxzzjnstddek7b+WLRxxhlnsNVWW426/nXXXcd+++036vow8f3YC+/Dql6/F2LwHOyDXonhtNNOW6HvxdWhDzyH3ohhouv3Qgyew9j0wYr+vnjNNdfw0Ic+dER1Nj72WO7ZYQcW7LYbN9xwA1tttRXrXnwxM37zGxY99KH3jZiudf31y9VbNn06d++4Iwt23pm7d9kFFi1i6/e/n+ue/Wy2O+OMUY+o9sUwWrfeeuuYvo9J7q6qdbuqnBwOLABeC+zVjqZuDpxD/5ytuZb12cDTgcXAmcAZVP1xJPEOeY3qeKiqfyWZneSRVXUlzQn8pX28Evhk+/P/VnZskiRJklYP9+ywA1u/85388/DD2fK669j2oouYcdFFZNmy5fZbus463P34x7Ngl11YsMsuLHzsY6k11gCahZO2fv/7mX3kkVy9xRZMfcYz7rtGdbWe/ptsAtxL1VyStYFnAJ8CTmG4nK3qtzQzaI8geRCwD/CO9trVy2iS1hOHC2Goa1TfUlVHJdmjqrq+6LVLbwa+m2RN4BqaFaCmACcmORS4HnjxGB9TkiRJ0iSx6KEP5a7ddmObt76VdJQvXW89Fuy8Mwt22YW7d96Zex71KJg2cFq09qxZ9yelN9zAgt12Y/aRR7L2rFmrd6IKmwPHtdepTgFOpOo0kguBE+k2Z6u6Dfh++4BkZ5rR1mENNaL6KprbyHwReEI3jXWrqv4A7DLApqeP5XEkSZIkTS7TbrqJjb/5TTY66SSmLFp0X/mdu+/OTW9/Owsf8QiYMuhdOpdz66tf/YCyBbvttronqVD1J+DxA5TfRrc5W/IW4JvAncDRNDnl+6j6WDfVh0pUr0hyHbBJkj91HhKoqnpcVwFKkiRJ0jhbY84cNj7mGDb88Y+Zcu+9ACx4/OOZfvXVXLvffmx3xhlMnTev6yRVK+zVVB1F8ixgU5qB0G8CP++m8qCJalW9vF346OfA88YiUkmSJEkaS2vOns3G3/gGG55yClmyhEqYt88+3Ln77mx21FFc//nPT67rS3tH34zrfYFvUvVHkgxVodOQiylV1b+AHdtrSbdvi6+sqntHFaokSZIkjYE1r72WTY4+mg1+9jOydCk1ZQpzn/tcbnnta1n0sIex8bHHTtbrS3vFpSRnAg8B3keyHrBsmDr3GXbV3yR7At8GrqPJirdO8sqqOm908UqSJEnS6Kx11VVscvTRzDzjDFJFTZ3KHQccwC2veQ2Lt932vv0m7fWlveNQYCfgGqrublcAflW3lbu5Pc1ngX3aW8mQZHuaVZt2HkWwkiRJkjSszvugAky/4go2++QnmXHZZQAsmzatSVAPPZR7V+D+pBo3O7U/H8r9M37nkUyjaslwlbtJVNfoS1IBqupvSdYYeZySJEmS1J2++6De9MY3stvPf85mv/sd0CaoL3oRtx56KPduttkER6khfIVmpd8/0czM3aF9/iCS/6LqzKEqd5OoXpLkGOA77etXAJeOPl5JkiRJGlqtsQaLt9iCLT/60eY1MP+Zz+TG972PJZtsMrHBqRvXAYdS9WcAkscA7wL+BzgZWOFE9b+BNwKH0WTC59Fkx5IkSZI0dqpY95JL2OSrX2XGxRcDzQjqlCVLuPXgg7npXe+a4AA1Ao+6L0kFqPoLyeOpuoYuFv8dNlGtqkU016l+dkWilCRJkqQBVTHjwgvZ5GtfY932GtSlM2Ywf6+9WO/887nqWc/iYaeeyl177uliSKuOK0n+F/hB+/qlwN9I1gKGvYtMNyOqkiRJkjT2qphx/vls+rWvsc6f/gTAkvXX57aDDuKeRz6SrQ4/nNmf/SxXbrwxaz7rWd4HddVyCPAG4K00M3MvAN5Jk6TuPVxlE1VJkiRJK9eyZax39tls+rWvsfYVVwCwZMMNufXgg7n9ZS9j2YwZy98H9ZprvA/qqqbqHuAz7aO/u4arbqIqSZIkaeVYupT1zzqLTb/2NaZffTUA9268Mbcecgi3v/jF1Drr3Ler90FdxSV7AEcA29KZd1Y9tJvqQyaqSbYCXgY8FdgCuAeYBfwUOL2qlo0mZkmSJEmruU9/GnbdFfbemyxdysxTT+XBX/gCa/7rXwDcu+mm3PLqV3PHC19ITZ8+wcFqHBwDvI3mjjFLR1p50EQ1yTeBLYHTgE8BNwPTge2BZwMfSPLeqjpvFEFLkiRJWp3tuiu85CVw6KE85TvfYd05cwC490EP4uY3vIG5BxxArbnmBAepcTSPqtNHW3moEdXPVNWsAcpnAScnWRPYZrQHliRJkrQa23NP2H13+NSnWBeoKVOaW8wcdhisscZER6fxdzbJ/6O5Z+qi+0qrLuum8qCJ6iBJauf2xcDV3cUoSZIkadJYtgxe/3o45RSYOhWWLuWWQw/l5sMOm+jItPI8sf25S0dZAf/eTeVhF1NKcnnbYKd5wCXAR6vqtm4OJEmSJGkSWLoUXvMa+Na3mpHTddbh6n33ZbuTTmLBk57kYkiTRdWwt6AZSjer/p5Oc/Hr99rXL2t/zge+Bey/IgFIkiRJWk0sWQKHHALf/S6stRZMnw4//jFXL1rE1Gc8w/ugTgbJgVQdT/L2AbdXfbabZrpJVPeoqj06Xl+e5NdVtUeSA7s5iCRJkqTV3L33wkEHwQknwLrrwoEHwktfCnvvDWec4X1QJ49125/rrUgj3SSqM5I8saouAkiyGzCj3bZkRQ4uSZIkaTWweDG8/OVw8smw3npwxhnNQkr9eB/U0Vu4cCGzZg28jNAOO+ywkqMZQtXX2p8fXpFmuklUXwMcm6QvOb0TeE2SdYFPrMjBJUmSJK3iFi1qbkNzyikwcyaceSaYjE5eyReG3F7V1Ypa3SSqf6qqf0syE0hVzU2yUVUtAE7s5iCSJEmSVkMLF8ILXgCnnw4bbgi/+AU84QkTHZUm1qVj0Ug3ierJSZ5fVfMAkmwG/BTYeSwCkCRJkrQKuvtuOOAAOOss2HjjJkndcceJjkoTreq4sWimm0T1J8BJSV4IbA2cArxzLA4uSWNpqGs3JEnSGFqwAPbfH84+GzbdFH75S+il6yQ1cZJTeeDtTe9X9bxumhk2Ua2qo5OsSZOwbge8vqp+012UkiRJklYrd94Jz30unH8+bLYZ/OpX8OhHT3RU6h1HjkUjgyaqWf6+N6EZTf0D8KQkT6ou738jSZIkaTUxbx485zlw4YWw5ZZNkrr99hMdlXpJ1blj0cxQI6r973vz40HKJUmSJK3u7rgDnv1suPhi2GabJkl92MMmOir1muREql5CcjkDTQGuelw3zQyaqNYK3vdGkiRJ0mritttgn33gssvgIQ9pktTttpvoqNSb3tL+3G9FGulmMSVJkiRJk8mnPw277gp7780ac+fC058Of/wjbLQRnHsubL31REeoXlV1Y/vzHyvSzJQxCUaSJEnS6mPXXeElL4GTT2ant72tSVKnToX//V+TVHUneQHJVSTzSOaT3Ekyv9vqjqhKkiRJWt7ee8Pxx8N++7HukiVNknrCCfDCF050ZFp1fBrYn6orRlN50BHVJP+RZKP2+SZJvp3k8iQnJNlqlMFKkiRJ6nVV8N3vwv/P3n3HV1mf/x9/XdkDCCOsQAgqoiCuMmodFerEAlqtWGut3zrA6reuYh2t49e6Kjio+tVaoY62WrRYRSvUqmjrYjhRBClCWLLDyE7O9fvjPgknEMLJPCfJ+/l4nMe578+5P/d93Sfk1iufVVER7F9xhZJUqa/1DU1Soe6uv7e7+5bw9oPAh8Bo4BXgjw29oIiIiIiIxLl774WnngJgzZgxwfYbb8Q4KGkVgi6/ZwILMPsrZudWlwXlUamr629ixPYAdz8nvP24mV3VkJhFRERERCTOzZkD114bbN96K18efzx93IMxqzNmBN2CRfZubMR2EXByxL4DM6M5SV2J6lwz+zVwZ3j7DHf/u5mNArbVN1oREREREYlzS5fCOecEXX/PPx9uuQXmzg2S0xkzYP58JapSN/efNMVp6kpU/xf4JbAkvH+1mRUCs4Dzm+LiIiIibVFJSQmLFi2KdRgiIvWzbRuMGxe8f+978PjjNT8fNUpJquyb2SXAXNy/xMyAacBZwErgAtw/jOY0e01U3b0cuBW41cyygCR339zowEVEREREJL5UVsK558KSJXDoofDkk5CglSylQa4EHg9vnwscDuwPHAn8DjgumpNE9a/P3bcpSRURERERaaNuvBFeeQW6dYMXXoAOHWIdkbReFQSNngBjgCdx34z7v4DMaE/SoD+TmNkHDaknIiIiIiJx5k9/grvvhqQkeO452G+/WEckrVsIs96YpQEnAP+K+Cw92pPUNUZ1r9z9Gw2pJ3vSOCYRERERiZn58+Hii4PtqVNh5MiYhiNtws3AAoJVZF7E/TMAzI4Hlkd7knolqmaW7e6b6lNHRERERETi0Lp1cMYZUFoKEybAT38a64ikLXB/CbM8oCPuWyM+WQCcs5dae9hr118zG21mX5nZf8zsSDP7DHjfzFab2QkNj1xERERERGKqpCSY2XftWjjuOHjgATCLdVTSVrhX7Jakgnsh7jujPUVdLap3AqcBnQn6FX/X3d8zs0HAnwF1/xURERERaW3c4dJL4f33oV+/YFxqSkqsoxKpoa5ENeTuiwHMrMjd3wNw98VmprmqRURERERao/vugyeegIyMYIbfHj1iHZHIHupKVAvMbCLQCdhqZlcDM4ATgaibbEVEREREJE7MmQPXXhtsP/44HHFETMORNs6sD5BHZN7p/lY0VetKVC8AfgWEgJMJFmudA6wELmlgqCIiIiIiEgtLl8IPfgChENx0E5x9dlTVtEqFNIjZbwkmT/ocqAyXOtC4RNXdVwETI4ruC79ERERERKQ12bYNxo2DgoJgpt9bb411RNL2nQEchHtpQyrvNVE1s18BD/nuszXt+vw7QIa7v9SQC0v80F/JRERERGrXav8/6e67YfhwGDUKKivhhz+EJUugZ0948klI0JQz0uyWA8lA0yaqwKfAS2ZWAnwAbATSgAOBIwhmAr6jIRcVEREREZFmNHw4jB8P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KlEVEZH2RomqiIhIfbiT+t//krlwIRkLFpC5cCHJGzfucVhpXh5bzj47SEwPOgiS6v5P7qYLL9yjTOugiohIe6VEVUREhDrGmH7yCTuPPXbXGNOFC0naurVG3YquXSkcOpTy7Gw6v/wyK047jf5z5lAyaBAlhxzS0rciIiLS6ilRFRERIWKM6W9/S1ZREb2nT6fL3/+OJyXRa+rUGseW9+hR3Y23aNgwSvfbj8z584P6993HspwcEk86SWNMRUREGkiJqoiItF8VFaQuX0764sWkLV5MeXZ2sI5p5DHl5ZT16VMjMS3r2xfMapyqxhjT1as1xlRERKQRlKiKiEirV9fSMFVjP62sjNRly0j//HPSFi8OktOlS0koLa31nMUHH8zmH/+YwmHDKO/de58xaIypiIhI01GiKiIirV7k0jDk5JD573/T77rr2DpuHDm33EL64sWkfvklCRUVe9Qt69uX4sGDKR40CBITyZ42LRhjOns25T17RpWkioiISNNSoioiIq1WYkEBKStWkLxuHTuOPpq8Sy8lJyODlG3bMCD7z3+uPtbNKNlvP0oGDaJ48ODg/aCDCGVlAUELbO6kSay6995gjOmJJ2qMqYiISIwoURURkZirq+vulnPOIWXlSlJXrtz1np9PyooVJG3fvse5Urdtw80oPvDAIBkdNIiSwYMpOeggQhkZe41BY0xFRETihxJVERGJueKDDiL36qvZdP75JBcX0/vLL+n47rtUZmTQ67779lqvMjOTsrw8SvPy8KQkOr32GmuPPZbe8+bx9XXX1SvB1BhTERGR+KFEVUREGi2ayYyoqCBl7VpSVqwgNdwiWtU6mrxuHeZOr4ceolfEeZO2byeUkkJZv36U5uUFSWn//tX7ld26gVl1t938Bx5gSU4OFWvXqtuuiIhIK6ZEVUSknYsqydyH6smM7r6btNRUuv3rX/R4+GF2HnMM/S6/PEhMV6/GapnMCMATEynt2xdCIVJXrWLHscey6cc/pqx/f8p79oSEhDqvr267IiIibYsSVRGRGGtsotio+qEQJQccQO4117Du2mvZ3qkT3V5/nR4PP8zmH/6QLs89R0JhIQlFRdWvxN32qz63khL6X3JJjTVIs159tcblynr3DlpD+/ev7rJblpdHWU4OmR9+SO6kSSw791z6z54NiYlRz7irbrsiIiJtixJVEZFG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IiIiItKWtOquvyIiIiIiItL2KFEVERERERGRuKJEVUREREREROKKElURERERERGJK0pURUREREREJK4oURUREREREZG4okRVRERERERE4ooSVREREREREYkrSlRFREREREQkrihRFRERERERkbiiRFVERERERETiihJVERERERERiStKVEVERERERCSuKFEVERERERGRuKJEVUREREREROKKElURERERERGJK0pURUREREREJK4oURUREREREZG4okRVRERERERE4ooSVREREREREYkrSlRFREREREQkrihRFRERERERkbiiRFVERERERETiihJVERERERERiStKVEVERERERCSuKFEVERERERGRuKJEVUREREREROKKElURERERERGJK0pURUREREREJK4oURUREREREZG4okRVRERERERE4krcJapmdqqZLTGzZWZ2fazjERERERERaXfMTsVsCWbLiEFeFleJqpklAg8Bo4HBwLlmNji2UYmIiIiIiLQjteRltHBeFleJKjACWObuy929DHgGOD3GMYmIiIiIiLQnI4BluC8nRnlZvCWqfYBVEfurw2UiIiIiIiLSMmKelyW15MWiYLWUeY0DzCYAE6r2Dz300KJGXjMRqGzH9eMhhhSgrBH1myKGWNePhxhiXT8eYtA96DuIlxga+1xsC9+B7iE+Yoh1/XiIQfcQH9+BnotNXD8V0jFbEPH5o7g/Gt7eZ17W7Nw9bl7At4A5Efs3ADfUcfyjTXDNRp2jtdePhxiAjW3gHtrCz0Hfge5B30GcxNDY52Ib+Q50D3EQQ6zrx0MMuoe4+Q70XGzJ+vAtj8jLHG7wOvKy5njFW9ff+cCBZrafmaUAPwBerOP4WU1wzcaeo7XXj4cYChpZvyliiHX9eIgh1vXjIQbdg76DeImhsc/FtvAd6B7iI4ZY14+HGHQP8fEd6LnYsvXnAwdith/R5WVNzsLZddwws9OA+wmapqe7++0xDkmamZktcPdhsY5DRCRe6LkoIlKTnosxsFteRgvnZfE2RhV3/wfwj1jHIS3q0X0fIiLSrui5KCJSk56LLS3GeVnctaiKiIiIiIhI+xZvY1RFRERERESknVOiKs3CzKab2QYzW7Rb+c/MbImZfWZmd0eU32Bmy8KfnRJRPtTMPg1/9jszq22qbBGRuFfbc9HM/mpmH4VfK8zs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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig2, ax11 = plt.subplots(1,1)\n",
"\n",
"fig2.set_size_inches(2.54*6, 2.54*3)\n",
"\n",
"# === représentation du prix du blé === #\n",
"ax11.bar(rawdata['Year'][:-2], rawdata['Wheat'][:-2], align='edge', width=5, color='lightgrey')\n",
"ax11.bar(rawdata['Year'][-2:], rawdata['Wheat'][-2:], align='edge', width=1, color='lightgrey')\n",
"\n",
"# graduation proche de l'original, avec les siècles comme majeure\n",
"# et une graduation mineure tous les 5 ans\n",
"ax11.xaxis.set_major_locator(MultipleLocator(100))\n",
"ax11.xaxis.set_minor_locator(MultipleLocator(5))\n",
"# grille\n",
"ax11.grid(True, which='both')\n",
"\n",
"ax11.set_xlabel('5 Years each division')\n",
"ax11.set_ylabel('Price of the Quarter (8.6 kg) of Wheat in Shillings')\n",
"\n",
"# les marges de l'axe x sont diminuées\n",
"ax11.set_xlim([int(rawdata['Year'][0:1]), int(rawdata['Year'][-1:]+5)])\n",
"\n",
"# === représentation du salaire === #\n",
"# l'axe 2 partage l'axe x de l'axe 1\n",
"ax12 = ax11.twinx()\n",
"ax12.plot(rawdata['Year'], rawdata['Wages'], 'r', linewidth=2, marker='x')\n",
"\n",
"# les deux axes ont des limites différentes pour montrer que les axes sont différents\n",
"myylim = ax11.get_ylim()\n",
"ax12.set_ylim([0,myylim[1]/2])\n",
"\n",
"ax12.set_ylabel('Wages in Shillings/Week')\n",
"ax12.yaxis.label.set_color('r')\n",
"ax12.tick_params(axis='y', colors='r')\n",
"\n",
"ax11.set_title(\"\"\"Chart Showing at One View\n",
"the Price of the Quarter of Wheat, and Wages of Labour\n",
"by the Week, from 1565 to 1821\"\"\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"source": [
"## Représentation du pouvoir d'achat\n",
"\n",
"Le pouvoir d'achat est définie ici comme la quantité de blé qu'un ouvrier peut acheter avec son salaire hebdomadaire. \n",
"\n",
"Le prix du blé par boisseau est converti en prix du blé par kg pour une représentation plus moderne.\n",
"Le pouvoir d'achat sera donc exprimé en kg de blé par semaine.\n",
"\n",
"Pour rappel, les années 1815, 1820, 1821 n'ont pas de salaire hebdomadaire renseigné. Ces lignes sont retirées pour le calcul du pouvoir d'achat."
]
},
{
"cell_type": "code",
"execution_count": 164,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"lignes supprimées :\n",
" Year Wheat Wages\n",
"51 1815 78.0 NaN\n",
"52 1820 54.0 NaN\n",
"53 1821 54.0 NaN\n"
]
},
{
"data": {
"text/plain": [
"1 1.048780\n",
"2 0.965111\n",
"3 1.040190\n",
"4 0.898612\n",
"5 1.067229\n",
"dtype: float64"
]
},
"execution_count": 164,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# === on supprime les années sans salaires === #\n",
"print(\"lignes supprimées :\")\n",
"print(rawdata[rawdata.isnull().any(axis=1)])\n",
"data = rawdata.dropna().copy()\n",
"\n",
"# === facteurs de conversion === #\n",
"quarter_to_mass = 8.6 # in kg\n",
"shilling_to_pence = 12\n",
"\n",
"purchasing_power = data['Wages']/(data['Wheat']/quarter_to_mass)\n",
"purchasing_power.head()"
]
},
{
"cell_type": "code",
"execution_count": 175,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'DateFormatter' is not defined",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0max31\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_minor_locator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mMultipleLocator\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m5\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0max31\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_major_formatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDateFormatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'%Y'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 15\u001b[0m \u001b[0max31\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxaxis\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_minor_formatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mDateFormatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'%y'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mNameError\u001b[0m: name 'DateFormatter' is not defined"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Error in callback (for post_execute):\n"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/ipykernel/pylab/backend_inline.py\u001b[0m in \u001b[0;36mflush_figures\u001b[0;34m()\u001b[0m\n\u001b[1;32m 119\u001b[0m \u001b[0;31m# ignore the tracking, just draw and close all figures\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 120\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 121\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mshow\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 122\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mException\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 123\u001b[0m \u001b[0;31m# safely show traceback if in IPython, else raise\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/ipykernel/pylab/backend_inline.py\u001b[0m in \u001b[0;36mshow\u001b[0;34m(close, block)\u001b[0m\n\u001b[1;32m 41\u001b[0m display(\n\u001b[1;32m 42\u001b[0m \u001b[0mfigure_manager\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 43\u001b[0;31m \u001b[0mmetadata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0m_fetch_figure_metadata\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfigure_manager\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 44\u001b[0m )\n\u001b[1;32m 45\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/IPython/core/display.py\u001b[0m in \u001b[0;36mdisplay\u001b[0;34m(include, exclude, metadata, transient, display_id, *objs, **kwargs)\u001b[0m\n\u001b[1;32m 311\u001b[0m \u001b[0mpublish_display_data\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmetadata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmetadata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 312\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 313\u001b[0;31m \u001b[0mformat_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmd_dict\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minclude\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minclude\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mexclude\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mexclude\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 314\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mformat_dict\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 315\u001b[0m \u001b[0;31m# nothing to display (e.g. _ipython_display_ took over)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/IPython/core/formatters.py\u001b[0m in \u001b[0;36mformat\u001b[0;34m(self, obj, include, exclude)\u001b[0m\n\u001b[1;32m 178\u001b[0m \u001b[0mmd\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 179\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 180\u001b[0;31m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mformatter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 181\u001b[0m \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 182\u001b[0m \u001b[0;31m# FIXME: log the exception\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, obj)\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/IPython/core/formatters.py\u001b[0m in \u001b[0;36mcatch_format_error\u001b[0;34m(method, self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 222\u001b[0m \u001b[0;34m\"\"\"show traceback on failed format call\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 224\u001b[0;31m \u001b[0mr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmethod\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 225\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 226\u001b[0m \u001b[0;31m# don't warn on NotImplementedErrors\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/IPython/core/formatters.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 339\u001b[0m \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 340\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 341\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mprinter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 342\u001b[0m \u001b[0;31m# Finally look for special method names\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 343\u001b[0m \u001b[0mmethod\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_real_method\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprint_method\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/IPython/core/pylabtools.py\u001b[0m in \u001b[0;36m\u001b[0;34m(fig)\u001b[0m\n\u001b[1;32m 246\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 247\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'png'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mformats\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 248\u001b[0;31m \u001b[0mpng_formatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfor_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mFigure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mprint_figure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'png'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 249\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;34m'retina'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mformats\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;34m'png2x'\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mformats\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 250\u001b[0m \u001b[0mpng_formatter\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfor_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mFigure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mlambda\u001b[0m \u001b[0mfig\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mretina_figure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfig\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/IPython/core/pylabtools.py\u001b[0m in \u001b[0;36mprint_figure\u001b[0;34m(fig, fmt, bbox_inches, **kwargs)\u001b[0m\n\u001b[1;32m 130\u001b[0m \u001b[0mFigureCanvasBase\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfig\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 131\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 132\u001b[0;31m \u001b[0mfig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcanvas\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprint_figure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbytes_io\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkw\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 133\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbytes_io\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgetvalue\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 134\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfmt\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'svg'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/backend_bases.py\u001b[0m in \u001b[0;36mprint_figure\u001b[0;34m(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)\u001b[0m\n\u001b[1;32m 2210\u001b[0m \u001b[0morientation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0morientation\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2211\u001b[0m \u001b[0mdryrun\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2212\u001b[0;31m **kwargs)\n\u001b[0m\u001b[1;32m 2213\u001b[0m \u001b[0mrenderer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_cachedRenderer\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2214\u001b[0m \u001b[0mbbox_inches\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_tightbbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py\u001b[0m in \u001b[0;36mprint_png\u001b[0;34m(self, filename_or_obj, *args, **kwargs)\u001b[0m\n\u001b[1;32m 515\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 516\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mprint_png\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfilename_or_obj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 517\u001b[0;31m \u001b[0mFigureCanvasAgg\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 518\u001b[0m \u001b[0mrenderer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_renderer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 519\u001b[0m \u001b[0moriginal_dpi\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdpi\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py\u001b[0m in \u001b[0;36mdraw\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 435\u001b[0m \u001b[0;31m# if toolbar:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[0;31m# toolbar.set_cursor(cursors.WAIT)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 437\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 438\u001b[0m \u001b[0;31m# A GUI class may be need to update a window using this draw, so\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 439\u001b[0m \u001b[0;31m# don't forget to call the superclass.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36mdraw_wrapper\u001b[0;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstart_filter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0martist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 56\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0martist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_agg_filter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/figure.py\u001b[0m in \u001b[0;36mdraw\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 1491\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1492\u001b[0m mimage._draw_list_compositing_images(\n\u001b[0;32m-> 1493\u001b[0;31m renderer, self, artists, self.suppressComposite)\n\u001b[0m\u001b[1;32m 1494\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1495\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclose_group\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'figure'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/image.py\u001b[0m in \u001b[0;36m_draw_list_compositing_images\u001b[0;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnot_composite\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mhas_images\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0martists\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 141\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 142\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0;31m# Composite any adjacent images together\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36mdraw_wrapper\u001b[0;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstart_filter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0martist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 56\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0martist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_agg_filter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36mdraw\u001b[0;34m(self, renderer, inframe)\u001b[0m\n\u001b[1;32m 2633\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstop_rasterizing\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2634\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2635\u001b[0;31m \u001b[0mmimage\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_draw_list_compositing_images\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0martists\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2636\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2637\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclose_group\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'axes'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/image.py\u001b[0m in \u001b[0;36m_draw_list_compositing_images\u001b[0;34m(renderer, parent, artists, suppress_composite)\u001b[0m\n\u001b[1;32m 139\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mnot_composite\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mhas_images\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 140\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0martists\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 141\u001b[0;31m \u001b[0ma\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 142\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 143\u001b[0m \u001b[0;31m# Composite any adjacent images together\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/artist.py\u001b[0m in \u001b[0;36mdraw_wrapper\u001b[0;34m(artist, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstart_filter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0martist\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrenderer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 56\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 57\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0martist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_agg_filter\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36mdraw\u001b[0;34m(self, renderer, *args, **kwargs)\u001b[0m\n\u001b[1;32m 1200\u001b[0m \u001b[0;31m# the actual bbox\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1201\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1202\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_update_label_position\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1203\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1204\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlabel\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdraw\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/axis.py\u001b[0m in \u001b[0;36m_update_label_position\u001b[0;34m(self, renderer)\u001b[0m\n\u001b[1;32m 1915\u001b[0m \u001b[0;31m# use axes if spine doesn't exist\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1916\u001b[0m \u001b[0mspinebbox\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maxes\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1917\u001b[0;31m \u001b[0mbbox\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmtransforms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mBbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munion\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbboxes\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mspinebbox\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1918\u001b[0m \u001b[0mbottom\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mbbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1919\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/transforms.py\u001b[0m in \u001b[0;36munion\u001b[0;34m(bboxes)\u001b[0m\n\u001b[1;32m 748\u001b[0m \u001b[0mx1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxmax\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mbbox\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mbboxes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 749\u001b[0m \u001b[0my0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mymin\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mbbox\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mbboxes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 750\u001b[0;31m \u001b[0my1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mymax\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mbbox\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mbboxes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 751\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mBbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mx1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 752\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/transforms.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 748\u001b[0m \u001b[0mx1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxmax\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mbbox\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mbboxes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 749\u001b[0m \u001b[0my0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mymin\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mbbox\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mbboxes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 750\u001b[0;31m \u001b[0my1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mbbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mymax\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mbbox\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mbboxes\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 751\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mBbox\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mx1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 752\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/matplotlib/transforms.py\u001b[0m in \u001b[0;36mymax\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 374\u001b[0m \u001b[0;34m:\u001b[0m\u001b[0mattr\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;31m`\u001b[0m\u001b[0mymax\u001b[0m\u001b[0;31m`\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mtop\u001b[0m \u001b[0medge\u001b[0m \u001b[0mof\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mbounding\u001b[0m \u001b[0mbox\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 375\u001b[0m \"\"\"\n\u001b[0;32m--> 376\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmax\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_points\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 377\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 378\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/numpy/core/fromnumeric.py\u001b[0m in \u001b[0;36mamax\u001b[0;34m(a, axis, out, keepdims, initial)\u001b[0m\n\u001b[1;32m 2332\u001b[0m \"\"\"\n\u001b[1;32m 2333\u001b[0m return _wrapreduction(a, np.maximum, 'max', axis, None, out, keepdims=keepdims,\n\u001b[0;32m-> 2334\u001b[0;31m initial=initial)\n\u001b[0m\u001b[1;32m 2335\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2336\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/opt/conda/lib/python3.6/site-packages/numpy/core/fromnumeric.py\u001b[0m in \u001b[0;36m_wrapreduction\u001b[0;34m(obj, ufunc, method, axis, dtype, out, **kwargs)\u001b[0m\n\u001b[1;32m 81\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mreduction\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mpasskwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 83\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mufunc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreduce\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobj\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mout\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mpasskwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 84\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 85\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
"fig3, ax31 = plt.subplots(1,1)\n",
"fig3.set_size_inches(2.54*6, 2.54*3)\n",
"\n",
"ax31.bar(data['Year'], purchasing_power, align='edge', width=5)\n",
"\n",
"# les mêmes limites que précédemment sont conservées pour comparaison\n",
"ax31.set_xlim([int(rawdata['Year'][0:1]), int(rawdata['Year'][-1:]+5)])\n",
"\n",
"# graduation proche de l'original, avec les siècles comme majeure\n",
"# et une graduation mineure tous les 5 ans\n",
"ax31.xaxis.set_major_locator(MultipleLocator(100))\n",
"ax31.xaxis.set_minor_locator(MultipleLocator(5))\n",
"\n",
"ax31.xaxis.set_major_formatter(DateFormatter('%Y'))\n",
"ax31.xaxis.set_minor_formatter(DateFormatter('%y'))\n",
"\n",
"\n",
"ax31.grid(True, which='both')\n",
"\n",
"ax31.set_xlabel(\"Année\")\n",
"ax31.set_ylabel(\"Pouvoir d'achat en masse de blé hebdomadaire [kg/sem]\")\n",
"\n",
"ax31.set_title(\"Pouvoir d'achat d'un ouvrier\\n en équivalent masse de blé hebdomadaire\\n de 1565 à 1810\")\n",
"\n",
"fig3.autofmt_xdate()"
]
},
{
"cell_type": "code",
"execution_count": 160,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"text/plain": [
"52 NaN\n",
"53 NaN\n",
"dtype: float64"
]
},
"execution_count": 160,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"purchasing_power[-2:]"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"hideCode": false,
"hidePrompt": false
},
"outputs": [
{
"data": {
"text/html": [
"