#+TITLE: Courte "analyse" de l'évolution de la température
#+AUTHOR: Miguel Arpa Perozo
#+DATE: <2020-10-29 jeu.>
#+LANGUAGE: fr
# #+PROPERTY: header-args :eval never-export
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
#+HTML_HEAD:
* 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/.
Voici un petit script =bash= qui permet de télécharger automatiquement toutes les données depuis 1996 jusqu'à 2020 :
#+begin_src bash :exports code
#!/usr/bin/bash
baseLink="https://donneespubliques.meteofrance.fr/donnees_libres/Txt/Synop/Archive/synop."
endLink=".csv.gz"
outputDest="./download"
for i in `seq 1996 2020`; do
for j in `seq -f "%02g" 12`; do
link="${baseLink}${i}${j}${endLink}"
wget $link -P $outputDest
done
done
#+end_src
Toutes les données sont ensuite extraites et disponibles en format =.csv= dans le dossier =./data=.
* Conventions et fonctions utiles
Le script suivant contient :
- Des constantes qui permettent de faire l'interface avec les conventions utilisées par les stations météorologiques.
- Variables contenant les données d'intérêt.
#+begin_src python :results output :session :exports code
import numpy as np
from scipy import io as spio
from matplotlib import pyplot as plt
#Kelvin to celsius
k2deg = 273.15
#Station's ids
stationId = {
"strasbourg": 7190,
"nancy": 7181,
"mulhouse": 7299}
#Column index of the different values
columnIndx = {
"station": 0,
"date": 1,
"pressure": 2,
"temperature": 7,
"humidity": 9
}
# List containing all the raw data of the day of interest by year
usefullData = []
dataPath = "./data/synop."
dataMonth = "10.csv"
month = 10
day = 21
#+end_src
#+RESULTS:
- 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
#+RESULTS:
[[file:results.png]]