次の 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)の値)ずつ増えます。これは対数変換の一般的な特性で、対数変換により乗法的な変化を加法的な変化に変えることができます。