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)
各行の要素を合計します。
サンプルコード
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)
各列の要素を合計します。
サンプルコード
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)
サンプルコード
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)
サンプルコード
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)
サンプルコード
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)
サンプルコード
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引数を指定することで、行ごとや列ごとの統計量を簡単に計算できます。
サンプルコード (例: 列ごとの標準偏差)
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ワークフローで活用してください!🚀

