python resample函数_python时序分析之重采集(resample)

接着上一回说到的时序分析,上一回主要是学习了datetime库和pandas.to_datetime模块。

今天我们要学习的是resample,这一讲的内容很多,也有很多有意思的东西。

老规矩,用到的资料来源于pandas.DataFrame.resample - pandas 0.24.2 documentation​pandas.pydata.org

参考书Wes McKinney著的Python for Data Analysis,中文名叫《利用python进行数据分析》

在开始resample之前,我觉得有必要介绍一个模块data_range,在介绍data_range之前,我想补充一下datetime的格式说明哇,这个被压缩的好厉害

这个格式也是format最常用的。当然需要牢记。

好的,我们开始data_range的学习

老规矩,先看一下data_range的参数使用

pandas.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False,

name=None, closed=None, **kwargs)date_range常用的几个参数

这里我就主要介绍一下常用的参数

1:start 这个参数是时间索引的起始时间

2:end 自然这个参数是结束的时间

3:period ,如果你只使用了起始或结束的时间戳,那么就需要使用period来告知一个范围

4:freq 这个是frequency的缩写,也就是频率,这个是一个非常重要的参数,可以通过设置这个参数得到自定义的时间频率

官方文档为这些频率做了一个说明,我就直接复制下来了官方文档给出的解释,这里是常用的基础单词,我就不翻译了

还有两张图片我相信各位看官都能看懂,我就不班门弄斧了多不多,我觉得我已经go die了

光看上面的图片,我觉得很容易就晕掉了,我们来看一看具体的例子,我敬重的考研名师宇哥说过“数无形时少直觉”那么我们用实际的例子去解决上面的问题。

因为昨天学了datetime模块,所以我这里就自己结合了datetime

首先先导入需要以及可能用到的库

import pandas as pd

import numpy as np

from datetime import datetime

下一步使用不同的采集方式

pd.date_range(start=datetime.now(), periods=5, freq='B')输出结果

让我们分析分析这个语句,首先start=datetime.now(),这个语句的意思是获取当前的时间,

而period=5的意思是获得5个时间点,如果没有后面的freq,则默认的是获得天数。我们可以在执行一条语句

pd.date_range(start=datetime.now(), periods=5)注意看这里的freq='D'这是模块默认的

那么这两个语句的区别在于freq,第一个设置freq='B' 根据上面表格里面的内容,B = Business day 也就是工作日,可以看到第一个的输出结果就是显示的就是从明天开始的5个工作日。

再来看一个例子

pd.date_range(start='20130809',periods=8,freq='SM')这里我使用了freq='SM'

SM=semi-month end frequency(15th and end of month)也即是取每月的15号和当月的最后一天,比如29,28,30,31

当然还可以举很多的例子,但是后面就是重复的过程了,所以我就不继续下去了,我下面将会做两个时间频率叠加的操作

请看

pd.date_range(start=datetime.now(),periods=5,freq='2h20min')请注意这里的freq

这里的freq我使用的2h20min,也就是2小时20分钟,也即140分钟,所以输出结果里面写明了freq=140T,其中T就是minutes频率的表示,我们同样可以直接在此处使用freq=140T

pd.date_range(start=datetime.now(),periods=5,freq='140T')可以看到效果是一样的

我们在看一个例子

pd.date_range(start='20190623', periods=10, freq='1D10U')可以看到这里的输出结果是多了1天10微秒

这一点在实际中用到的情况还算是比较多的。

总结一下,其实这一部分非常的常用,所以还是需要熟知的,至于其他的时间,实际工作或者学习的时候遇到了,可以直接去查找官方的文档,Time Series / Date functionality​pandas.pydata.org

可以直接查阅上面的这个链接然后查询

下面我们将会对重新采样和频率转换(resample)做一个基本的了解

同样的老规矩先上链接pandas.Series.resample - pandas 0.24.2 documentation​pandas.pydata.org

resample这个模块有两类--1:pandas.Series.resample, 2:pandas.DataFrame.resample

常规操作先看一下resample这个模块的参数

Series.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',

kind=None, loffset=None, limit=None, base=0, on=None, level=None)

在介绍参数之前,我想先说明一下什么是重新采样:重新采样是值将时间序列从一个频率转换为另一个频率的过程,将更高频率的数据聚合到低频率被称为向下采样,而从低频率转换为高频率被称为向上采样,但是好有一种是同频之间的切换,比如W-WED(weekly on Wednesday 每周三)转换到W-FRI(每周五)

好的讲清楚了,下面看一下参数参数如图

话说知乎压缩图片也太夸张了吧。。。。

