Journée Python IPSL - 14 octobre 2013 TP Python

publicité
Journée Python IPSL - 14 octobre 2013
TP Python - 1er Chapitre
Introduction à Python : manipulation interactive
L'objectif de ce TP est en premier lieu de prendre contact avec Python en douceur, en
vous familiarisant à la manipulation interactive de données. Nous vous proposons notamment :
• de lire des séries de données contenues dans un fichier ASCII;
• d'en extraire des informations statistiques (moyenne, écart-type, etc.);
• de créer des vecteurs de dates;
• d'effectuer des régressions simples;
• d'obtenir une représentation visuelle des données (séries temporelles, histogrammes)
avec Matplotlib.
1.
Environnement
•
Créez le répertoire TP1 dans votre $HOME. Allez dans ce répertoire. Copiez depuis
$HOME/../python1/TP1 le fichier nommé ALS_LNA_RAD_TSI_2002_2009_eps5_complet.asc. Ce fichier ASCII contient des données organisées en 19 colonnes, chaque
ligne décrivant une heure d'observation. Ce jeu de données décrit certaines propriétés de
la couverture nuageuse au-dessus du SIRTA (le site instrumenté de Palaiseau) depuis
2002, et provient d'observations combinées de plusieurs instruments (radiomètre, lidar).
• Vous pouvez afficher ce fichier avec la commande more pour en étudier le contenu. Vérifiez que les 5 premières colonnes décrivent la date et l'heure de la mesure (au format
AAAA MM JJ hh minutes). Au cours de ce TP nous utiliserons ces données et également
l'altitude de la base de nuages bas (colonne 10), moyen (11) et haut (12) en km.
• Lancez ipython -pylab si ce n'est pas déjà fait.
2.
Chargement et extraction des données
Chargez les données contenues dans le fichier dans une variable data dans l'environnement ipython en utilisant la commande loadtxt de numpy. Si vous rencontrez un problème lié au format du fichier, la solution réside sans doute dans l'utilisation d'un argument
particulier de loadtxt, la liste des arguments possibles peut être obtenue par help
loadtxt.
• Vérifiez avec la commande whos que les 19 colonnes de données ont bien été chargées
dans data, notez la longueur de chaque colonne.
• Utilisez le "slicing" sur data pour extraire :
• les 5 premières colonnes (index 0, 1, 2, 3, 4) dans les variables aa, mm, jj, hh, minutes (éviter "min")
• les colonnes 10, 11, 12 (index 9, 10, 11) dans les variables cblow, cbmid, cbhigh.
• Vérifiez avec whos que les dimensions des variables sont cohérentes.
•
1
3.
Création de vecteurs de dates
Nous allons ici transformer les valeurs numériques année/mois/jour, heures/minutes en variables de type date.
Importez la fonction datetime du module datetime :
• from datetime import datetime
Utilisez les commandes suivantes pour créer la variable "dates":
• dates = [datetime(*map(int,row[:5])) for row in data]
• dates = np.array(dates)
•
•
Note1 : Au lieu de la list comprehension utilisée ci-dessus pour créer la nouvelle liste
dates, on aurrait pu utiliser une boucle simple:
dates = []
for row in data:
dates.append(datetime(*map(int,row[:5])))
Note2 : La fonction map applique une fonction (int dans notre cas) à chaque élément
d'un tableau ou d'une liste (row[:5] dans notre cas). On aurrait pu faire :
...
datetime_int = []
for i in range(5): datetime_int.append(int(row[:i]))
dates.append(datetime(*datetime_int))
Note3 : L'étoile suivie d'un argument d'une fonction transforme cet argument en tuple.
Cela permet de passer le seule argument datetime_int à une fonction qui prend plusieurs
arguments: datetime(year, month, day[, hour[, minute[...) (voir help datetime).
4.
Affichage des données
Affichez la série temporelle cblow en fonction du temps en utilisant la commande scatter (voir help scatter) et la variable dates. Notez que matplotlib affiche automatiquement les dates de façon optimale.
• Vérifiez que les données invalides, identifiées par la valeur -999.96, perturbent l'affichage. Trouvez un moyen d'afficher uniquement les données valides de la série temporelle.
•
• Rappel : x[x > 0] sélectionne uniquement les valeurs positives de x.
• Limitez l'axe horizontal entre le 1er janvier 2003 et le 31 mars 2003. Remarquez que matplotlib adapte l'affichage des dates.
• Indice 1 : help xlim
• Indice 2 : xlim peut prendre des dates en argument
• Indice 3 : date2 = datetime(2003,12,31)
• Répétez l'opération pour afficher simultanément les données valides de la série temporelle cbmid, puis cbhigh.
2
•
Affichez la distribution des 3 séries temporelles avec la commande hist (voir help
hist).
5.
Statistiques
Obtenez la moyenne et la déviation standard de chaque série temporelles cblow, cbmid, cbhigh en utilisant les fonctions numpy mean, std (attention à ne pas prendre en
compte les données invalides).
• Ajoutez ces informations sur une figure avec la commande legend. Note : il est possible
d'ajouter du code latex dans n'importe quelle commande d'affichage texte de matplotlib en
encadrant le code latex par $...$. Documentez les axes grâce aux commandes xlabel,
ylabel, title, etc.
•
6. Script
•
Reprendre les commandes testées de façon interactive dans IPython et le recopier dans
un script exécutable.
• Vérifier qu'on obtient les mêmes figures en lançant le script.
3
Téléchargement