Example #1
0
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()
Example #2
0
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
Example #3
0
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()
Example #4
0
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()
Example #5
0
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()