日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2023/12/4 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python resample函数_python时序分析之重采集(resample) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

接著上一回說到的時(shí)序分析,上一回主要是學(xué)習(xí)了datetime庫(kù)和pandas.to_datetime模塊。

今天我們要學(xué)習(xí)的是resample,這一講的內(nèi)容很多,也有很多有意思的東西。

老規(guī)矩,用到的資料來源于pandas.DataFrame.resample - pandas 0.24.2 documentation?pandas.pydata.org

參考書Wes McKinney著的Python for Data Analysis,中文名叫《利用python進(jìn)行數(shù)據(jù)分析》

在開始resample之前,我覺得有必要介紹一個(gè)模塊data_range,在介紹data_range之前,我想補(bǔ)充一下datetime的格式說明哇,這個(gè)被壓縮的好厲害

這個(gè)格式也是format最常用的。當(dāng)然需要牢記。

好的,我們開始data_range的學(xué)習(xí)

老規(guī)矩,先看一下data_range的參數(shù)使用

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

name=None, closed=None, **kwargs)date_range常用的幾個(gè)參數(shù)

這里我就主要介紹一下常用的參數(shù)

1:start 這個(gè)參數(shù)是時(shí)間索引的起始時(shí)間

2:end 自然這個(gè)參數(shù)是結(jié)束的時(shí)間

3:period ,如果你只使用了起始或結(jié)束的時(shí)間戳,那么就需要使用period來告知一個(gè)范圍

4:freq 這個(gè)是frequency的縮寫,也就是頻率,這個(gè)是一個(gè)非常重要的參數(shù),可以通過設(shè)置這個(gè)參數(shù)得到自定義的時(shí)間頻率

官方文檔為這些頻率做了一個(gè)說明,我就直接復(fù)制下來了官方文檔給出的解釋,這里是常用的基礎(chǔ)單詞,我就不翻譯了

還有兩張圖片我相信各位看官都能看懂,我就不班門弄斧了多不多,我覺得我已經(jīng)go die了

光看上面的圖片,我覺得很容易就暈掉了,我們來看一看具體的例子,我敬重的考研名師宇哥說過“數(shù)無形時(shí)少直覺”那么我們用實(shí)際的例子去解決上面的問題。

因?yàn)樽蛱鞂W(xué)了datetime模塊,所以我這里就自己結(jié)合了datetime

首先先導(dǎo)入需要以及可能用到的庫(kù)

import pandas as pd

import numpy as np

from datetime import datetime

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

pd.date_range(start=datetime.now(), periods=5, freq='B')輸出結(jié)果

讓我們分析分析這個(gè)語(yǔ)句,首先start=datetime.now(),這個(gè)語(yǔ)句的意思是獲取當(dāng)前的時(shí)間,

而period=5的意思是獲得5個(gè)時(shí)間點(diǎn),如果沒有后面的freq,則默認(rèn)的是獲得天數(shù)。我們可以在執(zhí)行一條語(yǔ)句

pd.date_range(start=datetime.now(), periods=5)注意看這里的freq='D'這是模塊默認(rèn)的

那么這兩個(gè)語(yǔ)句的區(qū)別在于freq,第一個(gè)設(shè)置freq='B' 根據(jù)上面表格里面的內(nèi)容,B = Business day 也就是工作日,可以看到第一個(gè)的輸出結(jié)果就是顯示的就是從明天開始的5個(gè)工作日。

再來看一個(gè)例子

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

SM=semi-month end frequency(15th and end of month)也即是取每月的15號(hào)和當(dāng)月的最后一天,比如29,28,30,31

當(dāng)然還可以舉很多的例子,但是后面就是重復(fù)的過程了,所以我就不繼續(xù)下去了,我下面將會(huì)做兩個(gè)時(shí)間頻率疊加的操作

請(qǐng)看

pd.date_range(start=datetime.now(),periods=5,freq='2h20min')請(qǐng)注意這里的freq

這里的freq我使用的2h20min,也就是2小時(shí)20分鐘,也即140分鐘,所以輸出結(jié)果里面寫明了freq=140T,其中T就是minutes頻率的表示,我們同樣可以直接在此處使用freq=140T

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

我們?cè)诳匆粋€(gè)例子

pd.date_range(start='20190623', periods=10, freq='1D10U')可以看到這里的輸出結(jié)果是多了1天10微秒

這一點(diǎn)在實(shí)際中用到的情況還算是比較多的。

總結(jié)一下,其實(shí)這一部分非常的常用,所以還是需要熟知的,至于其他的時(shí)間,實(shí)際工作或者學(xué)習(xí)的時(shí)候遇到了,可以直接去查找官方的文檔,Time Series / Date functionality?pandas.pydata.org

可以直接查閱上面的這個(gè)鏈接然后查詢

