Skip to content

Commit

Permalink
mise en forme data premiere
Browse files Browse the repository at this point in the history
  • Loading branch information
davy39 committed Jan 7, 2024
1 parent 50538e6 commit 16e6bd8
Show file tree
Hide file tree
Showing 60 changed files with 627 additions and 596 deletions.
6 changes: 3 additions & 3 deletions docs/data/.pages
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
title: Bigdata
title: Données
nav:
- index.md
- 1️⃣ Types construits: types_construits.md
- Introduction: index.md
- 1️⃣ Types construits: types_construits
- 1️⃣ Données en tables: tables
- 🇹 Structures de données: structure
- 🇹 Bases de données: bases_de_donnees
35 changes: 18 additions & 17 deletions docs/data/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,13 @@ Ce chapitre est une introduction au traitement et à à l'analyse des données,
Les données sont d'une importance fondamentale en informatique et plus largement en sciences. De nos données personnelles qu'il faut savoir protéger face des entreprises peu scrupuleuses qui en font le commerce, à des mesures physico-chimiques qu'il faut traiter en masse pour modéliser l'évolution du climat... des **datacenters** fonctionnent aux 4 coins du mondes pour stocker et traiter des milliards d'informations.


!!! python "Prérequis"
!!! info "Définition d'un type construit de donnée ou structures de données"
Une **donnée** représente une information ou une valeur qui est utilisée, stockée ou traitée par un programme informatique.
On a vu que les données peuvent être de différents **types de base** : tels que des booléens (`#!py bool`), des nombres entiers (`#!py int`) ou naturels (`#!py float`), des caractères (`#!py char`), du texte (`#!py string`). Elles peuvent être entrées par l'utilisateur, générées par le programme lui-même ou provenir de sources externes.
Les **données construites**, également appelées **structures de données**, sont des regroupements de plusieurs données simples ou de base, combinées pour former une entité plus complexe. Elles permettent de représenter des informations plus riches et structurées dans un programme informatique.


??? python "Prérequis Python"

