Commit 303c9506 authored by MigAP's avatar MigAP

première version exo4

parent 6dd120f8
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
#+TITLE: Votre titre #+TITLE: Courte "analyse" de l'évolution de la température
#+AUTHOR: Votre nom #+AUTHOR: Miguel Arpa Perozo
#+DATE: La date du jour #+DATE: <2020-10-29 jeu.>
#+LANGUAGE: fr #+LANGUAGE: fr
# #+PROPERTY: header-args :eval never-export # #+PROPERTY: header-args :eval never-export
...@@ -11,83 +11,136 @@ ...@@ -11,83 +11,136 @@
#+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script> #+HTML_HEAD: <script type="text/javascript" src="http://www.pirilampo.org/styles/lib/js/jquery.stickytableheaders.js"></script>
#+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>
* Quelques explications * Téléchargement des données
Le site méteo france met en accès librement des données météorologique gratuitement : https://donneespubliques.meteofrance.fr/.
Ceci est un document org-mode avec quelques exemples de code
python. Une fois ouvert dans emacs, ce document peut aisément être Voici un petit script =bash= qui permet de télécharger automatiquement toutes les données depuis 1996 jusqu'à 2020 :
exporté au format HTML, PDF, et Office. Pour plus de détails sur
org-mode vous pouvez consulter https://orgmode.org/guide/. #+begin_src bash :exports code
#!/usr/bin/bash
Lorsque vous utiliserez le raccourci =C-c C-e h o=, ce document sera baseLink="https://donneespubliques.meteofrance.fr/donnees_libres/Txt/Synop/Archive/synop."
compilé en html. Tout le code contenu sera ré-exécuté, les résultats endLink=".csv.gz"
récupérés et inclus dans un document final. Si vous ne souhaitez pas outputDest="./download"
ré-exécuter tout le code à chaque fois, il vous suffit de supprimer for i in `seq 1996 2020`; do
le # et l'espace qui sont devant le ~#+PROPERTY:~ au début de ce for j in `seq -f "%02g" 12`; do
document. link="${baseLink}${i}${j}${endLink}"
wget $link -P $outputDest
Comme nous vous l'avons montré dans la vidéo, on inclue du code done
python de la façon suivante (et on l'exécute en faisant ~C-c C-c~): done
#+end_src
#+begin_src python :results output :exports both Toutes les données sont ensuite extraites et disponibles en format =.csv= dans le dossier =./data=.
print("Hello world!")
#+end_src * Conventions et fonctions utiles
Le script suivant contient :
#+RESULTS: - Des constantes qui permettent de faire l'interface avec les conventions utilisées par les stations météorologiques.
: Hello world! - Variables contenant les données d'intérêt.
Voici la même chose, mais avec une session python, donc une #+begin_src python :results output :session :exports code
persistance d'un bloc à l'autre (et on l'exécute toujours en faisant import numpy as np
~C-c C-c~). from scipy import io as spio
#+begin_src python :results output :session :exports both from matplotlib import pyplot as plt
import numpy
x=numpy.linspace(-15,15) #Kelvin to celsius
print(x) k2deg = 273.15
#+end_src
#Station's ids
#+RESULTS: stationId = {
#+begin_example "strasbourg": 7190,
[-15. -14.3877551 -13.7755102 -13.16326531 -12.55102041 "nancy": 7181,
-11.93877551 -11.32653061 -10.71428571 -10.10204082 -9.48979592 "mulhouse": 7299}
-8.87755102 -8.26530612 -7.65306122 -7.04081633 -6.42857143
-5.81632653 -5.20408163 -4.59183673 -3.97959184 -3.36734694 #Column index of the different values
-2.75510204 -2.14285714 -1.53061224 -0.91836735 -0.30612245 columnIndx = {
0.30612245 0.91836735 1.53061224 2.14285714 2.75510204 "station": 0,
3.36734694 3.97959184 4.59183673 5.20408163 5.81632653 "date": 1,
6.42857143 7.04081633 7.65306122 8.26530612 8.87755102 "pressure": 2,
9.48979592 10.10204082 10.71428571 11.32653061 11.93877551 "temperature": 7,
12.55102041 13.16326531 13.7755102 14.3877551 15. ] "humidity": 9
#+end_example }
Et enfin, voici un exemple de sortie graphique: # List containing all the raw data of the day of interest by year
#+begin_src python :results output file :session :var matplot_lib_filename="./cosxsx.png" :exports results usefullData = []
import matplotlib.pyplot as plt dataPath = "./data/synop."
dataMonth = "10.csv"
plt.figure(figsize=(10,5)) month = 10
plt.plot(x,numpy.cos(x)/x) day = 21
plt.tight_layout() #+end_src
plt.savefig(matplot_lib_filename) #+RESULTS:
print(matplot_lib_filename)
- Fonction qui permet d'obtenir les données pour un jour précis.
#+begin_src python :results output :session :exports both
def getDayData(year,month,day,data):
""" Returns only the information for a specific day.
The data is encoded as a number with the format :
AAAAMMDDHHMISS"""
if month <10 and day <10:
dayString = str(year) + '0' + str(month) + '0' + str(day) # year + month + day
elif month <10:
dayString = str(year) + '0' + str(month) + str(day) # year + month + day
elif day <10:
dayString = str(year) + str(month) + '0' + str(day) # year + month + day
else:
dayString = str(year) + str(month) + str(day) # year + month + day
dateInfo = 4+2+2
filteredData = np.array([])
for row in data:
timeStamp = str(row[1]); #location of the timestamp
date = timeStamp[0:dateInfo]
if date == dayString:
filteredData = np.concatenate((filteredData, row),axis=0)
foundRows = int(filteredData.shape[0] / data.shape[1])
filteredData = filteredData.reshape((foundRows,data.shape[1]))
return filteredData
#+end_src
#+RESULTS:
* Traitement des données
#+begin_src python :results output :session :exports both
for year in range(1996,2020):
fileName = dataPath+ str(year) + dataMonth
#print(fileName)
rawData = np.genfromtxt(fileName,delimiter=";",skip_header=1)
strasbourg = rawData[ rawData[:,columnIndx["station"]] == stationId["strasbourg"]]
temperature = strasbourg[:,columnIndx["temperature"]] - k2deg;
usefullData.append(temperature)
minTemp = np.zeros(len(usefullData))
maxTemp = np.zeros(len(usefullData))
meanTemp = np.zeros(len(usefullData))
medianTemp = np.zeros(len(usefullData))
years = np.arange(1996,2020)
cnt = 0
for temp in usefullData:
minTemp[cnt] = np.min(temp)
maxTemp[cnt] = np.max(temp)
meanTemp[cnt] = np.mean(temp)
medianTemp[cnt] = np.median(temp)
cnt += 1
#+end_src
#+RESULTS:
* Résultats
#+begin_src python :results output file :session :var matplot_lib_filename="results.png" :exports both
plt.scatter(years,minTemp,label="min")
plt.scatter(years,maxTemp,label="max")
plt.scatter(years,meanTemp,label="mean")
plt.scatter(years,medianTemp,label="median")
plt.title('Analyse de le température par an');
plt.xlabel('An');
plt.ylabel('Température [°C]');
plt.legend();
plt.savefig(matplot_lib_filename)
print(matplot_lib_filename)
#+end_src #+end_src
#+RESULTS: #+RESULTS:
[[file:./cosxsx.png]] [[file:results.png]]
Vous remarquerez le paramètre ~:exports results~ qui indique que le code
ne doit pas apparaître dans la version finale du document. Nous vous
recommandons dans le cadre de ce MOOC de ne pas changer ce paramètre
(indiquer ~both~) car l'objectif est que vos analyses de données soient
parfaitement transparentes pour être reproductibles.
Attention, la figure ainsi générée n'est pas stockée dans le document
org. C'est un fichier ordinaire, ici nommé ~cosxsx.png~. N'oubliez pas
de le committer si vous voulez que votre analyse soit lisible et
compréhensible sur GitLab.
Enfin, n'oubliez pas que nous vous fournissons dans les ressources de
ce MOOC une configuration avec un certain nombre de raccourcis
claviers permettant de créer rapidement les blocs de code python (en
faisant ~<p~, ~<P~ ou ~<PP~ suivi de ~Tab~).
Maintenant, à vous de jouer! Vous pouvez effacer toutes ces
informations et les remplacer par votre document computationnel.
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