【发布时间】:2019-04-25 09:50:30
【问题描述】:
我正在尝试检测相关变量在 DataFrame 中的某些数据内线性变化的连续跨度。满足这一点的数据中可能有许多跨度。我基于Robust linear model estimation using RANSAC 使用ransac 开始了我的方法。但是,我在将示例用于我的数据时遇到了问题。
目标
检测相关变量在数据中线性变化的连续跨度。要检测的跨度由20多个连续的数据点组成。所需的输出将是放置连续跨度的范围日期。
玩具示例
在下面的玩具示例代码中,我生成随机数据,然后设置数据的两个部分以创建线性变化的连续跨度。然后我尝试将线性回归模型拟合到数据中。我使用的其余代码(此处未显示)只是Robust linear model estimation using RANSAC 页面中的其余代码。但是我知道我需要更改剩余的代码才能达到目标。
import pandas as pd
import matplotlib.pyplot as plt
from sklearn import linear_model, datasets
import numpy as np
## 1. Generate random data for toy sample
times = pd.date_range('2016-08-10', periods=100, freq='15min')
df = pd.DataFrame(np.random.randint(0,100,size=(100, 1)), index=times, columns=["data"])
## 2. Set line1 within random data
date_range1_start = "2016-08-10 08:15"
date_range1_end = "2016-08-10 15:00"
line1 = df.data[date_range1_start:date_range1_end]
value_start1 = 10
values1 = range(value_start1,value_start1+len(line1))
df.data[date_range1_start:date_range1_end] = values1
## 3. Set line2 within random data
date_range2_start = "2016-08-10 17:00"
date_range2_end = "2016-08-10 22:30"
value_start2 = 90
line2 = df.data[date_range2_start:date_range2_end]
values2 = range(value_start2,value_start2-len(line2),-1)
df.data[date_range2_start:date_range2_end] = values2
## 4. Plot data
df.plot()
plt.show()
## 5. Create arrays
X = np.asarray(df.index)
y = np.asarray(df.data.tolist())
## 6. Fit line using all data
lr = linear_model.LinearRegression()
lr.fit(X, y)
对于这个玩具示例代码,所需的输出(我还不能编码)将是这样的 DataFrame:
>>> out
start end
0 2016-08-10 08:15 2016-08-10 15:00
1 2016-08-10 17:00 2016-08-10 22:30
错误代码
但是,当执行第 6 步时,出现以下错误:
ValueError: Expected 2D array, got 1D array instead: ... 重塑你的 如果您的数据有单个数据,则使用 array.reshape(-1, 1) 如果包含单个样本,则为 feature 或 array.reshape(1, -1)。
我希望能够在此示例中检测到相关变量线性变化的两个连续跨度(line1 和 line2)。但我无法实现ransac code example 中所述的示例。
问题
我应该在我的代码中修改什么才能继续?而且,是否有更好的方法来检测相关变量线性变化的连续跨度?
【问题讨论】:
-
我们需要样本数据
-
我在玩具示例中创建了示例数据。我可能会提供真实数据,但不确定我该怎么做。我在 pickle 文件中有一些数据。
-
对不起。然后我不明白你所谓的图表。在我看来,图是一组节点和边。
-
通过“数据中的线性图”,我相信@CedricZoppolo 的意思是“相关变量线性变化的连续跨度”。他的意思是图形中的图形,而不是节点和边中的图形。
-
@PeterLeimbigler 是正确的。我可能使用了错误的术语。我会尝试重新表述我的问题,以确保每个人都能理解我的问题。
标签: python pandas numpy scikit-learn ransac