tableau / TabPy

Execute Python code on the fly and display results in Tableau visualizations:
https://tableau.github.io/TabPy/
MIT License
1.56k stars 598 forks source link

Time Series Forcasting TABLEAU + PYTHON #477

Closed iknals closed 3 years ago

iknals commented 3 years ago

Environment information:

Describe the issue I am trying to run the forecasting code below in Tablue. I am getting an error saying

2021-01-31,18:48:06 [ERROR] (base_handler.py:base_handler:115): Responding with status=500, message="Error processing script", info="LinAlgError : Singular matrix" 2021-01-31,18:48:06 [ERROR] (web.py:web:2161): 500 POST /evaluate (::1) 2030.10ms

SCRIPT_REAL( ' import pandas as pd import numpy as np import matplotlib.pylab as plt from matplotlib.pylab import rcParams dates1 = _arg1 passeng = _arg2 order_arima = min(_arg3) seasonal_diff = min (_arg4) ma_param = min (_arg5) months_forecast = min(_arg6) ts = pd.DataFrame({"dates2": dates1,"Passengers": passeng}) ts["Passengers"] = ts["Passengers"].astype("float64") ts = ts.set_index(["dates2"]) ts_log = np.log(ts) ts_log.index = pd.to_datetime(ts_log.index) ts_log_diff = ts_log - ts_log.shift() ts_log_diff["Passengers"][0] = 0 from statsmodels.tsa.arima_model import ARIMA model = ARIMA(ts_log_diff, order=(order_arima, seasonal_diff, ma_param)) results_ARIMA = model.fit(disp=-1) predictions_value = results_ARIMA.forecast(months_forecast)[0] from dateutil.relativedelta import relativedelta add_month = relativedelta(months=1) predictions_dates = list() for i in range(months_forecast): predictions_dates.append ( results_ARIMA.fittedvalues.index[-1] + ((i+1)*add_month)) forecast_log_diff = pd.Series(predictions_value, index=predictions_dates) predictions_ARIMA_diff = pd.Series(results_ARIMA.fittedvalues, copy=True) predictions_ARIMA_diff_cumsum = predictions_ARIMA_diff.cumsum() predictions_ARIMA_log = pd.Series(np.asscalar(ts_log.ix[0]), index=ts_log.index) predictions_ARIMA_log = predictions_ARIMA_log.add(predictions_ARIMA_diff_cumsum,fill_value=0) predictions_ARIMA = np.exp(predictions_ARIMA_log) forecast_log_diff_ARIMA = pd.Series(forecast_log_diff, copy=True) forecast_ARIMA_log_diff_cumsum = forecast_log_diff_ARIMA.cumsum() forecast_ARIMA_log = pd.Series(np.asscalar(ts_log.ix[-1]), index=forecast_log_diff_ARIMA.index) forecast_ARIMA_log = forecast_ARIMA_log.add(forecast_ARIMA_log_diff_cumsum,fill_value=0) forecast_ARIMA = np.exp(forecast_ARIMA_log) forecast_ARIMA_2 = predictions_ARIMA.append(forecast_ARIMA) forecast_ARIMA_2 = forecast_ARIMA_2[len(forecast_ARIMA):] return list(forecast_ARIMA_2) ', ATTR([Month]), ATTR([#Passengers]), min([AR (Time lag)]), MIN([I Seasonal Difference ]), MIN([MA (Moving average)]), MIN([Months Forecast]))

To Reproduce https://www.clearpeaks.com/tableau-python/

Expected behavior That the forecast works plots a line.

0golovatyi commented 3 years ago

@iknals Does the script work when you run in Python (outside of Tableau workflow)?

0golovatyi commented 3 years ago

@iknals Do you have updates for running the script outside of Tableau workflow?