DIAGRAMMA RAMO-FOGLIA

INDICE

1. Introduzione al diagramma Ramo-Foglia

2. Ramo-Foglia "Stretch" e Diagramma Ramo-Foglia "Squeezed"

3. Diagramma Ramo-Foglia a due lati

4. Calcolo del numero dei rami per una rappresentazione ramo-foglia ottimale

5. Algoritmo per la costruzione di un diagramma ramo-foglia

6. Listato in VBA per la costruzione di un diagramma ramo-foglia





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