#+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: