{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"colab_type": "text",
"id": "view-in-github"
},
"source": [
"
"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "gpCmZoJqpTpd"
},
"source": [
"# Exercice 6 - Données tabulaire"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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.\n",
"\n",
"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 ?\n",
"\n",
"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."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Image par Tobias Hämmer de Pixabay"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Collecting pooch\n",
" Obtaining dependency information for pooch from https://files.pythonhosted.org/packages/1a/a5/5174dac3957ac412e80a00f30b6507031fcab7000afc9ea0ac413bddcff2/pooch-1.8.0-py3-none-any.whl.metadata\n",
" Downloading pooch-1.8.0-py3-none-any.whl.metadata (9.9 kB)\n",
"Requirement already satisfied: platformdirs>=2.5.0 in /Users/shakidi/opt/anaconda3/envs/imports_TM/lib/python3.9/site-packages (from pooch) (3.11.0)\n",
"Requirement already satisfied: packaging>=20.0 in /Users/shakidi/opt/anaconda3/envs/imports_TM/lib/python3.9/site-packages (from pooch) (23.2)\n",
"Requirement already satisfied: requests>=2.19.0 in /Users/shakidi/opt/anaconda3/envs/imports_TM/lib/python3.9/site-packages (from pooch) (2.31.0)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /Users/shakidi/opt/anaconda3/envs/imports_TM/lib/python3.9/site-packages (from requests>=2.19.0->pooch) (3.3.1)\n",
"Requirement already satisfied: idna<4,>=2.5 in /Users/shakidi/opt/anaconda3/envs/imports_TM/lib/python3.9/site-packages (from requests>=2.19.0->pooch) (3.4)\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/shakidi/opt/anaconda3/envs/imports_TM/lib/python3.9/site-packages (from requests>=2.19.0->pooch) (2.0.7)\n",
"Requirement already satisfied: certifi>=2017.4.17 in /Users/shakidi/opt/anaconda3/envs/imports_TM/lib/python3.9/site-packages (from requests>=2.19.0->pooch) (2023.7.22)\n",
"Downloading pooch-1.8.0-py3-none-any.whl (62 kB)\n",
"\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.7/62.7 kB\u001b[0m \u001b[31m749.7 kB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n",
"\u001b[?25hInstalling collected packages: pooch\n",
"Successfully installed pooch-1.8.0\n",
"Note: you may need to restart the kernel to use updated packages.\n"
]
}
],
"source": [
"pip install pooch"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import csv\n",
"import pandas as pd\n",
"import numpy as np\n",
"import pooch\n",
"import urllib.request"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"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'.\n"
]
}
],
"source": [
"#url = 'https://unils-my.sharepoint.com/:x:/g/personal/tom_beucler_unil_ch/ETDZdgCkWbZLiv_LP6HKCOAB2NP7H0tUTLlP_stknqQHGw?e=2lFo1x'\n",
"\n",
"datafile = pooch.retrieve('https://unils-my.sharepoint.com/:x:/g/personal/tom_beucler_unil_ch/ETDZdgCkWbZLiv_LP6HKCOAB2NP7H0tUTLlP_stknqQHGw?download=1',\n",
" known_hash='c7676360997870d00a0da139c80fb1b6d26e1f96050e03f2fed75b921beb4771')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Image par Erich Westendarp de Pixabay"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Complétez le code ci-dessous avec le nom de fichier approprié :"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"row = [] # Initialise ligne à une liste vide\n",
"with open(___________, 'r') as fh:\n",
" reader = csv.reader(fh)\n",
" for info in reader:\n",
" row.append(info)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vous pouvez simplement exécuter les deux cellules suivantes :"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"def output_monthindices(month=None) :\n",
" \"\"\"\n",
" Cette fonction prend une chaîne de caractères \"month\" en entrée (par exemple, January)\n",
" et produit les premier et dernier indices de ce mois\n",
" \"\"\"\n",
" test = [rowobj[1].split(' ')[0].split('-')[1] for rowobj in row[1:]]\n",
" truefalse = []\n",
" for obj in test :\n",
" if obj==month :\n",
" truefalse.append(obj)\n",
" else :\n",
" truefalse.append(np.nan)\n",
" return pd.Series(truefalse).first_valid_index(),pd.Series(truefalse).last_valid_index()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# Ici, nous produisons le premier et le dernier indice de Jan/Feb/Mar\n",
"Jan_index = output_monthindices(month='01')\n",
"Feb_index = output_monthindices(month='02')\n",
"Mar_index = output_monthindices(month='03')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ici, nous allons extraire des portions de la liste `row` (la ligne) avec les valeurs d'index mensuelles que nous avons.\n",
"\n",
"Ecrivons ces extraits dans trois nouveaux fichiers : `jan.csv`, `feb.csv`, `mar.csv` en utilisant une boucle."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"savefile = [_,_,_] # Liste contenant les noms de fichiers\n",
"indices = [Jan_index, Feb_index, Mar_index]\n",
"for i in range(_):\n",
" with open(__, 'w') as fh:\n",
" writer = csv.writer(fh)\n",
" for ____ in range(indices[_][0],indices[_][1]):\n",
" writer.writerow(row[____])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#@title réponse\n",
"savefile = ['jan.csv','feb.csv','mar.csv']\n",
"indices = [Jan_index, Feb_index, Mar_index]\n",
"for i in range(3):\n",
" with open(savefile[i], 'w') as fh:\n",
" writer = csv.writer(fh)\n",
" for num in range(indices[i][0],indices[i][1]):\n",
" writer.writerow(row[num])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"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 😃"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#@title Imprimons les dates du mois de mars\n",
"df = pd.read_csv(savefile[2]) # Lit le fichier en utilisant pandas\n",
"df.head(3) # Imprime les trois premières lignes du fichier"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Félicitations ! Vous venez de terminer quelques tâches de programmation avec Python !\n",
"Vous êtes enthousiaste ? Ne vous arrêtez pas en si bon chemin, nous avons d'autres exercices pour vous dans la section suivante !\n",
"Notre prochain exercice portera sur notre système solaire ! 🪐"
]
}
],
"metadata": {
"colab": {
"include_colab_link": true,
"provenance": []
},
"kernelspec": {
"display_name": "imports_TM",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.18"
}
},
"nbformat": 4,
"nbformat_minor": 0
}