Hub documentation
Modifier des jeux de données
Modifier des jeux de données
Le Hub permet la curation collaborative de jeux de données communautaires et de recherche. Nous vous encourageons à explorer les jeux de données disponibles sur le Hub et à contribuer à leur amélioration afin d’aider à faire grandir la communauté du ML et d’accélérer les progrès pour tous. Toutes les contributions sont les bienvenues !
Commencez par créer un compte Hugging Face Hub si vous n’en avez pas encore.
Modifier via l'interface utilisateur du Hub
Cette fonctionnalité n'est pour l'instant disponible que pour les jeux de données CSV, TSV et Parquet.
L’interface web du Hub permet aux utilisateurs sans aucune expertise technique de modifier un jeu de données.
Ouvrez la page du jeu de données et accédez à l’onglet Data Studio pour commencer à modifier.

Cliquez sur Basculer en mode édition pour activer l'édition du jeu de données.


Modifiez autant de cellules que vous le souhaitez, puis cliquez sur Commit pour valider vos modifications et laisser un message de commit.


Utilisation de la bibliothèque client huggingface_hub
La bibliothèque huggingface_hub peut gérer les dépôts du Hub, y compris l'édition des jeux de données.
Par exemple, voici comment modifier un fichier CSV à l'aide de l'API FileSystem de Hugging Face :
from huggingface_hub import hffs
path = f"datasets/{repo_id}/data.csv"
with hffs.open(path, "r") as f:
content = f.read()
edited_content = content.replace("foo", "bar")
with hffs.open(path, "w") as f:
f.write(edited_content)Vous pouvez également appliquer la modification localement sur votre disque et engager les changements :
from huggingface_hub import hf_hub_download, upload_file
local_path = hf_hub_download(repo_id=repo_id, path_in_repo= "data.csv", repo_type="dataset")
with open(path, "r") as f:
content = f.read()
edited_content = content.replace("foo", "bar")
with open(path, "w") as f:
f.write(edited_content)
upload_file(repo_id=repo_id, path_in_repo=local_path, repo_type="dataset")Pour disposer localement de l’intégralité du dépôt de jeu de données et modifier de nombreux fichiers à la fois, utilisez
snapshot_downloadetupload_folderplutôt quehf_hub_downloadetupload_file
Consultez la documentation de la bibliothèque client pour en savoir plus.
Bibliothèques intégrées
Si un jeu de données sur le Hub est compatible avec une bibliothèque prise en charge, le chargement, l'édition et la publication du jeu de données ne nécessitent que quelques lignes de code.
Voici comment modifier un fichier CSV avec Pandas :
import pandas as pd
# Load the dataset
df = pd.read_csv(f"hf://datasets/{repo_id}/data.csv")
# Edit
df = df.apply(...)
# Commit the changes
df.to_csv(f"hf://datasets/{repo_id}/data.csv")Des bibliothèques comme Polars et DuckDB implémentent également le protocole hf:// pour lire, modifier et écrire des fichiers sur Hugging Face. D'autres bibliothèques sont utiles pour modifier des jeux de données composés de nombreux fichiers, comme Spark, Dask ou 🤗 Datasets. Consultez la liste complète des bibliothèques prises en charge ici
Pour des informations sur l’accès au jeu de données sur le site web, vous pouvez cliquer sur le bouton « Utiliser ce jeu de données » sur la page du jeu de données pour voir comment procéder.
Par exemple, samsum montre comment faire avec 🤗 Datasets ci-dessous.


N'enregistrez que les nouvelles données
Le stockage de Hugging Face est propulsé par Xet, qui utilise la déduplication de blocs pour rendre les téléversements plus efficaces. Contrairement au stockage cloud traditionnel, Xet n’exige pas de re-téléverser l’ensemble du jeu de données pour valider des modifications. Il détecte automatiquement quelles parties du jeu de données ont changé et indique à la bibliothèque client de ne téléverser que les parties mises à jour. Pour ce faire, Xet utilise un algorithme intelligent pour trouver des blocs de 64 Ko qui existent déjà sur Hugging Face.
Voyons notre exemple précédent avec Pandas :
import pandas as pd
# Load the dataset
df = pd.read_csv(f"hf://datasets/{repo_id}/data.csv")
# Edit part of the dataset
df = df.apply(...)
# Commit the changes
df.to_csv(f"hf://datasets/{repo_id}/data.csv")Ce code charge d’abord un jeu de données, puis le modifie.
Une fois les modifications effectuées, to_csv() matérialise le fichier en mémoire, le découpe en blocs, interroge Xet pour savoir quels blocs sont déjà sur Hugging Face et quels blocs ont changé, puis ne téléverse que les nouvelles données.
Édition Parquet optimisée
La quantité de données à téléverser dépend des modifications et de la structure des fichiers.
Le format Parquet est organisé par colonnes et compressé au niveau des pages (les pages font environ ~1 Mo). Nous avons optimisé Parquet pour Xet grâce au Parquet Content Defined Chunking, qui garantit que les données inchangées produisent généralement des pages inchangées.
Par exemple, ce code téléverse le contenu de df, puis pour edited_df, le téléversement est plus rapide car il ne téléverse que les blocs modifiés :
import pandas as pd
df.to_parquet(
"hf://datasets/username/my_dataset/imdb.parquet",
# Optimize for Xet
use_content_defined_chunking=True,
write_page_index=True,
)
edited_df = ... # e.g. with added/modified/removed rows or columns
edited_df.to_parquet(
"hf://datasets/username/my_dataset/imdb.parquet",
# Optimize for Xet
use_content_defined_chunking=True,
write_page_index=True,
)Les blocs font environ 64 Ko et Parquet enregistre les données colonne par colonne, donc en pratique, voici ce qui se produit lors de l'édition d'un fichier Parquet optimisé :
- ajouter une nouvelle colonne -> seuls les fragments de la nouvelle colonne sont téléversés
- ajouter/modifier/supprimer une ligne -> un chunk par colonne est téléversé
En plus de cela, les blocs du pied de page Parquet contenant les métadonnées sont également téléversés.
Vérifiez si votre bibliothèque prend en charge Optimized Parquet sur la page bibliothèques prises en charge.
Streaming
Pour les grands jeux de données, il est recommandé d’utiliser des bibliothèques offrant des fonctionnalités de streaming de jeux de données pour des pipelines de streaming de bout en bout. Dans ce cas, le traitement du jeu de données s’effectue de manière progressive au fur et à mesure que les anciennes données arrivent et que les nouvelles données sont téléversées sur le Hub.
Vérifiez si votre bibliothèque prend en charge le streaming sur la page bibliothèques prises en charge.
Update on GitHub