diff --git a/module3/exo3/exercice.ipynb b/module3/exo3/exercice.ipynb index 06558139b249afe2b7e640cf240750b5fdcccb0d..15e9fd078f97a94481fe7522cdf39d6810638247 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,