咨询:如何在Shapelets DataApp中运用Matrix Profile进行时间序列模式识别
在Shapelets DataApp中使用Matrix Profile进行时间序列模式识别
前置准备
- 确保Shapelets DataApp环境已安装
shapelets-studio及配套依赖,Matrix Profile功能是Shapelets时间序列工具集的内置能力,无需额外安装第三方库。 - 准备好自有时间序列数据,推荐CSV格式(含时间戳列与数值列),也可直接通过DataApp的数据源连接导入数据库、云存储中的数据。
具体实现步骤
1. 导入数据到DataApp
在DataApp代码编辑器中,用Shapelets内置的dataframe模块读取数据:
from shapelets.dataframes import read_csv # 读取本地CSV文件(连接数据源时用对应read_*方法) df = read_csv("your_time_series_data.csv") # 将时间列转为datetime类型 df['timestamp'] = df['timestamp'].to_datetime()
2. 计算Matrix Profile
调用Shapelets的matrix_profile模块完成核心计算,需指定滑动窗口大小(根据业务关注的模式长度或时间序列周期调整):
from shapelets.ts import matrix_profile # 设置滑动窗口大小,示例值为30,可按需调整 window_size = 30 # 基于数值列计算Matrix Profile mp_result = matrix_profile(df['value'], window_size=window_size)
3. 识别目标模式
Matrix Profile结果包含mp(最小匹配距离)、indices(匹配模式索引)、segments(自动识别的重复/异常段)等核心字段,可针对性提取模式:
- 提取重复模式:
# 筛选距离小于阈值的匹配项(阈值根据数据波动调整) repeat_indices = mp_result[mp_result['mp'] < 0.1]['indices'] # 根据索引提取对应时间序列片段 repeat_segments = df.iloc[repeat_indices:repeat_indices+window_size]
- 提取异常值:
# 取Matrix Profile值处于99分位数以上的点作为异常值 outlier_indices = mp_result[mp_result['mp'] > mp_result['mp'].quantile(0.99)].index outlier_data = df.iloc[outlier_indices]
4. 可视化结果
用Shapelets的visualization模块将分析结果展示在DataApp界面:
from shapelets.visualization import line_plot, scatter_plot # 绘制原始时间序列并标记异常点 line_plot(df, x='timestamp', y='value', title="原始时间序列") scatter_plot(outlier_data, x='timestamp', y='value', color='red', title="识别出的异常点") # 绘制Matrix Profile曲线 line_plot(mp_result, x='index', y='mp', title="Matrix Profile 曲线")
5. 封装为交互组件
将逻辑封装成可交互的DataApp控件,比如添加调整窗口大小的滑块:
from shapelets.widgets import slider # 创建滑块控件,范围10-100,初始值30 window_slider = slider(min_value=10, max_value=100, value=30, label="滑动窗口大小") # 定义滑块值变更时的回调函数,重新计算并更新图表 def on_window_change(value): updated_mp = matrix_profile(df['value'], window_size=value) line_plot(updated_mp, x='index', y='mp', title=f"Matrix Profile (窗口大小: {value})") window_slider.on_change(on_window_change)
注意事项
- 窗口大小需合理设置:过小会引入过多噪声,过大则会忽略小型模式,建议先根据时间序列周期设初始值,再通过交互调整。
- 百万级以上数据量时,Shapelets会自动启用并行计算加速Matrix Profile运算,无需额外配置。
- 若需自定义模式匹配(比如指定参考模式查找),可使用
matrix_profile.match_pattern()方法,传入参考模式序列即可。
内容的提问来源于stack exchange,提问作者Amelia Patel
相关产品推荐
相关产品推荐

