Ir al contenido principal

Implementar funciones de Python y el modelo de previsión Prophet en Tableau con TabPy

Aprende scripting avanzado en Python para Tableau implementando el modelo de previsión Facebook Prophet en el servidor de Tableau y creando visualizaciones dinámicas de series temporales.
Actualizado 17 sept 2026  · 12 min leer

Explorar con IA

ChatGPTClaudePerplexity

Tabpy logo

TabPy Tools

TabPy Tools es un paquete de Python para implementar y gestionar funciones de Python en el servidor de TabPy. 

Vamos a profundizar en las funcionalidades de TabPy Tools.

Conexión con TabPy

La función del cliente te permite conectar la API de Python con el servidor de TabPy usando la URL y el puerto. 

rom tabpy.tabpy_tools.client import Client

client = Client('http://localhost:9004/')

Podemos usar el objeto "client" para configurar la autenticación y gestionar funciones de Python en el servidor. 

Autenticación

Puedes establecer tu nombre de usuario y contraseña con la función "set_credentials". Es necesario configurar las credenciales para implementar un modelo en el servidor. 

Nota: ejecuta esta función solo si has habilitado la autenticación en el servidor TabPy. Lee la documentación de configuración del servidor para saber más.  

client.set_credentials('username', 'password')

Implementar una función

Crea una función y publícala usando la función `client.deploy()`. Requiere tres argumentos: nombre de la función, función de Python y descripción. 

La función addition suma dos campos y devuelve la lista. Más adelante accederemos a la función "add" desde Tableau.

client.deploy('add', addition, 'Adds two numbers x and y')

Implementar un modelo

Cuando hayas entrenado un modelo de machine learning e implementes la función de inferencia, Tableau guardará automáticamente el modelo y la definición de funciones usando cloudpickle. Permanece en la memoria del servidor para ofrecer tiempos de respuesta más rápidos. 

En pocas palabras: no tienes que volver a entrenar tu modelo cada vez que cambie algo en Tableau. Veremos más sobre la implementación de modelos en las próximas secciones. 

Eliminar endpoints

Para eliminar una función o un modelo, usa la función `remove`. Solo necesita el nombre de la función. 

client.remove('add')

>>> Para funciones más avanzadas, echa un vistazo al repositorio TabPy/tabpy en GitHub.

Implementar una función de Python desde el IDE

Al igual que en la primera parte, crearemos una función del coeficiente de correlación de Pearson. En lugar de escribir la función en Tableau, la implementaremos en el servidor con la API de Python y luego accederemos a ella desde un cálculo de Tableau.

En esta sección usaremos el conjunto de datos Sales Store Product de Kaggle para calcular la correlación entre los campos de ventas y beneficio. 

Kaggle Dattaset

Dataset de Kaggle Sales Store Product

Antes de ponernos a escribir código en Python, asegúrate de tener la última versión del paquete TabPy.

pip install -U tabpy

Ejecuta el servidor en local desde la terminal.

tabpy

Cliente de TabPy 

Si ya manejas Python, esta parte te resultará sencilla. Puedes aprender todo sobre funciones en Python con el curso de introducción a Python.

  1. Importaremos Client de tabpy_tools y NumPy para los cálculos. 
  2. Conectaremos con el servidor TabPy usando la URL y el puerto.
  3. Crearemos pearson_correlation_coefficient() que recibirá x e y y devolverá el coeficiente de correlación en una sola columna. 
  4. Usaremos la función client.deploy() para publicar la función "pcc". Requiere tres argumentos: nombre, función y descripción.  
from tabpy.tabpy_tools.client import Client
import numpy as np


client = Client('http://localhost:9004/')


def pearson_correlation_coefficient(x,y):
    return np.corrcoef(x,y)[0,1]


client.deploy('pcc', pearson_correlation_coefficient, 'correlation coefficient is extracted of x and y')

Consulta a TabPy 

Ahora invocaremos esta función en Tableau usando tabpy.query(). Requiere el nombre de la función de Python y marcadores de posición de argumentos como _arg1 y _arg2. 

  1. Dentro de SCRIPT_REAL, añade el script de consulta y agrega los campos. 
  2. El script de consulta empieza con return y termina con [‘response’] para extraer el resultado del JSON.
  3. Configura el cálculo de tabla predeterminado en el campo Customer Name.
  4. Aplica y pulsa OK.

PCC calculated Field

Campo calculado del coeficiente de correlación de Pearson

Puedes revisar la primera parte del tutorial para entender el script de Tableau. 

SCRIPT_REAL("return tabpy.query('pcc',_arg1, _arg2)['response']",
SUM([Sales]),SUM([Profit]))

Visualización de datos 

Crearemos ahora una visualización que muestre la correlación por categoría de producto y segmento de cliente.

  1. Arrastra y suelta Customer Name en Detail y Ship Mode en Color del panel Marks
  2. Arrastra y suelta Customer Segment y pcc (campo calculado de correlación) en la estantería Columns
  3. Arrastra y suelta Product Category en la estantería Rows.

Correlation bar chart

Gráfico de barras del coeficiente de correlación 

En la mayoría de los casos, el sector Corporate muestra una alta correlación entre ventas y beneficio. En general, puedes usar los coeficientes de correlación para tomar decisiones basadas en datos y aumentar el beneficio de la empresa. 

Lee nuestro tutorial Python details on correlation para conocer otros coeficientes de correlación, cómo calcular la correlación en Python y la relación entre correlación y causalidad. 

Implementar Prophet en Tableau 

En esta sección aprenderemos a implementar el modelo de previsión Facebook Prophet y a modificar campos de fecha. Entrenaremos el modelo de series temporales con Apple Stock Prices de 2015 a 2020. 

Apple stock prices

Dataset de Kaggle Apple Stock Prices (2015-2020)

Antes de escribir los scripts y crear la visualización de previsiones en Tableau, necesitamos probar el código de Python y evaluar el modelo de previsión en Jupyter Notebook

Facebook Prophet 

Facebook Prophet es una biblioteca de código abierto para la previsión automática de series temporales univariantes. Funciona especialmente bien con estacionalidades anuales, semanales y diarias. 

¿Por qué Prophet? 

Es robusto frente a datos ausentes, cambios de tendencia y valores atípicos.  

Instalación de Prophet

Puedes instalar el paquete de Python Prophet con el siguiente comando en la terminal. 

pip install pystan==2.19.1.1
pip install prophet

O, si usas el entorno de Python de Anaconda, utiliza este comando. 

conda install -c conda-forge prophet

Inicialización del proyecto 

  1. Empezaremos importando pandas para la ingesta y manipulación de datos y Prophet para entrenar y evaluar modelos de previsión. 
  2. Leeremos el fichero del dataset de acciones de Apple (AAPL.csv) con la función read_csv de pandas.
  3. Definiremos X con las columnas date y high.   
  4. Mostraremos la forma del dataframe y visualizaremos la serie temporal de la columna high
import pandas as pd
from prophet import Prophet
data = pd.read_csv("AAPL.csv")
X = data.loc[:, ['date','high']]
print(X.shape)
X.plot();

Salida

(1258, 2)

La acción de Apple aumenta con el tiempo. Ha tenido dos caídas, pero se ha recuperado hasta un crecimiento sostenido. 

Apple stock line graph

Sigue el tutorial de análisis de series temporales en Python de Hugo Bowne-Anderson para profundizar. También puedes hacer el curso de DataCamp sobre análisis de series temporales en Python para practicar.  

Construcción del modelo de machine learning

En esta parte prepararemos los datos para Prophet y lo entrenaremos con los hiperparámetros por defecto. 

  1. Renombra las columnas como ds y y
  2. Convierte la columna ds a datetime (fecha)
  3. Define un model con Prophet()
  4. Entrena el modelo con model.fit()
X.columns = ['ds', 'y']
X['ds']= pd.to_datetime(X['ds'], format='%Y-%m-%d').dt.date

model = Prophet()
# fit the model
model.fit(X)

Evaluación del modelo

Para evaluar tenemos que añadir fechas futuras al conjunto de datos. Podemos hacerlo con make_future_dataframe. 

Configuraremos:

  • periods en 365 días
  • freq en "D". También puedes cambiarlo a "Y", pero entonces tendrás que poner periods en 1.
  • include_history en false para omitir los datos anteriores.
future = model.make_future_dataframe(periods=365,
                                    freq='D',
                                    include_history=False
                                    )
future.tail()

Salida

Como vemos, el dataset future termina en el año 2021. 

        ds
360 2021-05-18
361 2021-05-19
362 2021-05-20
363 2021-05-21
364 2021-05-22

El siguiente paso es usar estos datos para predecir los valores high de la acción de Apple. Después mostraremos 'ds', 'yhat', 'yhat_lower' y 'yhat_upper'. 

yhat_lower e yhat_upper definen el rango aceptable de variación. En pocas palabras, el precio puede subir hasta 485.3 y bajar hasta 365.4. Esta información ayuda a los day traders a evaluar el riesgo. 

forecast = model.predict(future)
forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail

Salida

    ds       yhat yhat_lower yhat_upper
360 2021-05-18 423.757736 365.415878 485.293438
361 2021-05-19 423.862811 365.527086 482.751097
362 2021-05-20 423.918642 365.233839 482.501335
363 2021-05-21 423.842872 364.454184 483.672508
364 2021-05-22 421.187822 360.181717 481.024524

Vamos a visualizar la previsión con la función plot(). Requiere los valores predictivos para mostrar el gráfico de puntos y líneas con el rango aceptable en azul. 

model.plot(forecast)

La visualización siguiente indica que las acciones de Apple crecerán en valor sin caídas. 

Apple growth

Puedes mejorar la previsión ajustando hiperparámetros relacionados con previsiones saturantes, puntos de cambio de tendencia, estacionalidad, efectos de festivos y regresores, estacionalidad multiplicativa, intervalos de incertidumbre y valores atípicos. También puedes ajustarlos automáticamente con técnicas de ajuste de hiperparámetros. Aprende más sobre Facebook Prophet en la documentación.  

La previsión de series temporales es un campo amplio. Puedes aprenderlo a fondo con nuestro tutorial de previsión de series temporales de Moez Ali. Cubre análisis de series temporales, modelos estadísticos, frameworks de Python y AutoML. 

También puedes hacer nuestro curso visualizing time series data in Python y aprender sobre gráficos de líneas, detección de estacionalidad, tendencia y ruido, y visualización de múltiples series temporales.  

Implementar la inferencia del modelo 

En esta sección implementaremos la inferencia del modelo. Así podremos almacenar el modelo y la definición de la función en el servidor TabPy para ofrecer respuestas más rápidas. 

Primero conectaremos el Client usando la URL y el puerto. Luego definiremos la función prophet_forecasting. 

  1. Recibirá un número de años para la previsión y lo usará para crear un dataframe de fechas future
  2. Hará predicciones con model.predict y el dataframe future
  3. Renombrará "yhat" como "y" para poder concatenar la previsión con los datos históricos. 
  4. La última parte tiene truco. En Tableau no podemos añadir valores al campo data. En su lugar, desplazaremos los valores de Date en 365*n, donde n es el número de años.

Por último, lo empaquetaremos y lo implementaremos en el servidor TabPy con client.deploy(). Pondremos como nombre de la función "prophet". El argumento override nos ayudará a crear versiones del modelo y la función. Esto es útil en la fase inicial mientras depuramos el código. 

from tabpy.tabpy_tools.client import Client

client = Client('http://localhost:9004/')

def prophet_forecasting(n):
 
    future = model.make_future_dataframe(periods=365*n,include_history=False)
    prediction = model.predict(future)
    prediction.rename(columns={"yhat":"y"}, inplace=True)
 
    return pd.concat([X,prediction[['ds','y']]])['y'].to_list()[365*n:]

client.deploy('prophet',
              prophet_forecasting,
              'forecast time series data using prophet',override=True)

Configuración en Tableau

Para controlar el número de años desde Tableau, tenemos que crear un parámetro Years. Se usará en la función prophet

Podemos crear el parámetro Years haciendo clic derecho en la sección Data y seleccionando Create Parameter. Cambia el Data type a Integer, Current value a 1 y, en Range, establece Minimum en 1 y Maximum en 5.

Create parameter

Creación del parámetro Years 

Después crearemos un campo calculado Forecast_date. Usaremos el campo Date y desplazaremos los valores por el número de Years

Forecast date field

Campo calculado Forecast_date 

La función DATEADD sumará los Years al campo Date y luego truncará a día. 

DATETRUNC('day',DATEADD('year',[Years],[Date])))

En la siguiente parte crearemos un campo calculado forecast y accederemos al modelo implementado con tabpy.query(). La función de consulta tiene dos partes: el nombre de la función de Python y la lista de marcadores de posición para los argumentos. 

Forecast calculated field

Campo calculado forecast 

En nuestro caso es un solo argumento, así que añadiremos _arg1. Envolveremos la consulta en la función de Tableau llamada SCRIPT_REAL y pasaremos el parámetro Years como entrada. Antes de pulsar OK, asegúrate de que los resultados se calculan a lo largo de Forecast_date. Puedes cambiarlo haciendo clic en el texto azul (Default Table Calculation).

SCRIPT_REAL("return tabpy.query('prophet',_arg1[0])['response']",
[Years]
)

Después crearemos un campo calculado Actual usando el campo High y el parámetro Years

Actual calculated field

Campo calculado Actual 

LOOKUP nos ayudará a desplazar los valores de High en Years*365. Por ejemplo, si el parámetro Years es 2, desplazará los valores en 730.

LOOKUP(SUM([High]),[Years]*365)

Real vs. previsión

Ya estamos en la recta final. Para trazar el gráfico de líneas de Actual vs. Forecast, sigue estos pasos:

  1. Ve a la sección Parameters abajo a la izquierda, haz clic derecho en el parámetro Years y selecciona Show Parameters.
  2. Arrastra y suelta Forecast_date en la estantería Columns. Cámbialo a Day.
  3. Arrastra y suelta Measure Names desde Dimensions a Filters. Selecciona solo Actual y forecast
  4. Arrastra y suelta Measure Names desde Dimensions a Color.
  5. Por último, arrastra y suelta Measure Names desde Measures a la estantería Rows.

Tras seguir todos los pasos, verás Actual y forecast en colores distintos. 

Actual vs. Forecast line plot

Gráfico de líneas Actual vs. Forecast

El gráfico anterior está lejos de ser perfecto y requiere ajustar hiperparámetros, validación cruzada, imputar valores y fechas ausentes y mejorar la función de fecha. 

Conclusión

En este tutorial hemos aprendido a construir e implementar un modelo de machine learning en el servidor TabPy y a acceder a él desde un script de Tableau. También hemos visto lo básico de tabpy_tools y cómo usarlo para implementar funciones o modelos. 

Aprende más sobre previsión financiera con el curso de DataCamp. Verás cuentas de resultados, balance y ratios de previsión, formateo de datos en bruto, gestión de fechas y periodos financieros y supuestos y variaciones en las previsiones.

La previsión de series temporales es el punto de partida; podemos mejorar las predicciones entrenando los datos con otros algoritmos de machine learning como:

  • Autoregressive Integrated Moving Average (ARIMA)
  • Seasonal Autoregressive Integrated Moving Average (SARIMA)
  • Exponential Smoothing (ES)
  • XGBoost
  • LSTM (Deep Learning)
  • Temporal Fusion Transformer (Google)

Si eres nuevo en Tableau y quieres aprender visualización de datos y cálculo estadístico, haz el itinerario de habilidades Tableau fundamentals

Esta es la última parte de la serie. En la primera parte de este tutorial de TabPy, aprendimos todo sobre TabPy y ejecutamos un script de Python en Tableau para crear varios clústeres de anuncios de Airbnb en Ámsterdam.

Temas
Python
Ciencia de datos
Tableau

Cursos de Python 

Curso

Introducción a Python

4 h
7M
Domina los fundamentos del análisis de datos con Python en cuatro horas y descubre sus paquetes más usados.
Ver detallesRight Arrow
Iniciar Curso
Ver másRight Arrow
Relacionado

Tutorial

Tutorial de visualización de datos con Python y Tableau

Aprende a utilizar Python para ampliar las funciones de visualización de datos de Tableau.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Tutorial

Tutorial sobre la ejecución de scripts de Python en Power BI

Descubre las distintas formas de utilizar Python para optimizar el análisis, la visualización y el modelado de datos en Power BI.
Joleen Bothma's photo

Joleen Bothma

9 min

Tutorial

Predicciones bursátiles con LSTM en Python

Descubra las redes de memoria larga a corto plazo (LSTM) en Python y cómo puede utilizarlas para hacer predicciones bursátiles.
Thushan Ganegedara's photo

Thushan Ganegedara

15 min

Tutorial

Funciones en Python: cómo llamar y escribir funciones

Descubre cómo escribir funciones en Python reutilizables y eficientes. Domina los parámetros, las sentencias return y temas avanzados como las funciones lambda. Organiza mejor tu código con main() y otras buenas prácticas.
Karlijn Willems's photo

Karlijn Willems

14 min

Tutorial

Tutorial seleccionar columnas con Python

Utiliza Python Pandas y selecciona columnas de los DataFrames. ¡Sigue nuestro tutorial con ejemplos de código y aprende hoy mismo distintas formas de seleccionar tus datos!
DataCamp Team's photo

DataCamp Team

7 min

Tutorial

Tutorial sobre cómo ejecutar consultas SQL en Python y R

Aprenda formas fáciles y eficaces de ejecutar consultas SQL en Python y R para el análisis de datos y la gestión de bases de datos.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Ver MásVer Más