【Python】PandasのDataFrameで、周波数(Hz)から時系列のindexを作る方法(pandas.date_range)

背景

  • 加速度センサーなど、物理データの測定機器などでは測定間隔が周波数(Hz)で定義されていることが多くあります。
  • センサーにもよるが、出力データに時系列のindexがついていない場合もままあります。
  • この際、データ分析時等の前処理として周波数(Hz)に対応した時系列のindexを作成したいというニーズがあります。<br>

※周波数
単位時間(一般的には1秒)当たりに繰り返される回数のこと。
ex)50Hzであれば、1秒間に50回何かが繰り返されている(力学では一般的に振動)ことを指しています。
参考:周波数

目標

  • 周波数(Hz)からPandasDataFrameの時期列indexを作成できるようになる。

周波数(Hz)から等間隔のPandasのDataFrameの時期列indexを作成する方法

  • pandas.date_rangeを使用し、周波数(Hz)に対応した時系列indexを作成します。
  • 周波数(Hz)に対応した時系列indexの作成方法はいくつか考えられますが、私がわかりやすいと思った「開始時間から指定個数の時系列indexを作成する方法」を紹介します。
import pandas as pd
import numpy as np

#Hzをマイクロ秒の間隔に変換(今回は50Hzの場合)
us_freq = 1/50 * 1000000
#※1/○でうまく割り切れない数字などの場合は、エラーになります。

#周波数(Hz)に応じたindexを必要数作成
Hz_index = pd.date_range(start='2023-01-01', periods=10, freq= str(us_freq) + 'us')

print(Hz_index)
#DatetimeIndex([       '2023-01-01 00:00:00', '2023-01-01 00:00:00.020000',
#               '2023-01-01 00:00:00.040000', '2023-01-01 00:00:00.060000',
#               '2023-01-01 00:00:00.080000', '2023-01-01 00:00:00.100000',
#               '2023-01-01 00:00:00.120000', '2023-01-01 00:00:00.140000',
#               '2023-01-01 00:00:00.160000', '2023-01-01 00:00:00.180000'],
#              dtype='datetime64[ns]', freq='20000U')
  • 以下に上記コードの解説をします。

    • まず、us_freqという変数に、指定の周波数(Hz)に対応したマイクロ秒数を算出し、代入します。
    • 周波数(Hz)は1秒あたりの繰り返し回数なので、1を周波数で割り1振動にかかる秒数を算出します。
    • 算出した値は秒(s)なので、マイクロ秒に変換するために、1000000を乗じ、マイクロ秒に変換します。
    • なお、ここでは50Hzなので、$1/50 = 0.02s$となり$0.02s × 1000000 = 20000us$という値になります。

    $f = \frac{1}{T}$

    $f:周波数$
    $T:周期$

    • 上記で算出した値をpd.date_rangeの第3引数のfreqstr型として単位のusと結合し渡します。
    • これにより、指定時間からperiodsで指定した個数の時系列のindexが作成されます。
  • 上記で作成した、周波数(Hz)のindexを使用しdfを作成します。

#上記で作成した、周波数(Hz)のindexを使用しdfを作成する。
df = pd.DataFrame(np.arange(10).reshape(10, 1), columns = ['data'], index = Hz_index)

print(df)
#                       data
#2023-01-01 00:00:00.000     0
#2023-01-01 00:00:00.020     1
#2023-01-01 00:00:00.040     2
#2023-01-01 00:00:00.060     3
#2023-01-01 00:00:00.080     4
#2023-01-01 00:00:00.100     5
#2023-01-01 00:00:00.120     6
#2023-01-01 00:00:00.140     7
#2023-01-01 00:00:00.160     8
#2023-01-01 00:00:00.180     9

参考資料

pandas.date_range — pandas 2.1.4 documentation
周波数 - Wikipedia
【Python】PandasのDataFrameで、毎日・毎時間などの時系列のindexを作る方法(pandas.date_range) - Qiita
背景PandasのDataFrameの時系列データを取り扱っている際に、毎日や毎時間といったdatetime型のindexが必要になることがあります。時系列のindexはstr型で作成してしまう…

Qiita記事

【Python】PandasのDataFrameで、周波数(Hz)から時系列のindexを作る方法(pandas.date_range) - Qiita
背景加速度センサーなど、物理データの測定機器などでは測定間隔が周波数(Hz)で定義されていることが多くあります。センサーにもよるが、出力データに時系列のindexがついていない場合もままあります。…