NumPyで累積計算!cumsumとcumprodでデータ傾向を掴む


 

データ分析や時系列解析では、データの「累積的な変化」を追跡することがよくあります。例えば、日ごとの売上から累計売上を算出したり、投資の複利効果を計算したりする場面です。NumPyライブラリは、このような累積計算を効率的に行うための**np.cumsum()(累積和)とnp.cumprod()**(累積積)という便利な関数を提供しています。この記事では、これらの関数の基本的な使い方から、多次元配列での活用法まで、具体的なサンプルコードを交えながら詳しく解説します。


 

累積和(Cumulative Sum):np.cumsum()

 

累積和は、配列の要素を先頭から順番に足し合わせていくことで得られる新しい配列です。各要素が、その位置までのすべての要素の合計を表します。

 

書式

 

Python
 
numpy.cumsum(a, axis=None, dtype=None, out=None)
  • a: 累積和を計算したい元の配列(ndarray)。

  • axis (オプション): 累積和を計算する軸を指定します。

    • None (デフォルト): 配列全体をフラットにして計算。

    • 0: 列方向(各列で累積和を計算)。

    • 1: 行方向(各行で累積和を計算)。

 

1. 1次元配列での累積和

 

 

サンプルコード

 

Python
 
import numpy as np

sales = np.array([10, 15, 5, 20, 8])

# 日々の売上から累計売上を計算
cumulative_sales = np.cumsum(sales)
print("日々の売上:", sales)
print("累計売上:", cumulative_sales)

 

出力例

 

日々の売上: [10 15  5 20  8]
累計売上: [10 25 30 50 58]

 

2. 多次元配列での累積和(axis指定)

 

axis引数を使うことで、行ごと、または列ごとに累積和を計算できます。

 

サンプルコード

 

Python
 
import numpy as np

data_2d = np.array([[1, 2, 3],
                    [4, 5, 6],
                    [7, 8, 9]])
print("元の配列:\n", data_2d)

# 各行での累積和 (axis=1)
row_cumsum = np.cumsum(data_2d, axis=1)
print("\n行ごとの累積和:\n", row_cumsum)

# 各列での累積和 (axis=0)
col_cumsum = np.cumsum(data_2d, axis=0)
print("\n列ごとの累積和:\n", col_cumsum)

 

出力例

 

元の配列:
 [[1 2 3]
 [4 5 6]
 [7 8 9]]

行ごとの累積和:
 [[ 1  3  6]
 [ 4  9 15]
 [ 7 15 24]]

列ごとの累積和:
 [[ 1  2  3]
 [ 5  7  9]
 [12 15 18]]

 

累積積(Cumulative Product):np.cumprod()

 

累積積は、配列の要素を先頭から順番に掛け合わせていくことで得られる新しい配列です。各要素が、その位置までのすべての要素の積を表します。金融分野での複利計算などで役立ちます。

 

書式

 

Python
 
numpy.cumprod(a, axis=None, dtype=None, out=None)
  • a: 累積積を計算したい元の配列(ndarray)。

  • axis (オプション): 累積積を計算する軸を指定します。

 

1. 1次元配列での累積積

 

 

サンプルコード

 

Python
 
import numpy as np

values = np.array([1, 2, 3, 4, 5])

# 累積積を計算
cumulative_product = np.cumprod(values)
print("元の配列:", values)
print("累積積:", cumulative_product)

 

出力例

 

元の配列: [1 2 3 4 5]
累積積: [  1   2   6  24 120]

 

2. 多次元配列での累積積(axis指定)

 

累積和と同様に、累積積もaxis引数を使って行ごと、または列ごとに計算できます。

 

サンプルコード

 

Python
 
import numpy as np

data_2d = np.array([[1, 2],
                    [3, 4]])
print("元の配列:\n", data_2d)

# 各行での累積積 (axis=1)
row_cumprod = np.cumprod(data_2d, axis=1)
print("\n行ごとの累積積:\n", row_cumprod)

# 各列での累積積 (axis=0)
col_cumprod = np.cumprod(data_2d, axis=0)
print("\n列ごとの累積積:\n", col_cumprod)

 

出力例

 

元の配列:
 [[1 2]
 [3 4]]

行ごとの累積積:
 [[ 1  2]
 [ 3 12]]

列ごとの累積積:
 [[1 2]
 [3 8]]

 

まとめ

 

NumPyのnp.cumsum()np.cumprod()は、配列内のデータの累積的な傾向を分析するために非常に便利な関数です。

  • np.cumsum(): 配列の要素を順に足し合わせ、累積和を計算します。

  • np.cumprod(): 配列の要素を順に掛け合わせ、累積積を計算します。

  • axis引数: 両関数ともにaxis引数をサポートしており、1次元配列の計算はもちろん、多次元配列の特定の軸(行または列)に沿った計算も可能です。

これらの関数は、時系列データの分析、金融計算、確率統計モデリングなど、幅広い分野で活用されます。データの累積的なパターンを素早く把握するために、ぜひあなたのNumPyワークフローに取り入れてみてください!🚀