好吧,凑合着看吧,下面我们把上面几个参数按照导图的形式表示出来

下面我将围绕上面的几个参数举几个例子

先生成几个时间

index = pd.date_range('1/1/2000',periods=9,freq='T')

series = pd.Series(range(9),index=index)

series执行结果

这个时间是按照1分钟为频率生成的,下面我要向下采集以3分钟为频率,并把时间戳的合计值放在一个bin(可以翻译为箱子)里面

series.resample('3T').sum()执行结果

下面的几个例子都是处理closed和label这几个参数的,为了更好地对比,我先把上面这个例子的参数的默认值表示出来

series.resample('3T')执行结果

各位看官可以注意这里面的默认值,closed和label都是left,那么我改变一下closed和label的值会发生什么呢?

series.resample('3T',label='right').sum()执行结果

可以发现和第一个相比较第二个的第一个重采集执行数据是03而不是00,所以这个就是两者的区别

我们在看一下,加入closed的情况

series.resample('3T',label='right',closed='right').sum()执行结果

可能上面几个例子不是很直观,那么这里可以引入loffset,来讲索引移动一定的数量,如从右边缘减去一秒,

series.resample('3T',label='right',

closed='right',loffset='-1s').sum()执行结果

series.resample('3T',loffset='-1s').sum()执行结果

series.resample('3T',label='right',loffset='-1s').sum()执行结果

到这里向下采集也有很多朋友称为降频率就结束了,下一步就是升频率

向上采集的时候可能会出现很多空值,

series.resample('30S').asfreq()[0:5]执行结果

我们可以使用asfreq方法,在不聚合的情况下转换到高频率。

而对于出现的空值,我们可以使用fillna,和reindex的方法填充和插值方法

插值的时候可以使用ffill,bfill,pad等方式

series.resample('30S').pad()[0:5]执行结果

series.resample('30S').ffill()[0:5]执行结果

series.resample('30S').bfill()[0:5]执行结果

可以看到ffill是插入相邻的上一个数据,bfill是插入相邻的下一个数据,而pad好像执行结果和ffill是一样的,我找了很久也没收到这个是什么操作,由于周末时间不早了,这个就先留一个坑,下一次在补上吧。

好的到这里今天的时序就算结束了,虽然还有金融常用的OHLC以及移动窗口函数,但是这个对于我来讲暂时还用不到,等真的用到的时候再回来看吧。

好的,总结一下:今天主要是学了如何生成一个想要的时间频率的数据,以及如何重新采集时间。

希望这篇文章能够给予同为菜鸟的看官以帮助。

好的,我今天就不求赞了,拖得太久了。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/310209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Java网络编程]UDP通信程序练习

代码如下: package UdpPracticePack;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException;pub…

合并k个有序链表 python_leetcode第23题-合并K个有序链表

题目:合并 k个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6​分析:和合并两个链表差不多,采用归…

打造更好用的 EF 自动审计

打造更好用的 EF 自动审计Intro上次基于 EF Core 实现了一个自动审计的功能,详细可以参考 EF Core 数据变更自动审计设计,虽然说多数情况下可以适用,但是因为要显式继承于一个 AuditDbContextBase 或 AuditDbContext,所以对代码的…

[Java网络编程基础]UDP发送和接收数据

