{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "26c5e0a0-5492-4763-816a-728a244d9e39",
   "metadata": {},
   "source": [
    "# Recherche reproductible : principes méthodologiques pour une science transparente\n",
    "## Travail pratique avec évaluation par les pairs"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cc6fa587-e6e6-450d-9507-2e87ae4b1193",
   "metadata": {},
   "source": [
    "###  Sujet 1 : Concentration de CO2 dans l'atmosphère depuis 1958\n",
    "Prérequis : traitement de suites chronologiques\n",
    "\n",
    "En 1958, Charles David Keeling  a initié une mesure de la concentration de CO2 dans l'atmosphère à l'observatoire de Mauna Loa, Hawaii, États-Unis qui continue jusqu'à aujourd'hui. L'objectif initial était d'étudier la variation saisonnière, mais l'intérêt s'est déplacé plus tard vers l'étude de la tendance croissante dans le contexte du changement climatique. En honneur à Keeling, ce jeu de données est souvent appelé \"Keeling Curve\" (voir https://en.wikipedia.org/wiki/Keeling_Curve pour l'histoire et l'importance de ces données).\n",
    "\n",
    "Les données sont disponibles sur le site Web de l'institut Scripps. Utilisez le fichier avec les observations hebdomadaires. Attention, ce fichier est mis à jour régulièrement avec de nouvelles observations. Notez donc bien la date du téléchargement, et gardez une copie locale de la version précise que vous analysez. Faites aussi attention aux données manquantes.\n",
    "\n",
    "Votre mission si vous l'acceptez :\n",
    "1. Réalisez un graphique qui vous montrera une oscillation périodique superposée à une évolution systématique plus lente.\n",
    "2. Séparez ces deux phénomènes. Caractérisez l'oscillation périodique. Proposez un modèle simple de la contribution lente, estimez ses paramètres et tentez une extrapolation jusqu'à 2025 (dans le but de pouvoir valider le modèle par des observations futures).\n",
    "3. Déposer dans FUN votre résultat\n",
    "\n",
    "Date de téléchargement des données: 03/02/2022"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ebf14f6b-a088-43a2-8b12-c2f893f58c60",
   "metadata": {},
   "source": [
    "### 1. Réalisez un graphique qui vous montrera une oscillation périodique superposée à une évolution systématique plus lente."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "id": "9e7839e3-1315-40be-a357-9ad547cae874",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='Date', ylabel='Concentrations [ppm]'>"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "[encoded data, 66228 characters]\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Import librairies\n",
    "import pandas as pd\n",
    "\n",
    "#Load data\n",
    "names = ['Years','Month','Date_Excel','Date_num','CO2','CO2_adjusted','fit','adjusted_fit','CO2_fit','CO2_adjusted_fit']\n",
    "data = pd.read_csv('monthly_in_situ_co2_mlo.csv',skiprows = 57, names = names)\n",
    "#Remove columns\n",
    "data.drop(['Date_Excel','Date_num'], axis=1, inplace=True)\n",
    "#Remove Nan values\n",
    "data = data[data['CO2'] != -99.99]\n",
    "data['Day'] = 1\n",
    "data['Date'] = pd.to_datetime(data[['Years', 'Month','Day']])\n",
    "data.set_index('Date', inplace=True)\n",
    "data.drop(['Years','Month', 'Day'], axis=1, inplace=True)\n",
    "data.plot(figsize=(10,10), ylabel = 'Concentrations [ppm]')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3a2280cb-6ed9-441d-abd9-5631107804c0",
   "metadata": {},
   "source": [
    "### 2. Séparez ces deux phénomènes. Caractérisez l'oscillation périodique. Proposez un modèle simple de la contribution lente, estimez ses paramètres et tentez une extrapolation jusqu'à 2025 (dans le but de pouvoir valider le modèle par des observations futures)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "id": "b5447190-3f05-4f6a-bcf1-8d2e73f6231f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='Date', ylabel='Concentrations [ppm]'>"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "[encoded data, 139736 characters]\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data['oscillation'] = data['CO2_fit'] - data['CO2_adjusted_fit']\n",
    "data['oscillation'].plot(figsize=(10,10), ylabel = 'Concentrations [ppm]')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "id": "9aeb94ce-2a6a-406e-864c-c004d75c945b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:xlabel='Date', ylabel=\"Amplitude de l'oscillation [m]\">"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "[encoded data, 27092 characters]\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "data_years_min = data['oscillation'].resample('Y').min()\n",
    "data_years_max = data['oscillation'].resample('Y').max()\n",
    "amplitude = data_years_max-data_years_min\n",
    "amplitude.plot(figsize=(10,10), ylabel = \"Amplitude de l'oscillation [m]\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "id": "423cfe58-a4ef-4273-85cc-a991437bc729",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "7.119999999999962"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Définition du modèle d'amplitude à l'aide d'une équation linéaire y=a(x-x1)+b\n",
    "x1 = 2000\n",
    "b = amplitude.loc[pd.DatetimeIndex(['2000-12-31'])].values[0]\n",
    "# a = (y2-y1)/(x2-x1)\n",
    "a = (amplitude.loc[pd.DatetimeIndex(['2020-12-31'])].values[0]-amplitude.loc[pd.DatetimeIndex(['2000-12-31'])].values[0])/(2020-2000)\n",
    "\n",
    "#L'amplitude de l'oscillation en 2025 sera de:\n",
    "a*(2025-x1)+b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "id": "cae17efa-a89e-467d-8de5-b4f2b93baeac",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "426.35249999999996"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Définition du modèle de la contribution lente y=a(x-x1)+b\n",
    "data = data.resample('Y').max()\n",
    "x1 = 2000\n",
    "b = data['CO2_adjusted_fit'].loc[pd.DatetimeIndex(['2000-12-31'])].values[0]\n",
    "# a = (y2-y1)/(x2-x1)\n",
    "a = (data['CO2_adjusted_fit'].loc[pd.DatetimeIndex(['2020-12-31'])].values[0]-data['CO2_adjusted_fit'].loc[pd.DatetimeIndex(['2000-12-31'])].values[0])/(2020-2000)\n",
    "\n",
    "#La contribution lente en 2025 aura une concentration en ppm de:\n",
    "a*(2025-x1)+b"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
