Desbloqueando el éxito del modelado de datos 3 tablas contextuales imprescindibles

'3 tablas contextuales imprescindibles para el éxito del modelado de datos desbloqueado'

Y cómo obtener datos valiosos de forma gratuita

Foto de Tobias Fischer en Unsplash

El modelado de datos puede ser una tarea desafiante para los equipos de análisis. Con entidades comerciales únicas en cada organización, encontrar la estructura y granularidad adecuadas para cada tabla se vuelve indefinido. ¡Pero no temas! Algunos de los datos que necesitas son simples, gratuitos y ocupan un espacio mínimo de almacenamiento.

Cuando tus datos están modelados por completo, puedes obtener los siguientes beneficios:

  • Las consultas son menos complejas de generar y, por lo tanto, más legibles.
  • Los informes son más escalables, lo que reduce los valores codificados en duro.
  • Es probable que gastes menos tiempo buscando dónde se encuentran los datos correctos.

A continuación se presentan 3 tablas genéricas que pueden agilizar el análisis de tu equipo, las cuales puedes incorporar en tu Almacén de Datos en el contexto de un modelo dimensional.

🗓️La Dimensión de la Fecha

Para Informes de Series Temporales

Si alguna vez has necesitado mostrar una métrica comercial en un punto dado en el tiempo, esta es una tabla casi esencial que debes tener. Por ejemplo, puedes que te pidan:

  • “¿Cómo se veían las ventas en el ejercicio fiscal 23?”
  • ¿Puedes mostrarme la pérdida de clientes diariamente?

La gerencia frecuentemente busca información desde una perspectiva de series temporales, haciendo preguntas como “¿Cómo está creciendo o disminuyendo x a lo largo del tiempo?”. Una dimensión de fecha permite un análisis flexible de varias métricas basadas en diferentes atributos de fecha.

La mayoría de las tablas de Dimensión de Fecha se pueden crear únicamente utilizando instrucciones DDL directamente en tu Almacén de Datos, con una combinación de funciones de fecha.

En el siguiente ejemplo, uso SQL de BigQuery para hacer precisamente eso:

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

Desglose de esto:

  • Comenzamos con la función GENERATE_DATE_ARRAY, que devuelve una matriz de fechas en un rango que especificas. Luego usamos la función UNNEST para descomponer cada elemento de la matriz en filas separadas, al igual que en una tabla de base de datos estándar. Las matrices en BigQuery utilizan una fila para mostrar múltiples valores.
  • Luego, con nuestra columna full_date que se generó a partir de la matriz desagrupada (que representa fechas en el formato XXXX-MM-DD), podemos usar muchas de las funciones EXTRACT de BigQuery para obtener segmentos de full_date en campos separados (mes, día, año, etc.)
  • La función FORMAT_DATE tiene un propósito similar a EXTRACT, pero nos brinda más personalización sobre cómo aparece el valor de la fecha. Puedes usar elementos de formato especiales descritos en la documentación de Google para obtener detalles sobre lo que significa cada carácter ‘%’.
  • También usamos la función DATE_SUB que simplemente resta un valor de una fecha. Esto se utiliza para obtener el año fiscal relacionado, que en este ejemplo comenzaría en julio de cada año calendario. En esta función, especificamos una cantidad (1 – infinito) y el intervalo (día, meses, años, etc.)

🌎La Dimensión del Código Postal

Para Informes Geoespaciales

Si se te ha asignado la tarea de crear una visualización de mapa de calor o un análisis geoespacial general, una dimensión de código postal será de gran utilidad para tu equipo. Esto te brinda la opción de visualizar elementos por latitud y longitud, agregar por nombres de condados, zona horaria y agregar datos de población para comparar.

Una Dimensión de Código Postal es una gran tabla complementaria a una tabla de clientes. Al usar el campo del Código Postal como clave de unión, puedes agregar datos contextuales significativos sobre dónde reside tu base de clientes y los patrones detrás de ellos.

Opendatasoft proporciona varios conjuntos de datos gratuitos con un conector de API de código abierto. Uno que es perfecto para este caso de uso es el conjunto de datos Puntos de Códigos Postales de EE.UU. – Estados Unidos de América. En este enlace, pasa el cursor sobre la pestaña ‘API’ que te permite configurar la URL para obtener datos en formato JSON.

Con unas pocas líneas en Python, podemos obtener el siguiente DataFrame de Pandas:

import requests
import pandas as pd

url = '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')

Desglose de esto:

  • Aquí uso la biblioteca requests para obtener los datos que se encuentran en la URL siguiente mostrada en la variable ‘url’, que se generó en la pestaña API del sitio web de opendatasoft.
  • Con Pandas, utilizo la función json_normalize para convertir los datos en formato JSON en un DataFrame de Pandas.

📈La Tabla de Hechos de las Tasas de Cambio

Para Análisis Financiero

Las organizaciones con clientes internacionales a menudo necesitan convertir todas las transacciones a una moneda base para informes financieros. Para comprender cómo una fluctuación en la tasa de cambio puede estar afectando los ingresos, un feed de tasas de cambio diarias es una excelente solución para responder a esta pregunta.

Esto también es particularmente impactante cuando se combina con informes de series temporales, para agregar tasas de cambio en el momento de una venta determinada. En mi experiencia construyendo paneles que muestran los ingresos de los clientes en un período de tiempo, los usuarios comerciales siempre apreciaron la capacidad de alternar diferentes valores de tasas de cambio frente a los ingresos en un eje de fechas. La tabla de Tasas de Cambio te permite lograr todo esto.

Exchangerate.host es otro sitio de código abierto que te permite conectarte a un feed de tasas de cambio diarias. A continuación se muestra un ejemplo de cómo obtener los datos. Puedes encontrar más información en su documentación:

import requests
import pandas as pd
from datetime import date

# Obtener las últimas fechas de la API de exchangerate
url = 'https://api.exchangerate.host/latest?base=USD'
response = requests.get(url)
rates = response.json()

# Convertir la lista JSON en un DataFrame de Pandas y previsualizar
rates_list = list(rates['rates'].items())
df_rates = pd.DataFrame(rates_list, columns=['currency', 'value'])
df_rates['cycle_date'] = date.today()
df_rates.head(10)

Desglose de esto:

  • Aquí usamos la biblioteca requests para obtener datos en forma de un diccionario de Python desde la URL especificada en la variable ‘url’. Ten en cuenta que he editado la URL según la documentación para especificar la moneda base en USD. Esto significa que todas las tasas estarán relacionadas con su tasa de cambio en USD.
  • A continuación, convertimos el diccionario de Python en una lista, tomando los datos de la clave ‘rates’.
rates_list = list(rates['rates'].items())
  • Luego, convertimos la lista en un DataFrame de Pandas y etiquetamos los encabezados de las columnas:
df_rates = pd.DataFrame(rates_list, columns=['currency', 'value'])
  • Finalmente se agrega una columna ‘cycle_date’ que representa la fecha del ciclo de ETL, que indica cuándo los datos se ingresan en el Data Warehouse.

Conclusión

Incorporar datos disponibles públicamente en su Data Warehouse puede proporcionar un valor inmediato a los equipos de análisis con un esfuerzo mínimo. Estas tablas, al igual que cualquier entidad de datos correctamente modelada, eliminan la necesidad de almacenar lógica de negocios anidada únicamente en herramientas de BI como Power BI o Tableau. En su lugar, proporcionan una fuente centralizada de datos a la que varios analistas pueden hacer referencia y aplicar de manera consistente en sus informes. Este enfoque cohesivo para el modelado de datos permite a los equipos escalar la generación de informes sin esfuerzo, garantizando transparencia en los datos de origen. Con la capacidad de aprovechar este tipo de tablas contextuales, su organización puede agilizar los procesos de análisis, eliminar discrepancias en los informes y lograr un mayor nivel de toma de decisiones basada en datos.

¡Feliz modelado!