TP2 : Bases de données Interaction Python base de données

publicité
TP2 : Bases de données
Interaction Python base de données
L’objet de TP est d’utiliser Python pour interroger une base de données et ainsi pouvoir traiter et valoriser
ces données.
Rappels et conseils :
1) La connaissance des instructions du chapitre III n’est pas exigible aux concours (mais bon dans la
perspective d’être un ingénieur productif…..). Seule une pratique de l’écriture de requête SQL (deux
premiers chapitres) et la création d’une petite base à travers une interface graphique sont les
compétences exigibles pour la partie BDD du programme. Conséquence, ayez le cours du chap III sous les
yeux si vous n’avez pas encore mémorisé les instructions.
2) Tester dans SqliteManager les requêtes que vous allez devoir écrire. Ensuite, vous les programmerez en
python dans la méthode execute d’un curseur ….
Introduction
La NOAA (National Oceanic and Atmospheric Administration) est une agence gouvernementale des EtatsUnis qui diffuse des données météorologiques relatives au territoire américain. Il s’agit de relevés
journaliers, effectués entre autres dans les aéroports. Le fichier noaa2012.sqlite (téléchargeable sur le site
de la classe) contient les données journalières pour l’année 2012. La base de données est constituée de
deux tables :
• Station qui recense les stations de relevés :
– StationId : identifiant unique `a usage interne ;
– CallSign : indicatif, unique également, en général un code d’aéroport ;
– Name : nom ;
– State : code de l’état (deux lettres) ;
– Location : emplacement, en langage naturel ;
– Latitude, Longitude : coordonnées géographiques (degrés).
• Weather qui contient un relevé journalier de température:
– StationId : identifiant de la station ;
– Date : date, sous la forme AAAAMMJJ ;
– Tmax, Tmin, Tavg : températures maximale, minimale, moyenne (degrés Celsius).
Dans la table Weather, certaines valeurs peuvent valoir NULL, pour le cas où les données météorologiques
n’ont pas été disponibles.
I . Exploitation de la masse de données
1) Ecrire une faire afficher dans une console python un tableau des températures minimales relevées à
l’aéroport John F. Kennedy de New York (indicatif JFK). Rappel avant de commencer a travailler avec
pyhton sur une base donnée de format sqlite , il y a des importations à faire et des connexions à établir ….
2) Coder pour obtenir un graphique des températures journalières minimum, maximum et moyenne à JFK
en 2012. La date est pour l’instant codée en jours de 0 à 365. Cela donne :
1
3) (Lire toute la question avant de commencer à coder). On veut à présent représenter sur l’axe des
abscisses de vraies dates et non des numéros de jours. C’est à dire obtenir le résultat suivant.
Pour cela, il va falloir que Python interprète comme une date la chaine de caractère présente dans le
champ Date de la table weather. Dans ce but, on va utiliser un module de python spécialisé dans la gestion
des dates, nommé datetime, qu’on « import as dt».
La fonction dt.datetime.strptime(chaine, descripteurdeformat) permet de réaliser la conversion que nous
souhaitons. Dans la table, la chaine de caractère représentant la date est au format AAAAMMJJ ce qui se
code en prenant comme descripteur de format la chaine de caractère ‘%Y%m%d’.
Une fois les dates récupérées, il faut dire à matplotlib que l’axe des abscisses doit recevoir des dates,
l’instruction plt.gcf().autofmt_xdate() configure l'axe des x pour recevoir des dates et les afficher en
2
diagonale. A partir delà, on peut faire comme d’habitude des plot(collectiondesdates,
collectiondestempératures). A vous de coder, pour obtenir le graphique présenté plus haut.
II Tracés de cartes à partir de la base
On propose de créer, à l’aide des données de la base, une carte des températures moyennes relevées sur
le territoire américain (Hawaï et Alaska exclus) le 15 janvier 2012.
Réfléchir à l’instruction SQL permettant de récupérer les températures moyennes pour le jour considéré.
On précise qu’exclure Hawaï et l’Alaska revient à limiter les latitudes entre 20 et 50 et les longitudes entre 66 et -127.
a) Version utilisant matplotlib
On va faire afficher les relevés de températures sous forme d’une pastille colorée dont la couleur dépend
de la température. On a donc besoin de repérer les coordonnées x et y de l’endroit où à été faite la mesure
de savoir comment on en définit la couleur.
Dans cette version simple, on prendra pour ordonnée sur la carte la latitude et pour abscisse x = λ cos (35◦)
où λ est la longitude (35° étant la latitude moyenne de l’ensemble qui nous intéresse).
La documentation matplotlib décrit l’ordre permettant d’allumer une série de points colorés, c’est :
plt.scatter(collectiondesx, collectiondesy, c= collectiondescouleurs)
ne pas oublier le c=
(Cherchez comment faire afficher une barre des couleurs ….)
Coder alors pour obtenir le graphe suivant :
b) Optionnel pour ceux qui ont installé le module de cartographie Basemap. (les autres passent)
L’idée générale est la même mais ce module, spécialisé en cartographie, gère directement les latitudes et
longitudes, plus besoin de multiplier par le cos de latitude moyenne … Explorer la documentation de
Basemap http://matplotlib.org/basemap/users/geography.html . Vous verres qu’il existe plein d’options
sympas pour faire, par exemple, apparaitre les frontières etc….
En jouant un peu, essayez d’obtenir la carte suivante
3
III. Séries chronologiques : un exemple de moyenne mobile
Quand on s’intéresse à des séries chronologiques ( c'est-à-dire des grandeurs qui varient avec le temps
comme les cours de clôture journaliers d’une action ou ici des températures journalières) il est souvent
utile de d’éliminer la variabilité de court terme pour faire apparaitre des tendances de fond (on dit qu’on
filtre les hautes fréquences).
Pour cela, on utilise une famille de méthodes appelées moyennes mobiles (on dit aussi glissantes). Dans la
suite, on se propose de programmer une moyenne mobile unilatérale d’ordre 10. Voyons ce que cela veut
dire . Au lieu de tracer Tn en fonction de daten (i.e la température à la nième date en fonction de la nième
date c’est ce que l’on a fait jusqu'à présent) on va tracer en fonction de la date la grandeur:
𝑀𝑀(𝑛) =
𝑇𝑛 + 𝑇𝑛−1 + ⋯ … 𝑇𝑛−9
10
C’est la moyenne à la date n des 10 dernières mesures (Tn incluse)
1. Ecrire une fonction moymobuni qui prend en argument une série chronologique et renvoie la série
tronquée (Pourquoi tronquée ?) correspondant à la moyenne mobile unilatérale d’ordre 10
2. En déduire le graphique des températures moyennées sur dix jours.
4
Téléchargement