Vai al contenuto principale

Tutorial sulla visualizzazione dei dati con Python e Tableau

Scopri come usare Python per estendere le funzionalità di visualizzazione dati di Tableau.
Aggiornato 29 set 2026  · 15 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Python Tableau Tutorial

Perché usare Python con Tableau

Tableau offre diverse opzioni per arricchire e creare nuovi campi dati. Con i campi calcolati puoi eseguire funzioni aritmetiche, logiche, spaziali e di modellazione predittiva. Tableau è un potente strumento di Business Intelligence (BI), ma ha dei limiti; è qui che entra in gioco il linguaggio Python.  

Python è molto popolare nella community dei dati. Puoi usarlo per estrarre, pulire, elaborare e applicare funzioni statistiche complesse ai dati. Ti mette a disposizione framework di machine learning, orchestrazione dei dati, multiprocessing e librerie ricche per svolgere praticamente qualsiasi attività. 

Python è un linguaggio polivalente e, usandolo con Tableau, ci dà la libertà di affrontare task altamente complessi. In questo tutorial useremo Python per estrarre e pulire i dati. Poi useremo i dati puliti per creare visualizzazioni in Tableau.

Non useremo Tabpy per creare un server Python per Tableau ed eseguire script Python all'interno di Tableau. Invece, estrarremo e puliremo i dati in Python (Jupyter Notebook) e poi useremo Tableau per creare visualizzazioni interattive. 

Data Visualization with Tableau
Goodreads Data Viz | Tableau Public

Questo è un tutorial passo passo basato su codice sull'API di Goodreads e sulla creazione di visualizzazioni complesse in Tableau. Dai un'occhiata al link qui sotto per accedere al codice e alla dashboard di Tableau. 

Ingestione ed elaborazione dei dati con Python

Nella prima parte del tutorial impareremo a usare l'API di Goodreads per accedere ai dati pubblici. Nel nostro caso, ci concentreremo sul profilo utente e lo convertiremo in un dataframe Pandas leggibile. Inoltre, puliremo i dati ed esportiamoli in formato file CSV. 

Per iniziare

Useremo DataLab per eseguire il codice Python. Include i pacchetti Python necessari per i task di data science. 

Se sei alle prime armi con Python e vuoi configurare l'ambiente sulla tua macchina locale, installa Anaconda. Installerà Python, Jupyter Notebook e i pacchetti Python necessari. 

Prima di iniziare a scrivere il codice, dobbiamo installare il pacchetto xmltodict, perché non fa parte dello stack dati di DataLab o Anaconda. Useremo `pip` per installare il pacchetto Python mancante.

Nota: il simbolo `!` funziona solo in Jupyter Notebook. Ci permette di accedere al terminale all'interno della cella di codice di Jupyter. 

!pip install xmltodict

>>> Collecting xmltodict
>>>   Using cached xmltodict-0.13.0-py2.py3-none-any.whl (10.0 kB)
>>> Installing collected packages: xmltodict
>>> Successfully installed xmltodict-0.13.0

Nel prossimo passaggio importeremo i pacchetti necessari. 

import pandas as pd
import xmltodict
import urllib.request

Per estrarre i dati utente, ci servono sia l'user ID sia il nome utente. In questa sezione effettueremo il parsing del link al profilo utente (Abid). 

Nota: puoi usare il profilo di un tuo amico o il tuo link al profilo ed eseguire questo script. 

  1. Estrae user_id filtrando le cifre all'interno del link e restituisce "73376016". 
  2. Per estrarre user_name, scinderemo la stringa su user_id e poi su "-" per ottenere l'utente. Dopo aver sostituito "-" con uno spazio, otteniamo il nome utente "abid".
  3. Infine concateneremo user_id con user_name. Questo ID univoco sarà usato nella prossima sezione per accedere ai dati utente.
Goodread_profile = "https://www.goodreads.com/user/show/73376016-abid"

user_id = ''.join(filter(lambda i: i.isdigit(), Goodread_profile))
user_name = Goodread_profile.split(user_id, 1)[1].split('-', 1)[1].replace('-', ' ')
user_id_name = user_id+'-'+user_name

print(user_id_name)

>>> 73376016-abid

Estrazione dei dati da Goodreads

Alla fine del 2020, Goodreads smetterà di fornire l'API per sviluppatori. Puoi leggere il report completo qui. Per aggirare questo problema, useremo chiavi API da progetti vecchi come streamlit_goodreads_app. Il progetto spiega come accedere ai dati utente di Goodreads tramite API. 

Goodreads ti offre anche l'opzione di scaricare i dati in formato CSV senza una chiave API, ma è limitata a un utente e non ci dà la libertà di estrarre dati in tempo reale. 

In questa sezione creeremo funzioni che prenderanno in input user_id_name, version, shelf, per_page e apiKey. 

  • apiKey: serve per accedere ai dati pubblici
  • version: per specificare il tipo di dati più recente.
  • shelf: ci sono più scaffali nel profilo utente, ma per lo più read, to-read e currently-reading.
  • per_page: numero di libri per pagina

La funzione prende gli input dell'utente per preparare l'URL e poi scarica i dati usando urllib.request. Infine otteniamo i dati in formato XML. 

apiKey = "ZRnySx6awjQuExO9tKEJXw"
version = "2"
shelf = "read"
per_page = "200"

def get_user_data(user_id, apiKey, version, shelf, per_page):
    api_url_base = "https://www.goodreads.com/review/list"
    final_url = (
        api_url_base
        + user_id
        + ".xml?key="
        + apiKey
        + "&v="
        + version
        + "&shelf="
        + shelf
        + "&per_page="
        + per_page
    )
    contents = urllib.request.urlopen(final_url).read()
    return contents
contents = get_user_data(user_id_name,apiKey,version, shelf, per_page)
print(contents[0:100])


>>> b'<?xml version="1.0" encoding="UTF-8"?>\n<GoodreadsResponse>\n  <Request>\n    <authentication>true</aut'

Conversione da XML a JSON

I nostri dati iniziali sono in formato XML e non c'è un modo diretto per convertirli in un database strutturato. Quindi li trasformeremo in JSON usando il pacchetto Python xmltodict. 

I dati XML vengono convertiti in un JSON annidato e, per visualizzare la prima voce nei dati delle recensioni dei libri, useremo le parentesi quadre per accedere ai dati incapsulati. 

Puoi sperimentare con i metadati ed esplorare più opzioni, ma in questo tutorial ci concentreremo sui dati delle recensioni degli utenti.  

contents_json = xmltodict.parse(contents)
print(contents_json["GoodreadsResponse"]["reviews"]["review"][:1])