* Les variables : types élémentaires (`#!py int`, `#!py str`, `#!py float`), affectations, calculs ;
* Les fonctions : utilisation et définition ;
Expand All @@ -15,23 +21,18 @@ Les données sont d'une importance fondamentale en informatique et plus largemen
* Les dictionnaires (création, parcours, lecture et modification d'éléments) ;
* Les tuples (création, parcours).

Si ces notions ne sont pas claires pour toi, finalise un parcours sur [Futur Coder](https://fr.futurecoder.io/).

!!! abstract "Plan du cours"
{% set parent_page = page.parent %}
{% set child_pages = parent_page.children if parent_page else [] %}
{% if child_pages %}
<div class="toc">
<ul>
{% for child_page in child_pages %}
{% if child_page != page %}
<li><a href="/{{ child_page.url }}">Chapitre {{ loop.index - 1 }}: {{ child_page.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
{% endif %}
Si ces notions ne sont pas claires pour toi, finalise un parcours sur [FutureCoder](https://fr.futurecoder.io/).

!!! abstract "Contenu du chapitre"
**Pour les premières**

- Rappel sur des [types construits de données](./types_construits/) que nous avons déjà croisés : [tuples](./types_construits/tuples.md), [listes](./types_construits/listes.md) et [dictionnaires](./types_construits/dictionnaires.md).
- Introduction aux [tables de données](./tables/) : lecture de [fichiers de données](./tables/csv/manipulation.md), [recherches](./tables/requetes_simples/prenoms.md) et [fusion](./tables/fusions/) de tables de données.

**Pour les terminales**

- Introduction à des [structures de données](./structure/) plus élaborées : [linéaires](./structure/lineaire.md), en [arbre](./structure/arbre.md) ou en [graphes](./structure/graphe.md)
- Introduction aux [bases de données](./bases_de_donnees/)

??? note "Crédits"
La partie sur les tables a été réalisée par N. Revéret avec l'aide des membre du groupe [e-nsi](https://e-nsi.forge.aeif.fr/), en particulier M. Coilhac et F. Chambon. Les fichiers sources sont disponibles sur ce [dépôt](https://forge.aeif.fr/nreveret/donnees_en_table).
Expand Down
1 change: 0 additions & 1 deletion docs/data/tables/.pages
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
nav:
- index.md
- Prendre un bon départ: depart
- Les fichiers: csv
- Requêtes simples: requetes_simples
- Requêtes élaborées: requetes_elaborees
Expand Down
70 changes: 34 additions & 36 deletions docs/data/tables/csv/fichiers_csv.md
Original file line number Diff line number Diff line change
@@ -1,51 +1,50 @@
---
author: Nicolas Revéret
title: Fichiers csv
---
# 📑 Les fichiers `csv` et `json`

## Découverte

Le site [data.gouv](https://www.data.gouv.fr/fr/) propose de nombreux jeux de données en libre accès.
!!! info "Fichiers de données"

Les fichiers correspondants sont souvent proposés aux formats
Le site [data.gouv](https://www.data.gouv.fr/fr/) propose de nombreux jeux de données en libre accès.

* `csv` pour _**C**omma **S**eparated **V**alues_,
* `json` pour _**J**ava**S**cript **O**bject **N**otation_.
Les fichiers correspondants sont souvent proposés aux formats

Ces deux formats de fichiers permettent de **présenter des données textuelles**. Voici par exemple les mêmes informations présentées dans chacun des formats :
* `csv` pour _**C**omma **S**eparated **V**alues_,
* `json` pour _**J**ava**S**cript **O**bject **N**otation_.

* au format `csv` (le fichier s'appelle `amis.csv`):
Ces deux formats de fichiers permettent de **présenter des données textuelles**. Voici par exemple les mêmes informations présentées dans chacun des formats :

```title="📑 Données CSV"
nom,âge,ville,passion
Jean,26,Paris,VTT
Marion,28,Lyon,badminton
```
* au format `csv` (le fichier s'appelle `amis.csv`):

* au format `json` (le fichier s'appelle `amis.json`):
```title="📑 Données CSV"
nom,âge,ville,passion
Jean,26,Paris,VTT
Marion,28,Lyon,badminton
```

```json
{ "amis": [
{"nom": "Jean","âge": 26,"ville": "Paris","passion": "VTT"},
{"nom": "Marion","âge": 28,"ville": "Lyon","passion": "badminton"},
]
}
```
* au format `json` (le fichier s'appelle `amis.json`):

Nous travaillerons désormais avec les fichiers `csv`. L'exemple précédent permet de remarquer plusieurs choses :
```json
{ "amis": [
{"nom": "Jean","âge": 26,"ville": "Paris","passion": "VTT"},
{"nom": "Marion","âge": 28,"ville": "Lyon","passion": "badminton"},
]
}
```

* un fichier `csv` contient des **données textuelles**,
!!! note "Remarques"

* les données sont organisées en lignes,
Nous travaillerons désormais avec les fichiers `csv`. L'exemple précédent permet de remarquer plusieurs choses :

* la première ligne regroupe le nom des **descripteurs** (il y en a quatre ici : `#!py nom`, `#!py âge`, `#!py ville` et `#!py passion`),
* un fichier `csv` contient des **données textuelles**,

* les autres lignes contiennent des **enregistrements** (il y en a deux ici : `#!py Jean,26,Paris,VTT` et `#!py Marion,28,Lyon,badminton`),
* les données sont organisées en lignes,

* au sein de chaque ligne, les valeurs sont délimitées par un **séparateur** (ici le caractère `#!py ","`),
* la première ligne regroupe le nom des **descripteurs** (il y en a quatre ici : `#!py nom`, `#!py âge`, `#!py ville` et `#!py passion`),

* les données peuvent être de types différents. Ici le `#!py nom`, la `#!py ville` et la `#!py passion` sont des chaînes de caractères, l'`#!py âge` un entier.
* les autres lignes contiennent des **enregistrements** (il y en a deux ici : `#!py Jean,26,Paris,VTT` et `#!py Marion,28,Lyon,badminton`),

* au sein de chaque ligne, les valeurs sont délimitées par un **séparateur** (ici le caractère `#!py ","`),

* les données peuvent être de types différents. Ici le `#!py nom`, la `#!py ville` et la `#!py passion` sont des chaînes de caractères, l'`#!py âge` un entier.

!!! danger "Attention"

Expand All @@ -57,7 +56,7 @@ Nous travaillerons désormais avec les fichiers `csv`. L'exemple précédent per

* le séparateur **n'est pas toujours une virgule**. Il est courant que l'on trouve des `#!py ";"` dans les fichiers français car la virgule est utilisée comme séparateur décimal.

??? question "Premiers contacts"
{{exercice(1, titre="Premiers contacts")}}

On considère les deux fichiers `csv` ci-dessous (on n'en donne que les trois première lignes) :

Expand Down Expand Up @@ -93,7 +92,7 @@ Nous travaillerons désormais avec les fichiers `csv`. L'exemple précédent per
- :white_check_mark: Le séparateur du fichier `bac.csv` est bien la virgule
- :x: `INT` est un type de données

??? question "Problème !"
{{exercice(titre="Problème")}}

On propose ci-dessous un extrait d'un fichier `csv`. Identifiez les trois problèmes présents :

Expand Down Expand Up @@ -142,7 +141,7 @@ On l'a dit, les fichiers `csv` et `json` sont des fichiers « texte » classique

![Création d'un fichier csv](creation_dark.gif){ width=60% .center}

??? question "« *Créer* » un fichier `csv`"
{{exercice(titre=*Créer* » un fichier `csv`")}}

On souhaite « *créer* » un fichier `csv` recensant les jours fériés en France durant l'année 2023.

Expand Down Expand Up @@ -177,8 +176,7 @@ On l'a dit, les fichiers `csv` et `json` sont des fichiers « texte » classique
{{ IDE('pythons/creation_csv/exo') }}


??? question "« *Créer* » un fichier `json`"
{{exercice(titre="« *Créer* » un fichier `json`")}}

On souhaite « *créer* » un fichier `json` recensant les jours fériés en France durant l'année 2023. Ces jours sont présentés dans le tableau ci-dessous :

Expand Down
12 changes: 4 additions & 8 deletions docs/data/tables/csv/import_dico.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
---
author: Nicolas Revéret
title: Import vers dictionnaires
---
# Import d'un fichier `csv` dans une liste de dictionnaire

## Avec le module `csv`
Expand All @@ -16,7 +12,7 @@ août,13,Pays de la Loire,19.25,25.35,22.3
août,13,Occitanie,17.51,26.55,22.03
```

??? question "Repérer les bonnes informations"
{{exercice(1, titre="Repérer les bonnes informations")}}

Observez l'extrait proposé et répondez aux questions suivantes :

Expand Down Expand Up @@ -83,7 +79,7 @@ temperatures = [

Le typage s'apparente à celui effectué dans le cas d'une liste de listes. Il est néanmoins plus simple sur un point : on peut directement utiliser le nom des descripteurs plutôt que leurs indices.

??? question "Import et typage complets"
{{exercice(titre="Import et typage complets")}}

Compléter le script ci-dessous permettant d'importer et de typer convenablement les données du fichier `temperatures_2020.csv`.

Expand Down Expand Up @@ -136,7 +132,7 @@ L'idée est la suivante :

On pourra (re)lire avec intérêt la page sur [les fichiers](1_manipulation.md)

??? question "Récupérer les noms des descripteurs"
{{exercice(titre="Récupérer les noms des descripteurs")}}

On considère un fichier `csv` dont le séparateur est le point-virgule.

Expand Down Expand Up @@ -196,7 +192,7 @@ L'idée est la suivante :
descripteurs = fichier.readline().strip().split(",")
```

??? question "Import dans une liste de dictionnaires à la main"
{{exercice(titre="Import dans une liste de dictionnaires à la main")}}

Compléter le script ci-dessous permettant d'importer les données du fichier `temperatures_2020.csv` dans une liste de dictionnaires. On n'utilisera pas le module `csv`.

Expand Down
8 changes: 2 additions & 6 deletions docs/data/tables/csv/import_listes.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
---
author: Nicolas Revéret
title: Import vers listes
---
# Import d'un fichier `csv` dans une liste de listes

On considère le fichier [temperatures_2020.csv](../temperatures_2020.csv). Ce fichier regroupe les températures minimales, maximales et moyennes dans différentes régions françaises pour certains jours de l'année 2020. Il est dans le dossier de travail et est encodé en `#!py utf-8`.
Expand All @@ -14,7 +10,7 @@ août,13,Pays de la Loire,19.25,25.35,22.3
août,13,Occitanie,17.51,26.55,22.03
```

??? question "Repérer les bonnes informations"
{{exercice(1, titre="Repérer les bonnes informations")}}

Observez l'extrait proposé et répondez aux questions suivantes :

Expand Down Expand Up @@ -83,7 +79,7 @@ for entree in temperatures:
entree[1] = int(entree[1]) # int convertit une chaîne de caractère en un entier
```

???+ question "Import et typage complets"
{{exercice(titre="Import et typage complets")}}

Compléter le script ci-dessous permettant d'importer et de typer convenablement les données du fichier `temperatures_2020.csv`.

Expand Down
101 changes: 53 additions & 48 deletions docs/data/tables/csv/manipulation.md
Original file line number Diff line number Diff line change
Expand Up @@ -118,60 +118,63 @@ La seconde permet toutefois de traiter précisément chaque ligne lue. On l'util

Nous sommes donc équipés pour ouvrir et lire nos fichiers.

???+ question "Lire les fables de la Fontaine"
{{exercice(1,titre="Lire les fables de la Fontaine")}}

Le fichier contenant les fables de la Fontaine est nommé `#!py fables.txt`, il est situé dans le même dossier que le fichier Python manipulé par l'éditeur. Il est encodé en `#!py utf-8`.

Compléter le script afin d'ouvrir ce fichier et charger ses différentes lignes dans une liste.

{{ IDE('pythons/ouverture/exo', MAX=5) }}

On obtient la liste suivante :

```python
fables = [
'FABLES DE LA FONTAINE\n',
'\n',
'I\n',
'\n',
'LA CIGALE ET LA FOURMI.\n',
'\n',
'\n',
'La cigale, ayant chanté\n',
"Tout l'été,\n",
...
]
```

Le `#!py '\n'` que l'on observe à plusieurs reprises est le caractère de retour à la ligne. On peut le supprimer en faisant `#!py ligne.strip()`. En effet, la méthode `#!py strip` supprime les caractères « blancs » au début ou à la fin d'une chaîne de caractères.

La lecture du fichier devient alors :

```python
fables = []
with open(file="fables.txt", mode="r", encoding="utf-8") as fichier:
for ligne in fichier:
ligne_propre = ligne.strip() # suppression des \n
fables.append(ligne_propre)
```

On obtient :

```python
fables = [
'FABLES DE LA FONTAINE',
'',
'I',
'',
'LA CIGALE ET LA FOURMI.',
'',
'',
'La cigale, ayant chanté',
"Tout l'été,",
...
]
```
??? question "Relire les fables de la Fontaine"
??? tip "Et ensuite ?"

On obtient la liste suivante :

```python
fables = [
'FABLES DE LA FONTAINE\n',
'\n',
'I\n',
'\n',
'LA CIGALE ET LA FOURMI.\n',
'\n',
'\n',
'La cigale, ayant chanté\n',
"Tout l'été,\n",
...
]
```

Le `#!py '\n'` que l'on observe à plusieurs reprises est le caractère de retour à la ligne. On peut le supprimer en faisant `#!py ligne.strip()`. En effet, la méthode `#!py strip` supprime les caractères « blancs » au début ou à la fin d'une chaîne de caractères.

La lecture du fichier devient alors :

```python
fables = []
with open(file="fables.txt", mode="r", encoding="utf-8") as fichier:
for ligne in fichier:
ligne_propre = ligne.strip() # suppression des \n
fables.append(ligne_propre)
```

On obtient :

```python
fables = [
'FABLES DE LA FONTAINE',
'',
'I',
'',
'LA CIGALE ET LA FOURMI.',
'',
'',
'La cigale, ayant chanté',
"Tout l'été,",
...
]
```

{{exercice(titre="Relire les fables de la Fontaine")}}

On a supprimé les caractères de retour à la ligne mais il reste désormais des lignes vides dans la liste `#!py fables`.

Expand All @@ -194,7 +197,9 @@ print(len(moutons)) # le nombre de vers

On passe le vers en minuscule avec `#!py vers.lower()` afin de trouver en une seule passe les chaînes `#!py "mouton"`, `#!py "Mouton"`, `#!py "MOUTON"`, *etc*

??? question "Requêtes dans les fables"

{{exercice(titre="Requêtes dans les fables")}}


Compléter le script ci-dessous afin d'effectuer les requêtes demandées.

Expand Down
Loading

0 comments on commit 16e6bd8

Please sign in to comment.