Arc Sankey Chart

Recentemente, ho trovato un fantastico blog che Federica ci ha consigliato di dare un’occhiata per trovare visualizzazioni spettacolari ma stimolanti pubblicate da due fratelli gemelli e Tableau fanatici (Flerlage Twins). Mi sono imbattuto nella visualizzazione Arc Sankey Chart creata da loro e sono stato incuriosito di saperne di più. Pertanto, ho cercato di più su Internet e guardando i tutorial disponibili, ho deciso di creare un tipo di tutorial completo che descrive il processo dalla A alla Z.

Per creare un grafico di Sankey ad arco, abbiamo bisogno di un set di dati costituito da elementi che hanno relazioni simili al flusso tra loro. Come i gemelli suggeriscono astutamente, un Arc Sankey mostra il flusso tra più entità. Ogni entità è mostrata su una linea orizzontale. Le relazioni o il flusso tra ciascuna entità vengono quindi visualizzati utilizzando un arco circolare. La larghezza di quell’arco codifica l’entità del flusso. Quando ci spostiamo da sinistra a destra, vediamo gli archi sopra le entità, e dall’altra parte, li vediamo sotto.

Come potrebbe essere diventato chiaro ormai, nel Arc Sankey, le entità sono le stesse, mentre nel Sankey ci confrontiamo con le relazioni di entità diverse. Tuttavia, dobbiamo considerare la situazione in cui la creazione di un Arc Sankey sarebbe una perdita di tempo per il pubblico, e in effetti, il Sankey sarebbe l’opzione migliore.

Arc Sankey è costituito da due componenti principali. I primi sono i singoli nodi che rappresentano ogni entità. Questi sono distanziati equamente lungo l’asse X. Sono creati utilizzando semplici forme di cerchi riempiti. Il secondo sono gli archi che collegano un nodo all’altro. Questi vengono disegnati utilizzando la densificazione dei dati e le equazioni parametriche. Ma ci sono situazioni in cui non c’è cambiamento da un’entità all’altra. Forse la “Cosa 1” rimane alla “Cosa 1” senza alcun cambiamento. Nella visualizzazione che ho intenzione di creare in questo tutorial, non incontrerò tale dilemma, ma dal momento che volevo che fosse un’istruzione completa, includerò anche questo caso. Per affrontare questi, creeremo solo un cerchio attorno a ciascun nodo.

Un modello di set di dati è disponibile grazie ai gemelli e useremo Tableau Prep per ricreare tale modello e il resto del calcolo verrà eseguito su Tableau Desktop (Potreste anche guardare questo video effettuato da Jared Flores su YouTube che spiega il processo della preparazione dei dati su Tableau Prep). Voglio visualizzare il volume delle esportazioni/importazioni tra i paesi del G7 dal 2014 al 2021 (Potete trovare la mia dashboard su Tableau Public)

Seguendo il modello, dobbiamo creare un foglio (Arc) con 4 colonne su Tableau Prep, ovvero “Join” (con il valore “Link”) che nei passaggi seguenti ci consente di unire e densificare i nostri dati, “From” e “To” che consistono nei nomi che abbiamo nel tuo set di dati e “Value” che è il valore che intendiamo presentare nella vostra visualizzazione. Nel mio caso, come mostrato nell’immagine seguente, ho il nome dei paesi in “From” e “To”, e il “Value” della loro esportazione dal 2014 al 2021.

Foglio dell’Arco

Per creare il foglio del modello, dobbiamo impostare un processo su Tableau Prep in modo che abbia alcuni punti da 1 a 101, con il valore “T Arc” che viene calcolato per ogni riga di punto. Il campo “T Arc” è costituito dai radianti necessari per creare gli archi a 180°. Pertanto, generiamo 101 punti da zero e terminiamo con il numero Pi. Per creare i punti abbiamo bisogno di un processo chiamato “impalcatura” (“Scaffolding” in inglese). Questo processo inizia con la creazione di due campi calcolati denominati “Scaffold Start” con il valore di 1 e “Scaffold End” con il valore di 101. Questo set crea valore per ogni riga del set di dati.

Creare “Scaffold Start”
Creare “Scaffold End”

Ci sono alcune cose da considerare quando si sceglie il numero di punti. La scelta di un numero troppo alto può influire sulle prestazioni in quanto verranno aggiunte molte righe all’origine dati per ogni record nel set di dati principale (un’origine dati con 1000 righe diventerà 100.000 se si sceglie 100 punti). La scelta di un numero troppo basso si tradurrà in linee rette e angoli visibili invece di una curva uniforme.

Di seguito puoi vedere il risultato finale della creazione di questi punti.

