Exercice 6 - Données tabulaire

Open In Colab

2.6.3. Exercice 6 - Données tabulaire#

Dans la démonstration, nous vous avons montré comment extraire 5 lignes et les écrire dans un nouveau fichier CSV. Ici, nous vous fournissons des lignes de données qui encodent des observations météorologiques de surface enregistrées toutes les heures. Les données s’étendent de janvier à août.

Que faire si nous voulons extraire les données de janvier, février et mars et les enregistrer dans des fichiers plus petits séparés par mois ?

Nous vous proposons ici quelques fonctions permettant d’extraire les indices de la première et de la dernière instance des données d’un mois donné dans les données tabulaires. Il n’est pas nécessaire de modifier quoi que ce soit dans ces fonctions ; dans cet exercice, vous devez simplement enregistrer les fichiers mensuels sur la base des indices de sortie.

heaven-3176544_640.jpg

Image par Tobias Hämmer de Pixabay

pip install pooch
Collecting pooch
  Downloading pooch-1.8.2-py3-none-any.whl.metadata (10 kB)
Requirement already satisfied: platformdirs>=2.5.0 in /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages (from pooch) (4.3.6)
Requirement already satisfied: packaging>=20.0 in /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages (from pooch) (24.1)
Requirement already satisfied: requests>=2.19.0 in /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages (from pooch) (2.32.3)
Requirement already satisfied: charset-normalizer<4,>=2 in /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages (from requests>=2.19.0->pooch) (3.4.0)
Requirement already satisfied: idna<4,>=2.5 in /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages (from requests>=2.19.0->pooch) (3.10)
Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages (from requests>=2.19.0->pooch) (2.2.3)
Requirement already satisfied: certifi>=2017.4.17 in /opt/hostedtoolcache/Python/3.11.10/x64/lib/python3.11/site-packages (from requests>=2.19.0->pooch) (2024.8.30)
Downloading pooch-1.8.2-py3-none-any.whl (64 kB)
Installing collected packages: pooch
Successfully installed pooch-1.8.2
Note: you may need to restart the kernel to use updated packages.
import csv
import pandas as pd
import numpy as np
import pooch
import urllib.request
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[2], line 2
      1 import csv
----> 2 import pandas as pd
      3 import numpy as np
      4 import pooch

ModuleNotFoundError: No module named 'pandas'
#url = 'https://unils-my.sharepoint.com/:x:/g/personal/tom_beucler_unil_ch/ETDZdgCkWbZLiv_LP6HKCOAB2NP7H0tUTLlP_stknqQHGw?e=2lFo1x'

datafile = pooch.retrieve('https://unils-my.sharepoint.com/:x:/g/personal/tom_beucler_unil_ch/ETDZdgCkWbZLiv_LP6HKCOAB2NP7H0tUTLlP_stknqQHGw?download=1',
                          known_hash='c7676360997870d00a0da139c80fb1b6d26e1f96050e03f2fed75b921beb4771')
Downloading data from 'https://unils-my.sharepoint.com/:x:/g/personal/tom_beucler_unil_ch/ETDZdgCkWbZLiv_LP6HKCOAB2NP7H0tUTLlP_stknqQHGw?download=1' to file '/Users/shakidi/Library/Caches/pooch/489ae79e8d80d9513daa4dc2e77ba99c-ETDZdgCkWbZLiv_LP6HKCOAB2NP7H0tUTLlP_stknqQHGw'.

weather-station-2373839_640.jpg

Image par Erich Westendarp de Pixabay

Complétez le code ci-dessous avec le nom de fichier approprié :

row = [] # Initialise ligne à une liste vide
with open(___________, 'r') as fh:
  reader = csv.reader(fh)
  for info in reader:
    row.append(info)

Vous pouvez simplement exécuter les deux cellules suivantes :

def output_monthindices(month=None) :
  """
  Cette fonction prend une chaîne de caractères "month" en entrée (par exemple, January)
  et produit les premier et dernier indices de ce mois
  """
  test = [rowobj[1].split(' ')[0].split('-')[1] for rowobj in row[1:]]
  truefalse = []
  for obj in test :
    if obj==month :
      truefalse.append(obj)
    else :
      truefalse.append(np.nan)
  return pd.Series(truefalse).first_valid_index(),pd.Series(truefalse).last_valid_index()
# Ici, nous produisons le premier et le dernier indice de Jan/Feb/Mar
Jan_index = output_monthindices(month='01')
Feb_index = output_monthindices(month='02')
Mar_index = output_monthindices(month='03')

Ici, nous allons extraire des portions de la liste row (la ligne) avec les valeurs d’index mensuelles que nous avons.

Ecrivons ces extraits dans trois nouveaux fichiers : jan.csv, feb.csv, mar.csv en utilisant une boucle.

savefile = [_,_,_] # Liste contenant les noms de fichiers
indices = [Jan_index, Feb_index, Mar_index]
for i in range(_):
  with open(__, 'w') as fh:
    writer = csv.writer(fh)
    for ____ in range(indices[_][0],indices[_][1]):
      writer.writerow(row[____])
#@title réponse
savefile = ['jan.csv','feb.csv','mar.csv']
indices = [Jan_index, Feb_index, Mar_index]
for i in range(3):
  with open(savefile[i], 'w') as fh:
    writer = csv.writer(fh)
    for num in range(indices[i][0],indices[i][1]):
      writer.writerow(row[num])

Vérifions que nous avons bien écrit nos données météorologiques dans le fichier approprié. Il suffit d’exécuter la cellule ci-dessous pour vérifier 😃

#@title Imprimons les dates du mois de mars
df = pd.read_csv(savefile[2]) # Lit le fichier en utilisant pandas
df.head(3) # Imprime les trois premières lignes du fichier

Félicitations ! Vous venez de terminer quelques tâches de programmation avec Python ! Vous êtes enthousiaste ? Ne vous arrêtez pas en si bon chemin, nous avons d’autres exercices pour vous dans la section suivante ! Notre prochain exercice portera sur notre système solaire ! 🪐