我们最近在完成一些时间序列聚类任务,偶然发现了 tslearn 库。我很想看看启动和运行 tslearn 已内置的聚类有多简单,结果发现非常简单直接(点击文末“阅读原文”获取完整代码数据)。
相关视频
首先,让我们导入我们需要的库:
import pandas as pd
import numpy as np
from tslearn.preprocessing import TimeSeriesScalerMeanVariance
netdata_pandas 用于提取一些时间序列数据到 pandas 数据框中。
plots为我添加了常用的绘图功能,我发现自己一次又一次地回到了这个库中。
我们定义输入,基本上任何我们可以使用和更改的东西都值得作为输入添加到笔记本的顶部:
n_clusters = 50 # number of clusters to fit
smooth_n = 15 # n observations to smooth over
model = 'kmeans' # one of ['kmeans','kshape','kernelkmeans','dtw']
接下来,我们将获取数据并进行一些标准的预处理:
if n_charts:
charts = np.random.choice(get_chart_list(host), n_charts).tolist()
print(charts)
else:
charts = get_chart_list(host)
# get data
df = get_data(host, charts, after=-n, before=0)
if smooth_n > 0:
if smooth_func == 'mean':
df = df.rolling(smooth_n).mean().dropna(how='all')
elif smooth_func == 'max':
df = df.rolling(smooth_n).max().dropna(how='all')
elif smooth_func == 'min':
df = df.rolling(smooth_n).min().dropna(how='all')
elif smooth_func == 'sum':
df = df.rolling(smooth_n).sum().dropna(how='all')
else:
df = df.rolling(smooth_n).mean().dropna(how='all')
print(df.shape)
df.head()
然后用 tslearn 建立我们的聚类模型了:
if model == 'kshape':
model = KShape(n_clusters=n_clusters, max_iter=10, n_init=2).fit(X)
elif model == 'kmeans':
model = TimeSeriesKMeans(n_clusters=n_clusters,
有了聚类集群后,我们就可以制作一些辅助对象供以后使用:
cluster_metrics_dict = df_cluster.groupby(['cluster'])['metric'].apply(lambda x: [x for x in x]).to_dict()
cluster_len_dict = df_cluster['cluster'].value_counts().to_dict()
clusters_final.sort()
df_cluster.head()
最后,让我们分别绘制每个聚类群组,看看有什么结果:
for cluster_number in clusters_final:
x_corr = df[cluster_metrics_dict[cluster_number]].corr().abs().values
plot_lines(df, cols=cluster_metrics_dict[cluster_number], renderer='colab', theme=None, title=plot_title)
这里有一些很好的例子:
点击标题查阅往期内容
R语言k-Shape时间序列聚类方法对股票价格时间序列聚类
左右滑动查看更多
01
02
03
04
聚类的典型特征是你总是会得到一些看起来很糟糕的随机数据,尤其是凭空选取了上面的很多参数,最重要的是 K 聚类的数量,鉴于我们有大量的指标(超过 700 个),我将其设置为 50 个。
总之,我发现 tslearn 库非常有用,因为它节省了我很多时间,让我快速建立并运行了一个工作原型,所以我期待着还能使用它提供的其他一些时间序列相关功能。
点击文末“阅读原文”
获取全文完整代码数据资料。
本文选自《Python用 tslearn 进行时间序列聚类可视化》。
点击标题查阅往期内容
K-means和层次聚类分析癌细胞系微阵列数据和树状图可视化比较
KMEANS均值聚类和层次聚类:亚洲国家地区生活幸福质量异同可视化分析和选择最佳聚类数
PYTHON实现谱聚类算法和改变聚类簇数结果可视化比较
有限混合模型聚类FMM、广义线性回归模型GLM混合应用分析威士忌市场和研究专利申请数据
R语言多维数据层次聚类散点图矩阵、配对图、平行坐标图、树状图可视化城市宏观经济指标数据
r语言有限正态混合模型EM算法的分层聚类、分类和密度估计及可视化
Python Monte Carlo K-Means聚类实战研究
R语言k-Shape时间序列聚类方法对股票价格时间序列聚类
R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
R语言谱聚类、K-MEANS聚类分析非线性环状数据比较
R语言实现k-means聚类优化的分层抽样(Stratified Sampling)分析各市镇的人口
R语言聚类有效性:确定最优聚类数分析IRIS鸢尾花数据和可视化
Python、R对小说进行文本挖掘和层次聚类可视化分析案例
R语言k-means聚类、层次聚类、主成分(PCA)降维及可视化分析鸢尾花iris数据集
R语言有限混合模型(FMM,finite mixture model)EM算法聚类分析间歇泉喷发时间
R语言用温度对城市层次聚类、kmean聚类、主成分分析和Voronoi图可视化
R语言k-Shape时间序列聚类方法对股票价格时间序列聚类
R语言中的SOM(自组织映射神经网络)对NBA球员聚类分析
R语言复杂网络分析:聚类(社区检测)和可视化
R语言中的划分聚类模型
基于模型的聚类和R语言中的高斯混合模型
r语言聚类分析:k-means和层次聚类
SAS用K-Means 聚类最优k值的选取和分析
用R语言进行网站评论文本挖掘聚类
基于LDA主题模型聚类的商品评论文本挖掘
R语言鸢尾花iris数据集的层次聚类分析
R语言对用电负荷时间序列数据进行K-medoids聚类建模和GAM回归
R语言聚类算法的应用实例