Tabella di “Scaffold”

Quindi deduplicamo (il processo di rimozione dei duplicati) ciò che abbiamo creato e raggruppiamo i valori per creare solo una riga.

Deduplicazione

Ora dobbiamo ruotare la tabella per avere la riga in una colonna. Quindi rinominiamo il campo in “Point”.

Ruotare (Pivot) la tabella

Il passaggio successivo consiste nel creare numeri interi da 1 a 101. Questo processo viene eseguito utilizzando “New Rows”. Quindi selezioniamo il nostro campo “Point” per impostare l’intervallo dal minimo (1) al massimo (101). Ora abbiamo tutte le righe necessarie. L’impostazione è simile all’immagine seguente. Creiamo valori da un campo (Point) utilizzando minimo/massimo aggiornando il campo esistente.

Righe dei punti

La cosa mancante è il campo denominato “Join” con il valore “Link” in modo che possiamo avere un join tra questo foglio (Model) e il foglio “Arc” nei passaggi seguenti, così come l’altro campo chiamato “T Arc” che sono i valori di cui abbiamo bisogno per creare i punti tra i nostri articoli. Il calcolo per questo campo è semplice. Diciamo che se il punto è 1, abbiamo bisogno che sia zero, e se non lo è otteniamo semplicemente il valore della riga precedente e lo moltiplichiamo per valore di Pi diviso per 100. Puoi vedere il calcolo nell’immagine seguente.

Calcolo di “T Arc”

Il risultato finale del foglio “Model” è simile alla seguente immagine con i campi “Join”, “Point” e “T Arc”.

Foglio di Modello

Quindi creiamo un altro foglio chiamato “To/From” per duplicare il nostro set di dati per ogni flusso che abbiamo tra le nostre entità. Per fare così, dobbiamo solo seguire i passaggi precedenti per creare il foglio “Model”. Creiamo due campi calcolati con il valore di “From” e “To” in essi. Quindi aggreghiamo ciò che abbiamo creato e li raggruppiamo in base ai due campi, “From” e “To”. Alla fine creiamo un pivot e li abbiamo in una colonna sotto il nome “To/From” e un altro campo “Join” con il valore “Link”. Il risultato finale dovrebbe essere come l’immagine seguente.

Foglio di “To/From”

Quindi creiamo due fogli con lo stesso processo e in base alla nostra preferenza per l’ordine degli elementi sull’asse X. Per prima cosa raggruppiamo tutti gli elementi (in questo caso, paesi) per un passaggio di aggregazione e poi utilizzando una funzione “Case” diamo loro lo stesso ordine per i due fogli. La creazione di due fogli consente di densificare i dati dopo l’unione. Come si vede nell’immagine seguente, i campi “From” e “To” vengono rinominati in “Dimension” e quindi ogni paese viene assegnato a un numero nel campo “Order”.

Ordinare le Entità

Quindi creiamo una volta un inner join tra il foglio “Arc” (quello che ha i valori) e il foglio “Order From” usando “From” (da Arc sheet) e “Dimension” (da Order To) come clausola di join. Puoi vedere l’immagine per “Join From” qui sotto.

Unire e creare foglio di “Order From”

Quindi aggiungiamo un passaggio netto a questo join, rinominiamo il campo “Order” in “Order From” e rimuoviamo il campo “Dimension”.

Questo processo dovrebbe essere eseguito anche per il foglio “Order To”, ma questa volta uniamo questo foglio al precedente join che abbiamo creato tra i fogli “Order From” e “Arc”. Come il passaggio precedente, creiamo un passaggio pulito, rinominiamo il campo “Order” in “Ordina To” e rimuoviamo il campo “Dimension”. Nei passi seguenti verrà creato un altro campo di dimensione basato sul campo To/From unito.

Unire e creare foglio di “Order To”

Ora è il momento della densificazione. Per la prima fase della densificazione, ciò di cui abbiamo bisogno è un join tra il nostro foglio “Model” (con valori T Arc in esso) e l’ultimo join che abbiamo creato con i fogli “Arc”, “Order From” e “Order To”. La clausola di join è il campo “Join” con il quale possiamo densificare i nostri dati. Come mostrato nell’immagine seguente, con questo join, otteniamo 101 righe per ogni riga che abbiamo nel foglio “Arc” (in questo caso, 42*101).

Densificazione dei dati (Il primo livello)

Per la seconda fase della densificazione, è necessario creare un join tra il foglio “To/From” e il primo step di densificazione join. La clausola di join rimane la stessa (campo “Join”). Il motivo è che abbiamo bisogno di una riga “To” e “From” per ogni singola riga che abbiamo nel nostro set di dati.

