LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2023-01-08

背景

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

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

目標

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

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

  • pandas.date_rangeを使用し、周波数(Hz)に対応した時系列indexを作成します。
  • 周波数(Hz)に対応した時系列indexの作成方法はいくつか考えられますが、私がわかりやすいと思った「開始時間から指定個数の時系列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を作成する。
#上記で作成した、周波数(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

参考資料

個人ブログ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0