bigdata

La moda è una funzione di statistica che restituisce il valore con la presenza più frequente all'interno di un insieme di dati.

E' un'altro modo per dare indicazioni in merito alla tendenza centrale. Facendo riferimento all'insieme numerico precedentemente creato per raggruppare i pesi degli studenti di una scuola primaria, la moda restituisce il peso più frequentemente incontrato tra i bambini.

La cosa interessante che differenzia la moda dalla media è che la prima, a differenza della seconda, non necessita di valori numerici per essere calcolata: potrei infatti nello stesso modo calcolare qual'è il colore preferito dalla maggioranza dei bambini.

Vediamo come si implementa questa funzione tramite Swift.

let arrayContato = NSCountedSet(array: pesiStudenti)

let moda = arrayContato.max { arrayContato.count(for: $0) < arrayContato.count(for: $1) }

print(moda!) //Stampa 24

 

let ricorrenze24 = arrayContato.count(for: 24//il 24 compare 12 volte nell'array

 

Come base dati utilizziamo l'array pesiStudenti definito in precedenza. L'array lo passiamo alla classe NSCountedSet. Questa classe conta le ricorrenze degli elementi dell'array; definito il tipo arrayContato posso sapere quante volte ricorre ad esempio il numero '24' utilizzando il metodo count. Nel caso specifico si tratta anche della moda visto che ricorre per il maggior numero di volte. La moda si calcola chiedendo al tipo arrayContato di restituire il valore massimo, per far questo si utilizza la funzione max. E' da notare che la classe NSCountedSet non si riferisce ad un set di numeri, ma ad un insieme di grandezze che per quanto siano omogenee sono ignote (potrebbero essere stringhe, o altre classi). Questo tra l'altro è coerente con il significato di moda che resta valido per qualsiasi insieme di dati, siano numeri, parole, oggetti ecc..

Proprio perché la classe NSCountedSet non si riferisce ad insiemi numerici ma a qualunque tipo di insieme, dobbiamo dare una regola alla funzione max per capire cosa significa confrontare due elementi per determinare il più grande. Ricordiamo che max reitera su tutti gli elementi dell'array dietro le quinte, su ogni coppia di elementi effettua una comparazione e restituisce true o false in funzione dell'esito del confronto. La scelta che la funzione max effettua su ogni coppia di valori per scegliere quale valore confrontare con il successivo al ciclo seguente dipende proprio dall'esito della comparazione. Nel caso specifico utilizziamo una closure per passare alla funzione max i due parametri con la funzione di comparazione '<'. I due parametri ($0 e $1) servono a prelevare da arrayContatto i valori da confrontare, i valori che ci interessa sono quelli restituiti dal metodo count, cioè il numero di occorrenze di quell'elemento dell'array.      

La varianza è un altro indice di dispersione. A differenza della dispersione che, come abbiamo già visto, viene calcolata sottraendo il valore massimo al valore minimo, la varianza viene calcolata facendo la differenza tra ogni singolo valore ed il valore medio dell'insieme di dati. Si può facilmente intuire che questo calcolo può dare origine a dei valori negativi, per questo motivo il calcolo prevede l'elevamento a potenza di ogni singolo risultato. La varianza viene calcolata come valore medio dei valori così raccolti, ecco la formula: Imagecap4 5 2b (S: varianza; x: valore di ogni elemento; M: media aritmetica; N: numero degli elementi dell'insieme).

Il valore ricavato, trattandosi di elevamento a potenza non è particolarmente significativo in quanto è un valore molto alto rispetto alla base dati analizzata, di conseguenza viene più spesso utilizzato lo scarto quadratico medio (o deviazione standard) calcolato tramite operazione di radice quadrata: Imagecap4 5 2e. Vediamo un esempio pratico e l'implementazione in Swift.

let numeroElementi = Double(pesiStudenti.count)

let media = Double(pesiStudenti.reduce(0, +)) / numeroElementi

let sommatoria = pesiStudenti.map { pow(Double($0) - media, 2.0) }.reduce(0, +)

let varianza = sommatoria / numeroElementi //31.95
let deviazioneStandard = sqrt(varianza)    //5.65

 

Nel codice viene semplicemente tradotta la funzione sopra esposta utilizzando funzioni già viste in precedenza. Il valore di deviazione standard è il risultato ottenuto dai pesiStudenti inseriti nei precedenti paragrafi. Dando una lettura pratica al valore ottenuto si deduce che rispetto al valore medio dei pesi degli studenti c'è una variazione di circa 5,7 Kg. Questo valore va sempre contestualizzato in quanto 5,7Kg di deviazione standard possono essere parecchi se riferiti a studenti delle classi prime, probabilmente risulterebbe un valore molto basso riferito a studenti delle classi quinte.