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