- 問題
- 答え
- 解説
Python コード:
import pandas as pd # 年間売上データ sales_data = [200,220,250,280,310] years = pd.date_range( start='2018-01-01', periods=5, freq='A') sales_series = pd.Series( sales_data, index=years) # 成長率の計算 growth = ( (sales_series.pct_change() + 1 ).cumprod() - 1) print(growth.dropna().values * 100)
回答の選択肢:
(A) [1.10 1.25 1.40 1.55]
(B) [1.10 1.14 1.12 1.11]
(C) [10.0 13.6 12.0 10.7]
(D) [10.0 25.0 40.0 55.0]
[10. 25. 40. 55.]
正解: (D)
回答の選択肢:
(A) [1.10 1.25 1.40 1.55]
(B) [1.10 1.14 1.12 1.11]
(C) [10.0 13.6 12.0 10.7]
(D) [10.0 25.0 40.0 55.0]
- コードの解説
-
このコードは、年別の人口データに基づいて、年次のパーセンテージ変化を計算しています。
import pandas as pd # 年間売上データ sales_data = [200,220,250,280,310] years = pd.date_range( start='2018-01-01', periods=5, freq='A') sales_series = pd.Series( sales_data, index=years) # 成長率の計算 growth = ( (sales_series.pct_change() + 1 ).cumprod() - 1) print(growth.dropna().values * 100)
詳しく説明します。
まず、5年間の年間売上データをリストとして定義します。
sales_data = [200,220,250,280,310]
2018年から始まる5年間の年末(12月31日)の日付を生成します。
freq='A'
は年の終わりを意味します。years = pd.date_range(start='2018-01-01', periods=5, freq='A')
years
に格納されているデータは以下です。DatetimeIndex(['2018-12-31', '2019-12-31', '2020-12-31', '2021-12-31', '2022-12-31'], dtype='datetime64[ns]', freq='A-DEC')
sales_data
リストとyears
日付範囲を結びつけてPandasのSeries
オブジェクトを作成します。sales_series = pd.Series(sales_data, index=years)
sales_series
に格納されているデータは以下です。2018-12-31 200 2019-12-31 220 2020-12-31 250 2021-12-31 280 2022-12-31 310 Freq: A-DEC, dtype: int64
pct_change()
メソッドを使用して年間売上の変化率(パーセンテージ変化)を計算し、それに1
を加えています。cumprod()
メソッドで累積積を取り、`1`を引くことで累積成長率を求めています。growth = ((sales_series.pct_change() + 1).cumprod() - 1)
dropna()
メソッドでNaN
値(最初の年の変化率は計算できないためNaN
が生成されます)を除去し、残りの値を100
倍してパーセンテージ単位で出力しています。print(growth.dropna().values * 100)
[10. 25. 40. 55.]
- pct_change()メソッド
-
pct_change()
メソッドは、PandasのSeries
やDataFrame
オブジェクトにおいて、各要素がその前の要素に対してどの程度変化したかを計算するために使用されます。このメソッドによって計算されるのは、要素間の変化の割合(パーセンテージ変化)です。
具体的には、現在の要素と前の要素の差分を前の要素の値で割り、その結果をパーセンテージとして表現します。
このメソッドは、時系列データや金融データの分析において、価格、株価、人口などの時間による変化率を調べる際に特に有用です。
pct_change()
メソッドを使用することで、データの変化傾向をより理解しやすくなります。例えば、ある期間にわたる株価の変化率を計算する場合、
pct_change()
メソッドを使って各日の株価が前日に比べてどの程度増減したかをパーセンテージで簡単に計算することができます。最初の要素には前の要素が存在しないため、その結果は
NaN
(欠損)となります。以下、コード例です。
import pandas as pd # 株価の例 prices = pd.Series([100, 105, 103, 108, 110]) # パーセンテージ変化を計算 price_changes = prices.pct_change() print(price_changes)
以下、実行結果です。
0 NaN 1 0.050000 2 -0.019048 3 0.048544 4 0.018519 dtype: float64
この例では、各日の株価が前日に比べてどの程度変化したか(パーセンテージで)を計算し、その結果を表示します。
最初の結果は
NaN
ですが、それ以降の結果は前日に比べた株価の変化率をパーセンテージで示しています。 - cumprod()メソッド
-
cumprod()
メソッドは、シリーズやデータフレームの各要素に対して累積積(cumulative product)を計算します。具体的には、シリーズの各要素について、その要素までの全ての要素の積を計算し、新しいシリーズとして結果を返します。
このメソッドは、時系列データや金融データの分析など、累積積を計算する必要がある場合に特に便利です。
例えば、例えば、シリーズが
[1, 2, 3, 4]
の場合、cumprod
メソッドによって計算される累積積は以下のようになります。- 最初の要素は 1 です。これまでの積は 1 です。
- 2番目の要素は 2 です。これまでの積は 1 \times 2 = 2 です。
- 3番目の要素は 3 です。これまでの積は 1 \times 2 \times 3 = 6 です。
- 4番目の要素は 4 です。これまでの積は 1 \times 2 \times 3 \times 4 = 24 です。
したがって、
cumprod
メソッドの結果は `[1, 2, 6, 24]` となります。以下、コード例です。
import pandas as pd # シリーズを作成 series = pd.Series([1, 2, 3, 4]) # cumprodを使用して累積積を計算 cumulative_product = series.cumprod() # 結果を表示 print(cumulative_product)
以下、実行結果です。
0 1 1 2 2 6 3 24 dtype: int64
- 累積成長率の計算
-
growth = ((sales_series.pct_change() + 1).cumprod() - 1)
の式は、売上データの年間成長率を計算し、その累積成長率を求めるために使用されます。分かり難いと思いますので、ステップByステップで説明します。
sales_series.pct_change()
- これは、
sales_series
(年間売上データのPandasシリーズ)内の各要素について、前の要素に対する変化率(パーセンテージ変化)を計算します。 - 最初の要素は比較対象がないため、
NaN
(非数)が返されます。
+ 1
pct_change()
によって計算された各変化率に1
を加えます。- これは、変化率を成長率に変換するための一般的な方法です。
- たとえば、5%の成長は1.05として表されます。これにより、後続の累積計算で乗算を使用できるようになります。
.cumprod()
- このメソッドは、シリーズ内の要素に対して累積積を計算します。
- この場合、変化率に
1
を加えた値の累積積を計算し、各年までの累積成長率を求めます。 - 最初の要素は
1
(変化なし)から始まり、各要素は前の要素と乗算されて累積されます。
- 1
- 最後に、累積積から
1
を引きます。これは、累積成長率を元のスケールに戻すために行います。 - たとえば、累積成長率が1.10(10%の成長)の場合、
- 1
を行うことで0.10(10%)となります。
結果として、この式は各年までの累積成長率をパーセント単位で計算し、初年度から各年までの売上がどれだけ成長したかを示します。
- これは、