Genera nodo

In Synthetic Data Generator, si utilizza il nodo Generate per creare i dati sintetici strutturati.

Il nodo Generate può generare dati sintetici sia partendo da zero, utilizzando le distribuzioni statistiche specificate dall'utente, sia utilizzando automaticamente le distribuzioni ottenute dall'esecuzione di un nodo Mimic su dati esistenti.

Descrizione
Il nodo Generate di un flusso Synthetic Data Generator crea dati sintetici basati sulle proprietà statistiche e sulle relazioni del set di dati di origine. Utilizza vari algoritmi e modelli statistici per generare dati artificiali ma realistici.
È possibile includere il nodo Generate più volte in un flusso per creare diversi tipi di dati sintetici. Tuttavia, i dati sintetici non possono essere uniti in Synthetic Data Generator.
Utilizzo del nodo
Se si desidera utilizzare i dati di produzione, aggiungere un nodo Mimic all'area di disegno. Un nodo Generate viene creato automaticamente e aggiunto dopo il nodo Mimic nel flusso, una volta che il nodo Mimic viene eseguito.
Se si desidera utilizzare uno schema di dati personalizzato, aggiungere un nodo Generate e definire lo schema di dati in esso. Costruire dati tabellari definendo i dati da creare per ogni colonna. Non è possibile collegare un nodo Import o Anonymize direttamente a un nodo Generate.
Obbligatorio o facoltativo
Il nodo Generate è obbligatorio. Se si desidera utilizzare uno schema di dati personalizzato, è necessario aggiungere il nodo manualmente. Tuttavia, il nodo viene aggiunto automaticamente dopo un nodo Mimic.

Scripting con il nodo Generate

È possibile utilizzare linguaggi di scripting, come Python, per impostare in modo programmatico le proprietà dei nodi.

Generare le proprietà dei nodi

Le seguenti proprietà sono specifiche del nodo Generate. Per informazioni sulle proprietà comuni dei nodi, vedere Proprietà dei flussi e dei nodi.

Tabella 1. Proprietà dei nodi per lo scripting
Nome proprietà Tipo di dati Descrizione proprietà
correlations Proprietà strutturata Imposta la correlazione tra i campi del set di dati. Per ulteriori informazioni, consultare la sezione Esempi di correlazioni.
create_iteration_field booleano
fields Proprietà strutturata Impostare i requisiti di un set di dati personalizzato utilizzando la proprietà fields . Per ulteriori informazioni, vedere l' esempio dei campi
iteration_field_name Stringa Quando create_iteration_field è impostato su True, il nuovo campo di iterazione utilizza il nome impostato.
keep_min_max_setting booleano Impostare su True per utilizzare il valore per max_cases
locale Stringa Il locale determina quali tipi di dizionario sono disponibili per la generazione dei campi; può avere un valore tra ["de_DE", "en_US", "es_ES", "fr_FR", "it_IT", "ja_JP", "ko_KR", "pl_PL", "pt_BR", "ru_RU", "zh_CN"]
max_cases Numero intero Impostare il numero massimo di righe di dati sintetici da generare. Il valore minimo è 1000. Il valore massimo è 2.147.483.647.
random_seed Numero intero
refit_correlations booleano
replicate_results booleano
parameter_xml Stringa Restituisce il parametro Xml come stringa

Esempio di proprietà dei campi

La proprietà fields è una proprietà strutturata con la seguente sintassi:

generate.setPropertyValue("fields", [
    [field1, storage, locked, [distribution1], min, max],
    [field2, storage, locked, [distribution2], min, max],
    [field3, storage, locked, [distribution3], min, max]
])

Si può usare per definire i requisiti personalizzati per i dati sintetici da generare. distribution è una dichiarazione del nome della distribuzione seguita da un elenco contenente coppie di nomi di attributi e valori. Non è possibile impostare direttamente la distribuzione; è necessario utilizzarla insieme alla proprietà fields . Ogni distribuzione è definita nel modo seguente:

[distributionname, [[par1], [par2], [par3]]]

generate = sdg.script.stream().createAt("generate", u"Generate", 726, 322)
generate.setPropertyValue("fields", [["Age", "integer", False, ["Uniform",[["min","1"],["max","2"]]], "", ""]])

Ad esempio, per creare un nodo che generi un singolo campo con una distribuzione binomiale, si può usare il seguente script:

generate_node1 = sdg.script.stream().createAt("generate", u"Generate", 200, 200)
generate_node1.setPropertyValue("fields", [["Education", "Real", False, ["Binomial", [["n", 32],
 ["prob", 0.7]]], "", ""]])

La distribuzione binomiale richiede 2 parametri: n e prob. Poiché una distribuzione binomiale non supporta valori minimi e massimi, questi vengono forniti come una stringa vuota.

Gli esempi seguenti mostrano tutti i possibili tipi di distribuzione. Si noti che la soglia è inserita come sia in thresh NegativeBinomialFailures che in NegativeBinomialTrial.

stream = sdg.script.stream()

generate = stream.createAt("generate", u"Generate", 200, 200)

beta_dist = ["Field1", "Real", False, ["Beta",[["shape1","1"],["shape2","2"]]], "", ""]
binomial_dist = ["Field2", "Real", False, ["Binomial",[["n" ,"1"],["prob","1"]]], "", ""]
categorical_dist = ["Field3", "String", False, ["Categorical", [["A",0.3],["B",0.5],["C",0.2]]], "", ""]
dice_dist = ["Field4", "Real", False, ["Dice", [["1" ,"0.5"],["2","0.5"]]], "", ""]
exponential_dist = ["Field5", "Real", False, ["Exponential", [["scale","1"]]], "", ""]
fixed_dist = ["Field6", "Real", False, ["Fixed", [["value","1" ]]], "", ""]
gamma_dist = ["Field7", "Real", False, ["Gamma", [["scale","1"],["shape"," 1"]]], "", ""]
lognormal_dist = ["Field8", "Real", False, ["Lognormal", [["a","1"],["b","1" ]]], "", ""]
negbinomialfailures_dist = ["Field9", "Real", False, ["NegativeBinomialFailures",[["prob","0.5"],["thresh","1"]]], "", ""]
negbinomialtrial_dist = ["Field10", "Real", False, ["NegativeBinomialTrials",[["prob","0.2"],["thresh","1"]]], "", ""]
normal_dist = ["Field11", "Real", False, ["Normal", [["mean","1"] ,["stddev","2"]]], "", ""]
poisson_dist = ["Field12", "Real", False, ["Poisson", [["mean","1"]]], "", ""]
range_dist = ["Field13", "Real", False, ["Range", [["BEGIN","[1,3]"] ,["END","[2,4]"],["PROB","[[0.5],[0.5]]"]]], "", ""]
triangular_dist = ["Field14", "Real", False, ["Triangular", [["min","0"],["max","1"],["mode","1"]]], "", ""]
uniform_dist = ["Field15", "Real", False, ["Uniform", [["min","1"],["max","2"]]], "", ""]
weibull_dist = ["Field16", "Real", False, ["Weibull", [["a","0"],["b","1 "],["c","1"]]], "", ""]
generate.setPropertyValue("fields", [\
beta_dist, \
binomial_dist, \
categorical_dist, \
dice_dist, \
exponential_dist, \
fixed_dist, \
gamma_dist, \
lognormal_dist, \
negbinomialfailures_dist, \
negbinomialtrial_dist, \
normal_dist, \
poisson_dist, \
range_dist, \
triangular_dist, \
uniform_dist, \
weibull_dist
])

Esempio di proprietà delle correlazioni

La proprietà correlations è una proprietà strutturata con la seguente sintassi:

generate.setPropertyValue("correlations", [
    [field1, field2, correlation],
    [field1, field3, correlation],
    [field2, field3, correlation]
])

La correlazione può essere un numero qualsiasi compreso tra +1 e -1. È possibile specificare tutte le correlazioni che si desidera. Le correlazioni non specificate sono impostate su zero. Se alcuni campi sono sconosciuti, il valore di correlazione deve essere impostato sulla matrice di correlazione (o sulla tabella). Se ci sono campi sconosciuti, non è possibile eseguire il nodo.