L'altro giorno mi sono imbattuto nella necessità di rielaborare dei dati creando un dataset simile ma rielaborando secondo funzioni statistiche dei campi numerici.Avendo precedentemente calcolato Media e Varianza di questo set di dati (funzioni AVG() e STD()) quello che si desiderava fare era:
Media + (NumeroRandom * Varianza)così facendo si sarebbe lavorato sulla media dei valori aggiungendogli una deviazione fornita dal numero randomico (compreso tra -0,8 e 0,8) moltiplicato la varianza.
L'inica funzione MySQL che genera numeri casuali è RAND(), però questa funzione produce numeri in virgola mobile compresi tra 0 e 1.
La sola funzione non riusciva a risolvere la problematica, quindi andava ulteriormente elaborata.
Googlando ho trovato per ottenere un numero intero variabile in un intervallo, mettiamo 1 e 3, si può applicare la seguente formula dove 1=i e 3=j:
FLOOR(i + RAND() * (j – i))La formula di venta:
FLOOR(1 + RAND() * 2)A questo punto non è stato necessario altro che effettuare una sostituzione per ottenere la formula finale dell'intervallo a cui ero interessato:
CEILING(Media + (-0.8 + (RAND() * 1.6)) * Varianza)Ho usato il CEILING() in quanto a mi serviva arrotondare all'intero superiore contrariamente al FLOOR().
Spero che questo piccolo promemoria possa essere utile ad altri. Continuate a seguirmi.
Wsc
Nessun commento:
Posta un commento