{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Concentration de CO2 dans l'atmosphère depuis 1958\n", "\n", "M. Keeling a démarré en 1958 une série d'observations de mesures de la concentration de CO2 à Mauna Loa (Hawaii, USA). Ce jeu de données, dit \"Keeling Curve\", est crucial pour constater l'évolution de cette concentration au vu de la durée de l'expérience. Les données sont disponibles sur le [site de l'institut Scripps](https://scrippsco2.ucsd.edu/data/atmospheric_co2/primary_mlo_co2_record.html). Sur celui-ci, nous allons nous intéresser aux mesures hebdomadaires, récupérables sur [ce lien](https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv). Puisque le fichier est mis à jour toutes les semaines, nous nous baserons ici sur une copie locale de ce fichier, récupérée le 16 janvier 2024." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Oscillation périodique\n", "\n", "La première étape est de charger les données du fichier et de s'assurer de son contenu. D'après les commentaires en en-tête de fichier, la première colonne indique la date et la seconde la concentration de CO2 en micro-moles par mole (ppm). Les mesures sont alignées sur 12h00 sur le premier jour de la semaine." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import pandas as pd\n", "import isoweek" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Data taken from\n", "# https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv\n", "\n", "path = \"weekly_in_situ_co2_mlo.csv\"\n", "raw_data = pd.read_csv(path, comment='\"', names=[\"Date\", \"Concentration\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vérifions les semaines manquantes dans le dataset." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Missing weeks (74 in total):\n", "1958-05-10,\t1958-05-31,\t1958-06-07,\t1958-06-14,\t1958-06-21,\t1958-06-28,\t1958-08-23,\t1958-09-13,\t1958-09-20,\t1958-09-27,\t1958-10-04,\t1958-10-11,\t1958-10-18,\t1958-10-25,\t1958-11-01,\t1959-02-07,\t1959-03-14,\t1959-05-30,\t1959-08-15,\t1962-08-25,\t1962-09-01,\t1962-09-08,\t1962-12-29,\t1963-02-16,\t1963-05-04,\t1963-11-23,\t1964-01-25,\t1964-02-01,\t1964-02-08,\t1964-02-15,\t1964-02-22,\t1964-02-29,\t1964-03-07,\t1964-03-14,\t1964-03-21,\t1964-03-28,\t1964-04-04,\t1964-04-11,\t1964-04-18,\t1964-04-25,\t1964-05-02,\t1964-05-09,\t1964-05-16,\t1964-05-23,\t1964-06-13,\t1964-06-20,\t1964-08-08,\t1966-07-16,\t1966-07-23,\t1966-07-30,\t1966-11-05,\t1967-01-21,\t1967-01-28,\t1976-06-26,\t1984-03-31,\t1984-04-07,\t1984-04-14,\t1984-04-21,\t1985-08-03,\t2003-06-14,\t2003-10-11,\t2003-10-18,\t2005-02-26,\t2005-03-05,\t2005-03-12,\t2005-03-19,\t2006-02-11,\t2006-02-18,\t2007-01-27,\t2012-10-06,\t2012-10-13,\t2020-01-18,\t2022-12-03,\t2022-12-10\n", "\n", "Missing weeks per year:\n", "1958 15\n", "1959 4\n", "1962 4\n", "1963 3\n", "1964 21\n", "1966 4\n", "1967 2\n", "1976 1\n", "1984 4\n", "1985 1\n", "2003 3\n", "2005 4\n", "2006 2\n", "2007 1\n", "2012 2\n", "2020 1\n", "2022 2\n" ] } ], "source": [ "# Check if every line is the corresponding week\n", "expected_date = set()\n", "w = 0\n", "while True:\n", " new_week = str(isoweek.Week(1958, 13+w).saturday())\n", " if new_week >= '2024-01-01':\n", " break\n", " expected_date.add(new_week)\n", " w += 1\n", "\n", "# Remove line if found\n", "for w in raw_data.index:\n", " stored_date = raw_data[\"Date\"][w]\n", " expected_date.remove(stored_date)\n", "\n", "missing_weeks = sorted(expected_date)\n", "print(f\"Missing weeks ({len(missing_weeks)} in total):\")\n", "print(\",\\t\".join(missing_weeks))\n", "\n", "missing_weeks_keep_year = [e[:4] for e in missing_weeks]\n", "missing_weeks_per_year = dict()\n", "for e in missing_weeks_keep_year:\n", " if e in missing_weeks_per_year.keys():\n", " missing_weeks_per_year[e] += 1\n", " else:\n", " missing_weeks_per_year[e] = 1\n", " \n", "print(f\"\\nMissing weeks per year:\")\n", "for y in sorted(missing_weeks_per_year):\n", " print(y, missing_weeks_per_year[y])" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }