背景
- 加速度センサーなど、物理データの測定機器などでは測定間隔が周波数(Hz)で定義されていることが多くあります。
- センサーにもよるが、出力データに時系列の
index
がついていない場合もままあります。 - この際、データ分析時等の前処理として周波数(Hz)に対応した時系列の
index
を作成したいというニーズがあります。<br>
※周波数
単位時間(一般的には1秒)当たりに繰り返される回数のこと。
ex)50Hzであれば、1秒間に50回何かが繰り返されている(力学では一般的に振動)ことを指しています。
参考:周波数
目標
- 周波数(Hz)から
Pandas
のDataFrame
の時期列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引数のfreq
にstr
型として単位の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がついていない場合もままあります。…