下面我們將會(huì)對(duì)重新采樣和頻率轉(zhuǎn)換(resample)做一個(gè)基本的了解

同樣的老規(guī)矩先上鏈接pandas.Series.resample - pandas 0.24.2 documentation?pandas.pydata.org

resample這個(gè)模塊有兩類--1:pandas.Series.resample, 2:pandas.DataFrame.resample

常規(guī)操作先看一下resample這個(gè)模塊的參數(shù)

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)

在介紹參數(shù)之前,我想先說明一下什么是重新采樣:重新采樣是值將時(shí)間序列從一個(gè)頻率轉(zhuǎn)換為另一個(gè)頻率的過程,將更高頻率的數(shù)據(jù)聚合到低頻率被稱為向下采樣,而從低頻率轉(zhuǎn)換為高頻率被稱為向上采樣,但是好有一種是同頻之間的切換,比如W-WED(weekly on Wednesday 每周三)轉(zhuǎn)換到W-FRI(每周五)

好的講清楚了,下面看一下參數(shù)參數(shù)如圖

話說知乎壓縮圖片也太夸張了吧。。。。

好吧,湊合著看吧,下面我們把上面幾個(gè)參數(shù)按照導(dǎo)圖的形式表示出來

下面我將圍繞上面的幾個(gè)參數(shù)舉幾個(gè)例子

先生成幾個(gè)時(shí)間

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

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

series執(zhí)行結(jié)果

這個(gè)時(shí)間是按照1分鐘為頻率生成的,下面我要向下采集以3分鐘為頻率,并把時(shí)間戳的合計(jì)值放在一個(gè)bin(可以翻譯為箱子)里面

series.resample('3T').sum()執(zhí)行結(jié)果

下面的幾個(gè)例子都是處理closed和label這幾個(gè)參數(shù)的,為了更好地對(duì)比,我先把上面這個(gè)例子的參數(shù)的默認(rèn)值表示出來

series.resample('3T')執(zhí)行結(jié)果

各位看官可以注意這里面的默認(rèn)值,closed和label都是left,那么我改變一下closed和label的值會(huì)發(fā)生什么呢?

series.resample('3T',label='right').sum()執(zhí)行結(jié)果

可以發(fā)現(xiàn)和第一個(gè)相比較第二個(gè)的第一個(gè)重采集執(zhí)行數(shù)據(jù)是03而不是00,所以這個(gè)就是兩者的區(qū)別

我們?cè)诳匆幌?#xff0c;加入closed的情況

series.resample('3T',label='right',closed='right').sum()執(zhí)行結(jié)果

可能上面幾個(gè)例子不是很直觀,那么這里可以引入loffset,來講索引移動(dòng)一定的數(shù)量,如從右邊緣減去一秒,

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

closed='right',loffset='-1s').sum()執(zhí)行結(jié)果

series.resample('3T',loffset='-1s').sum()執(zhí)行結(jié)果

series.resample('3T',label='right',loffset='-1s').sum()執(zhí)行結(jié)果

到這里向下采集也有很多朋友稱為降頻率就結(jié)束了,下一步就是升頻率

向上采集的時(shí)候可能會(huì)出現(xiàn)很多空值,

series.resample('30S').asfreq()[0:5]執(zhí)行結(jié)果

我們可以使用asfreq方法,在不聚合的情況下轉(zhuǎn)換到高頻率。

而對(duì)于出現(xiàn)的空值,我們可以使用fillna,和reindex的方法填充和插值方法

插值的時(shí)候可以使用ffill,bfill,pad等方式

series.resample('30S').pad()[0:5]執(zhí)行結(jié)果

series.resample('30S').ffill()[0:5]執(zhí)行結(jié)果

series.resample('30S').bfill()[0:5]執(zhí)行結(jié)果

可以看到ffill是插入相鄰的上一個(gè)數(shù)據(jù),bfill是插入相鄰的下一個(gè)數(shù)據(jù),而pad好像執(zhí)行結(jié)果和ffill是一樣的,我找了很久也沒收到這個(gè)是什么操作,由于周末時(shí)間不早了,這個(gè)就先留一個(gè)坑,下一次在補(bǔ)上吧。

好的到這里今天的時(shí)序就算結(jié)束了,雖然還有金融常用的OHLC以及移動(dòng)窗口函數(shù),但是這個(gè)對(duì)于我來講暫時(shí)還用不到,等真的用到的時(shí)候再回來看吧。

好的,總結(jié)一下:今天主要是學(xué)了如何生成一個(gè)想要的時(shí)間頻率的數(shù)據(jù),以及如何重新采集時(shí)間。

希望這篇文章能夠給予同為菜鳥的看官以幫助。

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

總結(jié)

以上是生活随笔為你收集整理的python resample函数_python时序分析之重采集(resample)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。