def plot_prevision(train, test ,p,d,q,P,D,Q, *args, **kwargs): focused = kwargs.get('focused', None) exog = kwargs.get('exog', None) if focused is None: focused="Weekly_Sales" y = prepareDS(train, focused) if exog is None: ex = None tex = None else: ex = prepareDS(train, exog) tex = prepareDS(test, exog) yhat = sarimax_fit(y,ex, p,d,q,P,D,Q) prevision = yhat.get_forecast(steps=len(test.set_index('Date').resample('MS').mean()), exog=tex) pred_ci = prevision.conf_int() ax = y.plot(label='observed', figsize=(14, 7)) prevision.predicted_mean.plot(ax=ax, label='Forecast') ax.fill_between(pred_ci.index, pred_ci.iloc[:, 0], pred_ci.iloc[:, 1], color='k', alpha=.25) ax.set_xlabel('Date') ax.set_ylabel(focused) plt.legend() plt.show()
def check_prevision(train, p,d,q,P,D,Q, *args, **kwargs): focused = kwargs.get('focused', None) exog = kwargs.get('exog', None) if focused is None: focused="Weekly_Sales" y = prepareDS(train, focused) if exog is None: ex = None else: ex = prepareDS(train, exog) yhat = sarimax_fit(y[:'2012-01-01'],ex[:'2012-01-01'], p,d,q,P,D,Q) pred = yhat.get_forecast(steps=len(y['2012-01-01':]), exog=ex['2012-01-01':]) # pred = yhat.get_prediction(start=pd.to_datetime('2012-01-01'), dynamic=False) prevision_ci = pred.conf_int() ax = y.plot(label='observed') pred.predicted_mean.plot(ax=ax, label='Predicted', alpha=.7) ax.fill_between(prevision_ci.index, prevision_ci.iloc[:, 0], prevision_ci.iloc[:, 1], color='k', alpha=.2) ax.set_xlabel('Date') ax.set_ylabel(focused) plt.legend() plt.show() y_forecasted = pred.predicted_mean y_truth = y['2012-01-01':] # Compute the mean square error rms = sqrt(mean_squared_error(y_forecasted, y_truth)) print('Forecast Root Mean Squared Error {}'.format(round(rms, 2))) return yhat
def showgraph(vdf, xaxis, yaxis, xlabel, ylabel, title): vdf = vdf.set_index(xaxis) for col in np.nditer(yaxis): vdf[str(col)].plot() plt.legend(loc=1) plt.xlabel(xlabel) plt.ylabel(ylabel) plt.title(title) plt.show()
def show_decompose(df, *args, **kwargs): focused = kwargs.get('focused', None) model = kwargs.get('model', None) if focused is None: focused = "Weekly_Sales" y = df[['Date', focused]].copy() y = y.set_index('Date') rcParams['figure.figsize'] = 18, 8 decomposition = tsa.seasonal_decompose(y, model=model) fig = decomposition.plot() plt.gcf().canvas.set_window_title(model.upper()) plt.show()
def corr_heatmap(df): corr = df.corr() # Generate a mask for the upper triangle mask = np.zeros_like(corr, dtype=np.bool) mask[np.triu_indices_from(mask)] = True # Set up the matplotlib figure f, ax = plt.subplots(figsize=(11, 9)) # Generate a custom diverging colormap cmap = sns.diverging_palette(220, 10, as_cmap=True) # Draw the heatmap with the mask and correct aspect ratio sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0, square=True, linewidths=.5, cbar_kws={"shrink": .5}) plt.title('Correlation Heat Map') plt.show()
def plotforecast(train, test): traindt = train.set_index('Date') testdt = test.set_index('Date') testdt.fillna(value=000, inplace=True) forecast_col='Weekly_Sales' X = np.array(traindt.drop(columns=[forecast_col])) X = scale(X) newX = np.array(testdt) newX = scale(newX) y = np.array(traindt[forecast_col]) y = scale(y) print(len(X), len(y)) clf = LinearRegression(n_jobs=-1) clf.fit(X, y) forecast_set = clf.predict(newX) traindt['Forecast'] = np.nan last_date = traindt.iloc[-1].name last_unix = last_date.timestamp() one_week = 86400*7 next_unix = last_unix + one_week for i in forecast_set: next_date = datetime.fromtimestamp(next_unix) next_unix += 86400 traindt.loc[next_date] = [np.nan for _ in range(len(traindt.columns)-1)]+[i] traindt[forecast_col].plot() traindt['Forecast'].plot() plt.legend(loc=4) plt.xlabel('Date') plt.ylabel('Revenue') plt.legend(loc=1) plt.show()