使用polyfit后如何获得趋势线方程?
How to get trendline equation after using polyfit?
这是我的数据:
x轴是_time,y轴是IdCount。我先将 _time 转换为日期时间,然后使用以下代码进行浮动:
#to datetime
df['_time'] = pd.to_datetime(df['_time'])
#creating list of _time column
time = df['_time'].tolist()
#time to float in order to make np.polyfit work
def datetime_to_float(d):
return d.timestamp()
time_in_float = []
for i in time:
time_in_float.append(datetime_to_float(i))
在此之后我将 time_in_float 添加到我的 pandas 数据框:
df['time_float'] = time_in_float
并定义了 x 和 y 变量:
x = df['time_float']
y = df['IdCount']
我使用以下代码在我的数据中绘制趋势线:
plt.plot(x, y)
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(x,p(x),"r--")
plt.show()
我现在想得到这条趋势线的方程式:y = ax + b
我使用了在 Whosebug 上找到的这段代码:
print("{0}x + {1}".format(*z))
但是我得到的参数没有多大意义。
我应该如何修改我的代码?
谢谢!
编辑:这里的代码没问题,但提供的解决方案效果更好。
我建议您以这种方式将日期转换为浮动日期(以秒为单位):
df['_time'] = pd.to_datetime(df['_time'])
# compute timedelta from initial time
dt = df['_time'] - df['_time'][0]
# convert timedelta to seconds
# you can choose hours or days or other units here if you want
df['time_float']= dt.astype('timedelta64[s]')
这是我的数据:
x轴是_time,y轴是IdCount。我先将 _time 转换为日期时间,然后使用以下代码进行浮动:
#to datetime
df['_time'] = pd.to_datetime(df['_time'])
#creating list of _time column
time = df['_time'].tolist()
#time to float in order to make np.polyfit work
def datetime_to_float(d):
return d.timestamp()
time_in_float = []
for i in time:
time_in_float.append(datetime_to_float(i))
在此之后我将 time_in_float 添加到我的 pandas 数据框:
df['time_float'] = time_in_float
并定义了 x 和 y 变量:
x = df['time_float']
y = df['IdCount']
我使用以下代码在我的数据中绘制趋势线:
plt.plot(x, y)
z = np.polyfit(x, y, 1)
p = np.poly1d(z)
plt.plot(x,p(x),"r--")
plt.show()
我现在想得到这条趋势线的方程式:y = ax + b
我使用了在 Whosebug 上找到的这段代码:
print("{0}x + {1}".format(*z))
但是我得到的参数没有多大意义。
我应该如何修改我的代码?
谢谢!
编辑:这里的代码没问题,但提供的解决方案效果更好。
我建议您以这种方式将日期转换为浮动日期(以秒为单位):
df['_time'] = pd.to_datetime(df['_time'])
# compute timedelta from initial time
dt = df['_time'] - df['_time'][0]
# convert timedelta to seconds
# you can choose hours or days or other units here if you want
df['time_float']= dt.astype('timedelta64[s]')