1. Introduzione al diagramma Ramo-Foglia
Il diagramma ramo-foglia è una forma “ibrida” tra tabella di dati e sua rappresentazione grafica. Esso si costruisce innanzitutto dividendo ogni singolo dato in due parti: una più significativa, chiamata "ramo" e una meno significativa chiamata "foglia". Ad esempio, le cifre seguenti:
12 13 32 33 45 56
possono essere divise separando le decine dalle unità:
1 | 2 |
---|---|
1 | 3 |
3 | 2 |
3 | 3 |
4 | 5 |
5 | 6 |
Il secondo passo è quello di raggruppare i rami posizionando le relative foglie una accanto all’altra:
1 | 2 | 3 |
---|---|---|
3 | 2 | 3 |
4 | 5 | |
5 | 6 |
Supponiamo ora di avere la seguente serie ci dati:
12.3 13.5 12.7 14.9 14.8 15.7 19.5 11.4 17.6 18.8 17.6 18.4 16.2 16.3 16.2
In questo caso la rappresentazione ramo-foglia sarà:
11 | 4 | ||
---|---|---|---|
12 | 3 | 7 | |
13 | 5 | ||
14 | 8 | 9 | |
15 | 7 | ||
16 | 2 | 2 | 3 |
17 | 6 | 6 | |
18 | 4 | 8 | |
19 | 5 |
Passiamo ora ad un altro esempio in cui consideriamo i seguenti dati:
0.012 | 0.022 | 0.124 | 0.124 | 0.223 | 0.224 | 0.289 | 0.326 | 0.345 | 0.351 |
0.384 | 0.387 | 0.4 | 0.457 | 0.458 | 0.489 | 0.521 | 0.564 | 0.64 |
Poiché le foglie possono essere rappresentate da un’unica cifra, potremmo essere tentati di costruire una tabella ramo-foglia nel modo seguente:
01 | 2 |
---|---|
02 | 2 |
03 | |
04 | |
..... | |
12 | 44 |
13 | |
..... | |
22 | 34 |
23 | |
..... | |
28 | 9 |
..... | |
32 | 6 |
.... | |
34 | 5 |
35 | 1 |
..... |
Per ovvi motivi di spazio ho sostituito con dei puntini molti dei rami, quelli privi di foglia e quelli a partire dal valore 0,351. Il diagramma appena rappresentato non ci dà indicazioni significative sulla distribuzione dei valori perché il numero dei dati è piccolo in confronto al numero dei rami. Questo ci induce a pensare che i diagrammi ramo-foglia vanno realizzati tenendo conto del numero dei dati disponibili.
In altre parole, possiamo dire che la quantità di rami deve essere un numero "significativamente" più piccolo del numero dei dati.
Nel caso in esame, ad esempio, conviene approssimare i dati alla seconda cifra decimale in modo da ottenere i valori seguenti:
0.01 | 0.02 | 0.12 | 0.12 | 0.22 | 0.22 | 0.29 | 0.33 | 0.35 | 0.35 |
0.38 | 0.39 | 0.4 | 0.46 | 0.46 | 0.49 | 0.52 | 0.57 | 0.64 |
Il cui diagramma è il seguente
0 | 1 | 2 | |||
---|---|---|---|---|---|
1 | 2 | 2 | |||
2 | 2 | 2 | 9 | ||
3 | 3 | 5 | 5 | 8 | 9 |
4 | 0 | 6 | 6 | 9 | |
5 | 2 | 6 | |||
6 | 4 |
ben più significativo del precedente. Se consideriamo la barretta, che separa i rami dalle foglie, sostitutiva di una virgola, allora per ottenere un diagramma ramo-foglia efficace, in questo caso abbiamo operato due operazioni sui dati di partenza:
1) Moltiplicato tutti i valori per 10;
2) Approssimato tutti i valori ottenuti alla prima cifra decimale.
Naturalmente, anche con poca dimestichezza nella costruzione di diagrammi ramo-foglia, spesso queste operazioni vengono compiute automaticamente dalla nostra mente senza, cioè averne coscienza.
Passiamo ora ad un secondo esempio:
100 | 123 | 123 | 125 | 126 | 156 | 157 | 245 | 254 | 254 |
259 | 365 | 451 | 451 | 457 | 459 | 568 | 785 | 854 | 854 |
854 | 985 |
Partendo dai punti fermi che a) il numero dei rami deve essere inferiore al numero dei dati e che b) sulle foglie può comparire solo una cifra per singolo dato, conviene procedere applicando le seguenti due operazioni:
1) Dividere i dati per 100;
2) Approssimare i dati ottenuti alla prima cifra decimale;
In questo modo otteniamo i seguenti valori:
1,0 | 1,2 | 1,2 | 1,3 | 1,3 | 1,6 | 1,6 | 2,5 | 2,5 | 2,5 |
2,6 | 3,7 | 4,5 | 4,5 | 4,6 | 4,6 | 5,7 | 7,9 | 8,5 | 8,5 |
8,5 | 9,8 |
La cui rappresentazione ramo-foglia è:
1 | 0 | 2 | 2 | 2 | 3 | 6 | 6 |
---|---|---|---|---|---|---|---|
2 | 5 | 5 | 5 | 6 | |||
3 | 7 | ||||||
4 | 5 | 5 | 6 | 6 | |||
5 | 7 | ||||||
7 | 9 | ||||||
8 | 5 | 5 | 5 | ||||
9 | 8 |
A questo punto, al di là delle nostre capacità intuitive, viene da chiedersi se sia possibile definire un algoritmo per la costruzione di un diagramma di questo tipo. Alla fine di questo capitolo propongo un semplice algoritmo su cui ho costruito un foglio di calcolo in Excel.
2. Diagramma Ramo-Foglia "Stretch" e Diagramma Ramo-Foglia "Squeezed"
Analizziamo ora la seguente serie di dati:
1,12 | 1,13 | 1,14 | 1,17 | 1,18 | 1,19 | 1,20 | 1,21 | 1,21 | |
1,22 | 1,23 | 1,23 | 1,24 | 1,26 | 1,26 | 1,28 | 1,29 | 1,29 | 1,32 |
1,34 | 1,34 | 1,38 | 1,38 |
Conviene moltiplicare per 10 questi dati in modo da ottenere:
11,2 | 11,3 | 11,4 | 11,7 | 11,8 | 11,9 | 12,0 | 12,1 | 12,1 | |
12,2 | 12,3 | 12,3 | 12,4 | 12,6 | 12,6 | 12,8 | 12,9 | 12,9 | 13,2 |
13,4 | 13,4 | 13,8 | 13,8 |
Non sono necessarie approssimazioni poiché abbiamo una singola cifra decimale. Con questi valori otteniamo:
11 | 2 | 3 | 4 | 7 | 8 | 9 | 9 | |||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
12 | 0 | 1 | 1 | 2 | 3 | 3 | 4 | 6 | 6 | 8 | 9 | 9 |
13 | 2 | 4 | 4 | 8 | 8 |
Questo è il caso di un diagramma in cui il numero dei rami è significativamente inferiore al numero dei dati. Possiamo però “stirare” il diagramma spezzando in due ogni ramo. Ad uno di essi associamo le foglie da 0 a 4 e a l’altro associamo le foglie da 5 a 9. Otteniamo così
11a | 2 | 3 | 4 | ||||
---|---|---|---|---|---|---|---|
11b | 7 | 8 | 9 | 9 | |||
12a | 0 | 1 | 1 | 2 | 3 | 3 | 4 |
12b | 6 | 6 | 8 | 9 | 9 | ||
13a | 2 | 4 | 4 | ||||
13b | 8 | 8 |
Il nuovo diagramma, detto stretched steam-and-leaf display, è sicuramente più significativo del precedente.
Utilizzando questo sistema possiamo ulteriormente “spremere” il diagramma, dividendo ogni ramo in cinque pezzi. Al primo ramo associamo le foglie 0 e 1, al secondo le foglie 2 e 3, e così via. Otteniamo così il cosiddetto squeezed steam-and-left display.
11a | |||
---|---|---|---|
11b | 2 | 3 | |
11c | 4 | ||
11d | 7 | ||
11e | 8 | 9 | 9 |
12a | 0 | 1 | 1 |
12b | 2 | 3 | 3 |
12c | 4 | ||
12d | 6 | 6 | |
12e | 8 | 9 | 9 |
13a | |||
13b | 2 | ||
13c | 4 | 4 | |
13d | |||
13e | 8 | 8 |
3. Diagramma Ramo-Foglia a due lati
Esiste un altro tipo di diagramma ramo-foglia, molto utile nel caso si voglia confrontare due serie di dati aventi dei “rami in comune”. E’ il caso, ad esempio, di una caratteristica dimensionale importante di un pezzo meccanico lavorato con una certa macchina. Se facciamo un intervento sui parametri di lavorazione, si può utilizzare questo tipo di diagramma per confrontare i valori rilevati prima e dopo l’intervento.
Supponiamo di avere le seguenti due serie di dati:
10,84 | 10,85 | 10,91 | 10,94 | 10,98 | 11,12 | 11,12 | 11,13 | 11,18 | 11,25 |
11,34 |
10,83 | 10,94 | 10,96 | 11,11 | 11,11 | 11,11 | 11,12 | 11,12 | 11,15 | 11,18 |
11,21 | 11,22 | 11,22 | 11,34 | 11,38 |
Per permettere una rappresentazione ramo-foglia di questi dati conviene moltiplicarli per 10, ottenendo:
108,4 | 108,5 | 109,1 | 109,4 | 109,8 | 111,2 | 111,2 | 111,3 | 111,8 | 112,5 |
113,4 |
108,3 | 109,4 | 109,6 | 111,1 | 111,1 | 111,1 | 111,2 | 111,2 | 111,5 | 111,8 |
112,1 | 112,2 | 112,2 | 113,4 | 113,8 |
A questo punto possiamo posizionare i rami al centro e disporre le foglie sui due lati in maniera da ottenere lo schema seguente:
5 | 4 | 108 | 3 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
8 | 4 | 2 | 109 | 2 | 2 | 8 | 9 | |||||||
8 | 8 | 4 | 3 | 3 | 2 | 2 | 110 | 2 | 2 | 8 | 2 | |||
8 | 3 | 2 | 2 | 111 | 1 | 1 | 1 | 2 | 2 | 5 | 8 | |||
5 | 112 | 1 | 2 | 2 | ||||||||||
4 | 113 | 8 | 4 |
4. Calcolo del numero dei rami per una rappresentazione ramo-foglia ottimale
In realtà non esiste un metodo esatto per determinare il numero dei rami necessari affinché un diagramma ramo-foglia risulti efficace. Tukey, l’inventore di questo tipo di rappresentazione dei dati, ha però individuato la seguente formula empirica
dove il simbolo | | ha il significato di “parte intera” ed n rappresenta la quantità di dati disponibili. “R” non è un possibile numero di rami ma è un “maggiorante” di un suo insieme il cui massimo è il numero ottimale di rami. Quanto appena detto può non essere facilmente comprensibile e allora uso altri termini. Come abbiamo visto nei vari esempi, ogni serie di dati può essere rappresentata con un diagramma ramo–foglia costituito da un numero di rami che dipende dalla scelta di come spezzare le cifre tra ramo e foglia e/o dalla scelta di usare diagrammi “streatch” o “squeezed” . Il numero ottimale di tali rami è il massimo che si può ottenere con tali scelte senza superare R. Facciamo un esempio riutilizzando una precedente serie di valori:
0.012 | 0.022 | 0.124 | 0.124 | 0.223 | 0.224 | 0.289 | 0.326 | 0.345 | 0.351 |
0.384 | 0.387 | 0.4 | 0.457 | 0.458 | 0.489 | 0.521 | 0.564 | 0.64 |
In questo caso n è pari a 19. Perciò
Il numero di rami non deve dunque superare 12. Se dovessimo rappresentare questi valori dividendoli per 100 in modo da lasciare un’unica cifra decimale a rappresentare le foglie, i rami necessari sarebbero ben 64. Se invece approssimiamo i valori alla seconda cifra decimale i rami della rappresentazione si possono ridurre a 7. Quest’ultimo è anche il numero più alto di rami che si può ottenere al di sotto di 12.
Oltre alla formula di Tukey ne esistono altre per trovare il numero ottimale di rami. Una di queste, a mio parere, molto efficace è quella dovuta a Velleman (formula della radice):
La scelta tra le due formule dipende dal numero di dati che bisogna rappresentare. Nell’intervallo di valori di n tra 100 e 110 le due formule danno lo stesso risultato. Al di sotto di 100 la formula di Tukey individua un numero di rami più grande di quello calcolato con la formula della radice. Viceversa, per valori di n maggiori di 110 è la formula di Velleman a dare valori più grandi
Io consiglio di procedere nel seguente modo:
a) Per valori inferiori a 100 usare la formula di Tukey;
b) Per valori compresi tra 100 e 300 si possono usare indifferentemente le due formule;
c) Per valori superiori a 300 usare la formula di Velleman
5. Algoritmo per la costruzione di un diagramma ramo-foglia
Nei precedenti paragrafi abbiamo individuato i punti chiave per costruire un diagramma Ramo-Foglia. Riassumiamoli brevemente.
1) Individuare il numero ottimale “n” dei rami del diagramma utilizzando le formule empiriche di Tukey o di Velleman;
2) moltiplicare o dividere i dati, anche più volte, per dieci in modo che la differenza tra il massimo e il minimo dei dati cosi ottenuti (range) sia il più grande ottenibile inferiore ad “n”;
3) approssimare i dati alla prima cifra decimale (se non c’è tale cifra si può considerarla uguale a 0;
4) raggruppare i dati aventi la stessa parte intera;
5) disporre su un diagramma tutte le parti intere con accanto, in sequenza, le corrispondenti parti decimali.
Qui di seguito il diagramma di flusso che descrive più dettagliatamente quanto appena elencato.Cliccando qui potete scaricare una piccola applicazione in excel che, inserendo una serie di dati, è in grado di generare il corrispondente diagramma ramo-foglia.
6. Listato in VBA per la costruzione di un diagramma ramo-foglia
Qui di seguito riporto il listato in VBA che ho usato per il programmino in excel scaricabile da qui. Naturalmente non credo che interesserà a molti ma sicuramente da esso si possono prendere spunti interessanti per l'utilizzo di excel anche per altri scopi.
DefInt I
DefSng D, M
Dim DataRange As Range
Dim ExtraRange As Boolean
Dim IncMultiplier As Single
Dim iStem() As Integer
Dim Leaf() As String
Dim SLData() As Single
Dim SLIndex As Integer
Dim SLSheet As Object
Dim Stem() As String
Dim TempStr As String
Sub DoStem_and_Leaf()
Dim Finished As Boolean
Dim SLIndex As Integer
Sheets("Stem-and-Leaf").Visible = True
'Contiamo quanti dati sono stati inseriti. Tale dato viene posto nella variabile Items
Items = Application.Count(Sheets("Data").Range("A2:A2000"))
'Se i dati non ci sono il programma ci dice che non possiamo emettere un diagramma
If Items = 0 Then
End
Else
End If
'Determiniamo il massimo,il minimo e il range dei dati inseriti
Maximum = Application.Max(Sheets("Data").Range("A2:A2000"))
Minimum = Application.Min(Sheets("Data").Range("A2:A2000"))
RangeVal = Maximum - Minimum
IncMultiplier = 1
Tukey = Int(10 * Log(Items) / Log(10))
Velleman = Int(2 * Sqr(Items))
If Sheets("num_rami").Range("B1") = 1 Then
Else
End If
'Arriva ora il cuore del listato. Dobbiamo normalizzare i dati inseriti
'moltiplicandoli o dividendoli più volte per 10.
'Poichè Tukey ha fissato in int(10 * Log10(n)) il numero ottimale di rami
'compiamo questa operazione di normalizzazione in modo che i rami ottenuti siano
'il numero più grande possibile inferiore a tale valore.
If RangeVal > Formula Then
ElseIf RangeVal < Formula Then
Else
End If
Dmaximum = Maximum * IncMultiplier
Dminimum = Minimum * IncMultiplier
For i = 1 To Items
Next i
'Fissiamo il massimo ramo, il minimo ramo e il numero dei rami (irange)
IMax = Int(Dmaximum): imin = Int(Dminimum): iRange = IMax - imin + 1
'Vengono definite le variabili Leaf per il ramo e iStem per le foglie
'Poichè alla fine rappresenteremo le foglie con una stringa definiamo anche
'la variabile Stem che contiene i valori di iStem convertiti in stringa
ReDim Leaf(iRange + 1): ReDim Stem(iRange + 1): ReDim iStem(iRange + 1)
'Azzeriamo la variabile Leaf
For i = 1 To iRange + 1
Next i
'carichiamo i dati ramo e foglia nelle variabili Stem e Leaf e approssimiamo eventulamente i valori
ii = 1
For i = 1 To iRange
Next i
'Resettiamo la pagina dove stampare il diagramma
Set SLSheet = Sheets("Stem-and-Leaf")
Sheets("Stem-and-Leaf").Select
Range("B2,D2,F2,F3,D3,B3,C4").Select
Selection.ClearContents
Range("A5:F2000").Select
Selection.ClearContents
Range("A5:A2000").Select
Selection.Borders(xlEdgeRight).LineStyle = xlNone
If ExtraRange Then
Else
End If
For i = 1 To iRows
Next i
Range("B2").Value = Items
Range("D3").Value = Application.Average(Sheets("Data").Range("A:A"))
Range("F3").Value = Application.Median(Sheets("Data").Range("A:A"))
Range("B3").Value = Application.StDev(Sheets("Data").Range("A:A"))
Range("D2").Value = Minimum
Range("F2").Value = Maximum
Range("C4").Value = 1 / IncMultiplier
Range("A1").Select
End Sub