Densificazione dei dati (Il secondo livello)

Ora possiamo rimuovere i nostri campi “Join”, poiché hanno servito il loro scopo per noi. Passando ad altri calcoli, possiamo crearli su Tableau Prep per lavorare in modo più efficiente con Tableau Desktop. Il punto di impostazione di questi calcoli su Tableau Prep è che non contengono aggregazione e sono semplici calcoli che vengono eseguiti a livello di riga. Quindi continuiamo con i calcoli.

Il primo calcolo è il campo “Dimensione” promesso. In base al valore del campo “To/From”, otteniamo i valori di “To” o i valori dei campi “From”.

Il calcolo di “Dimension”

La connessione (Connection) è il prossimo calcolo che creiamo. È solo una semplice concatenazione dei campi “From” e “To” con un trattino in mezzo. Questo campo dividerà gli archi in connessioni univoche tra le entità.

Il calcolo di “Connection”

Il prossimo calcolo è “Dimension Orderx” che è anche un “IF… ELSE”. Come mostrato nell’immagine seguente, questo campo tiene conto dell’ordine delle dimensioni (“To” o “From”).

Il Calcolo di “Dimension Orderx”

“T Circle” sarà il prossimo campo di calcolo con solo una versione raddoppiata di “T Arc”. Questo ci servirà per creare i cerchi sulle entità che hanno lo stesso “To” e “From”.

Il calcolo di “T Circle”

Il punto successivo è “T Final” che ci restituisce “T Circle” quando i campi “To” e “From” sono gli stessi, altrimenti “T Arc”.

Il calcolo di “T Final”

Successivamente, dobbiamo creare il campo “Value From”. Dice che se “Dimension” è “From”, calcola due possibilità. Uno è quando i campi “From” e “To” sono uguali e uno è quando non lo sono. La divisione di “Value” per 202 avviene quando “From” e “To” sono uguali, perché abbiamo avuto due fasi di densificazione, e quando sono diverse dobbiamo considerare solo il primo passo che era una moltiplicazione di righe per 101. In altre parole, per ottenere il vero valore dopo la densificazione, dobbiamo invertire le moltiplicazioni usando le divisioni.

Il calcolo di “Value From”

La stessa logica viene utilizzata per il calcolo “Value To”.

Il calcolo di “Value From”

Dobbiamo anche calcolare la distanza tra i due elementi (paesi) qui. Il calcolo è semplice come la sottrazione di due punti, “Order To” e “Order From”.

Il calcolo di “Distance”

Ora siamo pronti per creare un output da Tableau Prep e passare a Tableau Desktop.

Il flusso finale su Tableau Prep

Puoi creare join di questo tipo anche su Tableau Desktop. Tuttavia, per una maggiore efficienza nella cartella di lavoro, si consiglia di sfruttare l’utilizzo di Tableau Prep in questi casi.

Dopo aver collegato i tuoi dati a Tableau Desktop, dobbiamo creare altri calcoli e parametri per avere il grafico Arc Sankey.

Il panello delle misure e dimensioni

Puoi creare join di questo tipo anche su Tableau Desktop. Tuttavia, per una maggiore efficienza nella cartella di lavoro, si consiglia di sfruttare l’utilizzo di Tableau Prep in questi casi.

Dopo aver collegato i tuoi dati a Tableau Desktop, dobbiamo creare altri calcoli e parametri per avere il grafico Arc Sankey.

Ora lavoriamo sull’asse X. Le cose importanti sono il primo e l’ultimo elemento sull’asse X in base all’ordine che abbiamo assegnato loro. “X First” è semplicemente un minimo del “Dimension Orderx” creato su Tableau Prep. Allo stesso modo, “X Last” è l’aggregazione massima di “Dimension Orderx”. Questi due nuovi calcoli ci forniscono la posizione del primo e dell’ultimo elemento per ogni riga di flusso che abbiamo nel nostro set di dati.

Il calcolo di “X First”
Il calcolo di “X Last”

Ora, dobbiamo posizionare il centro dell’arco per ogni flusso, che è la differenza di “X First” e “X Last” diviso per 2 più “X First”.

Il calcolo di “X Center”

Dopo aver calcolato le posizioni, dobbiamo lavorare sul raggio degli archi. Pertanto, il “Radius” viene calcolato in base alla distanza in modalità assoluta divisa per 2.

Il calcolo di “Radius”

Per creare gli archi abbiamo bisogno dei punti X che ci danno l’arco completo. Il calcolo è il seguente:

Il calcolo di “X Arc”

