Concentration de CO2 dans l'atmosphère depuis 1958

parent 947227d0
......@@ -130,6 +130,83 @@
"yearly_CO2.plot(style='*')"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (<ipython-input-44-e338a2cc7571>, line 16)",
"output_type": "error",
"traceback": [
"\u001b[0;36m File \u001b[0;32m\"<ipython-input-44-e338a2cc7571>\"\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 <table> 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,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment