Sbloccare il successo della modellazione dei dati 3 tabelle contestuali indispensabili

Sbloccare il successo della modellazione dei dati richiede tre tabelle contestuali indispensabili.

E come acquisire dati preziosi gratuitamente

Foto di Tobias Fischer su Unsplash

La modellazione dei dati può essere un compito impegnativo per i team di analisi. Con entità aziendali uniche in ogni organizzazione, trovare la giusta struttura e granularità per ogni tabella diventa un’operazione a cielo aperto. Ma non temere! Alcuni dei dati di cui hai bisogno sono semplicistici, gratuiti e occupano uno spazio di archiviazione minimo.

Quando i tuoi dati sono modellati completamente, puoi ottenere i seguenti vantaggi:

  • Le query sono meno complesse da generare e quindi più leggibili.
  • I report sono più scalabili, riducendo i valori codificati.
  • Probabilmente stai impiegando meno tempo per trovare dove si trovano i dati corretti.

Ecco di seguito 3 tabelle generiche che possono semplificare l’analisi del tuo team, che puoi acquisire nel tuo Data Warehouse nel contesto di un modello dimensionale.

🗓️La dimensione della data

Per la segnalazione delle serie temporali

Se hai mai avuto bisogno di mostrare una metrica aziendale in un determinato momento, questa è una tabella quasi indispensabile da avere. Ad esempio, potresti sentirti chiedere:

  • “Com’era il volume delle vendite nell’anno fiscale 23?”
  • Puoi mostrarmi l’abbandono dei clienti su base giornaliera?

La direzione aziendale cerca frequentemente informazioni prospettiche da una prospettiva temporale, ponendo domande come “Come sta crescendo o diminuendo x nel tempo?”. Una dimensione data consente un’analisi flessibile di varie metriche basate su diversi attributi di data.

La maggior parte delle tabelle di dimensioni data può essere creata esclusivamente utilizzando dichiarazioni DDL direttamente nel tuo Data Warehouse, con una combinazione di funzioni di data.

Nell’esempio seguente, utilizzo BigQuery SQL per fare proprio questo:

CREATE OR REPLACE TABLE `your_project.your_dataset.date_dimension` ASSELECTfull_date, EXTRACT(MONTH FROM full_date) AS calendar_month_number, EXTRACT(YEAR FROM full_date) AS calendar_year, EXTRACT(QUARTER FROM full_date) AS calendar_quarter, FORMAT_DATE('%B', full_date) AS calendar_month_name, EXTRACT(DAYOFWEEK FROM full_date) AS week_name, FORMAT_DATE('%A', full_date) AS day_name, CASE    WHEN EXTRACT(DAYOFWEEK FROM full_date) BETWEEN 2 AND 6      THEN TRUE    ELSE FALSE  END AS day_is_weekday, CASE    WHEN EXTRACT(DAYOFWEEK FROM full_date) = 1 THEN DATE_SUB(full_date, INTERVAL 2 DAY) -- Sunday    WHEN EXTRACT(DAYOFWEEK FROM full_date) = 2 THEN DATE_SUB(full_date, INTERVAL 3 DAY) -- Monday    ELSE DATE_SUB(full_date, INTERVAL 1 DAY)  END AS last_weekday, EXTRACT(MONTH FROM DATE_ADD(full_date, INTERVAL 6 MONTH)) AS fiscal_month, EXTRACT(YEAR FROM DATE_ADD(full_date, INTERVAL 6 MONTH)) AS fiscal_year, EXTRACT(QUARTER FROM DATE_ADD(full_date, INTERVAL 6 MONTH)) AS fiscal_quarterFROM UNNEST(GENERATE_DATE_ARRAY('2020-01-01', '2050-12-31', INTERVAL 1 DAY)) AS full_date

Scomponendo tutto questo:

  • Iniziamo con la funzione GENERATE_DATE_ARRAY, che restituisce un array di date in un intervallo specificato. Quindi utilizziamo la funzione UNNEST per separare ogni elemento dell’array in righe separate, proprio come in una tabella di database standard. Gli array in BigQuery utilizzano una riga per visualizzare valori multipli.
  • Quindi, con la nostra colonna full_date che è stata generata dall’array unnestato (che rappresenta date nel formato XXXX-MM-DD), possiamo utilizzare molte delle funzioni EXTRACT di BigQuery per ottenere segmenti di full_date in campi separati (mese, giorno, anno, ecc.)
  • La funzione FORMAT_DATE ha uno scopo simile a EXTRACT, ma ci offre maggiore personalizzazione su come appare il valore della data. Puoi utilizzare elementi di formato speciali descritti nella documentazione di Google per i dettagli su cosa significa ciascun carattere ‘%’.
  • Utilizziamo anche la funzione DATE_SUB che sottrae semplicemente un valore da una data. Questo viene utilizzato per ottenere l’anno fiscale correlato, che in questo esempio inizierebbe a luglio di ogni anno solare. In questa funzione, specifichiamo una quantità (1 – infinito) e l’intervallo (giorni, mesi, anni, ecc.)

🌎La Dimensione del Codice Postale

Per la Segnalazione Geospaziale

Se ti è stato chiesto di creare una visualizzazione a mappa di calore o un’analisi geospaziale generale, una dimensione del codice postale sarà molto utile per il tuo team. Questo ti offre la possibilità di visualizzare elementi per latitudine e longitudine, aggregare per nomi di contea, fuso orario e aggiungere dati demografici per il benchmarking.

Una Dimensione del Codice Postale è una tabella supplementare ottima per una tabella di clienti. Utilizzando il campo del codice postale come chiave di unione, puoi aggiungere dati contestuali significativi su dove risiede la tua base di clienti e i modelli dietro di loro.

Opendatasoft fornisce vari set di dati gratuiti con un connettore API open-source. Uno perfetto per questo caso d’uso è il dataset US Zip Codes Points – Stati Uniti d’America. Su questo link, passa con il mouse alla scheda ‘API’ che ti permette di configurare l’URL per ottenere i dati in formato JSON.

Con poche righe in Python, possiamo ottenere il seguente DataFrame di Pandas:

import requestsimport pandas as pdurl = 'https://data.opendatasoft.com/api/records/1.0/search/?dataset=georef-united-states-of-america-zc-point%40public&q=&facet=stusps_code&facet=ste_name&facet=coty_name&facet=cty_code&facet=zip'response = requests.get(url)zips = response.json()pd.json_normalize(zips,record_path='records')

Scomponendo questo:

  • Qui uso la libreria requests per recuperare i dati trovati all’URL seguente mostrato nella variabile ‘url’, che è stato generato nella scheda API del sito web opendatasoft.
  • Con Pandas, utilizzo la funzione json_normalize per convertire i dati JSON in un DataFrame di Pandas.

📈La Tabella dei Tassi di Cambio FX

Per l’Analisi Finanziaria

Le organizzazioni con clienti internazionali spesso hanno bisogno di convertire tutte le transazioni in una valuta di base per la segnalazione finanziaria. Per capire come una fluttuazione dei tassi di cambio possa influenzare i ricavi, un feed giornaliero dei tassi di cambio FX è una soluzione ottima per rispondere a questa domanda.

Questo è particolarmente efficace quando abbinato a segnalazioni basate su serie temporali, per aggiungere i tassi di cambio al momento di una vendita specifica. Nella mia esperienza nella creazione di cruscotti che mostrano i ricavi dei clienti nel corso del tempo, gli utenti aziendali hanno sempre apprezzato la possibilità di selezionare diversi valori dei tassi di cambio FX rispetto ai ricavi su un asse delle date. La tabella dei tassi di cambio FX ti consente di fare tutto questo.

Exchangerate.host è un altro sito open-source che ti consente di connetterti a un feed giornaliero dei tassi di cambio FX. Di seguito è riportato un esempio di come recuperare i dati – ulteriori informazioni possono essere trovate nella loro documentazione:

import requestsimport pandas as pdfrom datetime import date#Recupera le date più recenti dall'API exchangerateurl = 'https://api.exchangerate.host/latest?base=USD'response = requests.get(url)rates = response.json()# Converti la lista JSON in un DataFrame di Pandas e visualizzarates_list = list(rates['rates'].items())df_rates = pd.DataFrame(rates_list, columns=['currency', 'value'])df_rates['cycle_date'] = date.today()df_rates.head(10)

Scomponendo questo:

  • Qui utilizziamo la libreria requests per recuperare i dati sotto forma di un dizionario Python dall’URL specificato nella variabile ‘url’. Si prega di notare che ho modificato l’URL in base alla documentazione per specificare la valuta di base in USD. Ciò significa che tutti i tassi saranno relativi al tasso di cambio con l’USD.
  • Successivamente, convertiamo il dizionario Python in una lista, prendendo i dati dalla chiave ‘rates’.
rates_list = list(rates['rates'].items())
  • Quindi, convertiamo la lista in un DataFrame di Pandas e assegniamo i nomi delle colonne:
df_rates = pd.DataFrame(rates_list, columns=['currency', 'value'])
  • Infine viene aggiunta una colonna ‘cycle_date’ che rappresenta la data del ciclo ETL, indicando quando i dati vengono inseriti nel Data Warehouse.

Conclusioni

L’inclusione di dati disponibili pubblicamente nel tuo Data Warehouse può fornire un valore immediato ai team di analisi con un minimo sforzo. Queste tabelle, così come qualsiasi entità di dati adeguatamente modellata, eliminano la necessità di memorizzare logica di business nidificata esclusivamente negli strumenti BI come Power BI o Tableau. Invece, forniscono una fonte centralizzata di dati a cui più analisti possono fare riferimento e applicare in modo coerente nelle loro relazioni. Questo approccio coeso alla modellazione dei dati consente ai team di scalare facilmente la generazione di report, garantendo trasparenza sui dati di origine. Con la capacità di sfruttare questo tipo di tabelle contestuali, la tua organizzazione può ottimizzare i processi di analisi, eliminare discrepanze nella generazione di report e raggiungere un livello superiore di decisioni basate sui dati.

Happy Modeling!