28th Feb 2025 Tempo di lettura: 14 minuti Grafici con SQL: Guida per principianti Maria Durkin analisi dati Indice Prepararsi ai grafici con SQL 1. Grafico a barre Esempio di grafico a barre Esempio di vendite per categoria di prodotto 2. Grafico a linee Esempio di grafico a linee Esempio di vendita di telefoni cellulari 3. Grafico a torta Esempio di grafico a torta Esempio di ripartizione demografica delle vendite 4. Istogramma Esempio di istogramma Esempio di distribuzione dei tempi di consegna 5. Grafico a dispersione Esempio di grafico a dispersione Esempio di efficacia pubblicitaria Creare grafici con i dati esportati da SQL 1. Python 2. Tableau 3. Power BI 4. Looker Studio Imparare l'SQL per i grafici e l'analisi dei dati L'SQL, spesso noto come Structured Query Language, è uno strumento prezioso per gli analisti di dati. Permette di interrogare, aggiornare e organizzare i dati. Questo è un prerequisito fondamentale per la creazione di grafici. In questo articolo analizzeremo come preparare i dati con SQL per utilizzarli nelle visualizzazioni. I dati grezzi hanno valore solo se si sa come pulirli e organizzarli. Pertanto, preparare correttamente i dati per i grafici è un passo importante per realizzare grafici accattivanti e informativi. In questo articolo, discuteremo di come utilizzare SQL per pulire i dati da utilizzare in un grafico. I grafici sono rappresentazioni visive dei dati che includono grafici a barre, grafici a linee, grafici a torta, box plot e molti altri. Il loro obiettivo è quello di convertire dati complessi in informazioni chiare e fruibili. Questo è particolarmente importante perché gli analisti di dati devono essere in grado di comunicare le loro intuizioni al resto del team e agli altri stakeholder. Sebbene SQL eccella nella pulizia e nella preparazione dei dati, non dispone di una funzionalità integrata di creazione di grafici. Tuttavia, ci sono molte risorse esterne per farlo, come Tableau, Looker Studio, Power BI o le librerie Python. Detto questo, la qualità dei grafici è pari a quella dei dati utilizzati per crearli. Se i dati non sono preparati correttamente, i grafici non saranno in grado di esprimere alcun messaggio significativo. Di conseguenza, l'SQL rimane estremamente importante. E quale momento migliore per iniziare a studiarlo se non ora, con il nostro corso SQL per l'analisi dei dati? Questo corso vi insegnerà tutte le competenze chiave per preparare i dati per i grafici. In questo articolo vi mostreremo come utilizzare l'SQL per preparare i dati per la creazione di grafici utilizzando strumenti esterni. Verranno inoltre forniti esempi e query SQL per esercitarsi. Quindi, detto questo, iniziamo! Prepararsi ai grafici con SQL La preparazione dei dati è il primo passo fondamentale per creare visualizzazioni coinvolgenti. Utilizzando SQL, possiamo organizzare, aggregare e filtrare i dati in modo efficiente con poche righe di codice. Vediamo alcuni esempi di grafici che si possono realizzare. (P.S. Ecco il nostro foglio informativo sull'SQL per l'analisi dei dati, in modo da poter rivedere alcune funzioni, se necessario). 1. Grafico a barre Un grafico a barre è un tipo di grafico che contiene barre rettangolari che rappresentano diverse categorie di dati. L'altezza (per un grafico verticale) o la lunghezza (per un grafico orizzontale) della barra rappresenta il valore della categoria corrispondente. I grafici a barre sono utili per confrontare i dati di diverse categorie, come le vendite per prodotto, gli ordini per regione e così via. È possibile identificare a colpo d'occhio le differenze o le tendenze all'interno di queste categorie. Esempio di grafico a barre Ecco un esempio di grafico a barre. Creeremo la query SQL per questo grafico più avanti nell'articolo. Di quali informazioni abbiamo bisogno per creare un grafico a barre? Etichette: Abbiamo bisogno delle etichette per ogni barra sull'asse X (orizzontale). La query deve restituire le etichette come una delle colonne della clausola SELECT. Altezzadelle barre: L'altezza delle barre dipende dall'asse Y (verticale). Questa è un'altra colonna che deve essere calcolata in SELECT. L'altezza delle barre viene solitamente calcolata utilizzando una funzione aggregata come SUM() o COUNT() e GROUP BY, utilizzando le etichette dell'asse X. Ordinamento: Opzionalmente, è possibile disporre le barre del grafico in un determinato ordine. Esempio di vendite per categoria di prodotto Immaginiamo di voler analizzare le vendite totali del 2023 per ogni categoria di prodotto. Con l'aiuto di SQL, è possibile preparare i dati per il grafico a barre utilizzando la seguente query: SELECT product_category, SUM(sales_amount) AS total_sales FROM sales_data WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31' GROUP BY product_category ORDER BY total_sales DESC; Spiegazione: SELECT product_category, SUM(sales_amount) AS total_sales: Per prima cosa selezioniamo le colonne desiderate e utilizziamo la funzione aggregata SUM su sales_amount per aggregare le vendite per categoria di prodotto. Questa sarà l'etichetta dell'asse X e l'altezza della barra. WHERE sale_date BETWEEN '2023-01-01' AND '2023-12-31: Vogliamo valutare solo le vendite del 2023, quindi questa clausola filtra i dati per contenere solo le vendite del 2023. GROUP BY product_category: Qui raggruppiamo i dati per product_category per riassumere le vendite totali. ORDER BY total_sales DESC: Infine, ordiniamo i dati in ordine decrescente in modo che le vendite più alte siano le prime e quelle più basse le ultime. 2. Grafico a linee Il grafico a linee è un tipo di grafico che mostra i punti di dati collegati da una linea. Questo grafico è un'ottima visualizzazione dei dati per mostrare le tendenze nel tempo, come ad esempio il monitoraggio dell'attività del sito web nell'arco di un mese, l'analisi delle tendenze di vendita nell'arco di un anno e altro ancora. Esempio di grafico a linee Ecco un esempio di grafico a linee: Di quali informazioni abbiamo bisogno per creare un grafico a linee? Etichette: Abbiamo bisogno di etichette (in genere date) per l'asse X. Altezza dellalinea: Per ogni punto della linea, abbiamo bisogno dell'altezza della linea. Può essere il valore di questa data, selezionato dal database o calcolato con una funzione aggregata. Può anche essere un altro valore, come una media mobile, calcolata con l'aiuto di funzioni di finestra. Ordinamento: Per garantire che i dati siano ordinati correttamente in base alla data, utilizziamo l'ordinamento ORDER. Esempio di vendita di telefoni cellulari Immaginiamo di voler trovare i giorni di picco delle vendite di telefoni cellulari monitorando le vendite mensili del nostro sito web. Per farlo, possiamo calcolare la media mobile dei dati di vendita per attenuare le fluttuazioni. Per prima cosa divideremo la query in due parti: una sottoquery che raccoglie i dati richiesti e una query principale che calcola la media mobile utilizzando questi dati. Utilizzando SQL, potremmo preparare la sottoquery come segue: SELECT DATE(sale_date) AS sale_day, COUNT(*) AS mobile_sales_count FROM sales_data WHERE device_type = 'mobile' GROUP BY sale_day ORDER BY sale_day ASC; Spiegazione: SELECT DATE(sale_date) AS sale_day, COUNT(*) AS mobile_sales_count: Estrae la data da sale_date e conta le vendite di cellulari per ogni giorno. WHERE device_type = 'mobile': Filtra la colonna device_type per includere solo le vendite di dispositivi mobili. GROUP BY sale_day: Raggruppa i dati per ogni giorno. ORDER BY sale_day ASC: Ordina i risultati per data in ordine crescente. La query compie un ulteriore passo avanti utilizzando una media mobile, come già detto. La media mobile attenua le variazioni a breve termine dei dati, riducendo al minimo le fluttuazioni. Una fluttuazione è una variazione a breve termine dei dati, come picchi o cali giornalieri, che può nascondere tendenze più ampie. Utilizzando una media mobile a 7 giorni, possiamo determinare la media del giorno corrente e dei sei giorni precedenti. In questo modo si attenuano le variazioni giornaliere e si rivelano le tendenze settimanali. Modificando la nostra query precedente potremo fare esattamente questo: SELECT sale_day, AVG(mobile_sales_count) OVER (ORDER BY sale_day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg FROM ( SELECT DATE(sale_date) AS sale_day, COUNT(*) AS mobile_sales_count FROM sales_data WHERE device_type = 'mobile' GROUP BY DATE(sale_date) ) daily_sales; Spiegazione: SELECT sale_day, AVG(mobile_sales_count) OVER (ORDER BY sale_day ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS moving_avg: Questa è una funzione finestra che calcola una media mobile di 7 giorni (corrente + 6 giorni precedenti) delle vendite di cellulari, ordinate per giorno di vendita. FROM (...) daily_sales: Qui adattiamo la query precedente come sottoquery e la chiamiamo daily_sales. Per saperne di più sulle funzioni finestra, consultate il nostro articolo Esempio di funzione finestra SQL con spiegazioni. 3. Grafico a torta Un grafico a torta è un grafico che divide un cerchio in sezioni o fette, ognuna delle quali rappresenta una porzione dell'intero. Questo tipo di grafico è particolarmente utile per rappresentare proporzioni o percentuali, ad esempio nella distribuzione demografica, nella ripartizione delle fonti di reddito e altro ancora. Esempio di grafico a torta Un esempio di grafico a torta può apparire come questo: Di quali informazioni abbiamo bisogno per creare un grafico a torta? Etichette: Servono etichette per ogni fetta del grafico a torta. Dimensionedella fetta: Dobbiamo calcolare la dimensione di ogni fetta. Calcolodella percentuale: Dobbiamo calcolare il contributo proporzionale di ciascun gruppo al totale, in percentuale. Raggruppamento: Di solito è necessario raggruppare per etichette del grafico. Esempio di ripartizione demografica delle vendite Immaginiamo di voler visualizzare la percentuale di vendite apportata da ciascun segmento demografico di età per la nostra azienda. Per preparare i dati si può utilizzare la seguente query: SELECT CASE WHEN age < 18 THEN 'Below 18' WHEN age BETWEEN 18 AND 24 THEN '18-24' WHEN age BETWEEN 25 AND 34 THEN '25-34' WHEN age BETWEEN 35 AND 44 THEN '35-44' WHEN age BETWEEN 45 AND 54 THEN '45-54' WHEN age >= 55 THEN '55+' END AS age_group, SUM(sales_amount) AS total_sales, SUM(sales_amount) * 100.0 / SUM(SUM(sales_amount)) OVER () AS pc_of_sales FROM sales_data WHERE age IS NOT NULL GROUP BY age_group; Spiegazione: CASE ... END AS age_group: Utilizzando l'istruzione CASE, dividiamo l'età dei nostri clienti in gruppi di età specifici. Ogni gruppo costituirà una fetta del nostro grafico a torta. SUM(sales_amount) AS total_sales: Utilizzando la funzione aggregata SUM(), si calcola l'importo totale delle vendite per ogni gruppo di età. SUM(sales_amount) * 100.0 / SUM(SUM(sales_amount)) OVER () AS pc_of_sales: Utilizzando una funzione a finestra, si calcola la percentuale delle vendite totali di ciascun gruppo di età. WHERE age IS NOT NULL: Per pulire i dati, filtriamo le righe con valori NULL nella colonna age. GROUP BY age_group: Infine, raggruppiamo i dati in base alle fasce d'età definite per riassumere le vendite di ciascuna categoria. 4. Istogramma Un istogramma è un grafico che mostra la distribuzione o la diffusione dei dati raggruppandoli in intervalli. È particolarmente utile quando si cercano modelli e tendenze nella distribuzione dei dati. Questo è spesso il caso della distribuzione dei tempi di consegna, del volume delle vendite per fasce di prezzo e altro ancora. Esempio di istogramma Di quali informazioni abbiamo bisogno per creare un istogramma? Etichette: Abbiamo bisogno del valore iniziale e finale per ogni bin. Qui utilizziamo intervalli di 10 minuti sull'asse X. Altezzadelle barre: Per ciascun intervallo, è necessario calcolare l'altezza. Di solito si utilizza una funzione aggregata con GROUP BY. Ordinamento: Di solito si utilizza ORDER BY in modo che i bin siano ordinati dal più basso al più alto. Esempio di distribuzione dei tempi di consegna Supponiamo di lavorare per un'azienda di consegne alimentari e di voler trovare la variazione dei tempi di consegna a Barcellona. È possibile preparare i dati eseguendo la seguente query SQL: SELECT FLOOR(delivery_duration / 10) * 10 AS bin_start, (FLOOR(delivery_duration / 10) + 1) * 10 AS bin_end, COUNT(*) AS no_of_orders FROM deliveries WHERE region = ‘Barcelona’ GROUP BY bin_start ORDER BY bin_start; Spiegazione: FLOOR(delivery_duration / 10) * 10 AS bin_start: Per prima cosa, vogliamo creare i nostri intervalli. Per farlo, raggruppiamo delivery_duration in intervalli di 10 minuti. Questo calcola il limite inferiore di ogni intervallo (bin_start). (FLOOR(delivery_duration / 10) + 1) * 10 AS bin_end: Successivamente, dobbiamo calcolare il limite superiore di ciascun intervallo (bin_end) aggiungendo 10 minuti a bin_start. COUNT(*) AS no_of_orders: Ora contiamo il numero di consegne che rientrano in ogni intervallo di 10 minuti. WHERE region = 'Barcelona': Per limitare i dati a Barcellona, filtriamo la colonna region. GROUP BY bin_start: Raggruppiamo le consegne per ogni intervallo di 10 minuti. ORDER BY bin_start: Infine, ordiniamo i gruppi in ordine crescente in base all'orario di inizio. 5. Grafico a dispersione Per ultimo, ma non meno importante, diamo un'occhiata al grafico di dispersione. Questo grafico è in grado di visualizzare la potenziale relazione tra un massimo di tre variabili tracciando i punti di dati. Identifica efficacemente le correlazioni e i collegamenti nei dati, come ad esempio il costo della pubblicità rispetto alle vendite o la soddisfazione dei dipendenti rispetto alla fidelizzazione. Esempio di grafico a dispersione Di quali informazioni abbiamo bisogno per creare un grafico a dispersione? Coordinate X e Y per ogni punto. Etichetta: Opzionalmente, abbiamo bisogno di un'etichetta per ogni punto, per dare a ciascun punto un colore (come nel nostro grafico di esempio) o un'etichetta. Questi dati possono essere semplicemente selezionati da un database o possono essere calcolati, come nel nostro esempio. Esempio di efficacia pubblicitaria Supponiamo di voler analizzare l'efficacia di diverse forme di pubblicità negli ultimi due anni, osservandone l'impatto sulle vendite. Utilizzando SQL, possiamo preparare i dati come segue: SELECT DATE_FORMAT(sd.sale_date, '%Y-%m') AS year_month, mc.advertising_type, SUM(mc.advertising_spend) AS total_advertising_spend, SUM(sd.sales) AS total_sales FROM marketing_campaigns mc JOIN sales_data sd ON mc.campaign_id = sd.campaign_id WHERE sd.sale_date BETWEEN '2022-01-01' AND '2023-12-31' GROUP BY month, mc.advertising_type ORDER BY year_month; Spiegazione: Ogni punto del grafico corrisponde a un mese e a un tipo di pubblicità: DATE_FORMAT(sd.sale_date, '%Y-%m') AS year_month: Per prima cosa, estraiamo l'anno e il mese da sale_date. mc.advertising_type: Qui selezioniamo il tipo di pubblicità, che verrà utilizzato come tonalità nel grafico a dispersione. La tinta è essenzialmente un terzo livello che possiamo aggiungere al colore per differenziare le categorie in un grafico. SUM(mc.advertising_spend) AS total_advertising_spend: Aggreghiamo la spesa pubblicitaria totale per ogni mese e per ogni tipo di pubblicità utilizzando SUM(). SUM(sd.sales) AS total_sales: Anche in questo caso utilizziamo SUM() per aggregare le vendite totali. JOIN sales_data sd ON mc.campaign_id = sd.campaign_id: Dato che i dati desiderati si trovano in due tabelle separate, uniamo la tabella marketing_campaigns con la tabella sales_data tabella basata sulla colonna comune campaign_id. WHERE sd.sale_date BETWEEN '2022-01-01' AND '2023-12-31': Per concentrarci sui dati del 2022 e del 2023, filtriamo la data di vendita. GROUP BY year_month, mc.advertising_type: Raggruppiamo i dati in base alle categorie del nostro grafico, ottenendo un totale per mese-anno per tipo di pubblicità. ORDER BY year_month: Infine, ordiniamo i dati in ordine crescente per mese. Se volete imparare altri trucchi e suggerimenti per utilizzare SQL per la creazione di grafici, date un'occhiata al nostro articolo Visualizzazione dei dati con SQL: Guida completa per analisti di dati. Creare grafici con i dati esportati da SQL Dopo aver preparato i dati, dobbiamo utilizzare strumenti specializzati per creare grafici al di fuori di SQL. Vediamo alcune alternative e come importare i dati SQL in questi strumenti. 1. Python Python offre librerie come Matplotlib e seaborn per la creazione di vari grafici. Utilizzando la libreria Python pandas, è possibile importare e visualizzare i dati da SQL. Vediamo come fare. Passo 1: Esportare i risultati della query SQL in CSV: dopo aver eseguito la query SQL, salvare i risultati in un file CSV. Per le istruzioni passo-passo, consultare l'articolo corrispondente al proprio dialetto SQL: Come esportare dati da Microsoft SQL Server in un file CSV Come esportare dati da PostgreSQL in un file CSV Come esportare dati da MySQL in un file CSV Come esportare un file CSV da una query T-SQL Passo 2: caricare il CSV in Python: Caricare il file CSV in un DataFrame utilizzando il pacchetto pandas di Python, come si vede nel codice seguente: import pandas as pd # Load the CSV file df = pd.read_csv('/path/to/sql_export.csv') # Preview the DataFrame print(df.head()) Fase 3: Creare un grafico utilizzando una libreria Python: Una volta importati i dati, possiamo creare il nostro grafico. In questo esempio, creeremo un grafico a barre utilizzando Matplotlib e seaborn: import matplotlib.pyplot as plt import seaborn as sns # Create a bar chart plt.figure(figsize=(10, 6)) sns.barplot(x='product_category', y='total_sales', data=df, palette='viridis') # Customize the chart plt.title('Total Sales by Product Category (2023)', fontsize=16) plt.xlabel('Product Category', fontsize=12) plt.ylabel('Total Sales', fontsize=12) plt.xticks(rotation=45) plt.tight_layout() # Show the chart plt.show() 2. Tableau Tableau è una soluzione di Business Intelligence facile da usare che si collega direttamente ai database SQL e genera dashboard dinamici e interattivi. Può anche supportare direttamente le query SQL utilizzando il suo editor SQL personalizzato. Esistono anche connettori per i principali database come MySQL, PostgreSQL e Snowflake. 3. Power BI Power BI è una popolare applicazione di Microsoft che può essere utilizzata per creare report e dashboard interattivi. Anch'essa include il supporto nativo per SQL Server e altri database, consentendo così di eseguire query SQL dirette. 4. Looker Studio Looker Studio (ex Google Data Studio) è un'applicazione basata su Cloud per lo sviluppo di dashboard interattivi e condivisibili. È perfetta per gli utenti che hanno già familiarità con l'ambiente Google. È compatibile con database come BigQuery, MySQL e PostgreSQL e supporta query personalizzate. Imparare l'SQL per i grafici e l'analisi dei dati L'SQL è alla base dell'analisi dei dati e quindi svolge un ruolo importante nella creazione di grafici. Sebbene SQL non disponga di strumenti integrati per la creazione di grafici, la sua forza risiede nella preparazione e nell'organizzazione dei dati per la loro visualizzazione. L'uso di SQL in combinazione con strumenti come Python, Tableau, Power BI o Looker Studio migliora la capacità di estrarre informazioni utili e di presentarle in modo efficace. Se siete alle prime armi con l'SQL e volete migliorare le vostre competenze, è il momento di iniziare. La padronanza di SQL non solo velocizzerà il processo di preparazione dei dati, ma migliorerà anche la vostra capacità di produrre grafici e dashboard visivamente accattivanti. Iniziate oggi stesso a imparare l'SQL con il nostro corso SQL per l'analisi dei dati! Potete anche approfondire altre competenze che potrebbero essere utili per la vostra carriera nel nostro articolo Skills Every Data Analyst Should Have. Buon apprendimento! Tags: analisi dati