NumPy配列の集計術!行・列ごとの合計、平均、最大、最小を自在に算出


 

データ分析を行う際、NumPy配列(ndarray)に格納されたデータを行ごと、または列ごとに集計する操作は基本中の基本です。例えば、各月の売上合計、各製品の平均価格、日ごとの最高気温など、特定の軸に沿った統計量を素早く計算したい場面は多々あります。この記事では、NumPyの強力な集計関数(sum, mean, max, minなど)を使って、配列の行・列ごとの合計、平均、最大、最小を効率的に算出する方法を、具体的なサンプルコードを交えながら詳しく解説します。


 

NumPy集計関数の基本とaxis引数

 

NumPyの集計関数は、配列全体に対して計算を行うだけでなく、axis引数を使用することで、特定の軸(行または列)に沿った計算が可能です。

  • axis=0: 列方向(行をまたいで列の値を集計)。結果の形状は元の配列の列数に対応します。

  • axis=1: 行方向(列をまたいで行の値を集計)。結果の形状は元の配列の行数に対応します。

  • axis=None (デフォルト): 配列全体の全要素を集計。結果は単一の数値になります。


 

行・列ごとの合計を算出する:np.sum()

 

np.sum()関数は、配列の要素の合計を計算します。axis引数を指定することで、行ごとまたは列ごとの合計を算出できます。

 

1. 行ごとの合計(axis=1

 

各行の要素を合計します。

 

サンプルコード

 

Python
 
import numpy as np

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

# 各行の合計を算出
row_sums = np.sum(arr_2d, axis=1)
print("\n行ごとの合計:\n", row_sums)

 

出力例

 

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

行ごとの合計:
 [ 6 15 24]

 

2. 列ごとの合計(axis=0

 

各列の要素を合計します。

 

サンプルコード

 

Python
 
import numpy as np

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

# 各列の合計を算出
col_sums = np.sum(arr_2d, axis=0)
print("\n列ごとの合計:\n", col_sums)

 

出力例

 

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

列ごとの合計:
 [12 15 18]

 

行・列ごとの平均を算出する:np.mean()

 

np.mean()関数は、配列の要素の平均を計算します。これもaxis引数で方向を指定できます。

 

1. 行ごとの平均(axis=1

 

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])

# 各行の平均を算出
row_means = np.mean(arr_2d, axis=1)
print("行ごとの平均:\n", row_means)

 

出力例

 

行ごとの平均:
 [2. 5. 8.]

 

2. 列ごとの平均(axis=0

 

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])

# 各列の平均を算出
col_means = np.mean(arr_2d, axis=0)
print("列ごとの平均:\n", col_means)

 

出力例

 

列ごとの平均:
 [4. 5. 6.]

 

行・列ごとの最大値・最小値を算出する:np.max(), np.min()

 

np.max()(またはnp.amax())とnp.min()(またはnp.amin())関数は、配列の最大値と最小値を計算します。もちろん、axis引数を指定して行ごと、列ごとの最大値・最小値を求めることができます。

 

1. 行ごとの最大値(axis=1

 

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[1, 20, 3],
                   [40, 5, 60],
                   [7, 80, 9]])

# 各行の最大値を算出
row_max = np.max(arr_2d, axis=1)
print("行ごとの最大値:\n", row_max)

 

出力例

 

行ごとの最大値:
 [20 60 80]

 

2. 列ごとの最小値(axis=0

 

 

サンプルコード

 

Python
 
import numpy as np

arr_2d = np.array([[1, 20, 3],
                   [40, 5, 60],
                   [7, 80, 9]])

# 各列の最小値を算出
col_min = np.min(arr_2d, axis=0)
print("列ごとの最小値:\n", col_min)

 

出力例

 

列ごとの最小値:
 [1 5 3]

 

その他の便利な集計関数

 

NumPyには、他にも様々な集計関数があり、これらも同様にaxis引数をサポートしています。

  • np.median(): 中央値

  • np.std(): 標準偏差

  • np.var(): 分散

  • np.prod(): 積(全ての要素の掛け算)

これらもaxis引数を指定することで、行ごとや列ごとの統計量を簡単に計算できます。

 

サンプルコード (例: 列ごとの標準偏差)

 

Python
 
import numpy as np

arr_2d = np.array([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9]])

# 各列の標準偏差を算出
col_std = np.std(arr_2d, axis=0)
print("列ごとの標準偏差:\n", col_std)

 

出力例

 

列ごとの標準偏差:
 [2.44948974 2.44948974 2.44948974]

 

まとめ

 

NumPy配列の行・列ごとの集計は、データ分析の基礎であり、axis引数を理解することがその鍵となります。

  • axis=0: 列方向(行をまたぐ)での集計

  • axis=1: 行方向(列をまたぐ)での集計

np.sum(), np.mean(), np.max(), np.min()をはじめとする多くの集計関数は、このaxis引数をサポートしており、目的の方向に沿った統計量を効率的に計算できます。これらの機能を使いこなすことで、データから洞察を得るための前処理や分析が格段にスムーズになるでしょう。ぜひ、あなたのNumPyワークフローで活用してください!🚀