"# Module 3 : Concentration de CO$_{\\textbf{2}}$ dans l'atmosphère depuis 1958"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"# import isoweek\n",
"import os\n",
"from urllib.request import urlretrieve"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les données sont disponibles sur le [site Web de l'institut Scripps](https://scrippsco2.ucsd.edu/data/atmospheric_co2/primary_mlo_co2_record.html). Nous les récupérons sous forme d'un fichier en format CSV dont chaque ligne correspond à une semaine de la période demandée (29/03/1958 à aujourd'hui 09/12/2024). Nous téléchargeons à ce jour dans le dossier local à [cette URL](https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv) à l'aide de la bibliothèque `urllib.request`. Si le fichier est déjà téléchargé, nous l'importons depuis le dossier local."
" print(f\"File downloaded and saved as {data_file}\")\n",
"else:\n",
" print(f\"File {data_file} found at {os.path.abspath(data_file)}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le fichier contient 44 lignes de commentaires (ignorées en précisant `skiprows=44`) expliquant le fichier et les méthodes de mesure. Il contient ensuite deux colonnes:\n",
"- Date (premier jour de la période d'une semaine)\n",
"- Concentration en CO$_2$ (ppm)\n",
"\n",
"Aucune ligne ne définit le nom des colonnes. Il faut donc préciser `header=None`, puis préciser le nom des colonnes par la suite."
"Vérifions si des données sont manquantes, _i.e._ si deux dates ont plus d'une semaine d'écart."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1958-05-03 00:00:00 1958-05-17 00:00:00\n",
"1958-05-24 00:00:00 1958-07-05 00:00:00\n",
"1958-08-16 00:00:00 1958-08-30 00:00:00\n",
"1958-09-06 00:00:00 1958-11-08 00:00:00\n",
"1959-01-31 00:00:00 1959-02-14 00:00:00\n",
"1959-03-07 00:00:00 1959-03-21 00:00:00\n",
"1959-05-23 00:00:00 1959-06-06 00:00:00\n",
"1959-08-08 00:00:00 1959-08-22 00:00:00\n",
"1962-08-18 00:00:00 1962-09-15 00:00:00\n",
"1962-12-22 00:00:00 1963-01-05 00:00:00\n",
"1963-02-09 00:00:00 1963-02-23 00:00:00\n",
"1963-04-27 00:00:00 1963-05-11 00:00:00\n",
"1963-11-16 00:00:00 1963-11-30 00:00:00\n",
"1964-01-18 00:00:00 1964-05-30 00:00:00\n",
"1964-06-06 00:00:00 1964-06-27 00:00:00\n",
"1964-08-01 00:00:00 1964-08-15 00:00:00\n",
"1966-07-09 00:00:00 1966-08-06 00:00:00\n",
"1966-10-29 00:00:00 1966-11-12 00:00:00\n",
"1967-01-14 00:00:00 1967-02-04 00:00:00\n",
"1976-06-19 00:00:00 1976-07-03 00:00:00\n",
"1984-03-24 00:00:00 1984-04-28 00:00:00\n",
"1985-07-27 00:00:00 1985-08-10 00:00:00\n",
"2003-06-07 00:00:00 2003-06-21 00:00:00\n",
"2003-10-04 00:00:00 2003-10-25 00:00:00\n",
"2005-02-19 00:00:00 2005-03-26 00:00:00\n",
"2006-02-04 00:00:00 2006-02-25 00:00:00\n",
"2007-01-20 00:00:00 2007-02-03 00:00:00\n",
"2012-09-29 00:00:00 2012-10-20 00:00:00\n",
"2020-01-11 00:00:00 2020-01-25 00:00:00\n",
"2022-11-26 00:00:00 2022-12-17 00:00:00\n"
]
}
],
"source": [
"dates = data.index\n",
"for d1, d2 in zip(dates[:-1], dates[1:]):\n",
" delta = d2 - d1\n",
" if delta - pd.Timedelta(1,'W') > pd.Timedelta('1s'):\n",
" print(d1, d2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Quelques données sont manquantes, mais leur nombre est largement inférieur au nombre de données, et sont éparses après les années 1960. Nous pouvons donc considérer l'erreur induite par le manque de données négligeable.\n",
"\n",
"Commençons par représenter l'évolution de la concentration en CO$_2$ depuis 1958."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7f5e1baf33c8>"