Python 時系列分析 1,000本ノック
– ノック20: 時系列データの変数変換 –

Python 時系列分析 1,000本ノック– ノック20: 時系列データの変数変換 –

次の Python コードの出力はどれでしょうか?

Python コード:

import pandas as pd
import numpy as np

dates = pd.date_range(
    '2023-01-01', 
    periods=4, 
    freq='M')
    
data = [100, 200, 400, 800]

df = pd.DataFrame(
    data, 
    index=dates, 
    columns=['A'])

print(np.log(df))

 

回答の選択肢:

(A) 各月のデータの対数値
(B) 各月のデータの平方根
(C) 各月のデータの逆数
(D) 各月のデータの二乗

 

出力例:

                   A
2023-01-31  4.605170
2023-02-28  5.298317
2023-03-31  5.991465
2023-04-30  6.684612

 

正解:

(A)

 

解説:

このコードは、時間の経過と共に増加する値を持つ時系列データを作り、それに自然対数変換を適用しています。

対数変換は、データのスケールを変更して、比較するときに意味のある結果を得るためや、指数関数的に増加あるいは減少するデータの変動を線形化するためによく用いられます。

詳しく説明します。

‘2023-01-01’から始まる月単位の日付範囲を4期間作ります。

dates = pd.date_range(
    '2023-01-01', 
    periods=4, 
    freq='M')

 

datesに格納されているデータは次のようになっています。

DatetimeIndex(['2023-01-31', '2023-02-28', '2023-03-31', '2023-04-30'], dtype='datetime64[ns]', freq='M')

 

そして、この日付範囲をインデックスとして、与えられたデータ(倍率で増加するデータ)からなるデータフレームを作ります。このデータフレームの列名は ‘A’ です。

data = [100, 200, 400, 800]

df = pd.DataFrame(
    data, 
    index=dates, 
    columns=['A'])

 

dfに格納されているデータは次のようになっています。

              A
2023-01-31  100
2023-02-28  200
2023-03-31  400
2023-04-30  800

 

NumPyの`log`関数を用いてデータに自然対数を適用します。この関数は、データフレーム内の各値の自然対数を計算します。

print(np.log(df))

 

出力としては、元のデータの各値の自然対数を示しています。

                   A
2023-01-31  4.605170
2023-02-28  5.298317
2023-03-31  5.991465
2023-04-30  6.684612

 

ここでは元のデータが2倍に増加する度に、対数化したデータはほぼ一定の値(この場合はおおよそ0.693147、自然対数log(2)の値)ずつ増えます。これは対数変換の一般的な特性で、対数変換により乗法的な変化を加法的な変化に変えることができます。

Python 時系列分析 1,000本ノック– ノック21: 時系列データの特定の曜日抽出 –