>>> [{'id': '4626706284', 'book': {'id': {'@type': 'integer', '#text': '57771224'}, 'isbn': '1250809606', 'isbn13': '9781250809605', 'text_reviews_count': {'@type': 'integer', '#text': '150'}, 'uri': 'kca://book/amzn1.gr.book.v3.tcNoY0o7ErAhczdQ', 'title': 'Good Intentions', 'title_without_series': 'Good Intentions', 'image_url': .........

Conversione da JSON a dataframe Pandas 

Per convertire il tipo di dato JSON in un dataframe Pandas, useremo la funzione json_normalize. I dati delle recensioni si trovano al terzo livello e, per accedervi, faremo riferimento a GoodreadsResponse, reviews e review.

Prima di visualizzare il dataframe, filtreremo i dati irrilevanti eliminando i libri con la colonna date_updated mancante. 

Impara vari modi per importare file CSV, fogli di calcolo, JSON, database SQL e API con Pandas seguendo il corso Streamlined Data Ingestion with pandas. 

df = pd.json_normalize(contents_json["GoodreadsResponse"]["reviews"]["review"])
df = df[df["date_updated"].notnull()]
df.head()

Converting JSON to Pandas Dataframe

Data cleaning

Il dataframe grezzo sembra abbastanza pulito, ma dobbiamo comunque ridurre il numero di colonne. 

Come possiamo vedere, ci sono 61 colonne.

df.shape
(200, 61)

Eliminiamo quelle vuote. 

df.dropna(axis=1, how='all', inplace=True)
df.shape
(200, 58)

Abbiamo eliminato con successo 3 colonne con valori mancanti.

Ora controlleremo tutti i nomi delle colonne usando `df.columns` e selezioneremo le colonne più utili. 

final_df = df[
    [
        "rating",
        "started_at",
        "read_at",
        "date_added",
        "book.title",
        "book.average_rating",
        'book.ratings_count',
        "book.publication_year",
        "book.authors.author.name"
    ]
]
final_df.head()

Come possiamo osservare, il dataframe finale è pulito e contiene i campi dati rilevanti. 

Final Dataframe

Esportazione del file CSV

Nell'ultima sezione esporteremo il dataframe in un file CSV compatibile con Tableau. Nella funzione to_csv, aggiungi il nome del file con l'estensione e disattiva l'indice impostando l'argomento index su False. 

final_df.to_csv("abid_goodreads_clean_data.csv",index=False)

Il file CSV comparirà nella directory corrente.

Goodreads Clean CSV File

File CSV Goodreads pulito

Puoi anche consultare il Jupyter Notebook Python: Data ingestion usando l'API di Goodreads. Ti aiuterà a fare debug del codice e, se vuoi saltare la parte di programmazione in Python, puoi semplicemente scaricare il file cliccando sul pulsante Copy & Edit ed eseguire lo script. 

Visualizzazione dei dati in Tableau

Nella seconda parte useremo i dati puliti e creeremo visualizzazioni semplici e complesse in Tableau. Il nostro obiettivo è tracciare grafici interattivi che ci aiutino a capire il comportamento di lettura dei libri dell'utente. 

Connessione dei dati

Connetteremo il file CSV selezionando l'opzione Text e scegliendo il file abid_goodreads_clean_data.csv. Dopodiché, cambieremo i campi Started At, Read At e Date Added in Date & Time, come mostrato di seguito. 

Nota: è una buona pratica modificare i campi dati all'inizio.  

Connecting Data and Modifying Data Types
Connessione dei dati e modifica dei tipi di dato

Creazione dell'istogramma dei rating

In questa sezione creeremo l'istogramma dei rating dei libri dell'utente. 

  • Per prima cosa, trascina e rilascia il campo Rating sulla shelf Rows. 

User Rating Histogram Part 1
Istogramma dei rating dell'utente, parte 1

  • Clicca sul menu a discesa Show Me per accedere ai template di visualizzazione. Convertiremo il grafico a barre in un istogramma cliccando sull'opzione Histogram.

User Rating Histogram Part 2
Istogramma dei rating dell'utente, parte 2

  • L'asse Rating ha tacche a intervalli di 0,5. Cambia le tacche cliccando con il tasto destro sull'asse inferiore e selezionando Edit Axis. Poi clicca sulla scheda Tick Marks e imposta le Major Tick Marks su Fixed. Assicurati che il Tick Origin sia 0 e il Tick Interval sia 1.


Istogramma dei rating dell'utente, parte 3

  • Personalizzeremo l'istogramma ripulendo le etichette degli assi, cambiando colori e bordi delle barre e aggiungendo le etichette dei mark. Puoi fare tutto questo accedendo alle opzioni nel pannello Marks, che trovi nella sezione centrale a sinistra. 

User Rating Histogram Part 4
Istogramma dei rating dell'utente, parte 4

L'utente di solito ha assegnato rating tra 3 e 4. I rating pari a zero corrispondono ai libri non valutati. 

Line plot

Per tracciare un grafico a linee:

  1. Trascina e rilascia il campo Book.Publication Year sulle shelf Rows e Columns.
  2. Cambia il campo dati su Rows in conteggio cliccandoci sopra con il tasto destro e selezionando Measure > Count. 
  3. Cambia il campo dati su Columns in dimensione cliccandoci sopra con il tasto destro e selezionando Dimensions.
  4. Vai al pannello Marks, clicca sul menu a discesa Automatic e cambialo in Line. 
  5. Ripulisci l'etichetta dell'asse, personalizza il grafico, aggiungi un titolo e rimuovi i valori nulli.

Book Publication Year Line Plot
Grafico a linee per anno di pubblicazione dei libri

L'utente ha letto alcuni libri datati, ma è particolarmente interessato ai libri pubblicati tra il 2015 e il 2020. 

Se ti senti sopraffatto e vuoi imparare le basi di Tableau, potresti trovare utile il Tableau Tutorial for Beginners di Eugenia Anello. 

Box plot

Per tracciare un box-and-whisker plot:

  1. Trascina e rilascia il campo dati Books.Ratings Count sulla shelf Rows. Cambialo da Discrete a Continuous. 
  2. Trascina e rilascia il campo dati Books.Ratings Count sull'opzione Detail nel pannello Marks. Cambialo da Measure a Dimension.
  3. Clicca sul menu a discesa Show Me e seleziona l'opzione per i box-and-whisker plot. 
  4. Sposta il campo dati da Rows alla shelf Columns per renderlo orizzontale. 
  5. L'ultima parte riguarda la personalizzazione: aumenteremo la dimensione, cambieremo il colore, aggiungeremo un titolo e rinomineremo l'asse in "Popularity".

Number of Reviews per Book Boxplot
Boxplot del numero di recensioni per libro

Sembra che l'utente legga libri meno popolari e qualche libro famoso. Significa che ha un gusto personale basato sui contenuti, non sulla popolarità. 

Bubble plot

Abbiamo creato una visualizzazione semplice ma efficace per capire il comportamento di lettura dei libri da parte dell'utente. Ora passeremo a una visualizzazione più complessa che prevede la creazione di un nuovo campo calcolato, la modifica dei bin e la creazione di più livelli.

Nei bubble plot, le etichette rappresentano il numero di giorni impiegati da un utente per finire un libro, e la dimensione della bolla rappresenta il numero di occorrenze. Non abbiamo un campo dati per la durata, ma possiamo crearlo usando Started At e Read At.

Per prima cosa, dobbiamo creare un nuovo campo calcolato cliccando sulla freccia in basso nel pannello Data e selezionando Create Calculated Field. 

Creating Calculated Field
Creazione di un campo calcolato

Si aprirà una nuova finestra e dovrai:

  1. Rinominare il titolo in "Read Duration"
  2. Usare la funzione DATEDIFF per ottenere la differenza tra Read At e Started At.
  3. Assicurarti che il primo argomento della funzione sia "day".
  4. Trascinare e rilasciare o digitare il nome del campo tra parentesi quadre come secondo e terzo argomento. 

Read Duration in Days
Durata di lettura in giorni

Il campo dati Read Duration è continuo e, per tracciare la visualizzazione delle packed bubbles, dobbiamo suddividerlo in intervalli più piccoli chiamati bin. 

  1. Trascina e rilascia il nuovo campo `Read Duration` sulla shelf Rows.
  2. Clicca su Show Me e seleziona histogram. Verrà creato automaticamente un campo bin.

Creates a Bin Field
Creazione di un campo bin 

  1. Clicca con il tasto destro sul campo appena creato Read Duration (bin) e seleziona l'opzione Read Duration in Days.
  2. Cambia la Size of Bins a 10. Creerà molte porzioni di dati più piccole che ci aiuteranno a creare una versione più raffinata del packed bubbles plot. 

Editing Bins
Modifica dei bin

Abbiamo superato la parte più impegnativa, ora è il momento di raccogliere i frutti del nostro lavoro. 

  1. Per creare la visualizzazione semplice, clicca su Show Me e seleziona l'opzione packed bubbles. Vedrai cerchi monocromatici di dimensioni diverse. 
  2. Per aggiungere un po' di colore, trascineremo il campo Read Duration sull'opzione Color nel pannello Marks. 
  3. Cambia il campo colore in Count (Distinct) cliccando con il tasto destro sul campo e selezionando Measure > Count (Distinct). Darà un colore unico a ciascun bin o etichetta. 

Unicolor Packed Bubbles Plot
Packed bubbles monocromatiche

  1. Clicca sull'opzione Color nel pannello Marks e seleziona Edit Colors… > Sunrise-Sunset Diverging. Puoi scegliere qualsiasi gradiente di colore che preferisci. 
  2. L'ultima parte riguarda la personalizzazione e l'assicurarsi che la visualizzazione sia gradevole e trasmetta il messaggio giusto.

Packed Bubbles Plot
Packed bubbles 

All'utente è servito meno di un giorno per finire la maggior parte dei libri. Puoi anche vedere alcuni outlier sopra 300. 

Possiamo anche creare una dashboard Tableau combinando queste visualizzazioni. Scopri come creare una dashboard in Tableau in questo tutorial.

Conclusione

In questo tutorial abbiamo visto l'importanza di Python e come usarlo con Tableau. Nella prima sezione abbiamo estratto i dati utente di Goodreads usando l'API per sviluppatori e abbiamo convertito i dati XML in un dataframe Pandas pulito e strutturato. Nella seconda parte abbiamo usato i dati puliti per creare visualizzazioni sia semplici sia complesse. 

La combinazione di Python con Tableau apre un mondo di possibilità. Puoi integrare pipeline di dati, implementare modelli di machine learning, eseguire analisi statistiche complesse e portare a termine varie attività impossibili da eseguire con il solo Tableau. 

Puoi eseguire gratuitamente il codice Python su DataLab, che include tutti i pacchetti necessari per far girare questo esempio. Per creare le visualizzazioni in Tableau, abbiamo usato la versione gratuita di Tableau chiamata Tableau Public.

Se sei nuovo a Python e vuoi saperne di più su funzionalità e sintassi, dai un'occhiata al corso Introduction to Data Science in Python. Inoltre, puoi padroneggiare le basi della visualizzazione e personalizzazione in Tableau seguendo il percorso di competenze Tableau Fundamentals. Comprende 5 corsi che coprono un' introduzione a Tableau, analisi dei dati, creazione di dashboard interattive, lavoro su un caso di studio e connessione di più fonti dati.

Argomenti
Tableau
Data Visualization
Python

Corsi su Tableau e Python su DataCamp 

Corso

Introduzione a Python

4 ore
7.1M
Impara le basi dell’analisi dei dati con Python in sole 4 ore. Questo corso online ti introduce all’interfaccia di Python e ai pacchetti più usati.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro