数据分析-Pandas序列滑动窗口配置参数
数据分析-Pandas序列滑动窗口配置参数
数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律?
数据表,时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。数据分析过程中重新调整,重塑数据表是很重要的技巧,此处选择Titanic数据,以及巴黎、伦敦欧洲城市空气质量监测 N O 2 NO_2 NO2数据作为样例。
数据分析
数据分析-Pandas如何转换产生新列
数据分析-Pandas如何统计数据概况
数据分析-Pandas如何轻松处理时间序列数据
数据分析-Pandas如何选择数据子集
数据分析-Pandas如何重塑数据表-CSDN博客
本文用到的样例数据:
Titanic数据
样例代码:
源代码参考 Pandas如何重塑数据表
源代码参考 python数据分析-数据表读写到pandas
导入关键模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.close("all")
时间序列,有时候需要观察一个窗口下的数据统计,比如,股市中的移动平均曲线,气象监测数据的移动平均。滑动窗口可以过滤掉不必要的高频信号。
窗口居中
通用滑动窗口,默认情况下,标签设置在窗口的右边缘,但可以使用关键字,以便可以在中心设置标签。center
。
times = ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08', '2020-01-09', '2020-01-10']
s = pd.Series(range(10), index=pd.DatetimeIndex(times))
print(s)
ma = s.rolling(window=5).mean()
print (ma)
ma_c = s.rolling(window=5, center=True).mean()
print (ma_c)
为了方便理解,采用连续整数数值作为序列。可以看出,数值序列的值是不变的,改变的是输出数值的位置,index
# s
2020-01-01 0
2020-01-02 1
2020-01-03 2
2020-01-04 3
2020-01-05 4
2020-01-06 5
2020-01-07 6
2020-01-08 7
2020-01-09 8
2020-01-10 9
dtype: int64
# ma
2020-01-01 NaN
2020-01-02 NaN
2020-01-03 NaN
2020-01-04 NaN
2020-01-05 2.0 # 第一个数值位置
2020-01-06 3.0
2020-01-07 4.0
2020-01-08 5.0
2020-01-09 6.0
2020-01-10 7.0 # 最后一个数值位置
# ma_c
2020-01-01 NaN
2020-01-02 NaN
2020-01-03 2.0 # 第一个数值位置
2020-01-04 3.0
2020-01-05 4.0
2020-01-06 5.0
2020-01-07 6.0
2020-01-08 7.0 # 最后一个数值位置
2020-01-09 NaN
2020-01-10 NaN
窗口端点的闭合
可以使用以下参数指定在滚动窗口计算中包含间隔端点:closed
值 | 含义 |
---|---|
'right' | 关闭右端点 |
'left' | 关闭左侧端点 |
'both' | 关闭两个端点 |
'neither' | 开放端点 |
times = ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08', '2020-01-09', '2020-01-10']
df = pd.Dataframe(
{"x" : range(10)}, index=pd.DatetimeIndex(times))
print(df)
df["right"] = df.rolling(3, closed="right").x.sum() # default
df["both"] = df.rolling(3, closed="both").x.sum()
df["left"] = df.rolling(3, closed="left").x.sum()
df["neither"] = df.rolling(3, closed="neither").x.sum()
以时间为移动窗口的操作结果如下,可以看出在边缘值计算方式:
x right both left neither
2020-01-01 0 0.0 0.0 NaN NaN
2020-01-02 1 1.0 1.0 0.0 0.0
2020-01-03 2 3.0 3.0 1.0 1.0
2020-01-04 3 6.0 6.0 3.0 3.0
2020-01-05 4 9.0 10.0 6.0 5.0
2020-01-06 5 12.0 14.0 9.0 7.0
2020-01-07 6 15.0 18.0 12.0 9.0
2020-01-08 7 18.0 22.0 15.0 11.0
2020-01-09 8 21.0 26.0 18.0 13.0
2020-01-10 9 24.0 30.0 21.0 15.0
为了更好理解该参数的作用,以上述的序列x为例,当3D滑动窗口时,截断如下子序列:
[1, 2, 3, 4 ]
closed right : 2 + 3 + 4 = 9 ( 也就是左开,右闭,其中1 不纳入计算)
closed left : 1 + 2 + 3 = 6 (也就是左闭,右开,其中 4 不纳入计算)
closed both : 1 + 2 + 3 + 4 = 10 (也就是左闭,右闭,1,4 都纳入计算)
closed neither : 2 + 3 = 5 (也就是左开,右开,1, 4都不纳入计算)
以上代码只是一个简单示例,示例代码中的表达式可以根据实际问题进行修改。
后面介绍下其他的展示形式。
觉得有用 收藏 收藏 收藏
点个赞 点个赞 点个赞
End
GPT专栏文章:
GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案
GPT实战系列-LangChain + ChatGLM3构建天气查询助手
大模型查询工具助手之股票免费查询接口
GPT实战系列-简单聊聊LangChain
GPT实战系列-大模型为我所用之借用ChatGLM3构建查询助手
GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)
GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(一)
GPT实战系列-ChatGLM2模型的微调训练参数解读
GPT实战系列-如何用自己数据微调ChatGLM2模型训练
GPT实战系列-ChatGLM2部署Ubuntu+Cuda11+显存24G实战方案
GPT实战系列-Baichuan2本地化部署实战方案
GPT实战系列-Baichuan2等大模型的计算精度与量化
GPT实战系列-GPT训练的Pretraining,SFT,Reward Modeling,RLHF
GPT实战系列-探究GPT等大模型的文本生成-CSDN博客