色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么重采樣很重要?Pandas中重新采樣的關(guān)鍵問題解析

冬至子 ? 來源:思否AI ? 作者:思否AI ? 2023-09-19 17:06 ? 次閱讀

重采樣是時(shí)間序列分析中處理時(shí)序數(shù)據(jù)的一項(xiàng)基本技術(shù)。它是關(guān)于將時(shí)間序列數(shù)據(jù)從一個(gè)頻率轉(zhuǎn)換到另一個(gè)頻率,它可以更改數(shù)據(jù)的時(shí)間間隔,通過上采樣增加粒度,或通過下采樣減少粒度。在本文中,我們將深入研究Pandas中重新采樣的關(guān)鍵問題。

為什么重采樣很重要?

時(shí)間序列數(shù)據(jù)到達(dá)時(shí)通常帶有可能與所需的分析間隔不匹配的時(shí)間戳。例如以不規(guī)則的間隔收集數(shù)據(jù),但需要以一致的頻率進(jìn)行建模或分析。

重采樣分類

重采樣主要有兩種類型:

1、Upsampling

上采樣可以增加數(shù)據(jù)的頻率或粒度。這意味著將數(shù)據(jù)轉(zhuǎn)換成更小的時(shí)間間隔。

2、Downsampling

下采樣包括減少數(shù)據(jù)的頻率或粒度。將數(shù)據(jù)轉(zhuǎn)換為更大的時(shí)間間隔。

重采樣的應(yīng)用

重采樣的應(yīng)用十分廣泛:

在財(cái)務(wù)分析中,股票價(jià)格或其他財(cái)務(wù)指標(biāo)可能以不規(guī)則的間隔記錄。重新可以將這些數(shù)據(jù)與交易策略的時(shí)間框架(如每日或每周)保持一致。

物聯(lián)網(wǎng)(IoT)設(shè)備通常以不同的頻率生成數(shù)據(jù)。重新采樣可以標(biāo)準(zhǔn)化分析數(shù)據(jù),確保一致的時(shí)間間隔。

在創(chuàng)建時(shí)間序列可視化時(shí),通常需要以不同的頻率顯示數(shù)據(jù)。重新采樣夠調(diào)整繪圖中的細(xì)節(jié)水平。

許多機(jī)器學(xué)習(xí)模型都需要具有一致時(shí)間間隔的數(shù)據(jù)。在為模型訓(xùn)練準(zhǔn)備時(shí)間序列數(shù)據(jù)時(shí),重采樣是必不可少的。

重采樣過程

重采樣過程通常包括以下步驟:

首先選擇要重新采樣的時(shí)間序列數(shù)據(jù)。該數(shù)據(jù)可以采用各種格式,包括數(shù)值、文本或分類數(shù)據(jù)。

確定您希望重新采樣數(shù)據(jù)的頻率。這可以是增加粒度(上采樣)或減少粒度(下采樣)。

選擇重新采樣方法。常用的方法包括平均、求和或使用插值技術(shù)來填補(bǔ)數(shù)據(jù)中的空白。

在上采樣時(shí),可能會(huì)遇到原始時(shí)間戳之間缺少數(shù)據(jù)點(diǎn)的情況。插值方法,如線性或三次樣條插值,可以用來估計(jì)這些值。

對(duì)于下采樣,通常會(huì)在每個(gè)目標(biāo)區(qū)間內(nèi)聚合數(shù)據(jù)點(diǎn)。常見的聚合函數(shù)包括sum、mean或median。

評(píng)估重采樣的數(shù)據(jù),以確保它符合分析目標(biāo)。檢查數(shù)據(jù)的一致性、完整性和準(zhǔn)確性。

Pandas中的resample()方法

resample可以同時(shí)操作Pandas Series和DataFrame對(duì)象。它用于執(zhí)行聚合、轉(zhuǎn)換或時(shí)間序列數(shù)據(jù)的下采樣和上采樣等操作。

下面是

resample()

方法的基本用法和一些常見的參數(shù)

import pandas as pd
 
 # 創(chuàng)建一個(gè)示例時(shí)間序列數(shù)據(jù)框
 data = {'date': pd.date_range(start='2023-01-01', end='2023-12-31', freq='D'),
         'value': range(365)}
 df = pd.DataFrame(data)
 
 # 將日期列設(shè)置為索引
 df.set_index('date', inplace=True)
 
 # 使用resample()方法進(jìn)行重新采樣
 # 將每日數(shù)據(jù)轉(zhuǎn)換為每月數(shù)據(jù)并計(jì)算每月的總和
 monthly_data = df['value'].resample('M').sum()
 
 # 將每月數(shù)據(jù)轉(zhuǎn)換為每季度數(shù)據(jù)并計(jì)算每季度的平均值
 quarterly_data = monthly_data.resample('Q').mean()
 
 # 將每季度數(shù)據(jù)轉(zhuǎn)換為每年數(shù)據(jù)并計(jì)算每年的最大值
 annual_data = quarterly_data.resample('Y').max()
 
 print(monthly_data)
 print(quarterly_data)
 print(annual_data)

在上述示例中,我們首先創(chuàng)建了一個(gè)示例的時(shí)間序列數(shù)據(jù)框,并使用

resample()

方法將其轉(zhuǎn)換為不同的時(shí)間頻率(每月、每季度、每年)并應(yīng)用不同的聚合函數(shù)(總和、平均值、最大值)。

resample()

方法的參數(shù):

  • 第一個(gè)參數(shù)是時(shí)間頻率字符串,用于指定重新采樣的目標(biāo)頻率。常見的選項(xiàng)包括 'D'(每日)、'M'(每月)、'Q'(每季度)、'Y'(每年)等。
  • 你可以通過第二個(gè)參數(shù)how來指定聚合函數(shù),例如 'sum''mean''max' 等,默認(rèn)是 'mean'
  • 你還可以使用closed參數(shù)來指定每個(gè)區(qū)間的閉合端點(diǎn),可選的值包括 'right''left''both''neither',默認(rèn)是 'right'
  • 使用label參數(shù)來指定重新采樣后的標(biāo)簽使用哪個(gè)時(shí)間戳,可選的值包括 'right''left''both''neither',默認(rèn)是 'right'
  • 可以使用loffset參數(shù)來調(diào)整重新采樣后的時(shí)間標(biāo)簽的偏移量。
  • 最后,你可以使用聚合函數(shù)的特定參數(shù),例如'sum'函數(shù)的min_count參數(shù)來指定非NA值的最小數(shù)量。

1、指定列名

默認(rèn)情況下,Pandas的resample()方法使用Dataframe或Series的索引,這些索引應(yīng)該是時(shí)間類型。但是,如果希望基于特定列重新采樣,則可以使用on參數(shù)。這允許您選擇一個(gè)特定的列進(jìn)行重新采樣,即使它不是索引。

df.reset_index(drop=False, inplace=True)
 df.resample('W', on='index')['C_0'].sum().head()

在這段代碼中,使用resample()方法對(duì)'index'列執(zhí)行每周重采樣,計(jì)算每周'C_0'列的和。

2、指定開始和結(jié)束的時(shí)間間隔

closed參數(shù)允許重采樣期間控制打開和關(guān)閉間隔。默認(rèn)情況下,一些頻率,如'M', 'A', 'Q', 'BM', 'BA', 'BQ'和'W'是右閉的,這意味著包括右邊界,而其他頻率是左閉的,其中包括左邊界。在轉(zhuǎn)換數(shù)據(jù)頻率時(shí),可以根據(jù)需要手動(dòng)設(shè)置關(guān)閉間隔。

df = generate_sample_data_datetime()
 pd.concat([df.resample('W', closed='left')['C_0'].sum().to_frame(name='left_closed'),
            df.resample('W', closed='right')['C_0'].sum().to_frame(name='right_closed')],
           axis=1).head(5)

在這段代碼中,我們演示了將日頻率轉(zhuǎn)換為周頻率時(shí)左閉間隔和右閉間隔的區(qū)別。

3、輸出結(jié)果控制

label參數(shù)可以在重采樣期間控制輸出結(jié)果的標(biāo)簽。默認(rèn)情況下,一些頻率使用組內(nèi)的右邊界作為輸出標(biāo)簽,而其他頻率使用左邊界。在轉(zhuǎn)換數(shù)據(jù)頻率時(shí),可以指定是要使用左邊界還是右邊界作為輸出標(biāo)簽。

df = generate_sample_data_datetime()
 df.resample('W', label='left')['C_0'].sum().to_frame(name='left_boundary').head(5)
 df.resample('W', label='right')['C_0'].sum().to_frame(name='right_boundary').head(5)

在這段代碼中,輸出標(biāo)簽是根據(jù)在label參數(shù)中指定“l(fā)eft”還是“right”而變化的,建議在實(shí)際應(yīng)用時(shí)顯式指定,這樣可以減少混淆。

4、匯總統(tǒng)計(jì)數(shù)據(jù)

重采樣可以執(zhí)行聚合統(tǒng)計(jì),類似于使用groupby。使用sum、mean、min、max等聚合方法來匯總重新采樣間隔內(nèi)的數(shù)據(jù)。這些聚合方法類似于groupby操作可用的聚合方法。

df.resample('D').sum()
 df.resample('W').mean()
 df.resample('M').min()
 df.resample('Q').max()
 df.resample('Y').count()
 df.resample('W').std()
 df.resample('M').var()
 df.resample('D').median()
 df.resample('M').quantile([0.25, 0.5, 0.75])
 custom_agg = lambda x: x.max() - x.min()
 df.resample('W').apply(custom_agg)

上采樣和填充

在時(shí)間序列數(shù)據(jù)分析中,上采樣和下采樣是用來操縱數(shù)據(jù)觀測(cè)頻率的技術(shù)。這些技術(shù)對(duì)于調(diào)整時(shí)間序列數(shù)據(jù)的粒度以匹配分析需求非常有價(jià)值。

我們先生成一些數(shù)據(jù)

import pandas as pd
 import numpy as np
 
 
 def generate_sample_data_datetime():
     np.random.seed(123)
     number_of_rows = 365 * 2
     num_cols = 5
     start_date = '2023-09-15'  # You can change the start date if needed
     cols = ["C_0", "C_1", "C_2", "C_3", "C_4"]
     df = pd.DataFrame(np.random.randint(1, 100, size=(number_of_rows, num_cols)), columns=cols)
     df.index = pd.date_range(start=start_date, periods=number_of_rows)
     return df
 
 df = generate_sample_data_datetime()

上采樣包括增加數(shù)據(jù)的粒度,這意味著將數(shù)據(jù)從較低的頻率轉(zhuǎn)換為較高的頻率。

假設(shè)您有上面生成的每日數(shù)據(jù),并希望將其轉(zhuǎn)換為12小時(shí)的頻率,并在每個(gè)間隔內(nèi)計(jì)算“C_0”的總和:

df.resample('12H')['C_0'].sum().head(10)

代碼將數(shù)據(jù)重采樣為12小時(shí)的間隔,并在每個(gè)間隔內(nèi)對(duì)' C_0 '應(yīng)用總和聚合。這個(gè).head(10)用于顯示結(jié)果的前10行。

在上采樣過程中,特別是從較低頻率轉(zhuǎn)換到較高頻率時(shí),由于新頻率引入了間隙,會(huì)遇到丟失數(shù)據(jù)點(diǎn)的情況。所以需要對(duì)間隙的數(shù)據(jù)進(jìn)行填充,填充一般使用以下幾個(gè)方法:

向前填充-前一個(gè)可用的值填充缺失的值。可以使用limit參數(shù)限制正向填充的數(shù)量。

df.resample('8H')['C_0'].ffill(limit=1)

反向填充 -用下一個(gè)可用的值填充缺失的值。

df.resample('8H')['C_0'].bfill(limit=1)

最近填充 -用最近的可用值填充缺失的數(shù)據(jù),該值可以是向前的,也可以是向后的。

df.resample('8H')['C_0'].nearest(limit=1)

Fillna —結(jié)合了前面三個(gè)方法的功能。可以指定方法(例如,'pad'/' fill', 'bfill', 'nearest'),并使用limit參數(shù)進(jìn)行數(shù)量控制。

df.resample('8H')['C_0'].fillna(method='pad', limit=1)

Asfreq-指定一個(gè)固定的值來填充所有缺失的部分一次。例如,可以使用-999填充缺失的值。

df.resample('8H')['C_0'].asfreq(-999)

插值方法-可以應(yīng)用各種插值算法

df.resample('8H').interpolate(method='linear').applymap(lambda x: round(x, 2))

一些常用的函數(shù)

1、使用agg進(jìn)行聚合

result = df.resample('W').agg(
     {
         'C_0': ['sum', 'mean'],
         'C_1': lambda x: np.std(x, ddof=1)
     }
 ).head()

使用agg方法將每日時(shí)間序列數(shù)據(jù)重新采樣到每周頻率。并為不同的列指定不同的聚合函數(shù)。對(duì)于“C_0”,計(jì)算總和和平均值,而對(duì)于“C_1”,計(jì)算標(biāo)準(zhǔn)差。

2、使用 apply 聚合

def custom_agg(x):
     agg_result = {
         'C_0_mean': round(x['C_0'].mean(), 2),
         'C_1_sum': x['C_1'].sum(),
         'C_2_max': x['C_2'].max(),
         'C_3_mean_plus1': round(x['C_3'].mean() + 1, 2)
     }
     return pd.Series(agg_result)
 
 result = df.resample('W').apply(custom_agg).head()

定義了一個(gè)名為custom_agg的自定義聚合函數(shù),它將DataFrame x作為輸入,并在不同列上計(jì)算各種聚合。使用apply方法將數(shù)據(jù)重新采樣到每周的頻率,并應(yīng)用自定義聚合函數(shù)。

3、使用transform進(jìn)行變換

df['C_0_cumsum'] = df.resample('W')['C_0'].transform('cumsum')
 df['C_0_rank'] = df.resample('W')['C_0'].transform('rank')
 result = df.head(10)

使用transform 方法來計(jì)算每周組中'C_0'變量的累積和排名。DF的原始索引結(jié)構(gòu)保持不變。

4、使用pipe 進(jìn)行管道操作

result = df.resample('W')['C_0', 'C_1'] 
     .pipe(lambda x: x.cumsum()) 
     .pipe(lambda x: x['C_1'] - x['C_0'])
 result = result.head(10)

使用管道方法對(duì)下采樣的'C_0'和'C_1'變量進(jìn)行鏈?zhǔn)讲僮鳌umsum函數(shù)計(jì)算累積和,第二個(gè)管道操作計(jì)算每個(gè)組的'C_1'和'C_0'之間的差值。像管道一樣執(zhí)行順序操作。

總結(jié)

時(shí)間序列的重采樣是將時(shí)間序列數(shù)據(jù)從一個(gè)時(shí)間頻率(例如每日)轉(zhuǎn)換為另一個(gè)時(shí)間頻率(例如每月或每年),并且通常伴隨著對(duì)數(shù)據(jù)進(jìn)行聚合操作。重采樣是時(shí)間序列數(shù)據(jù)處理中的一個(gè)關(guān)鍵操作,通過進(jìn)行重采樣可以更好地理解數(shù)據(jù)的趨勢(shì)和模式。

Python中,可以使用Pandas庫的

