Session de ~2h avec pour objectifs:
5 février 2015, 14h-16h30, animé par Pierre Haessig
* mise en abîme: la session a lieu dans la salle où est installée ce capteur...
La distribution Ananconda, de Continuum Analytics, contient tous les paquets nécessaires pour une utilisation scientifique classique.
lien direct de téléchargement (300 Mo, gratuit)
→ choisir la version adaptée au système d'exploitation (e.g. 32 vs. 64 bits)
Sous Windows, dans le Menu Démarrer, lancer "Anaconda/IPython Notebook".
→ Ouvre une fenêtre de commande (le serveur) et une fenêtre de navigateur: l'interface du Notebook avec laquelle on va interagir
Cellule de type "Code":
a = 1
a+2
Cellule de type "Markdown":
Aide sur la syntaxe: "Markdown basics"
Importer des modules (avec un alias court, plus pratique)
import numpy as np
import matplotlib.pyplot as plt
Importer juste un élément:
from numpy import pi
pi
Activer l'affichage des graphiques dans le Notebook (image statique)
%matplotlib inline
Activer l'affichage dans une fenêtre séparé (interactif)
%matplotlib qt
Vecteur de données à tracer
t = np.linspace(0, 4*pi)
y = np.sin(t)
Syntaxe de graphs avec Matplotlib: très proche de Matlab (volontairement)
Galerie d'exemples, très pratique pour découvrir: http://matplotlib.org/gallery.html
plt.plot(t, y) # affiche y=f(t)
plt.title('sinus')
plt.xlabel('temps (s)')
plt.grid(True)
import pandas as pd
La "magic" %ls
permet de lister le contenu d'un répertoire (comme ls
sour Linux, dir
sous Windows)
%ls *.csv
Nom du fichier à lire (qui est ici dans le répertoire courant où le Notebook a été exécuté).
%pwd
fname = 'log-20150128-092830.csv'
Affichage du contenu du fichier:
head
et tail
sous Linux (appel au shell avec le signe !
)%more
!tail $fname
# affiche *tout* le fichier dans le pager
%more $fname
la fonction qui fait le travail: read_csv
.
# Afficher l'aide (syntaxe spécifique à la console IPython)
pd.read_csv?
Appel simple, en précisant juste le séparateur des champs:
d = pd.read_csv(fname, sep=';')
d.head()
→ Lecture sans erreur, mais les dates ne sont pas analysées (elles restent sous forme de chaînes de caractères)
d['date'][0]
type(d['date'][0])
Appel de read_csv
avec des options adaptées à ce fichier:
d = pd.read_csv(fname, sep=';',
parse_dates=[[0,1]], # aller chercher la date dans les 2 première colonnes
index_col=0, # utiliser la date comme index des données
dayfirst=True, # ne pas confondre le 5 février avec le 2 mai (format américain MM-DD-YYYY)
)
d.head()
les donnés sont dans un pandas.DataFrame
type(d)
On récupère une colonne par indexation. Objet de type Series
vals = d['value']
vals.head()
type(vals)
Tout les type de mesures issues du capteur
type_meas = d['type']
type_meas.unique()
Récupérer seulement un type de mesures: la température
temp = vals[d['type'] == 'indoor temperature']
temp.head(3)
Exo: faire la même chose pour le CO2
co2 = vals[d['type'] == 'carbon dioxide']
co2.head(3)
groupby
¶Par type de mesure
d.groupby('type').mean()
Statistiques par jour
temp.groupby(temp.index.dayofyear).mean()
Sous échantillonage: moyennes journalières
temp.resample('1D')
Sur échantillonage: il faut combler les trous
temp.resample('1Min').head()
temp.resample('1Min', fill_method='bfill').head()
temp.resample('1Min').interpolate().head()
%matplotlib inline
temp.plot()
plt.ylabel(u'température (°C)') # u'' pour des textes accentués
Deux tracés sur le même axe: twinx
(pb de grille non superposée)
temp.plot()
plt.twinx()
co2.plot(style='r');
La température et le CO2, superposés: subplots
fig, (ax1, ax2) = plt.subplots(2,1, sharex=True)
temp.plot(ax=ax1)
co2.plot(ax=ax2, style='r')
plt.xlim('2015-02-03','2015-02-04')
ax2.set_ylim(200, 1200);
Remarque: grâce au paramètre sharex
, le zoom est synchronisé (utile en mode interactif, avec %matplotlib qt
).