#+TITLE: Concentration de CO2 dans l'atmosphère depuis 1958 #+AUTHOR: Miguel Arpa Perozo #+DATE: \today #+LANGUAGE: fr # #+PROPERTY: header-args :eval never-export #+startup: indent inlineimages #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: #+HTML_HEAD: * Notes - Lien de téléchargement : [[https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv][link]] - Date du téléchargement : 2020-11-16 - The CO2 concentration is in [micro-mol CO2 per more] (ppm). - The weekly values have been adjusted to 12:00 hours at middle day of each weekly period. * Tasks ** TODO Faire une FFT pour essayer de trouver un modèle pour l'évolution lente (filter contribution périodique) * Téléchargement des données ** Téléchargement Les données ont été téléchargées le 2020-11-16. Le lien de téléchargement utilisé est le suivant : #+name: data-url https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv On vérifie si les données sont pas localement, si ce n'est pas le cas on les télécharge. #+BEGIN_SRC python :results silent :var data_url=data-url :session data_file ="weekly_in_situ_co2_mlo.csv" import os import urllib.request if not os.path.exists(data_file): urllib.request.urlretrieve(data_url, data_file) #+END_SRC Les données commencent à la ligne 45, donc on ne prend pas en compte les premières 45 lignes du fichier. #+BEGIN_SRC python :results silent :var data_url=data-url :session data = open(data_file, 'rb').read() lines = data.decode('latin-1').strip().split('\n') data_lines = lines[45:] table = [line.split(',') for line in data_lines] #+END_SRC Visualisation des premières colonnes du tableau : #+BEGIN_SRC python :results value :session table[:5] #+END_SRC #+RESULTS: | 1958-04-05 | 317.31 | | 1958-04-12 | 317.69 | | 1958-04-19 | 317.58 | | 1958-04-26 | 316.48 | | 1958-05-03 | 316.95 | ** Conversion des données et affichage Les données dans =table= sont des string. On va convertir la première colonne en objets =datetime= de Python, et la deuxième colonne en =float=. coucou = datetime.datetime.strptime(tutu, "%Y-%m-%d") #+begin_src python :results silent :session :exports both import datetime convertedData = [(datetime.datetime.strptime(yearWeekDay, "%Y-%m-%d"), float(co2)) for yearWeekDay, co2 in table] dates = [dates for dates, concentration in convertedData] concentration = [concentration for dates, concentration in convertedData] #+end_src Ensuite on convertit les dates dans un format qui peut être utilisé pour l'affichage des données, et on affiche les données brutes. #+begin_src python :results file :session :var matplot_lib_filename="rawData.png" :exports both import matplotlib.pyplot as plt import matplotlib.dates as pltDates plotDates = pltDates.date2num(dates) plt.figure(figsize=(10,5)) plt.plot_date(plotDates,concentration) plt.tight_layout() plt.savefig(matplot_lib_filename) matplot_lib_filename #+end_src #+RESULTS: [[file:rawData.png]] ** TODO COMMENT Vérification des dates Nous faisons encore une vérification: nos dates doivent être séparées d'exactement une semaine. #+BEGIN_SRC python :results output :session dates = [date for date, _ in converted_data] for date1, date2 in zip(dates[:-1], dates[1:]): if date2-date1 != datetime.timedelta(weeks=1): print(f"Il y a {date2-date1} entre {date1} et {date2}") #+END_SRC #+RESULTS: