当前位置: 首页 > article >正文

数据分析-Pandas序列滑动窗口配置参数

数据分析-Pandas序列滑动窗口配置参数

数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律?

数据表,时间序列数据在数据分析建模中很常见,例如天气预报,空气状态监测,股票交易等金融场景。数据分析过程中重新调整,重塑数据表是很重要的技巧,此处选择Titanic数据,以及巴黎、伦敦欧洲城市空气质量监测 N O 2 NO_2 NO2数据作为样例。

数据分析

数据分析-Pandas如何转换产生新列

数据分析-Pandas如何统计数据概况

数据分析-Pandas如何轻松处理时间序列数据

数据分析-Pandas如何选择数据子集

数据分析-Pandas如何重塑数据表-CSDN博客

本文用到的样例数据:

Titanic数据

空气质量监测 N O 2 NO_2 NO2数据

样例代码:

源代码参考 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博客


http://www.kler.cn/a/274110.html

相关文章:

  • LabVIEW软件项目设计方案如何制定
  • Jmeter下载安装配置教程(多版本)
  • 数据仓库工具箱—读书笔记02(Kimball维度建模技术概述04、使用一致性维度集成)
  • 机器学习之KNN算法预测数据和数据可视化
  • AIGC:生成图像动力学
  • linux 常用 Linux 命令指南
  • Flutter Widget:StatefulWidget StatelessWidget
  • C++作业day6
  • nodeJs 学习
  • C++_day6:2024/3/18
  • MySQL `COALESCE` 函数
  • 一般做策划的的,上哪儿找策划方案借鉴?
  • Echarts横向柱形图
  • 微信小程序注册流程
  • Docker基本配置及使用
  • 嵌入式DSP教学实验箱操作教程:2-20 数模转换实验(模拟SPI总线输出电压值)
  • 数据库系统概论-练手题集合【期末复习|考研复习】
  • 蓝桥杯之冲刺
  • 为什么线程通信的方法 wait(), notify()和 notifyAll()被定义在 Object 类里?为什么他们必须在同步方法或者同步块中被调用?
  • 码云使用 创建项目
  • 数据结构(三)复杂度的深层次剖析
  • 基于tcp协议的网络通信(基础echo版.多进程版,多线程版,线程池版),telnet命令
  • 【No.8】蓝桥杯工具函数模板|迭代器|vector|queue|map|set|银行问题|费里的语言|快递分拣(C++)
  • 携程Kar98k/hotelUuidKey算法分析
  • Stable Diffusion + Segment Anything试用
  • RocketMQ发送和接收方式详解