PythonのNumPyで配列を扱う方法!基本操作と応用を初心者向けに徹底解説
生徒
「Pythonでデータ分析を始めたいんですけど、『NumPy(ナンパイ)』って言葉をよく耳にします。これって一体何なんですか?」
先生
「NumPyは、Pythonで大量の数字をまとめて計算するための、とっても便利な道具(ライブラリ)ですよ。普通の計算よりもずっと速くて効率的なんです。」
生徒
「数字をまとめて計算……。難しそうですが、初心者でも使いこなせますか?」
先生
「もちろんです!基本的な操作さえ覚えれば、エクセルのような表計算よりもパワフルなことが簡単にできるようになります。一緒に学んでいきましょう!」
1. NumPyとは?データ分析の強力なパートナー
Pythonでデータ分析や科学計算、人工知能(AI)の開発をしようとすると、必ずと言っていいほど登場するのがNumPy(ナンパイ)です。NumPyは「Numerical Python」の略で、直訳すると「数値計算のためのPython」という意味になります。
パソコンを初めて触る方にとって、プログラミングで大量のデータを扱うのはイメージしにくいかもしれません。例えば、100万件の売上データがあるとき、一つずつ順番に計算していたら時間がかかってしまいますよね。NumPyを使えば、これらの大量の数字を一つの「塊(かたまり)」として捉え、一瞬で計算を終わらせることができます。
NumPyの最大の特徴は、「多次元配列(たじげんはいれつ)」という仕組みです。これは、数字を縦や横にきれいに並べた箱のようなものです。1列に並べれば「リスト(1次元)」、学校の出席簿のように縦横に並べれば「表(2次元)」、さらに奥行きを加えれば「立体(3次元)」となります。NumPyはこの箱の中身を操作するのが非常に得意なツールなのです。
2. 配列(ndarray)の基本!リストとの違いを理解する
Pythonにはもともと「リスト」という複数のデータをまとめる機能がありますが、なぜわざわざNumPyを使うのでしょうか?その理由は、「速度」と「便利さ」にあります。
普通のPythonのリストは、数字だけでなく文字や画像など、いろいろな種類のものを混ぜて入れることができます。しかし、NumPyの配列(これを専門用語で ndarray と呼びます)は、中に入れるデータの種類を一つに揃えるというルールがあります。すべてを数字に揃えることで、コンピュータは迷うことなく高速に計算処理を行うことができるのです。
例えるなら、普通のリストは何でも入る「おもちゃ箱」で、NumPyの配列は同じサイズのネジがギッシリ詰まった「工具箱」のようなものです。目的が「計算」であれば、専用の工具箱を使ったほうが圧倒的に効率が良いのです。それでは、実際にNumPyを使って配列を作ってみましょう。
まず、NumPyを使うときは、プログラムの最初に「これからNumPyを使いますよ」という宣言をする必要があります。
import numpy as np
# リストからNumPyの配列を作る
data = [10, 20, 30, 40, 50]
array = np.array(data)
print(array)
print(type(array))
[10 20 30 40 50]
<class 'numpy.ndarray'>
上記のコードでは、import numpy as np と書くことで、NumPyを「np」という短い名前で呼び出せるようにしています。これは世界中のプログラマーが決めた共通のルールのようなものです。np.array() という命令を使うことで、ただの数字の列が、魔法の計算盤である「配列」に生まれ変わります。
3. 配列の形状を確認!次元と要素数
NumPyでデータを扱う際、そのデータが「どのような形」をしているかを知ることは非常に重要です。1列に並んでいるのか、それとも縦横の表形式になっているのかを確認する方法を覚えましょう。
ここで出てくる重要な用語が「次元(じげん)」です。
- 1次元配列: 1列に並んだデータ(ベクトルのようなもの)
- 2次元配列: 縦と横があるデータ(エクセルのシートのようなもの)
- 3次元配列: 縦・横・奥行きがあるデータ(動画やカラー画像データなど)
shape(シェイプ)というプロパティを使います。日本語で「形」という意味ですね。また、全部でいくつの要素が入っているかは size で確認できます。
import numpy as np
# 2次元配列(表形式)を作る
# 2行3列のデータ
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print("配列の中身:")
print(matrix)
print("配列の形(行, 列):", matrix.shape)
print("全体の要素数:", matrix.size)
print("次元数:", matrix.ndim)
配列の中身:
[[1 2 3]
[4 5 6]]
配列の形(行, 列): (2, 3)
全体の要素数: 6
次元数: 2
この結果を見ると、(2, 3) と表示されています。これは「2つの行(横の並び)と、3つの列(縦の並び)があるよ」ということを教えてくれています。プログラミング未経験の方は、まずこの「行」と「列」の数え方に慣れるのが第一歩です。
4. 便利な配列の自動作成機能
データ分析では、「最初は全部0で埋まった表を作りたい」とか「1から100まで順番に並んだ数字を作りたい」という場面がよくあります。これらを一つずつ手入力するのは大変ですよね。NumPyには、これらを一瞬で作成する便利な機能が備わっています。
よく使うのは以下の3つです。
np.zeros():すべてを「0」で埋めた配列を作るnp.ones():すべてを「1」で埋めた配列を作るnp.arange():指定した範囲の連続した数字を作る
import numpy as np
# 0から9までの数字が並んだ配列を作る
sequence = np.arange(10)
print("0から9まで:", sequence)
# 全てが0の3行3列の表を作る
zeros_array = np.zeros((3, 3))
print("0で埋めた表:")
print(zeros_array)
# 0から1の間を均等に5つに分けた数字を作る
lin_space = np.linspace(0, 1, 5)
print("均等な間隔:", lin_space)
0から9まで: [0 1 2 3 4 5 6 7 8 9]
0で埋めた表:
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
均等な間隔: [0. 0.25 0.5 0.75 1. ]
linspace(リンスペース)は少し難しいかもしれませんが、グラフの横軸を作るときなどによく使われる「等間隔の数字」を作る命令です。これらを使いこなせると、大量のデータを準備する手間が大幅に省けます。
5. 配列の計算がすごい!ブロードキャスト機能
NumPyの最も驚くべき機能の一つが「ブロードキャスト」です。通常、配列(リスト)のすべての数字に「2」を掛けたい場合、一つひとつ取り出して計算を繰り返す必要があります。しかし、NumPyなら配列に対して直接 * 2 と書くだけで、中のすべての数字に一斉に計算が適用されます。
これは、あたかも配列全体に計算命令が「放送(ブロードキャスト)」されて、すべての要素に行き渡るようなイメージです。数学の行列計算を意識することなく、直感的に計算できるのがNumPyの魅力です。足し算、引き算、掛け算、割り算、すべてがこの直感的な方法で行えます。
import numpy as np
prices = np.array([100, 200, 300, 400])
# すべての価格に10%の消費税を加える計算
tax_included = prices * 1.1
print("元の価格:", prices)
print("税込価格:", tax_included)
# 配列同士の足し算も一瞬
bonus = np.array([10, 20, 30, 40])
total = prices + bonus
print("ボーナス加算後:", total)
元の価格: [100 200 300 400]
税込価格: [110. 220. 330. 440.]
ボーナス加算後: [110 220 330 440]
このように、複雑な「繰り返し処理(ループ)」を書かなくても一行で計算が終わるため、プログラムが非常にスッキリとして読みやすくなります。これはバグ(間違い)を減らすことにも繋がります。
6. データの抽出!スライスとインデックス
大きなデータの中から、「特定の場所の数字だけを取り出したい」ということもよくあります。これを「インデックス(索引)」や「スライス(切り出し)」と呼びます。
Pythonの世界では、数字は「0」から数え始めるというルールがあります。1番目は0、2番目は1……といった具合です。最初は少し戸惑うかもしれませんが、これに慣れるとデータの操作がとてもスムーズになります。また、:(コロン)を使うと、「ここからここまで」という範囲を指定してデータをごっそり抜き出すことができます。
import numpy as np
# 0から9までの配列
data = np.arange(10)
# 3番目の要素を取り出す(0から数えるので、インデックスは2)
print("3番目の数字:", data[2])
# 2番目から5番目までを取り出す(インデックス1から5の手前まで)
print("2番目から5番目:", data[1:5])
# 特定の条件に合うものだけを取り出す(25より大きいものなど)
# これを「ファンシーインデックス」と呼ぶこともあります
big_numbers = data[data > 5]
print("5より大きい数字だけ:", big_numbers)
3番目の数字: 2
2番目から5番目: [1 2 3 4]
5より大きい数字だけ: [6 7 8 9]
特に最後の data[data > 5] という書き方は魔法のようですね。これを使えば、「売上が100万円以上のデータだけを抽出する」といったフィルタリング作業が、一瞬で終わってしまいます。
7. 統計計算もこれ一冊!平均・合計・最大値
NumPyは単に数字を並べるだけでなく、そのデータの特徴を掴むための統計計算も得意です。平均値を出したり、一番大きな値を探したりといった操作も、専用のメソッドを呼び出すだけです。
例えば、クラス全員のテスト結果を配列に入れたとしましょう。一瞬でクラス平均を出し、最高得点を確認し、全員の合計点を計算できます。データ分析の現場では、まずこうした「基本統計量」を確認することから始まります。
mean():平均値を計算するsum():合計値を計算するmax()/min():最大値と最小値を探すstd():標準偏差(データのばらつき)を計算する
import numpy as np
# ある1週間の売上データ
sales = np.array([1200, 1500, 900, 2100, 1800, 1300, 2500])
print("合計売上:", sales.sum(), "円")
print("1日の平均売上:", sales.mean(), "円")
print("最高売上:", sales.max(), "円")
print("最低売上:", sales.min(), "円")
合計売上: 11300 円
1日の平均売上: 1614.2857142857142 円
最高売上: 2500 円
最低売上: 900 円
自分で計算式を組み立てる必要はありません。NumPyが裏側ですべて正しく計算してくれます。計算間違いの心配がないのも、プログラミングを使う大きなメリットの一つですね。
8. 配列の形を自由自在に変える(reshape)
データ分析を進めていくと、「1列に並んだデータを3×3の表に変換したい」といった要望が出てきます。NumPyの reshape(リシェイプ)という機能を使えば、要素の数さえ合っていれば、データの形を自由に変形させることができます。
例えば、12個の数字がある場合、それを「2行6列」にしたり「3行4列」にしたり、あるいは「2×2×3の立体」にしたりすることが可能です。データがコンピュータにとって扱いやすい形に整えることを「整形(せいけい)」と言いますが、NumPyはこの整形作業において欠かせない存在です。
import numpy as np
# 1から12までの数字を作る
flat_data = np.arange(1, 13)
print("元の形:", flat_data)
# 3行4列の表に変形する
matrix_data = flat_data.reshape(3, 4)
print("変形後の形:")
print(matrix_data)
元の形: [ 1 2 3 4 5 6 7 8 9 10 11 12]
変形後の形:
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
「形を変えるだけで中身はそのまま」というのがポイントです。画像処理の世界などでは、この形を変える操作が非常に頻繁に行われます。初心者の方は、「NumPyなら後から形を自由に変えられるんだな」と覚えておくだけで十分です。
9. 初心者がNumPyを学ぶときに気をつけること
NumPyを使い始めるときに、よく初心者がつまずくポイントがいくつかあります。まず一つは、先ほども触れた「0から数える」という点です。3番目のデータが欲しいときは [2] と書く。これは何度も書いて指に覚えさせるしかありません。
次に、「データの型」です。NumPyの配列は、整数を入れるための箱(int型)と、小数を入れるための箱(float型)が厳密に分かれていることがあります。計算結果が予想外に小数になったり、逆に小数が切り捨てられて整数になってしまったりすることがあります。もし計算がおかしいなと思ったら、中身がどんな種類の数字になっているか確認してみましょう。
最後に、エラーが出ても怖がらないことです。NumPyのエラーメッセージは比較的丁寧です。「配列の形が合っていませんよ」といったヒントをくれるので、それを見ながら少しずつ修正していくのが上達の近道です。パソコン操作に慣れていない方でも、コピー&ペーストから始めて、数字を少しずつ変えて動かしてみることで、確実に理解は深まっていきます。
10. NumPyを学んだその先にあるもの
今回ご紹介したNumPyの操作は、ほんの入り口に過ぎません。しかし、この基本さえ押さえておけば、次に学ぶ「Pandas(パンダス)」という表計算ライブラリや、「Matplotlib(マットプロットリブ)」というグラフ作成ライブラリの理解が劇的に早くなります。
現代のデータサイエンスにおいて、NumPyは全ての土台となる「基礎体力」のようなものです。最初は配列の作成や簡単な計算からで構いません。自分で書いたコードが動いて、大量の数字が一瞬で処理される快感をぜひ味わってください。NumPyをマスターすれば、あなたのパソコンは単なる文書作成ツールから、世界を変えるための強力な分析マシンへと進化するはずです。
まとめ
NumPyの基本を総復習しよう
今回は、Pythonでデータ分析を行う際に欠かせないNumPyについて、配列の基本操作から応用的な使い方まで幅広く学びました。NumPyは単なるライブラリではなく、Pythonで数値計算やデータ処理を行うための基盤となる非常に重要な存在です。特に、多次元配列であるndarrayを使うことで、大量のデータを効率よく扱える点は、データ分析初心者にとっても大きなメリットとなります。
Pythonのリストと比較すると、NumPy配列は同じデータ型を扱うことで高速な計算処理を実現しています。この特徴により、売上データやログデータ、機械学習の前処理など、さまざまな場面で活用されています。データ分析やAI開発を目指す場合、NumPyの理解は避けて通れない重要なステップといえるでしょう。
配列操作とデータ分析の基本スキル
NumPyでは、配列の作成だけでなく、shapeやsize、ndimといった属性を使ってデータ構造を把握することが重要です。これらを理解することで、データの次元や要素数を正確に把握でき、エラーの原因を見つけやすくなります。また、reshapeを使った配列の変形は、データ整形の基本スキルとして非常に重要です。
さらに、スライスやインデックスを使ったデータ抽出は、必要なデータだけを取り出すための基本技術です。特に条件指定による抽出は、実務でも頻繁に使われるため、しっかりと理解しておく必要があります。これらの操作を組み合わせることで、複雑なデータ分析処理もシンプルに記述できるようになります。
ブロードキャストと高速計算の重要性
NumPyの大きな特徴の一つであるブロードキャストは、配列全体に対して一括で計算を適用できる強力な機能です。通常のfor文を使った繰り返し処理と比べて、コードがシンプルになるだけでなく、処理速度も大幅に向上します。この仕組みを理解することで、効率的なプログラムを書くことができるようになります。
データ分析の現場では、数万件から数百万件のデータを扱うことも珍しくありません。そのため、NumPyの高速計算能力は非常に重要な役割を果たします。初心者のうちからブロードキャストの概念に慣れておくことで、より高度なデータ処理にもスムーズに対応できるようになります。
統計処理と実務での活用
NumPyには、平均値や合計、最大値、最小値などの基本的な統計関数が用意されています。これらを使うことで、データの傾向を素早く把握することができます。例えば売上分析やユーザー行動分析などでは、まずこれらの基本統計量を確認することが重要です。
また、NumPyはPandasやMatplotlibといった他のライブラリと組み合わせて使われることが多く、データ分析の基礎として非常に重要な役割を担っています。NumPyを理解していることで、これらのライブラリの理解も格段に進みます。
サンプルプログラムで理解を深める
import numpy as np
# データ作成
data = np.array([10, 20, 30, 40, 50])
# 基本統計
print("合計:", data.sum())
print("平均:", data.mean())
# 条件抽出
filtered = data[data > 25]
print("25より大きい:", filtered)
# 形状変更
reshaped = data.reshape(5, 1)
print("変形後:")
print(reshaped)
初心者が意識すべきポイント
NumPyを学習する際には、配列のインデックスが0から始まることや、データ型の違いに注意することが重要です。また、エラーが出た場合は内容をしっかり読み、どこで問題が起きているのかを理解することが大切です。最初は難しく感じるかもしれませんが、実際に手を動かしてコードを書くことで、理解は確実に深まっていきます。
データ分析初心者の方は、まずは簡単な配列操作や計算から始めて、徐々に応用へと進んでいくのがおすすめです。NumPyを使いこなせるようになれば、Pythonでできることの幅は大きく広がります。
生徒
「NumPyって、ただの配列じゃなくて、すごく便利な計算ツールなんですね。」
先生
「その通りです。特に大量データを扱うときには、NumPyの高速処理がとても役立ちます。」
生徒
「ブロードキャストやスライスも便利でした。コードがすごく短く書けますね。」
先生
「はい。効率よくコードを書くためにも、NumPyの基本操作はしっかり身につけておきましょう。」
生徒
「これからデータ分析を学ぶのが楽しみになってきました!」
先生
「その気持ちが大切です。NumPyを土台にして、次はPandasや可視化にも挑戦していきましょう。」