resample()

方法來執(zhí)行時(shí)間序列的重采樣。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 轉(zhuǎn)換器
    +關(guān)注

    關(guān)注

    27

    文章

    8700

    瀏覽量

    147122
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2909

    文章

    44595

    瀏覽量

    372967
  • 數(shù)據(jù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    596

    瀏覽量

    28560
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4795

    瀏覽量

    84646
  • 重采樣
    +關(guān)注

    關(guān)注

    0

    文章

    2

    瀏覽量

    1095
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA設(shè)計(jì)關(guān)鍵問題的研究

    FPGA設(shè)計(jì)關(guān)鍵問題的研究
    發(fā)表于 08-20 15:25

    FPGA設(shè)計(jì)關(guān)鍵問題的研究

    FPGA設(shè)計(jì)關(guān)鍵問題的研究
    發(fā)表于 08-20 17:18

    labview 等角度采樣

    振動(dòng)數(shù)據(jù),想實(shí)現(xiàn)從等時(shí)間間隔采樣到等角度采樣,labview怎樣實(shí)現(xiàn)等角度采樣,有具體算法嗎?謝謝啦,聲音與振動(dòng)的工具包我也下了。
    發(fā)表于 04-20 22:47

    《HELLO FPGA》-Verilog的關(guān)鍵問題解

    《HELLO FPGA》-Verilog的關(guān)鍵問題解
    發(fā)表于 09-27 10:05

    關(guān)于labviewxy圖中波形采樣的問題

    比如在xy圖中顯示歷史數(shù)據(jù)五萬個(gè)點(diǎn),但是由于數(shù)據(jù)量過大,在設(shè)置游標(biāo)的過程中會(huì)出現(xiàn)卡頓,因此想到了利用采樣的方法,整體范圍顯示大間隔采樣點(diǎn),放大看局部時(shí)候,使用小間隔采樣點(diǎn)。但是發(fā)現(xiàn)自
    發(fā)表于 08-06 16:17

    基于采樣技術(shù)改進(jìn)的粒子濾波算法

    基于采樣技術(shù)改進(jìn)的粒子濾波算法_李小婷
    發(fā)表于 01-07 20:49 ?1次下載

    使用FPGA實(shí)現(xiàn)高效并行實(shí)時(shí)上采樣

    點(diǎn)擊上方 藍(lán)字 關(guān)注我們 ?采樣就是采集模擬信號(hào)的樣本。通常采樣指的是下采樣,也就是對(duì)信號(hào)的抽取。其實(shí),上采樣和下采樣都是對(duì)數(shù)字信號(hào)進(jìn)行
    的頭像 發(fā)表于 06-08 17:15 ?1301次閱讀

    什么是信號(hào)采樣率?如何更改信號(hào)的采樣率?

    更改信號(hào)采樣率是數(shù)字信號(hào)處理的一個(gè)重要操作,它涉及對(duì)信號(hào)進(jìn)行重新采樣,以改變信號(hào)的采樣率。
    的頭像 發(fā)表于 06-20 14:44 ?3943次閱讀

    任意采樣濾波器設(shè)計(jì)應(yīng)用說明

    電子發(fā)燒友網(wǎng)站提供《任意采樣濾波器設(shè)計(jì)應(yīng)用說明.pdf》資料免費(fèi)下載
    發(fā)表于 09-14 14:31 ?0次下載
    任意<b class='flag-5'>重</b><b class='flag-5'>采樣</b>濾波器設(shè)計(jì)應(yīng)用說明

    采樣方法在動(dòng)態(tài)軸式汽車衡的應(yīng)用

    電子發(fā)燒友網(wǎng)站提供《過采樣方法在動(dòng)態(tài)軸式汽車衡的應(yīng)用.pdf》資料免費(fèi)下載
    發(fā)表于 10-18 10:41 ?0次下載
    過<b class='flag-5'>采樣</b>方法在動(dòng)態(tài)軸<b class='flag-5'>重</b>式汽車衡<b class='flag-5'>中</b>的應(yīng)用

    中頻采樣是什么意思?中頻采樣與基帶采樣的區(qū)別

    中頻采樣是什么意思?中頻采樣與基帶采樣的區(qū)別? 中頻采樣與基帶采樣都是數(shù)字信號(hào)處理中常用的采樣
    的頭像 發(fā)表于 10-22 11:24 ?2423次閱讀

    什么是中頻采樣?什么是IQ采樣?中頻采樣和IQ采樣的比較和轉(zhuǎn)換

    什么是中頻采樣?什么是IQ采樣?中頻采樣和IQ采樣的比較和轉(zhuǎn)換? 中頻采樣和IQ采樣是數(shù)字信號(hào)處
    的頭像 發(fā)表于 10-22 11:24 ?6301次閱讀
    什么是中頻<b class='flag-5'>采樣</b>?什么是IQ<b class='flag-5'>采樣</b>?中頻<b class='flag-5'>采樣</b>和IQ<b class='flag-5'>采樣</b>的比較和轉(zhuǎn)換

    PCL基礎(chǔ)下采樣介紹

    基礎(chǔ)下采樣 1.1 點(diǎn)云隨機(jī)下采樣 點(diǎn)云下采樣是對(duì)點(diǎn)云以一定的采樣規(guī)則重新進(jìn)行采樣,目的是在保證
    的頭像 發(fā)表于 11-21 17:03 ?916次閱讀
    PCL<b class='flag-5'>中</b>基礎(chǔ)下<b class='flag-5'>采樣</b>介紹

    示波器帶寬與采樣率的關(guān)系

    示波器作為電子測(cè)試領(lǐng)域的重要工具,其主要功能是捕獲和顯示信號(hào)波形。在示波器的設(shè)計(jì)和使用,帶寬和采樣率是兩個(gè)至關(guān)重要的參數(shù)。帶寬決定了示波器能夠準(zhǔn)確顯示的信號(hào)頻率范圍,而
    的頭像 發(fā)表于 05-17 16:52 ?4083次閱讀

    用于AIC111的高效采樣濾波器

    電子發(fā)燒友網(wǎng)站提供《用于AIC111的高效采樣濾波器.pdf》資料免費(fèi)下載
    發(fā)表于 10-23 10:13 ?0次下載
    用于AIC111的高效<b class='flag-5'>重</b><b class='flag-5'>采樣</b>濾波器
    主站蜘蛛池模板: 国产亚洲精品精品精品| 国产真实强被迫伦姧女在线观看| 麻豆文化传媒一区二区| 一个人看的WWW高清电影| 黑人强伦姧人妻日韩那庞大的| 午夜成a人片在线观看| 国产97碰免费视频| 日韩中文无线码在线视频| 成人免费看片又大又黄| 青青久久网| av56788成 人影院| 麻生希第一部快播| 最近中文字幕免费高清MV视频| 久久蜜视频| 综合激情区视频一区视频二区| 两百磅美女| 97视频精品| 欧美日韩一区二区三区四区| xxxx俄罗斯1819| 情欲.美女高潮| 动态抽插图视频| 首页_亚洲AV色老汉影院| 国产成人精品自线拍| 无套内谢大学生A片| 国产免费人成在线看视频| 亚洲精品国产品国语在线试看| 国内卡一卡二卡三免费网站| 亚洲欧洲日韩国产一区二区三区| 娇妻归来在线观看免费完整版电影 | 99re6在线视频国产精品欧美| 蜜芽国产在线精品欧美| 99久久免费国产精品特黄| 欧美激情一区二区三区视频| 草久久久久| 帅哥操帅哥| 国内精品久久| 真实伦 乱| 欧美亚洲精品真实在线| 电影果冻传媒在线播放| 午夜福利影院私人爽爽| 国产又粗又猛又爽又黄的免费视频 |