最近在搞华为的KPI的竞赛,从没搞过时间序列真是一头雾水,姑且做点记录吧
TsFresh
tsfresh(听说)是很常用的,从时间序列中提取特征的库。安装的话我直接从pycharm的设置那里加的。
样本数据下载
from tsfresh.examples.robot_execution_failures import download_robot_execution_failures, load_robot_execution_failures
download_robot_execution_failures()
timeseries, y = load_robot_execution_failures()
第一次下载失败,挂个梯子它又可以了= =|||
下载后的数据长这样
timeseries是DataFrame类型
y是bool类型的(但是我不知道这是啥?label吗?)
特征提取
from tsfresh.feature_extraction import extract_features
extracted_features_0 = extract_features(timeseries, column_id="id", column_sort="time")
extracted_features_0.shape
这里我试自己的数据的时候,time那列写的value,然后不知道为什么总说我value那里没值,把column_sort这个参数删了后又可以跑通了。但是column_id是不可以省略的,就算全是1也得写一列1。
这个函数还可以设一些参数
settings = ComprehensiveFCParameters()
settings = EfficientFCParameters()
settings = MinimalFCParameters()
# 三个随便选一个,特征数一个比一个少
extracted_features_0 = extract_features(timeseries, column_id="id", column_sort="time",default_fc_parameters=settings)
特征过滤
from tsfresh import select_features
from tsfresh.utilities.dataframe_functions import impute
impute(extracted_features_0)
features_filtered_0 = select_features(extracted_features_0, y) #特征选择
特征获取和过滤一起进行
from tsfresh import extract_relevant_features
features_filtered_direct_0 = extract_relevant_features(timeseries,y, column_id="id", column_sort="time")
features_filtered_direct_0.shape
这一步据大佬所说,得出的结果和上面两个分开做的没什么不同。但是由于我没设置好y还是什么原因的,就只停在了特征提取的过程,没有自己试验过。
另:extract_relevant_features和extract_features一样,可以有很多参数设置,都是一样的。
关于滑窗
我能想到的方法就是写个for循环截取固定长度的数据,将那些时间序列的id全设置成1,得到一个【1 * 特征数量】的矩阵,最后再合并特征矩阵。
缺点是,最后窗口长度的数据没办法计算特征了,要么扔掉几个时间序列的点,要么就复制后面的特征至相同长度。我问了一下老师,时间序列如果够长的话就删了吧。