どうもニコイチです。データ分析や機械学習の分野では、データの構造を正しく理解することが非常に重要です。Pythonの数値計算ライブラリであるNumPyを使うと、簡単にデータの形状や特徴を確認できます。
前回の記事では、NumPyを使ってデータを保存したり読み込んだりする方法について説明しました。今回は、読み込んだデータがどのような構造を持っているのかを確認する方法に焦点を当てます。
本記事では、NumPyを使ってデータを確認するための以下の4つの方法について詳しく解説します。
- データの形状(shape)を確認する
- データの長さ(len)を確認する
- データの次元数(ndim)を確認する
- データのサイズ(size)を確認する
これらのメソッドを適切に活用することで、データの基本的な構造を把握し、エラーを防ぐことができます。記事の後半では、実際にデータを読み込んで確認する演習も行います。
NumPyでデータの形状を確認する
データの形状(サイズや次元の構成)を確認するには、NumPyの .shape
属性を使用します。
.shape
とは?
.shape
は、配列の行数・列数・次元のサイズをタプル((行数, 列数, …)
)で返します。
例えば、以下のような2次元配列を考えてみましょう。
.shape
の使い方
import numpy as np
# 3×4 の2次元配列を作成
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]])
# 配列の形状を確認
print(arr.shape)
出力結果:
(3, 4)
この結果から、**「3行4列の二次元配列である」**ことがわかります。
.shape
の出力結果の解釈
.shape
が返すタプルの各要素は、次のように解釈できます。
.shape の出力 | 解釈 |
---|---|
(3, 4) | 3行4列の二次元配列 |
(5, 2) | 5行2列の二次元配列 |
(3, 2, 4) | 4列の2次元配列が2つあり、それが3つある三次元配列 |
例えば、次の三次元配列の場合:
arr_3d = np.random.rand(2, 3, 4)
print(arr_3d.shape)
出力結果:
(2, 3, 4)
これは、「3行4列の二次元配列が2つある」三次元配列であることを意味します。
.shape
を使うメリット
- データの整合性を確認できる(例えば、学習データとラベルのサイズが合っているかチェック)
- 機械学習モデルへの入力データの形式を確認できる(形状が違うとエラーになることが多い)
- データを変換する際の基準になる(リシェイプ
reshape()
などを適切に適用できる)
NumPyでデータの長さを確認する
データの長さ(要素数)を確認するには、Pythonの組み込み関数 len()
を使います。len()
は通常、リストや文字列の長さを取得するために使われますが、NumPyの配列にも適用できます。
len()
を使った配列の長さの取得
例えば、以下のような2次元配列を作成して len()
を適用してみましょう。
import numpy as np
# 3×4 の2次元配列を作成
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]])
# 配列の長さを確認
print(len(arr))
出力結果:
3
この結果から、最外層(最も外側の次元)の要素数が3であることがわかります。
.shape[0]
との違い
実は、len(arr)
の結果は arr.shape[0]
と同じ値になります。
print(arr.shape[0]) # 最外層の要素数を取得
出力結果:
3
.shape[0]
を使うと、len()
と同じく最外層のサイズを取得できます。ただし、多次元配列の場合は .shape
の他の要素を利用して、より詳細な情報を取得できます。
len()
の使いどころ
len()
は、リストや1次元配列に適用すると単純に要素数を返しますが、多次元配列では 最外層の要素数 を返します。
以下の例を見てみましょう。
arr_1d = np.array([1, 2, 3, 4, 5])
print(len(arr_1d)) # 1次元配列
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(len(arr_2d)) # 2次元配列
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(len(arr_3d)) # 3次元配列
出力結果:
5 # 1次元配列の要素数
2 # 2次元配列の最外層の要素数(行数)
2 # 3次元配列の最外層の要素数(ブロック数)
3次元配列では、「最も外側の次元(第一軸)」の要素数が返っていることに注意してください。
len()
を使うメリット
- データの行数を簡単に取得できる(CSVデータなどの行数チェックに便利)
- リストやNumPy配列の長さを統一的に扱える
- 可読性が高く、初心者でも理解しやすい
ただし、len()
だけでは多次元配列の詳細な構造はわからないため、.shape
や .ndim
と組み合わせて使用するのが効果的です。
NumPyでデータの次元数を確認する
データの次元数を確認するには、NumPyの .ndim
属性を使います。.ndim
を使用すると、配列の**次元(階層の深さ)**を取得できます。
.ndim
とは?
.ndim
は、配列が何次元のデータであるかを整数で返します。
例えば、1次元配列なら 1
、2次元配列なら 2
、3次元配列なら 3
という値が得られます。
.ndim
の使い方
以下のコードで、1次元・2次元・3次元配列の .ndim
の出力結果を確認してみましょう。
import numpy as np
# 1次元配列(ベクトル)
arr_1d = np.array([1, 2, 3, 4, 5])
print(arr_1d.ndim) # 1
# 2次元配列(行列)
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d.ndim) # 2
# 3次元配列(3Dデータ)
arr_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(arr_3d.ndim) # 3
出力結果:
1 # 1次元配列
2 # 2次元配列
3 # 3次元配列
それぞれの次元の意味は以下のようになります。
.ndim の値 | 配列の種類 | 例 |
---|---|---|
1 | 1次元(ベクトル) | [1, 2, 3, 4, 5] |
2 | 2次元(行列) | [[1, 2, 3], [4, 5, 6]] |
3 | 3次元(データの集合) | [[[1, 2], [3, 4]], [[5, 6], [7, 8]]] |
.ndim
と .shape
の関係
.shape
の出力結果と .ndim
の値は密接に関係しています。
例えば、以下のような .shape
の配列があった場合、それに対応する .ndim
の値は次のようになります。
.shape の出力 | .ndim の値 | 配列の次元 |
---|---|---|
(5,) | 1 | 1次元配列 |
(3, 4) | 2 | 2次元配列(3行4列) |
(2, 3, 4) | 3 | 3次元配列(2つの3行4列の行列) |
例えば、以下のような配列を考えてみましょう。
arr = np.zeros((4, 3, 2)) # 4×3×2 の3次元配列
print(arr.shape) # (4, 3, 2)
print(arr.ndim) # 3
.shape
の長さが3つあるため、この配列は3次元配列であるとわかります。
.ndim
を使うメリット
- データが何次元なのかを簡単に確認できる
- データの形状を把握しやすくなる
- 機械学習の入力データが適切な次元かチェックできる
- データの変換(
reshape()
など)を行う際の基準になる
例えば、ニューラルネットワークでは 2Dデータ(画像) や 3Dデータ(動画や時系列) を扱うため、次元を正しく理解していないとエラーが発生することがあります。
NumPyでデータのサイズ(要素数)を確認する
データのサイズ(要素数)を確認するには、NumPyの .size
属性を使います。.size
を使用すると、配列内に含まれる全ての要素の総数を取得できます。
.size
とは?
.size
は、配列内の全要素の数を整数で返します。
例えば、行列の行数や列数に関係なく、すべてのデータの個数を取得できるのが特徴です。
.size
の使い方
まずは、2次元配列で .size
の動作を確認してみましょう。
import numpy as np
# 3×4 の2次元配列を作成
arr = np.array([[0, 1, 2, 3],
[4, 5, 6, 7],
[8, 9, 10, 11]])
# 配列のサイズ(要素数)を確認
print(arr.size)
出力結果:
12
この結果から、**「配列内に12個の要素がある」**ことがわかります。
.size
と .shape
の関係
.size
の値は .shape
のすべての要素を掛け算した結果と等しくなります。
例えば、上記の arr.shape
は (3, 4)
でした。
print(arr.shape) # (3, 4)
print(3 * 4) # 12
このように、.shape
の各次元の値を掛けることで .size
の結果と一致することが確認できます。
多次元配列での .size
の確認
以下のような3次元配列を作成して .size
を確認してみましょう。
arr_3d = np.zeros((2, 3, 4)) # 2×3×4 の3次元配列
print(arr_3d.size) # 要素の総数
print(arr_3d.shape) # 配列の形状
出力結果:
24
(2, 3, 4)
2 × 3 × 4 = 24
なので、.size
の値は 24 になります。
.size
を使うメリット
- 配列の総要素数を簡単に取得できる
- データの規模を把握できる(例えば、大きすぎるデータを警戒できる)
.shape
との組み合わせでデータの整合性チェックが可能- 配列の変換(
reshape()
など)を行う際の基準になる
例えば、データの要素数が一致しないと reshape()
がエラーを出すことがあります。
arr = np.arange(12) # 1次元配列(要素数12)
reshaped_arr = arr.reshape(3, 4) # (3,4)に変換
print(reshaped_arr.shape) # (3, 4)
.size
を使って要素数を事前に確認すれば、適切な変換が可能かどうか判断できます。
実践:読み込んだデータの形状を確認する
ここまで、NumPyを使ってデータの形状や長さ、次元数、要素数を確認する方法について学んできました。
この章では、実際にデータを読み込んで、これらの情報を確認する方法を実践してみます。
CSVファイルをNumPyで読み込む
まずは、NumPyの loadtxt()
関数を使ってCSVファイルを読み込みます。
今回は、仮のデータとして 6列の数値データを含むCSVファイル を想定します。
import numpy as np
# CSVファイルの読み込み
arr = np.loadtxt(fname="data.csv", dtype=int, delimiter=',', skiprows=1, usecols=[1,2,3,4,5,6])
# データの表示
print(arr)
読み込んだデータの形状を確認
データの基本的な情報を確認するために、以下の4つのメソッドを使います。
# 形状の出力
print("Shape:", arr.shape)
# 長さの出力
print("Length:", len(arr))
# 次元数の出力
print("Dimensions:", arr.ndim)
# 要素数の出力
print("Size:", arr.size)
例えば、以下のようなデータが入っていた場合:
[ 42120 42330 41700 41830 610000 25628028000]
[ 43000 43220 42540 42660 448400 19188227000]
[ 43940 43970 43270 43270 339900 14780670000]
...
[ 13990 14030 13790 13850 765500 10635609000]
[ 13720 13840 13600 13800 511500 7030811000]
[ 14050 14050 13700 13720 559100 7719804000]
出力結果は以下のようになります。
Shape: (1226, 6)
Length: 1226
Dimensions: 2
Size: 7356
結果の分析
メソッド | 結果 | 解釈 |
---|---|---|
arr.shape | (1226, 6) | 1226行6列の二次元配列 |
len(arr) | 1226 | 最外層の要素数(行数) |
arr.ndim | 2 | データが二次元配列であることを示す |
arr.size | 7356 | 総要素数(1226 × 6 = 7356) |
練習問題
以下の4つの選択肢の中から、正しい記述を選んでください。
- このデータは全部で7346個の要素を持ったデータである。
- このデータは1226行6列の三次元配列である。
- このデータの長さは1226である。
- このデータの次元数は二次元である。
正解と解説
正解:
✅ 3. このデータの長さは1226である。
✅ 4. このデータの次元数は二次元である。
解説:
- 1は誤り →
.size
の値は 7356 なので、7346ではありません。 - 2は誤り →
.ndim
の値が 2 なので、三次元配列ではなく 二次元配列 です。 - 3は正しい →
.shape[0]
の値が 1226 なので、最外層の要素数(行数)は 1226 です。 - 4は正しい →
.ndim
の値が 2 なので、これは二次元配列です。
まとめ
NumPyを使ってデータを読み込んだら、まず .shape
を確認する習慣をつけましょう。
また、.shape
、len()
、.ndim
、.size
を組み合わせてデータの構造を理解することが重要です。
まとめ
本記事では、NumPyを使ってデータの形状や特徴を確認する方法について学びました。
データを扱う際には、形状や次元を正しく理解することが重要です。
今回学んだ4つのメソッドを復習し、それぞれの特徴を整理しましょう。
本記事のポイント
メソッド | 説明 | 出力の意味 |
---|---|---|
.shape | 配列の形状(行数・列数など)を取得 | (行数, 列数, ... ) |
len() | 配列の最外層の要素数を取得 | 行数と同じ値になることが多い |
.ndim | 配列の次元数を取得 | 1(1次元)・2(2次元)・3(3次元)… |
.size | 配列の全要素数を取得 | shape の要素を掛け合わせた値 |
実際のデータを確認する流れ
- データを読み込む
arr = np.loadtxt("data.csv", dtype=int, delimiter=',', skiprows=1)
- データの形状を確認する(
.shape
)print("Shape:", arr.shape)
- データの長さを確認する(
len()
)print("Length:", len(arr))
- データの次元数を確認する(
.ndim
)print("Dimensions:", arr.ndim)
- データの総要素数を確認する(
.size
)print("Size:", arr.size)
この流れを覚えておくと、新しいデータを扱う際にすぐに構造を確認できるようになります。
次回の記事の予告
今回の記事では、NumPyの基本的なデータ確認方法について学びました。
次回は、NumPyを使ったデータの統計的な分析について解説していきます。
例えば、以下のようなメソッドを活用する方法を紹介する予定です。
✅ 平均値(np.mean()
)
✅ 中央値(np.median()
)
✅ 標準偏差(np.std()
)
✅ 最大値・最小値(np.max()
・np.min()
)
データの特徴を把握するために、これらの統計値をどのように活用するのかを解説していきますので、ぜひお楽しみに!
さいごに
NumPyを使うと、簡単なコードでデータの形状を確認できるため、データ分析の準備がスムーズに進みます。
ぜひ、実際にコードを動かしながら、学んだことを実践してみてください!
それでは、次回の記事でお会いしましょう! 🚀
コメント