Commit 107b08a1 authored by MigAP's avatar MigAP

add more comments on the used approached

parent 229bcc6f
......@@ -13,8 +13,15 @@
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* Introduction
** Généralités
** Objectifs
1. Proposer un modèle de la variation de CO2 dans l'atmosphère en
fonction du temps depuis 1958 à l'aide de différentes mesures.
2. À l'aide du modèle prédire la concentration future de CO2
en 2025.
** Généralités sur les données utilisées
Voici quelques points généraux sur les données utilisées dans cette
étude :
- Lien de téléchargement des données est le suivant : [[https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv][link]]
- Les données ont été téléchargées le 2020-11-16 (date au format ISO).
- D'après le site de téléchargement la concentration de CO2 est
......@@ -22,18 +29,13 @@
- Finalement, d'après le site : "The weekly values have been
adjusted to 12:00 hours at middle day of each weekly period."
** Objectifs
1. Proposer un modèle de la variation de CO2 dans l'atmosphère en
fonction du temps.
2. À l'aide du modèle prédire la concentration future de CO2
en 2025.
** Démarche
** Démarche générales de l'étude
1. Dans un premier temps effectuer une analyse fréquentielle des
données afin de tenter de modéliser certains phénomènes.
2. Utiliser un outil d'optimisation pour déterminer certains
paramètres du modèle en utilisant les mesures.
** Outils utilisés
paramètres du modèle proposé en utilisant les mesures.
** Outils utilisés
1. Python 3.8.6 (GCC 10.2.0)
2. numpy 1.19.2
3. scipy 1.5.3
......@@ -46,7 +48,7 @@ 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 télécharge les données si celles-ci ne sont pas disponibles
On télécharge les données si celles-ci ne sont pas déjà disponibles
localement.
#+BEGIN_SRC python :results silent :var data_url=data-url :session
......@@ -82,10 +84,14 @@ table[:5]
| 1958-05-03 | 316.95 |
* Traitement et affichage des données.
Dans cette partie on convertit les données dans des formats qui
permettront de traiter les données plus facilement.
** Converstion des string en valeurs numériques.
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=.
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~.
#+begin_src python :results silent :session :exports both
import datetime
......@@ -149,10 +155,15 @@ les oscillations rapides observés précédément.
Sur cette figure on met plus en évidence le phénomène périodique sur
le niveau de concentration de CO2. D'après la figure, dans un premier
temps supposer que les oscillations ont une période de un an et une
temps on peut supposer que les oscillations ont une période de un an et une
amplitude entre cinq et sept.
* Analyse fréquentielle de la variation de la concentration de CO2.
Dans cette partie on souhaite faire une analyse fréquentielle des
données en effectuant une transformée de Fourier sur les mesures afin
de mieux caractériser les phénomènes observés. Pour cela on utilise le
module =numpy= et l'on affiche les résultats avec =matplotlib=.
#+begin_src python :results file :session :var matplot_lib_filename="dataFFT.png" :exports both
import numpy as np
......@@ -190,6 +201,9 @@ amplitude entre cinq et sept.
#+RESULTS:
[[file:dataFFT.png]]
Sur ce graphique on peut voir l'ensemble du spectre des mesures. On
remarque quelques pics qui devraient correpondre au phénomène
périodique. On tentera de caractériser plus précisement ses pics.
** FFT zoom
On effectue un zoom sur la partie positive du graphique pour tenter de
......@@ -221,11 +235,11 @@ données. En effet on a supposé précédemment que les oscillations
avaient une période de un an, notre unité de temps étant une semaine,
on peut déduire la fréquence des oscillation en supposant que une
année a 52 semaine : \( f = \frac{1}{52} \approx 0.019 \) ce qui reste
cohérent avec notre analyse fréquentielle.
cohérent avec les résultats dans le graphique.
** Filtrage de la contribution lente
On élimine toutes les valeurs au dessus des seuis établis
précédemment.
On élimine toutes les valeurs supérieures aux seuis établis précédemment
dans le spectre pour éliminer la contribution lente dans le signal.
#+begin_src python :results file :session :var matplot_lib_filename="smallOsillations.png" :exports both
# Extraction of the small oscillations
......@@ -249,7 +263,8 @@ précédemment.
** Reconstruction du du phénomène périodique
L'objectif est de déterminer l'amplitude des oscillations en prenant
en compte toutes les mesures.
en compte toutes les mesures et non pas juste sur une fenêtre
d'observation comme on l'a fait précédemment.
#+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTime.png" :exports both
smallFreqSignal = smallNorm*np.exp(1j*concentrationFFTAngle)
......@@ -270,6 +285,7 @@ en compte toutes les mesures.
#+RESULTS:
[[file:smallOsillationsTime.png]]
Effectuons un zoom sur le signal reconstruit :
#+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTimeZoom.png" :exports both
plt.figure(figsize=(10,5))
......@@ -287,8 +303,9 @@ en compte toutes les mesures.
On peut déduire que le phénomère périodique a une amplitude de cinq d'après le graphique.
** Filtrage du phénomène périodique
On élimine toutes les valeurs au dessus du seuil établit précédemment.
On souhaite maintenant filtrer le phénomène périodique ce qui pourrait
nous aider a mieux comprendre la contribution lente. On élimine donc
toutes les valeurs inférieures au seuil établit précédemment.
#+begin_src python :results file :session :var matplot_lib_filename="bigOsillations.png" :exports both
# Extraction of the big oscillations
......@@ -312,6 +329,9 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment.
** Reconstruction du signal : contribution lente
Finalement on recontruit le signal temporel puis l'on affiche afin de
mieux le caractériser.
#+begin_src python :results file :session :var matplot_lib_filename="bigOsillationsTime.png" :exports both
bigFreqSignal = bigNorm*np.exp(1j*concentrationFFTAngle)
bigSignal = np.fft.ifft(bigFreqSignal)
......@@ -330,6 +350,9 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment.
#+RESULTS:
[[file:bigOsillationsTime.png]]
Ce graphique nous permet pas de déduire grand chose quant à cette
contribution lente. Tentons de le comparer avec les mesures.
** Comparaison des signaux filtré et brut
#+begin_src python :results file :session :var matplot_lib_filename="bigOsillationsComparisons.png" :exports both
......@@ -348,6 +371,12 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment.
#+RESULTS:
[[file:bigOsillationsComparisons.png]]
Malheurement, cette approche nous permet pas d'avoir plus
d'informations pertinentes quant à cette contribution lente. Donc par
la suite on décidera de modéliser cette contribution par un polynôme
d'ordre 2.
* Modélisation des phénomènes et extrapolations
** Oscillations périodiques
L'analyse fréquentielle nous a permis caractériser le phénomène
......@@ -399,6 +428,7 @@ Puis l'on utilise le module =scipy= plus spécifiquement le module
: [ 4.78171606e-09 -1.81982548e-05 1.44289419e-02]]
Finalement on compare le modèle obtenu avec les données des mesures :
#+begin_src python :results file :session :var matplot_lib_filename="modelBigOsillations.png" :exports both
co2Model = slowContributionModel(t,params[0], params[1], params[2])
......@@ -420,6 +450,7 @@ Finalement on compare le modèle obtenu avec les données des mesures :
On constate que l'on obtient des résultats satisfaisants pour la
caractérisation de la contribution lente.
** Extrapolation de la concentration de CO2 jusqu'à 2025
Dans un premier temps on crée une liste qui contient l'ensemble des
......
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