Campione casuale di righe CSV con seme riproducibile
Questo strumento seleziona un numero esatto di record CSV senza reinserimento e mantiene l’intestazione originale.
Esegui gratis nel browser
Fornisca il testo CSV, la dimensione del campione e un seme intero: le stesse tre informazioni generano sempre lo stesso CSV campionato. È particolarmente utile quando revisioni, test, dimostrazioni o verifiche richiedono un insieme più piccolo che i Suoi collaboratori possano ricreare con precisione.
Crei un sottoinsieme casuale riproducibile da chiunque
Un normale campionamento casuale diventa scomodo quando un’altra persona deve ripeterlo. Un foglio di calcolo può scegliere record diversi dopo un ricalcolo, mentre uno script non documentato può lasciare dubbi su eventuali cambiamenti tra due esecuzioni. Questo strumento include il seme nell’input insieme al testo CSV e alla dimensione richiesta. Input identici producono quindi esattamente gli stessi record, una proprietà adatta a esperimenti versionati, note di revisione e controlli di qualità ripetibili. Il primo record CSV viene sempre interpretato come intestazione e viene conservato. Il campionamento riguarda soltanto i record successivi e ogni record può comparire al massimo una volta. Le righe restituite mantengono il loro ordine relativo originale, rendendo più semplice il confronto tra il file ridotto e la fonte. I campi racchiusi tra virgolette possono contenere virgole, virgolette con escape o interruzioni di riga; i confini dei record vengono riconosciuti senza appiattire o ricostruire il contenuto.
Scelga con attenzione dimensione e seme
Imposti sample_size sul numero esatto di record di dati richiesto. Il valore zero è valido e restituisce soltanto l’intestazione, utile per creare una fixture vuota che conservi comunque lo schema. La dimensione non può superare il numero di record disponibili, perché la selezione avviene senza reinserimento: chiedere più righe distinte di quante ne esistano renderebbe impossibile il risultato. In quel caso la richiesta restituisce un chiaro errore di input, senza duplicare record o diminuire silenziosamente la quantità. seed deve essere un intero sicuro. Non è un segreto e non deve essere imprevedibile; serve a identificare una selezione riproducibile. Un team può ricavarlo dal numero di un esperimento, di un caso di test o di un ciclo di revisione e conservarlo con il risultato. Modificando solo il seme si ottiene normalmente un altro sottoinsieme; ripristinando quello precedente si recupera la selezione precedente. Mantenga invariato il CSV sorgente quando la riproducibilità è importante.
Usi responsabilmente il CSV campionato nei test
Un sottoinsieme casuale è utile per controlli rapidi, smoke test di pipeline, dimostrazioni e distribuzione di fixture gestibili, ma non diventa automaticamente rappresentativo dal punto di vista statistico. Le categorie rare possono mancare per caso, soprattutto quando il campione richiesto è piccolo. Se ogni categoria deve comparire, adotti un processo stratificato invece di considerare garantita una selezione casuale senza vincoli. Questa capacità non esegue chiamate di rete, arricchimenti, conversioni di tipo, cambi di delimitatore o pulizia. Conserva i record CSV selezionati e li unisce sotto l’intestazione originale, evitando sorprese come date riscritte o numeri normalizzati. Anche i record multilinea tra virgolette rimangono intatti. Le righe fisiche vuote sotto l’intestazione vengono conteggiate, poiché eliminarle modificherebbe la popolazione fornita. Nei flussi automatici conservi il seme, la dimensione e una copia stabile o l’impronta della fonte. Ogni richiesta API costa $0.002; nel browser lo stesso calcolo viene eseguito localmente.
Casi d'uso
Creare fixture di test ripetibili
Selezioni un sottoinsieme CSV compatto per i test di integrazione e conservi il seme per riprodurre eventuali errori.
Condividere un file facile da revisionare
Fornisca meno record conservando intestazione, formato originale e metodo di selezione riproducibile.
Confrontare esecuzioni sperimentali
Usi le stesse righe con trasformazioni o modelli alternativi affinché l’input non alteri il confronto.
Domande frequenti
La stessa riga può essere selezionata due volte?
No. Il campionamento avviene senza reinserimento, quindi ogni record selezionato ha una posizione sorgente distinta.
L’output mantiene l’intestazione CSV?
Sì. Il primo record viene conservato come intestazione e il campionamento riguarda soltanto quelli successivi.
Che cosa rende deterministico il risultato?
Il seme intero inizializza un algoritmo pseudocasuale fisso. CSV, dimensione e seme uguali producono lo stesso output.
Che cosa accade se il campione supera il CSV?
La richiesta termina con un errore di input, perché senza reinserimento non è possibile estrarre un campione distinto più grande della popolazione.
Sono supportati campi tra virgolette o multilinea?
Sì. Vengono riconosciuti virgole tra virgolette, doppi apici con escape e interruzioni di riga nei campi protetti.
Quanto costa una richiesta API?
Ogni richiesta API costa $0.002. La versione per browser esegue localmente lo stesso calcolo puro.
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"csv": "id,name,team\n1,Ada,Blue\n2,Grace,Red\n3,Linus,Blue\n4,Margaret,Green\n5,Donald,Red",
"sample_size": 3,
"seed": 42
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.random_sample_rows",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Limiti
max_mb | 25 |
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |