首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清洗时间序列数据

清洗时间序列数据
EN

Data Science用户
提问于 2017-11-12 19:41:55
回答 5查看 2.7K关注 0票数 1

我有一个关于计算机程序每日使用情况的时间序列数据,下面是一个例子

  • 2017年-11-10:0
  • 2017年-11-09: 14
  • 2017年-11-08:0
  • 2017年-11-07:6
  • 2017年-11-06: 102
  • 2017年-11-05:0
  • 2017年-11-04:0

正如你所看到的那样,11-06的峰值是102。由于我们收集这些数据的方式,我们知道数据可能是错误的,而且我们确信,根据其他值,102是不正确的。

所以我们需要清理这些肮脏的价值观。

有数学方法可以做到这一点吗?有蟒蛇库来帮助我们吗?

EN

回答 5

Data Science用户

回答已采纳

发布于 2017-11-13 04:15:00

我想你有几个选择:

  • 如果你有一个预先设定的排除异常值的规则,比如你知道数据不应该超过100的硬阈值,那么像x = [e for e in x if e < 100]这样简单的事情就可以了。
  • 如果您有一个参数信念,例如任何超出平均或四分位数的标准偏差的观察结果,都是异常值;那么您可以实现已经提到的其他答案。
  • 否则,您可以采用集群方法。在这里,我相信你的第一次机会应该是k-均值聚类。这是超级容易建立和解释。请看下面的代码。x = [0,14,0,6,102,0,0] from sklearn.cluster import KMeans kmeans = KMeans(n_clusters=2).fit(np.array(x).reshape(-1, 1)) #First cluster: np.array(x)[np.where(kmeans.labels_ == 0)] #Second cluster (outliers): np.array(x)[np.where(kmeans.labels_ == 1)]
  • 众所周知,K-均值对异常值很敏感,因此,您尝试过的一种更健壮的方法,如MeanShift,是k-均值的好对手。我会两个都跑,坚持对我来说更有意义的结果。

希望这能有所帮助!

票数 3
EN

Data Science用户

发布于 2017-11-12 20:39:34

一种解决方案是使用meanvariance来检测时间序列中的异常值。例如:

代码语言:javascript
复制
>> data=np.array([0,0,102,6,0,14,0])
>> c = 1
>> abs(data - np.mean(data)) < c * np.std(data)
Output: array([ True,  True, False,  True,  True,  True,  True], dtype=bool)
>> clean_data= data[abs(data - np.mean(data)) < c * np.std(data)]
Output: array([ 0,  0,  6,  0, 14,  0])

您可以根据您的需求使用c

此外,与其使用所有数据的均值和方差,还可以对时间序列的每个部分(例如每30天)分别使用此方法。因为在不同的时间间隔内可能会有不同的行为。

票数 1
EN

Data Science用户

发布于 2017-11-12 21:17:38

下面是我正在使用的内容:

代码语言:javascript
复制
import numpy as np
from sklearn.cluster import MeanShift, estimate_bandwidth

x = [0,14,0,6,102,0,0]

X = list(zip(x,np.zeros(len(x))))
bandwidth = estimate_bandwidth(X, quantile=0.2)
ms = MeanShift(bandwidth=bandwidth, bin_seeding=True)
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_

labels_unique = np.unique(labels)
n_clusters_ = len(labels_unique)

X = np.array(X)
for k in range(n_clusters_):
    my_members = labels == k
    print(k, X[my_members, 0])

来源:http://scikit-learn.org/stable/auto_示例/群集/情节_均值_shift.html

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/24637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档