Python:来自 Pandas df 的线性回归 - 序号日期转换

Python: Linear regression from Pandas df - ordinal dates conversion

第一次尝试在 Python 中使用基本线性回归进行预测。发现我必须将日期转换为有序日期,然后再转换为二维 numpy 数组。我现在想将 numpy 数组转换回 YYYY/MMM/DD 以获得可用的视觉图,但我失败了。以前从未使用过 numpy,因此 x_full_month.map(dt.datetime.fromordinal) 不起作用,因为在 numpy 中似乎无效。

    from sklearn.linear_model import LinearRegression
    model=LinearRegression()
    df['Date_Ordinal']=df['Date'].map(dt.datetime.toordinal)
    x=df['Date_Ordinal']
    y=df['Cost']
    x_train = x.values.reshape(-1, 1)
    y_train = y.values.reshape(-1, 1)
    y_pred = model.predict(x_train)

根据预测模型,我然后为整月创建一个新的 X 序号日期,以获得整月的响应

    x_full_month = np.arange(737850,737880,1).reshape((-1, 1))
    y_pred_new = model.predict(x_new)
    print('predicted response:', y_pred.T, sep='\n')

这似乎可行,但是有一个日期为 X 的序号(正如预期的那样),我将如何获得一个用于绘图的格式良好的 X。或者把它放回到我更熟悉的 Pandas 数组中?或者,我完全是在绕弯子吗?

编辑:更正参数名称

几个小时后,我找到了解决方案。我仍然确定我这样做效率不高,但下面的步骤对我有用。

    # .flatten converts numpy arrays into pandas df columns
    df = pd.DataFrame(y_pred.flatten(),x_full_month.flatten())  
     
    # creates a new index (as pd.Dataframe made x_full_month the index initially)
    df.reset_index(inplace=True) 
    
    # meaningful column names
    df = df.rename(columns = {'index':'ord_date',0:'cumul_DN'}) 
    
    # Convert oridinal date to yyyy-mm-dd
    df['date']=df['ord_date'].map(dt.datetime.fromordinal)