我正在尝试从.csv文件中的两列生成绘图。x轴的列采用短日期格式mm/dd/yyyy,而y轴的列对应于吸收测量数据作为常规数值。从这里,我还试图从这个图中收集一条线性回归线。以下是我到目前为止的情况:
mydateparser = lambda x: datetime.strptime(x, '%m/%d/%y')
df = (pd.read_csv('calibrationabs200211.csv', index_col=[], parse_dates=[0],
infer_datetime_format=True, date_parser=mydateparser))
if mydateparser == '%m/%d/%y':
print('Error')
else:
mydateparser = float(mydateparser)
plt.figure(figsize=(15,7.5))
x = df.iloc[:, 0].values.reshape(-1, 1)
y = df.iloc[:, 1].values.reshape(-1, 1)
linear_regressor = LinearRegression()
linear_regressor.fit(x, y)
y_pred = linear_regressor.predict(y)
plt.scatter(x, y, color='teal')
plt.plot(x, y_pred, color='teal')
plt.show()
但是,我收到一条错误消息:
TypeError Traceback (most recent call last)
<ipython-input-272-d087bdc00150> in <module>
12 print('Error')
13 else:
---> 14 mydateparser = float(mydateparser)
15
16 plt.figure(figsize=(15,7.5))
TypeError: float() argument must be a string or a number, not 'function'
此外,如果我注释掉if语句,我最终会得到一个情节,but with a faulty linear regression.我对python、matplotlib和pandas相当陌生,因此非常感谢任何帮助或反馈。谢谢大家!
在代码的开头,您将mydateparser声明为lambda函数。 但是float()函数只接受字符串或数字
我假设您使用日期列作为线性回归模型的一个特性,这是没有意义的
相反,您可以派生新的功能,如月份、年份、日期、工作日/周末,以用于线性回归
如果你想预测下一个日期的价值,你可以看看时间序列预测模型
Python中的函数可以用作变量,这就是您在这里要做的。如果要将函数的结果用于某个对象,则需要通过在函数名后添加()来调用它
mydateparser是一个函数,mydateparser()是调用该函数的结果
此外,我认为你所做的比较没有意义。datetime.strTime返回一个datetime对象,稍后将其与字符串进行比较。事实上,我根本不知道你想用那块石头做什么
您的回归需要将日期转换为某种数值进行回归。我建议使用matplotlib的日期转换函数,特别是date2num,来尝试这一点
应该是以下几点:
必须调用lambda才能使其正常工作
相关问题 更多 >
编程相关推荐