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

使用Pandas进行时间重采样,充分挖掘数据价值

大家好,时间序列数据蕴含着很大价值,通过重采样技术可以提升原始数据的表现形式。本文将介绍数据重采样方法和工具,提升数据可视化技巧。

在进行时间数据可视化时,数据重采样是至关重要且非常有用的,它支持控制数据的粒度,以挖掘数据价值,并创建具有吸引力的图片。用户可以根据需求,对时间序列数据的频率进行上采样或下采样。

数据重采样主要有以下两个目的:

  • 调整粒度:通过数据采集可以修改收数据点的时间间隔,只获取关键信息,剔除噪音数据,提升数据可视化效果。

  • 对齐:重采样还有助于将来自不同时间间隔的多个数据源进行对齐,确保在创建可视化或进行分析时保持一致性。

例如,对于某家公司的每日证券数据进行可视化,挖掘长期趋势,并剔除噪音数据点。为此,可以通过取每月的平均收盘价,将每日数据重采样为每月频率,从而降低用于可视化的数据量,提升数据可视化的效果。

import pandas as pd# 每日股票价格数据样本
data = {
'Date': pd.date_range(start='2023-01-01', periods=365, freq='D'),
'StockPrice': [100 + i + 10 * (i % 7) for i in range(365)]
}
df = pd.DataFrame(data)# 按月频率重采样
monthly_data = df.resample('M', on='Date').mean()
print(monthly_data.head())

这个例子通过将每日数据重采样为每月数据,并计算出每月的平均收盘价,从而得到了更平滑、噪声更小的数据,从而更容易识别长期趋势和规律,以便做出决策。

1.选择正确的重采样频率

处理时间序列数据时,重采样的主要参数是频率,必须正确选择频率,才能获得具有洞察力和实用的可视化效果。不过,粒度和清晰度之间存在着权衡,粒度表示数据的详细程度,而清晰度则表示数据规律的展现程度。

例如,对于一年内每分钟记录的温度数据,对年度温度趋势进行可视化,但使用分钟级数据将导致图形过于密集和混乱。另外,如果将数据聚合为年度平均值,可能会丢失有价值的信息。

# 采集分钟级温度数据
data = {'Timestamp': pd.date_range(start='2023-01-01', periods=525600, freq='T'),'Temperature': [20 + 10 * (i % 1440) / 1440 for i in range(525600)]
}df = pd.DataFrame(data)# 按不同频率重采样
daily_avg = df.resample('D', on='Timestamp').mean()
monthly_avg = df.resample('M', on='Timestamp').mean()
yearly_avg = df.resample('Y', on='Timestamp').mean()print(daily_avg.head())
print(monthly_avg.head())
print(yearly_avg.head())

此示例将分钟级温度数据重采样为日平均值、月平均值和年平均值。根据分析或可视化目标,可以选择最适合的详频率。每日平均值揭示了每日的温度规律,而每年平均值展示了年度趋势。

通过选择最佳的重采样频率,可以在数据细节和可视化清晰度之间取得平衡,进而传达数据中的规律和价值。

2.聚合方法

在处理时间数据时,了解各种聚合方法非常重要。通过这些方法,可以有效地总结和分析数据,揭示时间相关信息的不同方面。标准的聚合方法包括计算总和与平均值,或应用自定义函数。

图片

例如,对于包含一年内零售店每日销售数据的数据集,对其进行年度收入趋势分析,为此可以使用聚合方法计算每月和每年的总销售额。

# 每日销售数据样本
data = {
'Date': pd.date_range(start='2023-01-01', periods=365, freq='D'),
'Sales': [1000 + i * 10 + 5 * (i % 30) for i in range(365)]
}
df = pd.DataFrame(data)# 使用聚合方法计算每月和每年的销售额
monthly_totals = df.resample('M', on='Date').sum()
yearly_totals = df.resample('Y', on='Date').sum()print(monthly_totals.head())
print(yearly_totals.head())

此示例使用sum()聚合方法将每日销售数据重采样为每月和每年的总销售额,通过该方法,可以分析在不同粒度级别上的销售趋势。月度总计揭示了季节变化,而年度总计则展示了年度业绩。

根据具体的分析需求,还可以使用其他聚合方法,如计算平均值和中位数,或根据数据集分布情况应用自定义函数,这对问题的解决很有意义。通过这些方法,可以用符合自己的分析或可视化目标的方式对数据进行总结,从时间数据中提取更多价值。

3.处理缺失数据

处理缺失数据是时间序列中的关键点,可确保数据中存在间隙时,可视化和分析仍能保持准确性和信息量。

例如,对于历史温度数据集,但由于设备故障或数据收集错误,某些日期的温度读数缺失。此时就必须处理这些缺失值,以创建有意义的可视化并保持数据的完整性。

