数据分析进阶-基于tsfresh的多变量时间序列聚类
作者:互联网
前言
上一篇博客主要尝试了基于tslearn的单变量时间序列聚类,多变量时间序列的方法经过一番搜索也没有找到合适的方式,因此考虑借助强大的时间序列特征提取工具tsfresh与KMeans尝试多变量时间序列的聚类实验
基于日消费总额+日消费次数的时间序列聚类
一、tsfresh
tsfresh可以提取的时间序列特征数量相当全面,其中对特征的中文解读建议查看以下两篇博客:
- https://www.jianshu.com/p/de2f7d333b9f
- https://www.jianshu.com/p/073f2c0dab39
对具体如何使用还是得好好地啃官方文档:
- https://tsfresh.readthedocs.io/en/latest/
二、实验说明
实验利用日消费总额+日消费次数时间序列两个变量,首先基于tsfresh提取相关特征并利用Kmeans完成聚类
1.输入数据
源数据的格式如下:user, type, date1, date2, date3, …, daten,tsfresh对输入数据的格式有要求,所以首先需要对数据进行处理
import pandas as pd
def transform_data():
"""
转换数据格式,获取tsfresh所需的输入
:return:
"""
data = pd.read_csv('data.csv')
data = data.set_index(["USER", "TYPE"])
data = data.stack().reset_index(level=None, drop=False, inplace=False)
data = data.rename(columns={"USER": "id", "TYPE": "kind", "level_2": "time", 0: "value"})
return data
2.特征提取
因为特征很多,不一定完全适用,因此仅提取以下特征:
from tsfresh import extract_features
def extract_feature():
"""
基于tsfresh提取多变量的时序特征
:return:
"""
# 特征提取
input_data = transform_data()
fea = extract_features(input_data, column_id='id', column_sort='time', column_kind="kind", column_value="value")
# 特征选择
fea_filtered = fea[f_col]
return fea
3.输出聚类结果
import numpy as np
from sklearn.cluster import KMeans
def cluster_res(k):
"""
输出聚类结果
:return:
"""
data = pd.read_csv("./res/all_feature.csv", index_col=None)[f_col_1]
input_data = data
input_data = input_data.fillna(0)
print(input_data.info())
input_data = input_data.apply(lambda x: (x - np.min(x)) / (np.max(x) - np.min(x))) # 归一化
est = KMeans(n_clusters=k)
est.fit(input_data)
res = est.predict(input_data)
return res
标签:return,进阶,聚类,序列,input,tsfresh,data 来源: https://blog.csdn.net/Totoro1745/article/details/117884366