# Criar um conjunto de dados

Às vezes, você pode precisar criar um dataset se estiver trabalhando com seus próprios dados. Criar um dataset com 🤗 Datasets confere todas as vantagens da biblioteca ao seu dataset: carregamento e processamento rápidos, [streaming de datasets enormes](stream), [memory-mapping](https://huggingface.co/course/chapter5/4?fw=pt#the-magic-of-memory-mapping) e muito mais. Você pode criar um dataset com 🤗 Datasets de forma fácil e rápida usando abordagens de baixo código, reduzindo o tempo necessário para começar a treinar um modelo. Em muitos casos, é tão simples quanto [arrastar e soltar](upload_dataset#upload-with-the-hub-ui) seus arquivos de dados em um repositório de dataset no Hub.

Neste tutorial, você aprenderá a usar os métodos de baixo código do 🤗 Datasets para criar conjuntos de dados a partir dos seus próprios dados.

> **Nota**
>
> Se você deseja aprender a carregar conjuntos de dados existentes ou a carregar arquivos locais e remotos (CSV, JSON, Parquet, etc.), consulte o [guia de carregamento](https://huggingface.co/docs/datasets/loading).

Este tutorial aborda:

- Criadores baseados em pastas para criar rapidamente um conjunto de dados de imagem ou áudio
- métodos `from_` para criar conjuntos de dados a partir de objetos Python locais

## Criadores baseados em arquivos

🤗 O Datasets suporta muitos formatos comuns, como `csv`, `json/jsonl`, `parquet`, `txt`.

Por exemplo, ele pode ler um conjunto de dados composto por um ou vários arquivos CSV (neste caso, passe seus arquivos CSV como uma lista):

```py
>>> from datasets import load_dataset
>>> dataset = load_dataset("csv", data_files="my_file.csv")
```

Para obter a lista de formatos suportados e exemplos de código, siga este guia [aqui](https://huggingface.co/docs/datasets/loading#local-and-remote-files).

## Construtores baseados em pastas

Existem dois construtores baseados em pastas, `ImageFolder` e `AudioFolder`. Esses são métodos de baixo código para criar rapidamente um conjunto de dados de imagens ou de fala e áudio com vários milhares de exemplos. Eles são ótimos para prototipar rapidamente modelos de visão computacional e de fala antes de escalar para um conjunto de dados maior. Os construtores baseados em pastas pegam seus dados e geram automaticamente os recursos, as divisões e os rótulos do conjunto de dados. Por baixo dos panos:

- `ImageFolder` usa o recurso [Image](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Image) para decodificar um arquivo de imagem. Muitos formatos de extensão de imagem são suportados, como jpg e png, mas outros formatos também são suportados. Você pode verificar a [lista](https://github.com/huggingface/datasets/blob/b5672a956d5de864e6f5550e493527d962d6ae55/src/datasets/packaged_modules/imagefolder/imagefolder.py#L39) completa de extensões de imagem suportadas.
- `AudioFolder` usa o recurso [Audio](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Audio) para decodificar um arquivo de áudio. Extensões como wav, mp3 e até mp4 são suportadas, e você pode verificar a [lista](https://ffmpeg.org/ffmpeg-formats.html) completa de extensões de áudio suportadas. A decodificação é feita via ffmpeg.

As divisões do conjunto de dados são geradas a partir da estrutura do repositório, e os nomes dos rótulos são inferidos automaticamente a partir do nome do diretório.

Por exemplo, se o seu conjunto de dados de imagens (o mesmo vale para um conjunto de dados de áudio) estiver armazenado da seguinte forma:

```
pokemon/train/grass/bulbasaur.png
pokemon/train/fire/charmander.png
pokemon/train/water/squirtle.png

pokemon/test/grass/ivysaur.png
pokemon/test/fire/charmeleon.png
pokemon/test/water/wartortle.png
```

Então, é assim que o construtor baseado em pastas gera um exemplo:

  

Crie o conjunto de dados de imagens especificando `imagefolder` em [load_dataset()](/docs/datasets/v5.2.0/pt/package_reference/loading_methods#datasets.load_dataset):

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("imagefolder", data_dir="/path/to/pokemon")
```

Um conjunto de dados de áudio é criado da mesma forma, exceto que você especifica `audiofolder` em [load_dataset()](/docs/datasets/v5.2.0/pt/package_reference/loading_methods#datasets.load_dataset) em vez disso:

```py
>>> from datasets import load_dataset

>>> dataset = load_dataset("audiofolder", data_dir="/path/to/folder")
```

Informações adicionais sobre o seu conjunto de dados, como legendas de texto ou transcrições, podem ser incluídas com um arquivo `metadata.csv` na pasta que contém o seu conjunto de dados. O arquivo de metadados precisa ter uma coluna `file_name` que vincula o arquivo de imagem ou áudio aos seus metadados correspondentes:

```
file_name, text
bulbasaur.png, There is a plant seed on its back right from the day this Pokémon is born.
charmander.png, It has a preference for hot things.
squirtle.png, When it retracts its long neck into its shell, it squirts out water with vigorous force.
```

Para saber mais sobre cada um desses builders baseados em pastas, consulte os guias de ImageFolder, AudioFolder ou MeshFolder.

## De dicionários Python

Você também pode criar um dataset a partir de dados em dicionários Python. Existem duas maneiras de criar um dataset usando os métodos `from_`:

    * O método [from_generator()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.from_generator) é a maneira mais eficiente em termos de memória para criar um dataset a partir de um [generator](https://wiki.python.org/moin/Generators), devido ao comportamento iterativo dos generators. Isso é especialmente útil quando você está trabalhando com um dataset muito grande que pode não caber na memória, já que o dataset é gerado no disco de forma progressiva e, em seguida, mapeado na memória.

    ```py
    >>> from datasets import Dataset
    >>> def gen():
    ...     yield {"pokemon": "bulbasaur", "type": "grass"}
    ...     yield {"pokemon": "squirtle", "type": "water"}
    >>> ds = Dataset.from_generator(gen)
    >>> ds[0]
    {"pokemon": "bulbasaur", "type": "grass"}
    ```

    Um [IterableDataset](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.IterableDataset) baseado em gerador precisa ser iterado com um loop `for`, por exemplo:

    ```py
    >>> from datasets import IterableDataset
    >>> ds = IterableDataset.from_generator(gen)
    >>> for example in ds:
    ...     print(example)
    {"pokemon": "bulbasaur", "type": "grass"}
    {"pokemon": "squirtle", "type": "water"}
    ```

    * O método [from_dict()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.from_dict) é uma maneira direta de criar um dataset a partir de um dicionário:

    ```py
    >>> from datasets import Dataset
    >>> ds = Dataset.from_dict({"pokemon": ["bulbasaur", "squirtle"], "type": ["grass", "water"]})
    >>> ds[0]
    {"pokemon": "bulbasaur", "type": "grass"}
    ```

    Para criar um conjunto de dados de imagem ou áudio, encadeie o método [cast_column()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.cast_column) com [from_dict()](/docs/datasets/v5.2.0/pt/package_reference/main_classes#datasets.Dataset.from_dict) e especifique a coluna e o tipo de recurso. Por exemplo, para criar um conjunto de dados de áudio:

    ```py
    >>> audio_dataset = Dataset.from_dict({"audio": ["path/to/audio_1", ..., "path/to/audio_n"]}).cast_column("audio", Audio())
    ```

Agora que você sabe como criar um conjunto de dados, considere compartilhá-lo no Hub para que a comunidade também possa se beneficiar do seu trabalho! Vá para a próxima seção para aprender como compartilhar seu conjunto de dados.

