Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mooc-rr
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
d682078cda52034c5c9de3f5af638a6f
mooc-rr
Commits
e4636c23
Commit
e4636c23
authored
Nov 25, 2020
by
MigAP
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add fft of the raw data
parent
1c3e9759
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
75 additions
and
14 deletions
+75
-14
exercice_python_fr.org
module3/exo3/exercice_python_fr.org
+75
-14
No files found.
module3/exo3/exercice_python_fr.org
View file @
e4636c23
...
...
@@ -20,16 +20,17 @@
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
** TODO Rajouter des titres et légendes aux figures.
* Lecture des données brutes
** Lecture ou 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
.
On
télécharge les données si celles-ci ne sont pas disponibl
es
localement
.
#+BEGIN_SRC python :results silent :var data_url=data-url :session
data_file ="weekly_in_situ_co2_mlo.csv"
...
...
@@ -63,12 +64,22 @@ table[:5]
| 1958-04-26 | 316.48 |
| 1958-05-03 | 316.95 |
** Conversion des données et affichage
** 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:
* Traitement et affichage des données.
** 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=.
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]
...
...
@@ -77,6 +88,7 @@ coucou = datetime.datetime.strptime(tutu, "%Y-%m-%d")
concentration = [concentration for dates, concentration in convertedData]
#+end_src
** Affichage des données.
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.
...
...
@@ -97,14 +109,63 @@ pour l'affichage des données, et on affiche les données brutes.
#+RESULTS:
[[file:rawData.png]]
On remarque sur la figure la supperposition de deux phénomènes :
1. Un oscillation périodique "rapide" de faible amplitude.
2. Une croissance lente avec une forme qui ressemble à un début de
parabole.
** /Zoom/ sur l'affichage des données
** 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
Effectuons un /zoom/ sur une période de temps plus courte caractériser
les oscillations rapides observés précédément.
#+begin_src python :results file :session :var matplot_lib_filename="zoomRawData.png" :exports both
# Window's size where we want to zoom.
windowSize = 150;
plotDatesZoom = pltDates.date2num(dates[:windowSize])
plt.figure(figsize=(10,5))
plt.plot_date(plotDatesZoom,concentration[:windowSize])
plt.tight_layout()
plt.savefig(matplot_lib_filename)
matplot_lib_filename
#+end_src
#+RESULTS:
[[file:zoomRawData.png]]
Sur cette figure on met plus en évidence les oscillations rapides 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 ans.
* Analyse fréquentielle de la variation de la concentration de CO2.
On possède des données toutes les semaines.
#+begin_src python :results file :session :var matplot_lib_filename="dataFFT.png" :exports both
import numpy as np
# Conversion of the data to numpy array
co2 = np.array(concentration)
# Concentration FFT
concentrationFFT = np.fft.fft(co2)
# We take the norm of the FFT
concentrationFFTNorm = np.absolute(concentrationFFT)
# Frequency axis
N = co2.shape[0] # Number of samples
Te = 1 # Sampling interval
t = np.arange(N) # time reference
freq = np.arange(N)/(N*Te)
#freq = np.fft.fftfreq(N)
plt.figure(figsize=(10,5))
plt.plot(freq,concentrationFFTNorm)
plt.tight_layout()
plt.savefig(matplot_lib_filename)
matplot_lib_filename
#+end_src
#+RESULTS:
[[file:dataFFT.png]]
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment