# Connaître votre jeu de données

Il existe deux types d’objets de jeu de données : le [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset) classique et le ✨ [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset) ✨. Un [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset) offre un accès aléatoire rapide aux lignes et un mappage mémoire, de sorte que le chargement de jeux de données volumineux n’utilise qu’une quantité relativement faible de mémoire sur l’appareil. Mais pour les jeux de données vraiment, vraiment énormes qui ne tiennent même pas sur le disque ou en mémoire, un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset) permet d’accéder au jeu de données et de l’utiliser sans attendre qu’il soit entièrement téléchargé !

Ce tutoriel vous montre comment charger et accéder à un [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset) et à un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset).

## Jeu de données

Lorsque vous chargez une partie d'un jeu de données, vous obtenez un objet [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset). Vous pouvez effectuer de nombreuses opérations avec un objet [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset), c'est pourquoi il est important d'apprendre à manipuler et à interagir avec les données qu'il contient.
 
Ce tutoriel utilise le jeu de données [rotten_tomatoes](https://huggingface.co/datasets/rotten_tomatoes), mais n'hésitez pas à charger le jeu de données de votre choix et à suivre le guide !

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("cornell-movie-review-data/rotten_tomatoes", split="train")
```

### Indexation

Un [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset) contient des colonnes de données, et chaque colonne peut être de type différent. L'*index*, ou étiquette d'axe, est utilisé pour accéder aux exemples du jeu de données. Par exemple, l'indexation par ligne renvoie un dictionnaire contenant un exemple du jeu de données :

```py
# Get the first row in the dataset
>>> dataset[0]
{'label': 1,
 'text': 'the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .'}
```

Utilisez l'opérateur `-` pour commencer à partir de la fin du jeu de données :

```py
# Get the last row in the dataset
>>> dataset[-1]
{'label': 0,
 'text': 'things really get weird , though not particularly scary : the movie is all portent and no content .'}
```

L'indexation par le nom de la colonne renvoie une liste de toutes les valeurs de la colonne :

```py
>>> dataset["text"]
['the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .',
 'the gorgeously elaborate continuation of " the lord of the rings " trilogy is so huge that a column of words cannot adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .',
 'effective but too-tepid biopic',
 ...,
 'things really get weird , though not particularly scary : the movie is all portent and no content .']
```

Vous pouvez combiner l’indexation par nom de ligne et par nom de colonne pour retourner une valeur spécifique à une position donnée :

```py
>>> dataset[0]["text"]
'the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .'
```

L'ordre d'indexation n'a pas d'importance. L'indexation par le nom de la colonne renvoie d'abord un objet [Column](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Column) que vous pouvez indexer comme d'habitude avec des indices de ligne :

```py
>>> import time

>>> start_time = time.time()
>>> text = dataset[0]["text"]
>>> end_time = time.time()
>>> print(f"Elapsed time: {end_time - start_time:.4f} seconds")
Elapsed time: 0.0031 seconds

>>> start_time = time.time()
>>> text = dataset["text"][0]
>>> end_time = time.time()
>>> print(f"Elapsed time: {end_time - start_time:.4f} seconds")
Elapsed time: 0.0042 seconds
```

### Découpage

La découpe renvoie une tranche, ou sous-ensemble, du jeu de données, ce qui est utile pour afficher plusieurs lignes à la fois. Pour découper un jeu de données, utilisez l'opérateur `:` pour spécifier une plage de positions.

```py
# Get the first three rows
>>> dataset[:3]
{'label': [1, 1, 1],
 'text': ['the rock is destined to be the 21st century\'s new " conan " and that he\'s going to make a splash even greater than arnold schwarzenegger , jean-claud van damme or steven segal .',
  'the gorgeously elaborate continuation of " the lord of the rings " trilogy is so huge that a column of words cannot adequately describe co-writer/director peter jackson\'s expanded vision of j . r . r . tolkien\'s middle-earth .',
  'effective but too-tepid biopic']}

# Get rows between three and six
>>> dataset[3:6]
{'label': [1, 1, 1],
 'text': ['if you sometimes like to go to the movies to have fun , wasabi is a good place to start .',
  "emerges as something rare , an issue movie that's so honest and keenly observed that it doesn't feel like one .",
  'the film provides some great insight into the neurotic mindset of all comics -- even those who have reached the absolute top of the game .']}
```

## IterableDataset

Un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset) est chargé lorsque vous définissez le paramètre `streaming` sur `True` dans [load_dataset()](/docs/datasets/v5.2.0/fr/package_reference/loading_methods#datasets.load_dataset) :

```py
>>> from datasets import load_dataset

>>> iterable_dataset = load_dataset("ethz/food101", split="train", streaming=True)
>>> for example in iterable_dataset:
...     print(example)
...     break
{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F0681F5C520>, 'label': 6}
```

Vous pouvez également créer un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset) à partir d'un [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset) *existant*, mais c'est plus rapide que le mode streaming car le jeu de données est diffusé depuis des fichiers locaux :

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("cornell-movie-review-data/rotten_tomatoes", split="train")
>>> iterable_dataset = dataset.to_iterable_dataset()
```

Un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset) itère progressivement sur un jeu de données, un exemple à la fois, ce qui vous évite d'attendre le téléchargement complet du jeu de données avant de pouvoir l'utiliser. Comme vous pouvez l'imaginer, c'est très pratique pour les grands jeux de données que vous souhaitez utiliser immédiatement !

### Indexation

Le comportement d'un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset) diffère de celui d'un [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset) classique. Vous n'avez pas accès aléatoire aux exemples d'un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset). À la place, vous devez itérer sur ses éléments, par exemple en appelant `next(iter())` ou avec une boucle `for` pour récupérer l'élément suivant du [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset) :

```py
>>> next(iter(iterable_dataset))
{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F0681F59B50>,
 'label': 6}

>>> for example in iterable_dataset:
...     print(example)
...     break
{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F7479DE82B0>, 'label': 6}
```

Mais un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset) prend en charge l’indexation par colonne, qui renvoie un itérable pour les valeurs de la colonne :

```py
>>> next(iter(iterable_dataset["label"]))
6
```

### Créer un sous-ensemble

Vous pouvez retourner un sous-ensemble du jeu de données contenant un nombre spécifique d'exemples avec [IterableDataset.take()](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset.take) :

```py
# Get first three examples
>>> list(iterable_dataset.take(3))
[{'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=384x512 at 0x7F7479DEE9D0>,
  'label': 6},
 {'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x512 at 0x7F7479DE8190>,
  'label': 6},
 {'image': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x383 at 0x7F7479DE8310>,
  'label': 6}]
```

Mais contrairement au [tranchage](access/#slicing), [IterableDataset.take()](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset.take) crée un nouvel [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset).

## Étapes suivantes

Envie d'en savoir plus sur les différences entre ces deux types de jeux de données ? Découvrez-les dans le guide conceptuel [Différences entre `Dataset` et `IterableDataset`](about_mapstyle_vs_iterable).

Pour approfondir ces types de jeux de données, consultez le guide [Process](process) pour apprendre à prétraiter un [Dataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.Dataset) ou le guide [Stream](stream) pour apprendre à prétraiter un [IterableDataset](/docs/datasets/v5.2.0/fr/package_reference/main_classes#datasets.IterableDataset).

