From a492485a4467637a3f8bf5b2fbca340760c46a70 Mon Sep 17 00:00:00 2001 From: c05772ca30517e8b4095505e7bf0de0b Date: Tue, 24 Oct 2023 20:46:53 +0000 Subject: [PATCH] =?UTF-8?q?Concentration=20de=20CO2=20dans=20l'atmosph?= =?UTF-8?q?=C3=A8re=20depuis=201958?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- module3/exo3/exercice.ipynb | 77 +++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/module3/exo3/exercice.ipynb b/module3/exo3/exercice.ipynb index 0655813..15e9fd0 100644 --- a/module3/exo3/exercice.ipynb +++ b/module3/exo3/exercice.ipynb @@ -130,6 +130,83 @@ "yearly_CO2.plot(style='*')" ] }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "ename": "SyntaxError", + "evalue": "invalid syntax (, line 16)", + "output_type": "error", + "traceback": [ + "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m16\u001b[0m\n\u001b[0;31m if response.status_code == 200:\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" + ] + } + ], + "source": [ + "#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", + "import requests\n", + "import certifi\n", + "from bs4 import BeautifulSoup\n", + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from scipy.optimize import curve_fit\n", + "\n", + "# URL de la page avec les données de CO2\n", + "url = \"https://scrippsco2.ucsd.edu/data/atmospheric_co2/primary_mlo_co2_record.html\"\n", + "\n", + "# Envoyer une requête GET pour récupérer la page web avec vérification SSL\n", + "response = requests.get(url, verify=False\n", + "# Vérifier que la requête s'est bien déroulée\n", + "if response.status_code == 200:\n", + " # Parser le contenu HTML de la page en utilisant html5lib\n", + " soup = BeautifulSoup(response.content, \"html5lib\")\n", + "\n", + " # Trouver la table qui contient les données de CO2 (l'élément correspondant)\n", + " table = soup.find(\"table\")\n", + "\n", + " # Utiliser Pandas pour extraire les données tabulaires\n", + " data = pd.read_html(str(table))[0]\n", + "\n", + " # Les données contiennent probablement des colonnes de date et de CO2. Vous pouvez les renommer.\n", + " data.columns = [\"Date\", \"CO2\"]\n", + "\n", + " # Convertir la colonne de date en objets datetime\n", + " data[\"Date\"] = pd.to_datetime(data[\"Date\"])\n", + "\n", + " # Tracer les données\n", + " plt.figure(figsize=(12, 6))\n", + " plt.plot(data[\"Date\"], data[\"CO2\"])\n", + " plt.title(\"Concentration de CO2 dans l'atmosphère au Mauna Loa Observatory\")\n", + " plt.xlabel(\"Date\")\n", + " plt.ylabel(\"Concentration de CO2 (ppm)\")\n", + "\n", + " # Définition d'une fonction pour le modèle de la contribution lente (par exemple, une fonction linéaire)\n", + " def slow_contrib(x, a, b):\n", + " return a * x + b\n", + "\n", + " # Ajustement du modèle aux données\n", + " popt, _ = curve_fit(slow_contrib, data.index, data[\"CO2\"])\n", + " a, b = popt\n", + "\n", + " # Extrapolation jusqu'en 2025\n", + " future_dates = pd.date_range(start=data[\"Date\"].min(), end=pd.to_datetime(\"2025-01-01\"))\n", + " future_indices = np.arange(len(data), len(data) + len(future_dates))\n", + " future_co2 = slow_contrib(future_indices, a, b)\n", + "\n", + " # Tracer l'extrapolation\n", + " plt.plot(future_dates, future_co2, label=\"Extrapolation jusqu'en 2025\")\n", + " plt.legend()\n", + "\n", + " # Afficher le graphique\n", + " plt.grid(True)\n", + " plt.show()\n", + "else:\n", + " print(\"La requête a échoué. Code de statut :\", response.status_code)" + ] + }, { "cell_type": "code", "execution_count": null, -- 2.18.1