Commit 107b08a1 authored by MigAP's avatar MigAP

add more comments on the used approached

parent 229bcc6f
...@@ -13,8 +13,15 @@ ...@@ -13,8 +13,15 @@
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script> #+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/readtheorg/js/readtheorg.js"></script>
* Introduction * 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]] - 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). - 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 - D'après le site de téléchargement la concentration de CO2 est
...@@ -22,18 +29,13 @@ ...@@ -22,18 +29,13 @@
- Finalement, d'après le site : "The weekly values have been - Finalement, d'après le site : "The weekly values have been
adjusted to 12:00 hours at middle day of each weekly period." adjusted to 12:00 hours at middle day of each weekly period."
** Objectifs ** Démarche générales de l'étude
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
1. Dans un premier temps effectuer une analyse fréquentielle des 1. Dans un premier temps effectuer une analyse fréquentielle des
données afin de tenter de modéliser certains phénomènes. données afin de tenter de modéliser certains phénomènes.
2. Utiliser un outil d'optimisation pour déterminer certains 2. Utiliser un outil d'optimisation pour déterminer certains
paramètres du modèle en utilisant les mesures. paramètres du modèle proposé en utilisant les mesures.
** Outils utilisés
** Outils utilisés
1. Python 3.8.6 (GCC 10.2.0) 1. Python 3.8.6 (GCC 10.2.0)
2. numpy 1.19.2 2. numpy 1.19.2
3. scipy 1.5.3 3. scipy 1.5.3
...@@ -46,7 +48,7 @@ téléchargement utilisé est le suivant : ...@@ -46,7 +48,7 @@ téléchargement utilisé est le suivant :
#+name: data-url #+name: data-url
https://scrippsco2.ucsd.edu/assets/data/atmospheric/stations/in_situ_co2/weekly/weekly_in_situ_co2_mlo.csv 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. localement.
#+BEGIN_SRC python :results silent :var data_url=data-url :session #+BEGIN_SRC python :results silent :var data_url=data-url :session
...@@ -82,10 +84,14 @@ table[:5] ...@@ -82,10 +84,14 @@ table[:5]
| 1958-05-03 | 316.95 | | 1958-05-03 | 316.95 |
* Traitement et affichage des données. * 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. ** Converstion des string en valeurs numériques.
Les données dans =table= sont des string. On va convertir la première 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 colonne en objets ~datetime~ de Python, et la deuxième colonne en
=float=. ~float~.
#+begin_src python :results silent :session :exports both #+begin_src python :results silent :session :exports both
import datetime import datetime
...@@ -149,10 +155,15 @@ les oscillations rapides observés précédément. ...@@ -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 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 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. amplitude entre cinq et sept.
* Analyse fréquentielle de la variation de la concentration de CO2. * 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 #+begin_src python :results file :session :var matplot_lib_filename="dataFFT.png" :exports both
import numpy as np import numpy as np
...@@ -190,6 +201,9 @@ amplitude entre cinq et sept. ...@@ -190,6 +201,9 @@ amplitude entre cinq et sept.
#+RESULTS: #+RESULTS:
[[file:dataFFT.png]] [[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 ** FFT zoom
On effectue un zoom sur la partie positive du graphique pour tenter de 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 ...@@ -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, 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 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 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 ** Filtrage de la contribution lente
On élimine toutes les valeurs au dessus des seuis établis On élimine toutes les valeurs supérieures aux seuis établis précédemment
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 #+begin_src python :results file :session :var matplot_lib_filename="smallOsillations.png" :exports both
# Extraction of the small oscillations # Extraction of the small oscillations
...@@ -249,7 +263,8 @@ précédemment. ...@@ -249,7 +263,8 @@ précédemment.
** Reconstruction du du phénomène périodique ** Reconstruction du du phénomène périodique
L'objectif est de déterminer l'amplitude des oscillations en prenant 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 #+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTime.png" :exports both
smallFreqSignal = smallNorm*np.exp(1j*concentrationFFTAngle) smallFreqSignal = smallNorm*np.exp(1j*concentrationFFTAngle)
...@@ -270,6 +285,7 @@ en compte toutes les mesures. ...@@ -270,6 +285,7 @@ en compte toutes les mesures.
#+RESULTS: #+RESULTS:
[[file:smallOsillationsTime.png]] [[file:smallOsillationsTime.png]]
Effectuons un zoom sur le signal reconstruit :
#+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTimeZoom.png" :exports both #+begin_src python :results file :session :var matplot_lib_filename="smallOsillationsTimeZoom.png" :exports both
plt.figure(figsize=(10,5)) plt.figure(figsize=(10,5))
...@@ -287,8 +303,9 @@ en compte toutes les mesures. ...@@ -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. 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 ** Filtrage du phénomène périodique
On souhaite maintenant filtrer le phénomène périodique ce qui pourrait
On élimine toutes les valeurs au dessus du seuil établit précédemment. 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 #+begin_src python :results file :session :var matplot_lib_filename="bigOsillations.png" :exports both
# Extraction of the big oscillations # Extraction of the big oscillations
...@@ -312,6 +329,9 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment. ...@@ -312,6 +329,9 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment.
** Reconstruction du signal : contribution lente ** 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 #+begin_src python :results file :session :var matplot_lib_filename="bigOsillationsTime.png" :exports both
bigFreqSignal = bigNorm*np.exp(1j*concentrationFFTAngle) bigFreqSignal = bigNorm*np.exp(1j*concentrationFFTAngle)
bigSignal = np.fft.ifft(bigFreqSignal) bigSignal = np.fft.ifft(bigFreqSignal)
...@@ -330,6 +350,9 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment. ...@@ -330,6 +350,9 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment.
#+RESULTS: #+RESULTS:
[[file:bigOsillationsTime.png]] [[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 ** Comparaison des signaux filtré et brut
#+begin_src python :results file :session :var matplot_lib_filename="bigOsillationsComparisons.png" :exports both #+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. ...@@ -348,6 +371,12 @@ On élimine toutes les valeurs au dessus du seuil établit précédemment.
#+RESULTS: #+RESULTS:
[[file:bigOsillationsComparisons.png]] [[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 * Modélisation des phénomènes et extrapolations
** Oscillations périodiques ** Oscillations périodiques
L'analyse fréquentielle nous a permis caractériser le phénomène 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 ...@@ -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]] : [ 4.78171606e-09 -1.81982548e-05 1.44289419e-02]]
Finalement on compare le modèle obtenu avec les données des mesures : 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 #+begin_src python :results file :session :var matplot_lib_filename="modelBigOsillations.png" :exports both
co2Model = slowContributionModel(t,params[0], params[1], params[2]) 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 : ...@@ -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 On constate que l'on obtient des résultats satisfaisants pour la
caractérisation de la contribution lente. caractérisation de la contribution lente.
** Extrapolation de la concentration de CO2 jusqu'à 2025 ** Extrapolation de la concentration de CO2 jusqu'à 2025
Dans un premier temps on crée une liste qui contient l'ensemble des 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