Commit a65cc0ab authored by Didier Voisin's avatar Didier Voisin
Browse files

mis a jour pour session 2 - 2019

parent 70b00851
......@@ -48,16 +48,19 @@
** complétez la cellule ci-dessous avec le bon nom de fichier, et les bonnes options de lecture **
** pour que tout marche bien, il faut que l'index résultant soit un DatetimeIndex. pas un index de dtype 'object' **
** profitez-en pour d'abord, on redéfinit les trucs sur lesquels on travaille (ex: un polluant toutes les stations, ou une station touts les polluants, ou ce que vous voulez...) **
** `dfc` contiendra les données complètes **
** vous sélectionnerez ensuite dans `mon_df` une sous-partie du jeu de données, plus simple, sur lequel travailler ensuite (ex: un polluant toutes les stations, ou une station touts les polluants, ou ce que vous voulez...) **
%% Cell type:code id: tags:
``` python
dfc = pd.read_csv(???,sep=???, low_memory=False,header=[0,1], index_col=0), ???)
dfc = pd.read_csv(???,sep=???, low_memory=False,
header=[0,1], index_col=0)#, ???)
print(dfc.index)
mon_df = ???
```
......@@ -84,11 +87,15 @@
> df_reduit = grouped.methode_de_reduction()
> df_reduit.methode_qui_fait_des_jolies_choses()
la première ligne *split* les données; la seconde ligne *apply-combine*; la troisième (optionnelle) me rend compte
la première ligne *split* les données; la seconde ligne *apply-combine*; la troisième (optionnelle) me rend compte (souvent, ce sera `.plot()`)
Rq: on peut aussi tout combiner en une seule ligne, mais ça complique la recherche d'erreurs:
> mon_df.methode_qui_fait_les_paquets().methode_de_reduction().plot()
![](aide/split-apply-combine.png)
### 2.2. cycle annuel, rééchantillonnage
......@@ -121,10 +128,11 @@
pour cela, il faudrait "empiler" nos années les unes sur les autres et les moyenner. c'est le rôle de *groupby*
*groupby* permet un groupement des données le plus souple qui soit. il admet 2 types de fonctionnement:
- *groupby(col_name)* : le regroupement se fait alors à raison d'un groupe différent par valeur différente dans la colonne *col_name*.
- *groupby(col_name.method())* : le regroupement se fait alors à raison d'un groupe différent par valeur différente du résultat du calcul de .method() appliqué à la colonne test. particulièrement utile pour la colonne index et les méthodes ci-dessous
- *groupby(grouping_function)* : le regroupement se fait alors à raison des différentes valeurs résultats de la fonction *grouping_function* appliquée à la colonne index
dans notre cas, on pourrait imaginer créer une colonne supplémentaires dans laquelle on mettrait par exemple le numéro du mois, calculé à partir de l'index. mais ce serait assez maladroit, puisque la seconde syntaxe permet de le faire directement.
parmi les *grouping_function* qui vont nous intéresser, se trouvent toutes les fonctions qui s'appliquent aux dates et heure, telles que:
......@@ -164,11 +172,11 @@
on n'est pas encore tout à fait au bout: on a certes un graphe explicite, mais on a perdu la variabilité intra mensuelle. il faudrait idéalement mettre des incertitudes, ou une notion de dispersion autour de chaque ligne.
il existe des jolies librairies graphiques qui permettent de faire ça très bien presque tout seul (dont seaborn, qui marche bien avec pandas)
je vous donne dans la cellule ci-dessous une fonction qui fait une partie du job.
je vous donne dans la cellule ci-dessous une fonction qui fait une partie du job. Attention, elle ne marche que avec une vraie "gouping_function"
** refaites vos graphes avec ce nouveau jouet.**
** que pensez vous de la différence avec les précédents ? en particulier, est-ce que ce nouveau graphe permet de juger du caractère significatif ou pas des différences observées ?**
......@@ -272,31 +280,32 @@
#### 5.1.1. le toit de l'OSUG-B
une station météo assez complète est en place sur le toit de l'OSUG-B
** compléter la cellule suivante pour que ça marche !**
** compléter la cellule suivante pour que ça marche ! **
si vous travaillez bien (choix des options de lecture), vous devriez avoir des colonnes qui sont toutes des types numériques et un index datetime
%% Cell type:code id: tags:
``` python
#récupération des données du CERMO ( ~ station SMH)
mto_CERMO_name = "./data/MTO-CERMO_H_2008-2016.csv"
mto_CERMO_name = "./data/MTO-CERMO_10min_2008-2016.csv"
# à compléter
mto_CERMO = pd.read_csv(???)
# traduction de l'index de chaine de caractère à datetime
mto_CERMO.index = ???(mto_CERMO.index)
print(mto_CERMO.dtypes)
mto_CERMO.head()
mto_CERMO.info()
```
%% Cell type:markdown id: tags:
on a un petit souci: certaines colonnes ne sont pas des nombres.
si par mégarde vous n'avez pas tout bien du premier coup, alors il faut bricoler après coup. mais c'est seulement une punition pour ne pas avoir réussi du premier coup dans la cellule suivante.
en gros, si directement vous aviez tout bien alors passez à la suite !
**à vous de completer la cellule suivante pour reformater les données comme il convient**
%% Cell type:code id: tags:
......@@ -315,10 +324,23 @@
mto_CERMO.head()
```
%% Cell type:markdown id: tags:
dans tous les cas, il reste une dernière opération: rééchantillonner au pas de temps horaire !
**faites le**
%% Cell type:code id: tags:
``` python
## votre code ici (use .resample(...) )
```
%% Cell type:markdown id: tags:
#### 5.1.2. des données d'AirRhoneAlpes
elles concernent le site du Rondeau (gros rond point autoroutier au sud de Grenoble, appelé aussi Rocade dans l'autre jeu de données)
celles-ci sont rigolotes: c'est un fichier excel !!!
......@@ -334,11 +356,11 @@
#j'ai tout de même du virer la premire colonne, vide, et la colonne 8,
#vide également, pour que rien ne dépasse du bloc de données...
#practicality beats purity
mto_airAURA_name = "./data/3592_Donnees_meteo_Grenoble.xlsx"
mto_airAURA = pd.read_excel(mto_airAURA_name, sheetname=0, header=[23,24], index_col=0)
mto_airAURA = pd.read_excel(mto_airAURA_name, sheet_name=0, header=[23,24], index_col=0)
print(mto_airAURA.dtypes)
mto_airAURA.head()
```
......@@ -375,24 +397,31 @@
%% Cell type:code id: tags:
``` python
mto_MF = pd.read_csv("./data/data-dda.txt", sep=';')
mto_MF.rename(columns={'FF':'wspeed (m/s)', 'DD':'wdir'}, inplace=True)
mto_MF.drop(['QFF','QDD','QFF2','QDD2','FF2','DD2'],inplace=True,axis='columns')
mto_MF['wspeed (m/s)']=mto_MF['wspeed (m/s)'].str.replace(',','.').apply(float)
mto_MF.set_index(['DATE','POSTE'],inplace=True)
mto_MF.replace({38384001:'StGeoirs',
38538002:'leVersoud',
38567002:'Chamrousse'}, inplace=True)
#mto_MF.pivot(index='DATE',columns='POSTE',values=['wspeed (m/s)','wdir'])
#something like this should work... tant pis !
mto_MF['DATE']=pd.to_datetime(mto_MF['DATE'],format='%Y%m%d%H')
mto_MF.set_index('DATE',inplace=True)
#mto_Chamrousse = mto_MF[mto_MF['POSTE']=='Chamrousse'].drop('POSTE',axis='columns')
#mto_leVersoud = mto_MF[mto_MF['POSTE']=='leVersoud'].drop('POSTE',axis='columns')
#mto_StGeoirs = mto_MF[mto_MF['POSTE']=='StGeoirs'].drop('POSTE',axis='columns')
mto_MF = mto_MF.unstack().swaplevel(axis='columns')
mto_MF.rename(columns = {38384001:'StGeoirs',38538002:'leVersoud',38567002:'Chamrousse'},
level='POSTE',inplace=True)
mto_MF.index = pd.to_datetime(mto_MF.index,format="%Y%m%d%H")
mto_MF.head()
mto_MF = {poste:df.drop('POSTE',axis='columns') for poste,df in mto_MF.groupby('POSTE')}
mto_MF
```
%% Cell type:markdown id: tags:
### 5.2. Rose des vents
......@@ -426,10 +455,11 @@
``` python
def jolierosedesvents(wdir,wsp,lieu,legend_xy=(0.8,0)):
#faire la rose des vents
from windrose import WindroseAxes
mini,maxi=wsp.min(),wsp.max()
ax = WindroseAxes.from_ax()
ax.bar(wdir, wsp, normed=True, opening=0.8, edgecolor='white',
bins=np.logspace(np.floor(np.log10(mini))-1,np.floor(np.log10(maxi)), 10))
......
This diff is collapsed.
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