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 notam-
ment :
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_com-
plet.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'environ-
nement ipython en utilisant la commande loadtxt de numpy. Si vous rencontrez un pro-
blè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, mi-
nutes (é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 va-
riables 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 scat-
ter (voir help scatter) et la variable dates. Notez que matplotlib affiche automatique-
ment les dates de façon optimale.
Vérifiez que les données invalides, identifiées par la valeur -999.96, perturbent l'affi-
chage. Trouvez un moyen d'afficher uniquement les données valides de la série tempo-
relle.
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 mat-
plotlib 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 tempo-
relle 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, cb-
mid, 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
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !