其他分享
首页 > 其他分享> > 数据分析进阶-基于tsfresh的多变量时间序列聚类

数据分析进阶-基于tsfresh的多变量时间序列聚类

作者:互联网

前言

上一篇博客主要尝试了基于tslearn的单变量时间序列聚类,多变量时间序列的方法经过一番搜索也没有找到合适的方式,因此考虑借助强大的时间序列特征提取工具tsfresh与KMeans尝试多变量时间序列的聚类实验

基于日消费总额+日消费次数的时间序列聚类

一、tsfresh

tsfresh可以提取的时间序列特征数量相当全面,其中对特征的中文解读建议查看以下两篇博客:

对具体如何使用还是得好好地啃官方文档:

二、实验说明

实验利用日消费总额+日消费次数时间序列两个变量,首先基于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