2016-10-03 274 views
1

对于监测质量随时间变化的设备,我们希望计算线性部分数据的斜率。查找曲线中的线性部分和斜率

以下示例是通过读取设备生成的数据帧生成的。

import pandas as pd 
import matplotlib.pyplot as plt 

#Find DataFrame 
df = pd.read_table("raw_data.csv", sep =";", skiprows = 11, decimal = ",") 

# Plot figures 
plt.figure() 
plt.plot(df["Time(s)"], df["Mass(g)"], label = "Raw Data") 
plt.axvspan(2, 17, color="b", alpha=0.2) 
plt.xlabel("Time (s)") 
plt.ylabel("Mass (g)") 
plt.legend(loc=0) 
plt.axis([0, None, 0, None]) 
plt.show() 

Example curve

是否有可能适合在这个曲线(大约突出显示部分)的直线部分,并计算它的斜率?

回答

1

使用numpy.polyfit()

df_sampled = df[:max_value] #select the points you want to keep 
m, p = numpy.polyfit(df_sampled.index, df_sampled, deg=1) 

该函数返回斜率和您的线性回归的截距

+0

谢谢,这已经有所帮助!但是,手动选择线性部分中的点一次只能用于一个文件,因为我有超过300个,我正在寻找一种更通用的方法来找到这个线性部分? –

+0

如果你所有的曲线都是这样的,你可以做的就是将阈值设置为最大值质量的95%或90%,并将其横坐标作为线性部分的终点。我不知道你在模拟什么,但通常这是我们想要在物理学中分离暂时和永久状态时所做的。 – MMF