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)
第一次尝试在 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)