詳解如何使用pandas進(jìn)行時(shí)間序列數(shù)據(jù)的周期轉(zhuǎn)換
時(shí)間序列數(shù)據(jù)是數(shù)據(jù)分析中經(jīng)常遇到的類型,為了更多的挖掘出數(shù)據(jù)內(nèi)部的信息,我們常常依據(jù)原始數(shù)據(jù)中的時(shí)間周期,將其轉(zhuǎn)換成不同跨度的周期,然后再看數(shù)據(jù)是否會在新的周期上產(chǎn)生新的特性。
下面以模擬的K線數(shù)據(jù)為例,演示如何使用pandas
來進(jìn)行周期轉(zhuǎn)換。
1. 創(chuàng)建測試數(shù)據(jù)
首先創(chuàng)建測試數(shù)據(jù),下面創(chuàng)建一天的K線數(shù)據(jù),數(shù)據(jù)的間隔為1分鐘(1min
)。
import pandas as pd import numpy as np # 創(chuàng)建時(shí)間序列的列,時(shí)間間隔1分鐘 date_col = pd.date_range("2024-01-01", "2024-01-02", freq="1min") data_len = len(date_col) # 模擬的K線數(shù)據(jù) df = pd.DataFrame( np.random.randint(1, 10, size=(data_len, 5)), columns=["open", "close", "high", "low", "volumn"], ) df.insert(0, "begin_time", date_col) df
其中各個(gè)字段的含義:open
(開盤價(jià)),close
(收盤價(jià)),high
(最高價(jià)),low
(最低價(jià)),volumn
(成交量)。
2. 周期轉(zhuǎn)換和數(shù)據(jù)聚合
如果有股票或者類似交易的朋友都知道,K線的時(shí)間間隔是不固定的,不一定像上面的測試數(shù)據(jù)那樣間隔1分鐘,
一般根據(jù)自己的買賣頻率會查看不同時(shí)間間隔的K線。
但是采集數(shù)據(jù)時(shí),一般不會去采集各種時(shí)間間隔的K線,我們可以根據(jù)1分鐘的K線,去轉(zhuǎn)換其他不同時(shí)間間隔的K線。
轉(zhuǎn)換的方法,就是使用pandas
的resample
函數(shù)。
通過resample
周期轉(zhuǎn)換其實(shí)就是以一定的周期對數(shù)據(jù)進(jìn)行groupby
,所以,resample
也像groupby
一樣,需要對新周期中的數(shù)據(jù)進(jìn)行聚合。
比如,下面的數(shù)據(jù)我們將1分鐘的K線轉(zhuǎn)換為5分鐘的K線。
df.resample("5min", on="begin_time").agg({ "open": "first", "close": "last", "high": "max", "low": "min", "volumn": "sum", })
比如,原始數(shù)據(jù)每5個(gè)聚合成一個(gè)。
以前5個(gè)數(shù)據(jù)(2024-01-01 00:00:00
~2024-01-01 00:04:00
)為例。
open
取第一個(gè)值,close
取最后一個(gè)值,high
取最大值,low
取最小值,volumn
取合計(jì)值。
除了上面的5分鐘的數(shù)據(jù),通過resample
還可以聚合15分鐘的K線,1小時(shí),4小時(shí)等等各種時(shí)間間隔的K線。
方法類似,這里不再一一贅述。
3. 周期中的缺失值
對于完整的數(shù)據(jù),就像上面那樣轉(zhuǎn)換即可,然而實(shí)際情況下的數(shù)據(jù),部分缺失的情況是很常見的,
特別是上面的1分鐘K線數(shù)據(jù),極有可能1分鐘沒有交易,出現(xiàn)缺失的情況,有可能連續(xù)5分鐘都沒有數(shù)據(jù)。
下面看看數(shù)據(jù)缺失時(shí),resample
轉(zhuǎn)換的情況。
先從上面的測試數(shù)據(jù)中取20個(gè)再進(jìn)行一些刪減,構(gòu)造數(shù)據(jù)缺失的情況:
df_ = df.copy() df_ = df_.iloc[:20] df_ = df_.drop([3, 5, 6, 7, 8, 9, 10, 15, 16]) df_ = df_.reset_index(drop=True) df_
每組都有一些缺失,其中(2024-01-01 00:06:00
~2024-01-01 00:10:00
)整個(gè)5分鐘的數(shù)據(jù)都缺失了。
此時(shí),再按照5分鐘間隔來resample
,得到:
df_.resample("5min", on="begin_time").agg({ "open": "first", "close": "last", "high": "max", "low": "min", "volumn": "sum", })
從中可以得出兩個(gè)結(jié)論:
- 部分缺失,就用剩余的數(shù)據(jù)來聚合計(jì)算(比如5分鐘的數(shù)據(jù)就剩3條,那就用這3條來聚合)
- 整個(gè)缺失,那么就用聚合函數(shù)的默認(rèn)值來填充,比如上面
2024-01-01 00:05:00
這條
4. 總結(jié)
時(shí)間序列數(shù)據(jù)的分析過程中,周期轉(zhuǎn)換是一個(gè)很常用的操作。
不過,不是簡單的用resample
來轉(zhuǎn)換就完事了,周期轉(zhuǎn)換之后也會帶來新的問題,比如上面示例中由于轉(zhuǎn)換形成的空值,這些空值是要直接丟棄?還是要插值?如果要插值的話,是用基準(zhǔn)數(shù)據(jù)來填充?還是用平均值?用移動平均值?用中位數(shù)?等等來插值,這些都需要根據(jù)具體的分析場景和使用的分析算法來進(jìn)一步討論。本文主要介紹使用resample
來轉(zhuǎn)換數(shù)據(jù),而關(guān)于插值方法的詳細(xì)討論將另文闡述。
以上就是詳解如何使用pandas進(jìn)行時(shí)間序列數(shù)據(jù)的周期轉(zhuǎn)換的詳細(xì)內(nèi)容,更多關(guān)于pandas數(shù)據(jù)周期轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
實(shí)例詳解python函數(shù)的對象、函數(shù)嵌套、名稱空間和作用域
這篇文章主要介紹了python函數(shù)的對象、函數(shù)嵌套、名稱空間和作用域 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05Python Pandas中合并數(shù)據(jù)的5個(gè)函數(shù)使用詳解
數(shù)據(jù)合并是數(shù)據(jù)處理過程中的必經(jīng)環(huán)節(jié),pandas作為數(shù)據(jù)分析的利器,提供了五種常用的數(shù)據(jù)合并方式,讓我們看看如何使用這些方法吧!2022-05-05pandas根據(jù)指定條件篩選數(shù)據(jù)的實(shí)現(xiàn)示例
條件篩選是pandas中非常重要的一個(gè)功能,它允許我們根據(jù)特定條件來快速、高效地篩選數(shù)據(jù),本文主要介紹了pandas根據(jù)指定條件篩選數(shù)據(jù)的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-03-03Python不改變Excel單元格樣式方式—xls和xlsx兩種格式
這篇文章主要介紹了Python不改變Excel單元格樣式方式—xls和xlsx兩種格式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Python?實(shí)現(xiàn)簡單智能聊天機(jī)器人
這篇文章主要介紹了Python?實(shí)現(xiàn)簡單智能聊天機(jī)器人,首先通過計(jì)算機(jī)接收用戶的語音輸入再將用戶輸入的語音輸入轉(zhuǎn)化為文本信息展開實(shí)現(xiàn)過程,需要的小伙伴可以參考一下2022-05-05python實(shí)現(xiàn)AES算法及AES-CFB8加解密源碼
這篇文章主要為大家介紹了python實(shí)現(xiàn)AES算法及AES-CFB8加解密的源碼示例,有需要朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02查找python項(xiàng)目依賴并生成requirements.txt的方法
今天小編就為大家分享一篇查找python項(xiàng)目依賴并生成requirements.txt的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07解決PyCharm IDE環(huán)境下,執(zhí)行unittest不生成測試報(bào)告的問題
這篇文章主要介紹了解決PyCharm IDE環(huán)境下,執(zhí)行unittest不生成測試報(bào)告的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09