Échantillon aléatoire de lignes CSV avec graine reproductible
Cet outil sélectionne un nombre exact d’enregistrements CSV sans remise tout en conservant l’en-tête d’origine.
Lancer gratuitement
Fournissez le texte CSV, la taille souhaitée et une graine entière : les trois mêmes entrées produisent toujours le même CSV échantillonné. Il convient particulièrement aux revues, tests, démonstrations et audits qui exigent un jeu de données réduit que vos collaborateurs peuvent recréer à l’identique.
Créez un sous-ensemble aléatoire que chacun peut reproduire
Un tirage aléatoire ordinaire devient gênant dès qu’une autre personne doit le répéter. Un tableur peut choisir de nouveaux enregistrements lors d’un recalcul, tandis qu’un script non documenté laisse planer un doute sur les changements entre deux exécutions. Cet outil intègre la graine aux données d’entrée, avec le texte CSV et la taille demandée. Des entrées identiques donnent donc exactement les mêmes enregistrements, ce qui convient aux expériences versionnées, aux comptes rendus de revue et aux contrôles qualité reproductibles. Le premier enregistrement CSV est toujours considéré comme l’en-tête et reste présent. Seuls les enregistrements suivants participent au tirage, et chacun ne peut apparaître qu’une fois. Les lignes retenues conservent leur ordre relatif d’origine, ce qui facilite la comparaison du fichier réduit avec sa source. Les champs entre guillemets peuvent contenir des virgules, des guillemets échappés ou des sauts de ligne sans être aplatis ni reconstruits.
Choisissez avec soin la taille et la graine
Renseignez sample_size avec le nombre exact d’enregistrements de données requis. La valeur zéro est acceptée et renvoie uniquement l’en-tête, ce qui permet de produire un jeu d’essai vide tout en conservant le schéma. La taille ne peut pas dépasser le nombre d’enregistrements disponibles, car le tirage se fait sans remise : demander davantage de lignes distinctes qu’il n’en existe serait impossible. La requête renvoie alors une erreur de saisie explicite au lieu de dupliquer des lignes ou de réduire silencieusement la taille. seed doit être un entier sûr. Ce n’est pas un secret de sécurité et elle n’a pas besoin d’être imprévisible ; elle sert à désigner une sélection reproductible. Une équipe peut la tirer d’un numéro d’expérience, de scénario de test ou de cycle de revue et la conserver avec le résultat. Modifier uniquement la graine produit généralement un autre sous-ensemble ; rétablir l’ancienne restaure l’ancienne sélection. Conservez le CSV source inchangé si la reproductibilité est indispensable.
Employez le CSV échantillonné à bon escient
Un sous-ensemble aléatoire facilite une inspection rapide, un test de bon fonctionnement d’un pipeline, une démonstration ou la diffusion de jeux d’essai maniables, mais il n’est pas automatiquement représentatif sur le plan statistique. Des catégories rares peuvent manquer par hasard, surtout lorsque l’échantillon demandé est petit. Si chaque catégorie doit apparaître, préférez une méthode stratifiée plutôt que de considérer un tirage libre comme une garantie. Cette capacité n’effectue aucun appel réseau, enrichissement, changement de type, conversion de séparateur ni nettoyage. Elle conserve les enregistrements CSV retenus et les place sous l’en-tête original, sans reformater les dates ni normaliser les nombres. Les enregistrements multilignes entre guillemets restent intacts. Les lignes physiques vides sous l’en-tête comptent également, car les supprimer modifierait la population fournie. Pour un flux automatisé, archivez la graine, la taille et une copie stable ou l’empreinte de la source. Une requête API coûte $0.002 ; le navigateur exécute localement le même calcul.
Cas d’usage
Créer des jeux d’essai reproductibles
Prélevez un petit sous-ensemble CSV pour vos tests d’intégration et conservez la graine afin de reproduire les échecs.
Partager un fichier facile à examiner
Transmettez moins d’enregistrements tout en gardant l’en-tête, le format brut et une méthode de sélection reproductible.
Comparer des exécutions expérimentales
Soumettez les mêmes lignes à plusieurs transformations ou modèles afin que les entrées ne faussent pas la comparaison.
Questions fréquentes
Une même ligne peut-elle être tirée deux fois ?
Non. Le tirage s’effectue sans remise ; chaque enregistrement retenu occupe donc une position source distincte.
Le résultat conserve-t-il l’en-tête CSV ?
Oui. Le premier enregistrement reste l’en-tête et le tirage concerne uniquement les enregistrements suivants.
Pourquoi le résultat est-il déterministe ?
La graine entière initialise un algorithme pseudo-aléatoire fixe. Le même CSV, la même taille et la même graine donnent le même résultat.
Que se passe-t-il si l’échantillon dépasse le CSV ?
La requête échoue avec une erreur de saisie, car un échantillon distinct supérieur à la population est impossible sans remise.
Les champs entre guillemets ou multilignes sont-ils acceptés ?
Oui. Les virgules protégées, les guillemets doubles échappés et les sauts de ligne dans un champ protégé sont reconnus.
Combien coûte une requête API ?
Chaque requête API coûte $0.002. La version pour navigateur effectue localement le même calcul pur.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/data/random-sample-rows \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"csv":"id,name,team\n1,Ada,Blue\n2,Grace,Red\n3,Linus,Blue\n4,Margaret,Green\n5,Donald,Red","sample_size":3,"seed":42}'const res = await fetch("https://api.kit.forhosting.com/data/random-sample-rows", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"csv": "id,name,team\n1,Ada,Blue\n2,Grace,Red\n3,Linus,Blue\n4,Margaret,Green\n5,Donald,Red",
"sample_size": 3,
"seed": 42
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/random-sample-rows",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"csv": "id,name,team\n1,Ada,Blue\n2,Grace,Red\n3,Linus,Blue\n4,Margaret,Green\n5,Donald,Red",
"sample_size": 3,
"seed": 42
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/random-sample-rows", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"csv":"id,name,team\\n1,Ada,Blue\\n2,Grace,Red\\n3,Linus,Blue\\n4,Margaret,Green\\n5,Donald,Red","sample_size":3,"seed":42}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"csv":"id,name,team\n1,Ada,Blue\n2,Grace,Red\n3,Linus,Blue\n4,Margaret,Green\n5,Donald,Red","sample_size":3,"seed":42}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/random-sample-rows", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"csv": "id,name,team\n1,Ada,Blue\n2,Grace,Red\n3,Linus,Blue\n4,Margaret,Green\n5,Donald,Red",
"sample_size": 3,
"seed": 42
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.random_sample_rows",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_mb | 25 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |