pandas SAC机制使用案例总结

SAC介绍
pandas非常实用的SAC机制,SAC指的是分组操作中的Split-Apply-Combine 3个过程,分布代表数据的切割,应用和组合。

1、Split: 切割,就是通过某个指定的信息进行分组,生成不同的组别
2、Apply:应用,对不同的组别使用不同的功能函数,比如求和,求均值,最值等,可以是python,pandas的内置函数,也可以是自定义的函数。
3、Combine:组合,将Apply应用之后的结果再次组合在一起,得到最终的结果。

通常情况下,SAC过程都需要和groupby函数联合使用。

image.png

项目背景:磁盘故障可以根据其smart值进行监控和预测,smart值是反应磁盘特征的各种特征值,比如各种错误的频率。samrt值每天会产生一条数据。如图一,论文指出,故障磁盘的前n天其磁盘smart值会产生如图一的变化。

所以,根据其故障的变化特征,需要做一下特征处理,按如下图公式进行迭代处理,实现权重衰减。


image.png

具体做法:取一定长度的时间窗口,设定初始阿尔法值,每次用当前值*阿尔法 + 前一个值 * 阿尔法的剩余量,一直迭代到窗口的长度结束,实现权重衰减。

需求实现
取窗口长度为7,计算每个磁盘按日期变化的情况,根据公式

ABS(E7-E6)+ABS(E6-E5) * 0.7+ABS(E5-E4) * 0.7^2+ABS(E4-E3) * >0.7^3+ABS(E3-E2) * 0.7^4+ABS(E2-E1) * 0.7^5

初始值如图:


image.png

期望实现效果:

image.png

方案:使用pandas的组内shift上下平移

f1['smart_3_raw_2'] = f1.groupby('serial_number')['smart_3_raw'].transform(lambda x:
                             alpha ** 0 * np.abs(x - x.shift(1)) \
                           + alpha ** 1 * np.abs(x.shift(1) - x.shift(2)) \
                           + alpha ** 2 * np.abs(x.shift(2) - x.shift(3)) \
                           + alpha ** 3 * np.abs(x.shift(3) - x.shift(4)) \
                           + alpha ** 4 * np.abs(x.shift(4) - x.shift(5)) \
                           + alpha ** 5 * np.abs(x.shift(5) - x.shift(6)))

此时产生效果:

image.png

原因:
shift平移后,超出窗口大小的位置为Nan了。需要对Nan加以处理。
方案:
加上 fill_value = 0即可。

f1['smart_3_raw_2'] = f1.groupby('serial_number')['smart_3_raw'].transform(lambda x:
                             alpha ** 0 * np.abs(x - x.shift(1, fill_value=0)) \
                           + alpha ** 1 * np.abs(x.shift(1, fill_value=0) - x.shift(2, fill_value=0)) \
                           + alpha ** 2 * np.abs(x.shift(2, fill_value=0) - x.shift(3, fill_value=0)) \
                           + alpha ** 3 * np.abs(x.shift(3, fill_value=0) - x.shift(4, fill_value=0)) \
                           + alpha ** 4 * np.abs(x.shift(4, fill_value=0) - x.shift(5, fill_value=0)) \
                           + alpha ** 5 * np.abs(x.shift(5, fill_value=0) - x.shift(6, fill_value=0)))

效果:


image.png

2022-10-13 21:06 第1次
2022-10-16 00:30 第2次修改

你可能感兴趣的:(pandas SAC机制使用案例总结)