A volte, non in questo caso, gli elementi hanno un flusso su di essi che viene mostrato come un cerchio attorno a un elemento nel grafico di Arc Sankey. Pertanto, ho aggiunto questo anche alla mia cartella di lavoro, nel caso in cui potresti averne bisogno nel tuo lavoro. Questo cerchio deve prendere un parametro, che chiamiamo “Circle Radius”. Non abbiamo bisogno di cambiare questo parametro, questo è solo un raggio per i nostri cerchi attorno a ciascun elemento. Creiamo questo parametro con il valore di 0,6.

Il parametro di “Circle Radius”

Usiamo questo parametro, per calcolare il cerchio attorno a ciascun elemento sull’asse X. Il calcolo è il seguente:

Il calcolo di “X Circle”

Ora, dobbiamo decidere, quando dovremmo avere un cerchio, e quando abbiamo un arco, in base al flusso. Pertanto, creiamo un calcolo che dice che se “To” e “From” sono uguali, abbiamo bisogno di un cerchio, che non è applicato al mio caso, e quando sono diversi, abbiamo bisogno di un arco.

Il calcolo di “X Final”

Il calcolo successivo sta usando la funzione IIF, che tiene conto di un’istruzione e di un insieme di due output quando è vero o falso. Dobbiamo calcolare “Y Arc” sull’asse Y sopra e sotto l’asse X. Se ci stiamo muovendo da sinistra a destra (la distanza di due entità è calcolata positiva) abbiamo bisogno che gli archi siano sopra l’asse X, quindi l’asse Y è positivo, altrimenti li vogliamo negativi (-1 per i flussi da sinistra a destra).

Il calcolo di “Y Arc”

Per individuare i punti sull’asse Y per i cerchi, dobbiamo fare un altro calcolo per “Y Circle”.

Il calcolo di “Y Circle”

E poi abbiamo bisogno della stessa istruzione IF per ottenere Y Arc o Y Circle.

Il calcolo di “Y Final”

Ora, la buona notizia è che siamo pronti a creare il nostro grafico Arc Sankey. Per prima cosa trasciniamo la “Y finale” sulle righe e cambiamo l’aggregazione in Media. Quindi, trasciniamo la “X finale” sulle colonne.

Trascinare “X Final” e “Y Final” sul panello di scaffale

Cambiamo il tipo di grafico in “Line” e aggiungiamo “From” ai colori per avere paesi con colori diversi. Quindi aggiungiamo “T Final” (che consiste nei nostri archi e cerchi) su dettagli e percorso (ricorda solo di avere questo campo in Dimensione e Continuo). L’importante è avere le connessioni univoche che abbiamo creato su Tableau Prep nei dettagli per avere gli archi separati in base ad esse. Il pannello “Marks” per questo grafico è simile all’immagine seguente.

Creare gli archi tra le entità

Ciò che manca nel nostro grafico attuale sono gli elementi (paesi) sull’asse X. Hai indovinato! Dobbiamo creare un asse falso e utilizzare la famosa funzione “Doppio asse”. Pertanto, facendo doppio clic sulle righe, aggiungiamo una pillola zero accanto a Avg (Y Final).

Aggiungere un asse falso
Creare un asse falso

Il tipo di questo grafico è cerchio. Possiamo aggiungere il campo “Dimension” ai dettagli e all’etichetta del nuovo grafico per avere gli elementi sull’asse X. Il resto è solo una questione di ridimensionamento e inserimento di etichette nei cerchi utilizzando la funzione di allineamento su Tableau Desktop.

Il foglio attuale dopo aver aggiunto un asse falso

Quindi facciamo clic con il pulsante destro del mouse su Sum(0), troviamo il “Doppio asse” e lo rendiamo attivo.

Fare un “Dual Axis”

Voilà! Ora abbiamo un Arc Sankey che rappresenta il flusso tra i nostri elementi da sinistra a destra sull’asse Y positivo e da destra a sinistra sull’asse Y negativo. È incredibile avere un grafico del genere tra le nostre cartelle di lavoro.

Il grafico finale

Potete trovare la mia dashboard su Tableau pubblica e fatemi sapere se avete provato a creare un grafico così sorprendente nei vostri casi.

articoli correlati

Nuove funzionalità PowerBI (Dec 2023)

In questo articolo vedremo alcune nuove impostazioni di formattazione per i nostri grafici a colonne e a barre, nonché per le etichette dei dati. Credo

New Button Slicer in Power BI

La nuova funzionalità aggiunta in Power BI rende il pannello dei filtri molto più dinamico e personalizzabile. Con il nuovo oggetto grafico si ha infatti

Selezioni Data Academy 2024

La prossima Data Academy by The Information Lab Italia inizierà a Febbraio 2024! Le selezioni stanno per iniziare!