Journée Python IPSL - 8 avril 2010 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 • Naviguez dans le répertoire TP_Chap1 de votre répertoire racine. Vous y trouverez un 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. 3. Création de vecteurs de dates 1 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(*row[:5]) for row in data] • dates = np.array(dates) Note : la compréhension de ces commandes n'est pas obligatoire aujourd'hui, mais constitue un bon exercice si/lorsque vous êtes bien à l'aise avec python. 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 2005 et le 31 mars 2005. 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(2005,12,31) • Répétez l'opération pour afficher simultanément les données valides de la série temporelle cbmid, puis cbhigh. • 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. 2