簡體   English   中英

匹配兩個不同大小的數據集

[英]Matching two data sets of different sizes

我有兩個具有不同采樣率和不同樣本量的數據集,但是它們都在同一時間開始,並且幾乎在同一時間結束。 每個數據集的第一列是時間,如何使用時間列將它們的第二列彼此相對繪制,但它們在兩個軸上都沒有時間? 本質上,我正在嘗試繪制兩個不同長度的向量。

例如,具有這兩個數據集,在名為“溫度”的文件中,第一列為時間[s],第二列為溫度[°C]。 第二個文件名“ delay”的第一列為時間[s],第二列為電動機地址。 我想將溫度作為我的x軸,並將相應的電機位置作為我的y軸。

樣本數據

我無法對數據進行一對一匹配,因為兩者之間的時間間隔不同,但是由於采樣率高於我需要的采樣率,因此可以對數據進行一些局部平均更多的數據點,以使其具有相同的長度。 我正在使用numpy數組。

您有嘗試過嗎? 如果是這樣,請提供代碼-在嘗試回答您的問題時非常有幫助。 甚至偽代碼也使它變得更加容易。

對於第二個數據集,您知道參考或錨定日期/時間嗎? 如果僅以秒為單位,您將無法加入絕對時間。 我想一個開始時間,所以你可以在“延遲”數據集在UNIX時間值是這樣的“時間”列轉換:

import datetime
# arbitrarily define start date/time to be right now
start_datetime = datetime.datetime.now()
delay_datetime = start_datetime + datetime.timedelta(seconds=time)

此時,兩組數據中都將有一個“ datetime”列,然后可以加入datetime,這似乎是您想要做的。

再次,以上是半偽代碼,因為我不知道您是否正在使用pandas數據幀,numpy數組等,因為沒有示例代碼發布。

我每天必須使用不規則間隔的時間序列。很不幸,python中有很多不錯的工具可以做到這一點。 imho最突出的是pandas ,因為它內部使用numpy數組存儲數據,同時提供了大量基於時間序列的運算/計算。
對於使用時間序列,尤其是間隔不規則的時間序列,pandas是一個很好的工具,因為您可以輕松地對數據進行重新采樣,內插等。 (我沒有與任何熊貓團隊建立聯系,這只是我經驗中最好的。)

這是我要解決的問題,假設將重采樣頻率設置為'1s'為一秒是可以的(因為您說采樣頻率遠高於所需的頻率,所以我想這是可以的……):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

delay = np.load('delay.npy')  # load data. delay is constantly -14576.
temperature = np.load('temperature.npy')

df_delay = pd.DataFrame(  # load delay into DataFrame and convert timestamp
    data=delay[:, 1], index=pd.to_datetime(delay[:, 0], unit='s'))
date_offset = df_delay.index[0]  # same first timestamp as starting time for temperature
df_temp = pd.DataFrame(  # load temp. into df and convert relative timestamp using offset
    data=temperature[:, 1],
    index=pd.to_datetime(temperature[:, 0], unit='s', origin=date_offset))
# resample both to 1 second.
df_delay = df_delay.resample('1s').mean()
df_temp = df_temp.resample('1s').mean()
# merge both
df = pd.concat((df_delay, df_temp), axis=1)
df.columns = ['motor_position', 'temperature']  # name columns

plt.plot(df['temperature'], df['motor_position'])  # plot with matplotlib

如果要直接使用熊貓的(相當不錯的)繪圖界面,還可以使用以下命令進行繪圖:

df.plot(x='temperature', y='motor_position')

如果您想要更高的頻率或確保偶爾出現的低采樣頻率不會將np.nan引入數據中,請在重采樣后附加.interpolate()

df_delay = df_delay.resample('1s').mean().interpolate()
df_temp = df_temp.resample('1s').mean().interpolate()

例如,對於重采樣到100ms,您可以使用'100ms'而不是'1s'

如果像替換后的delay.npy文件中的時間戳始終以相對秒為單位,則使用date_offset = pd.to_datetime('201808201000')類的日期獲取日期偏移,並將其傳遞給origin=date_offset的延遲數據幀的創建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM