#+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]]