代码如下: package InetAddressPack;import java.io.IOException; import java.net.*; import java.nio.charset.StandardCharsets;public class SendDemo {public static void main(String[] args) throws IOException {DatagramSocket ds new DatagramSocket();byte[] bys …

python矩阵教程_numpy教程:矩阵matrix及其运算

numpy矩阵简介NumPy函数库中存在两种不同的数据类型(矩阵matrix和数组array),都可以用于处理行列表示的数字元素。虽然它们看起来很相似,但是在这两个数据类型上执行相同的数学运算可能得到不同的结果,其中NumPy函数库中的matrix与MATLAB中ma…

从Copyright到Copyleft,聊聊版权与开源协议

4月26日是世界知识产权日,很多人或许会觉得这和软件开发没什么关系,但事实上,开源软件大多受到知识产权法中著作权法(Copyright,也称版权)的保护。开源软件虽说开放了源代码,但是用户在使用、修…

[Java网络编程基础]TCP发送和接收数据

代码如下: package ClientPack;import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException;public class ClientDemo {public static void main(String[] args) throws IOExcept…

手机端适应_不轻易透露的超强技巧!详解iVX中怎样做设备自适应

"自适应网页设计"的概念2010年,Ethan Marcotte提出了"自适应网页设计"(Responsive Web Design)这个名词,指可以自动识别屏幕宽度、并做出相应调整的网页设计,自适应是为了解决如何才能在不同大小的…

五分钟了解dotnetcore配置框架

一、前言配置的本质就是字符串的键值对,微软的一系列接口其实就是对这些键值对字符串的抽象。二、基本类型2.1、Nuget包Microsoft.Extensions.Configuration.AbstractionsMicrosoft.Extensions.Configuration2.2、抽象接口IConfiguration提供了查询、设置配置项、监…

彩光和灰光模块_5G承载网主要光模块图谱

(一)5G承载光模块总览在光通信中,业务信息的传送与接收都是靠光模块来实现的。在发送端,光模块完成电/光转换,光在光纤中传输,然后在接收端实现光/电转换。可以说,没有光模块就没有光通信。在我…

C++实现五子棋小游戏

代码如下: #include <iostream> using namespace std;class GoBangDesk { public:GoBangDesk() :state(), flagWin(false), flagOver(false), flagDraw(false){for (int i 0; i < 20; i)for (int j 0; j < 20; j)goBangDesk[i][j] #;}void printDesk(){cout &l…

Mobius 一个运行在 .NET Core 上的 .NET 运行时

导语一个 .NET 应用仅仅只是一块在 .NET 运行时上面运行的二进制代码。而 .NET 运行时只是一个能执行这项任务的程序。当前的 .NET Framework 和 .NET Core 运行时采用 C 编写&#xff0c;而 Mobius 是一个使用 C# 重写的 .NET 运行时&#xff0c;重写包括 JIT 编译和 GC 等&am…

jsbridge实现及原理_JSBridge 实现原理解析

JSBridge 项目以 js 与 android 通信为例&#xff0c;讲解 JSBridge 实现原理&#xff0c;下面提到的方法在 iOS(UIWebview 或 WKWebview)均有对应方法。1. native to js两种 native 调用 js 方法&#xff0c;注意被调用的方法需要在 JS 全局上下文上loadUrlevaluateJavascript…

Autofac的切面编程实现

面向切面编程&#xff1a;Autofac.Annotation扩展组件是我开源的一款利用打标签完成autofac容器的注入组件。https://github.com/yuzd/Autofac.Annotation我们之前介绍了利用Aspect标签来完成拦截器功能Aspect是一对一的方式&#xff0c;我想要某个class开启拦截器功能我需要针…

[Java基础]体验Lambda表达式

普通写法: 代码如下: package LambdaPack01;public class MyRunnable implements Runnable{Overridepublic void run() {System.out.println("多线程启动了");} }package LambdaPack01;public class LambdaDemo01 {public static void main(String[] args) {MyRunna…

linux启动mqtt_linux下安装MQTT服务器 - EMQTT

1. 下载从官网下载https://www.emqx.io/downloads#broker&#xff0c; 本文所用版本为broker/v3.2.1/emqx-centos7-v3.2.1.ziplinux下 下载:wget https://www.emqx.io/downloads/broker/v3.2.1/emqx-centos7-v3.2.1.zip解压&#xff1b;unzip emqx-centos7-v3.2.1.zip所在目录&…

.net core 基于Dapper 的分库分表开源框架(core-data)

一、前言感觉很久没写文章了&#xff0c;最近也比较忙&#xff0c;写的相对比较少&#xff0c;抽空分享基于Dapper 的分库分表开源框架core-data的强大功能&#xff0c;更好的提高开发过程中的效率&#xff1b;在数据库的数据日积月累的积累下&#xff0c;业务数据库中的单表数…

[Java基础]Lambda表达式练习

代码如下: package LambdaPracticePack;public interface Eatable {void eat(); }package LambdaPracticePack;public class EatableImpl implements Eatable{Overridepublic void eat() {System.out.println("一天一苹果&#xff0c;医生远离我");} }package Lambd…

ltv价值 应用_用户终生价值Ltv是什么,在游戏设计中如何考虑?

简单来说.你的游戏产品&#xff0c;用户的LTV表现&#xff0c;可以判断你这个产品的生命周期。看用户LTV的表现&#xff0c;30天LTV是否&#xff1e;每用户成本&#xff1f;大于越多&#xff0c;产品的付费做的越健康。如果小于等于&#xff0c;那就意味着赔本&#xff0c;产品…

​你可能不知道的7个HTML小技巧

五一期间&#xff0c;知道大家都比较懒&#xff0c;我也是。所以写篇简单且基础的技术小文&#xff0c;不需要动脑子&#xff0c;扫一眼就能掌握的那种。DETAILS 标签<details> 标签将额外的详情信息隐藏起来&#xff0c;用户在需要的时候点击即可展开查看详情。<deta…