# 带有缺失值的温度数据样本
data = {'Date': pd.date_range(start='2023-01-01', periods=365, freq='D'),'Temperature': [25 + np.random.randn() * 5 if np.random.rand() > 0.2 else np.nan for _ in range(365)]
}
df = pd.DataFrame(data)# 前向填充缺失值(用前一天的温度填充)
df['Temperature'].fillna(method='ffill', inplace=True)# 可视化温度数据
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 6))
plt.plot(df['Date'], df['Temperature'], label='Temperature', color='blue')
plt.title('Daily Temperature Over Time')
plt.xlabel('Date')
plt.ylabel('Temperature (°C)')
plt.grid(True)
plt.show()

输出图形如下所示:

图片

这个示例模拟了缺失的温度值(约占数据的20%),然后使用前向填充(ffill)方法填充了缺失的部分,即缺失值被前一天的温度替代。

处理缺失数据可确保可视化效果准确地反映时间序列中的基本趋势和规律,防止空缺数据影响整体数据。根据数据的性质和具体问题,可以采用插值或向后填充等其他策略。

4.可视化趋势和规律

在Pandas中进行数据重采样,有助于可视化连续或离散时间数据中的趋势和规律,进一步挖掘数据价值,突出显示不同的组成部分,包括趋势、季节性和不规则问题(可能是数据中的噪音)。

例如,对于包含过去几年每日网站流量数据的数据集,目标是可视化展示随后几年的整体流量趋势,识别任何季节性规律,并发现流量中不规则的峰值或谷值。

# 网站每日流量数据样本
data = {
'Date': pd.date_range(start='2019-01-01', periods=1095, freq='D'),
'Visitors': [500 + 10 * ((i % 365) - 180) + 50 * (i % 30) for i in range(1095)]
}
df = pd.DataFrame(data)# 创建折线图,展示趋势
plt.figure(figsize=(12, 6))
plt.plot(df['Date'], df['Visitors'], label='Daily Visitors', color='blue')
plt.title('Website Traffic Over Time')
plt.xlabel('Date')
plt.ylabel('Visitors')
plt.grid(True)# 添加季节性分解图
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(df['Visitors'], model='additive', freq=365)
result.plot()
plt.show()

输出如下所示:

图片

该示例创建了折线图,展示了随时间变化的每日网站流量趋势。该图描述了数据集中的整体增长和不规则规律。此外,为了将数据分解为不同的组成部分,本文使用了statsmodels库的季节性分解技术,包括趋势、季节性和残差等组成部分。

通过这种方式,可以展示网站流量的趋势、季节性和异常情况,从时间数据挖掘价值,进而将其转化为数据驱动的决策。

 

综上可知,重采样是一种强大的方法,可用于转换和汇总时间序列数据,以挖掘数据价值。使用聚合方法(如求和、平均值和自定义函数等)有助于揭示时间数据的不同方面,而可视化方法有助于识别趋势、季节性和不规则问题,从而清晰地展示数据中的规律。

相关文章:

使用Pandas进行时间重采样,充分挖掘数据价值

大家好,时间序列数据蕴含着很大价值,通过重采样技术可以提升原始数据的表现形式。本文将介绍数据重采样方法和工具,提升数据可视化技巧。 在进行时间数据可视化时,数据重采样是至关重要且非常有用的,它支持控制数据的…...

Django(九、choices参数的使用、多对多表的三种创建方式、Ajax技术)

文章目录 一、choices参数choices参数的用法choices 参数用法总结 二、MVC与MTV模式1.MVC2.MTV 三、多对多的三种创建方式1.全自动创建2.纯手动创建半自动创建 四、Django与Ajax1.什么是Ajax常见的场景Ajax案例 一、choices参数 在没有用到choices参数之前,我们在D…...

德语B级SampleAcademy

德语B级 一, 反身代词(1)A 主语和宾语一致(2)D 双宾语,主语与直接宾语不一致(3), 补充单词(4)真反身代词(5)假反身代词(6)真假反身代词(7)相互反身(8)非反身#反身#相互反身 二,Nomen…...

vue3自定义hooks

获取dom的id属性 index.ts import { onMounted } from "vue" type option {el: string }export default function(option:option):Promise<{name: string}> {return new Promise((resolve)>{onMounted(()>{const dom:HTMLElement document.querySele…...

Consistency Models 阅读笔记

简介 Diffusion models需要多步迭代采样才能生成一张图片&#xff0c;这导致生成速度很慢。一致性模型&#xff08;Consistency models&#xff09;的提出是为了加速生成过程。 Consistency models可以直接一步采样就生成图片&#xff0c;但是也允许进行多步采样来提高生成的质…...

杭电oj 2034 人见人爱A-B C语言

此处的c和a指向同一块内存空间&#xff0c;改变c就是改变a&#xff0c;反之亦然&#xff0c;此处是为了方便看这么写的&#xff0c;如果不想c和a指向同一空间请分别开辟空间&#xff08;即不如此写camalloc&#xff09; #include<stdio.h> #include<stdlib.h>int …...

springboot(ssm大学生成绩管理系统 成绩管理平台Java(codeLW)

springboot(ssm大学生成绩管理系统 成绩管理平台Java(code&LW) 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&…...

SOME/IP 协议介绍(五)指南

指南&#xff08;信息性&#xff09; 选择传输协议 SOME/IP直接支持互联网上使用最广泛的两种传输协议&#xff1a;用户数据报协议&#xff08;UDP&#xff09;和传输控制协议&#xff08;TCP&#xff09;。UDP是一种非常简洁的传输协议&#xff0c;仅支持最重要的功能&#…...

Python调用企微机器人: 发送常用格式汇总

企微接口文档 发送应用消息 - 接口文档 - 企业微信开发者中心 发送格式 应用支持推送文本、图片、视频、文件、图文等类型。 ~~~以下列举常用格式 示例~~~ 1.发送文本 代码如下&#xff1a; def sendtxt_robotmsg(self):# 正式keywx_key "xx"wx_webhookurl htt…...

论文阅读——DiffusionDet

在目标检测上使用扩散模型 前向过程&#xff1a;真实框-->随机框 后向过程&#xff1a;随机框-->真实框 前向过程&#xff1a; 一般一张图片真实框的数目不同&#xff0c;填补到同一的N个框&#xff0c;填补方法可以是重复真实框&#xff0c;填补和图片大小一样的框&a…...

elmenetui表格二次封装包含查询框和分页

<!--dataList: 表格数据columnList: 表头字段 宽度minWidth使用slotName字段: 需要对列数据进行处理&#xff0c;不写prop字段&#xff0c;使用slotName字段btnText<String>: 按钮字段btnIcon<String>: 按钮的iconbtnEvent: 按钮事件btnType: 按钮类型getHeigh…...

【机器学习Python实战】线性回归

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习python实战 欢迎订阅&#xff01;后面的内容会越来越有意思~ ⭐内容说明&#xff1a;本专栏主要针对机器学习专栏的基础内容进行python的实现&#xff0c;部分…...

做外贸这么久,为什么一直做不好?

很多外贸业务员在开发客户过程中&#xff0c;总感觉自己做了很多事情&#xff0c;聊了很多客户&#xff0c;但却总是拿不到单子。 其实&#xff0c;这是由于缺乏对采购商心理的认识程度&#xff0c;没有换位思考&#xff0c;该做的事没做&#xff0c;不该做的事却忙得忘乎所以&…...

IPv4数据报格式

IPv4是IP协议的第四个版本(版本1-3和版本5都未曾使用过)IP地址不能反映任何有关主机位置的地理信息以前还有个逆地址解析协议RAPR(Reverse APR)&#xff0c;它的作用是使只知道自己MAC地址的主机能通过RAPR找到其IP地址&#xff0c;而现在的DHCP(Dynamic Host Configuration Pr…...

搭建网关服务器实现DHCP自动分配、HTTP服务和免密登录

目录 一. 实验要求 二. 实验准备 三. 实验过程 1. 网关服务器新建网卡并改为仅主机模式 2. 修改新建网卡IP配置文件并重启服务 3. 搭建网关服务器的dhcp服务 4. 修改server2网卡配置文件重启服务并效验 5. 设置主机1的网络连接为仅主机模式 6. 给server2和网关服务器之…...

【18年扬大真题】给定有m个整数的递增有序数组a和有n个整数的递减有序数组b,将a数组和b数组归并为递增有序的数组c

【18年扬大真题】 给定有m个整数的递增有序数组a和有n个整数的递减有序数组b&#xff0c; 将a数组和b数组归并为递增有序的数组c。 void Merge(int arr[],int m ,int brr[],int n,int crr[]) {int i 0;int j n-1;int k 0;while(i < m&&j > 0) {if (arr[i] &l…...

图片叠加_图片压缩

图片叠加 try {/* 1 读取第一张图片*/File fileOne new File("1.png");BufferedImage imageFirst ImageIO.read(fileOne);/* 2读取第二张图片 */File fileTwo new File("2.png");BufferedImage imageSecond ImageIO.read(fileTwo);//创建一个最底层画…...

Mybatis-Plus《学习笔记 22版尚硅谷 》——感谢【尚硅谷】官方文档

Mybatis-Plus《学习笔记 22版尚硅谷 》 一、MyBatis-Plus1.简介2.特性3.支持数据库4.框架结构5.官方地址 二、入门案例1.开发环境2.建库建表3.创建工程4.配置编码5.测试查询 三、增删改查1.BaseMapper<T>2.调用Mapper层实现CRUD2.1 插入2.2 删除a、根据ID删除数据b、根据…...

git安装后报git: ‘remote-https‘ is not a git command. See ‘git --help‘.

1. 问题说明 使用的是linux系统&#xff0c;采用编译安装的方式进行安装&#xff0c;安装完成clone项目后提示“git: ‘remote-https’ is not a git command. See ‘git --help’.” 2. 问题解决 需要安装1个额外的库&#xff1a;libcurl4-openssl-de sudo apt-get install …...

场景交互与场景漫游-交运算与对象选取(8-1)

交运算与对象选取 在面对大规模的场景管理时&#xff0c;场景图形的交运算和图形对象的拾取变成了一项基本工作。OSG作为一个场景管理系统&#xff0c;自然也实现了场景图形的交运算&#xff0c;交运算主要封装在osgUtil 工具中在OSG中&#xff0c;osgUtil是一个非常强有力的工…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...