こんにちは、小澤です。
NumPyは、Pythonで数値計算を効率的に行うための基本的なライブラリです。データ分析においても、NumPyは配列操作や数学的な計算をサポートする強力なツールとして利用されています。今回から、NumPyを使った基本的なデータ分析の手法を紹介します。
今回は、教科書『Pythonによるあたらしいデータ分析の教科書(第2版)』の4.1.2章「NumPyでデータを扱う」の前半(92ページ〜96ページ)の内容を取り上げます。
NumPyのインストール
NumPyは、数値計算に特化したサードパーティ製パッケージで、高性能な多次元配列や、それらの配列を操作するための数学関数を提供し、科学計算やデータ分析、機械学習などの領域で広く利用されています。
NumPyを使用するには、まずライブラリをインストールする必要があります。pipでインストールしてください。
pip install numpy |
インストール後、NumPyをインポートして利用できます。インポートでは、asキーワードを使用して別名定義するとよいでしょう。
import numpy as np |
1次元配列
NumPyの1次元配列は、通常のPythonのリストとは異なり、数学的なベクトルとして使われることが多いです。以下は、1次元配列を作成し、いくつかの基本的な演算を行うサンプルコードです。
NumPyの配列は、array関数を使って作成します。
import numpy as np # 1次元配列の作成 a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) # 要素ごとの足し算 result_addition = a + b # [5, 7, 9] # 要素ごとの引き算 result_subtraction = a – b # [-3, -3, -3] # 要素ごとの掛け算 result_multiplication = a * b # [4, 10, 18] # 要素ごとの割り算 result_division = a / b # [0.25, 0.4, 0.5] # 要素ごとの累乗 result_power = a ** 2 # [1, 4, 9] # 要素の合計を計算 result_sum = np.sum(a) # 6 # 要素の平均を計算 result_mean = np.mean(a) # 2.0 |
shapeを使うと、NumPyの配列の形状(要素数や次元数)を確認できます。1次元配列の場合、shapeはその配列の要素数を示します。なお、要素数を取得するだけなら、len関数を使用することもできます。
import numpy as np # 1次元配列の作成(要素数が5) arr = np.array([1, 2, 3, 4, 5]) # shapeを使って要素数を確認 num_elements_s = arr.shape[0] # lenを使って要素数の取得 num_elements_l = len(arr) # 出力 print(“1次元配列:”, arr) # 1次元配列:[1 2 3 4 5] print(“要素数shape:”, num_elements_s) # 要素数shape:5 print(“要素数len:”, num_elements_l) # 要素数len:5 |
多次元配列
NumPyの主力は多次元配列です。多次元配列を使うと、行列やテンソルのような多次元の数値データを効率的に扱うことができます。
import numpy as np # 1次元配列 arr1 = np.array([1, 2, 3]) # 2次元配列 arr2 = np.array([[1, 2, 3], [4, 5, 6]]) |
reshapeメソッドを使用すると、NumPyの配列の形状を変更できます。これは特に、配列の要素数が変わらない範囲で形状を変更する際に便利です。
以下は、reshapeメソッドを使用して、元の1次元配列(arr)を2次元配列(arr_2d)および3次元配列(arr_3d)に変更するサンプルコードです。
import numpy as np # 1次元配列の作成(要素数が12) arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]) # 2次元配列に形状変更 arr_2d = arr.reshape((3, 4)) # 3次元配列に形状変更 arr_3d = arr.reshape((2, 3, 2)) # 出力 print(“元の1次元配列:”, arr) # 元の1次元配列: [ 1 2 3 4 5 6 7 8 9 10 11 12] print(“2次元配列に変更:”, arr_2d) # 2次元配列に変更: [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] print(“3次元配列に変更:”, arr_3d) # 3次元配列に変更: [[[ 1 2] # [ 3 4] # [ 5 6]] # # [[ 7 8] # [ 9 10] # [11 12]]] |
reshapeメソッドでは、要素数が一致しないとエラーが発生します。つまり、変更後の形状の要素数は元の要素数と一致している必要があります。例えば、元の1次元配列が12要素なので、2次元の形状は (3, 4)、3次元の形状は(2, 3, 2)としています。これを以下のように(3, 5)とすると、ValueErrorエラーが発生します。
arr_2d = arr.reshape((3, 5)) # Traceback (most recent call last): # File “<stdin>”, line 1, in <module> # ValueError: cannot reshape array of size 12 into shape (3,5) |
一方、多次元配列を1次元配列に平坦化するには、ravelメソッドかflattenメソッドを使います。ただし、ravelメソッドは、元の配列のビューを返すので、元の配列に変更があった場合は、その変更が反映されます。flattenメソッドはravelメソッドとは異なり、新しい1次元配列を生成する代わりに、元の配列のコピーを作成して返すので、変更には影響しません。
import numpy as np # 2次元配列の作成 arr_2d = np.array([[1, 2, 3], [4, 5, 6]]) print(arr_2d) # [[1, 2, 3], [4, 5, 6]] # 1次元に平坦化 arr_ravel = arr_2d.ravel() print(arr_ravel) # [1, 2, 3, 4, 5, 6] # 1次元に平坦化 arr_flatten = arr_2d.flatten() print(arr_flatten) # [1, 2, 3, 4, 5, 6] # 3番目の要素を変更 arr_ravel[2] = 10 # 2次元配列 print(arr_2d) # [[1, 2, 10], [4, 5, 6]] # ravelで平坦化 print(arr_ravel) # [1, 2, 10, 4, 5, 6] # flattenで平坦化 print(arr_flatten) # [1, 2, 3, 4, 5, 6] |
ブロードキャスト
NumPyは、行数や列数が異なる配列間でも自動的にブロードキャストが行われ、要素ごとの演算を可能にします。これにより、形状の異なる配列でも柔軟に計算ができます。例えば以下のような a + b という演算では、bは自動的に2次元の行列に拡張され、各行に対して bの要素が足されます。これにより、bを明示的に2次元の行列に変形させる必要がなく、コードが簡潔になります。
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([10, 20, 30]) result = a + b # [[11 22 33], [14 25 36]] |
データ型(dtype)
NumPyのdtype(データ型)は、配列が保持する要素のデータ型を表します。NumPyは、様々なデータ型に対応しています。以下に一般的なdtypeを示します。
- 整数型
int8, int16, int32, int64
uint8, uint16, uint32, uint64
- 浮動小数点型
float16, float32, float64
- 複素数型
complex64, complex128
- ブール型
bool
- 文字列型
str_, unicode_
これらのdtypeは、NumPyのarray関数で配列を作成する際に、dtypeパラメータを指定することで明示的に指定できます。例えば、整数型の配列を作成する場合は以下のようにします。
import numpy as np # 整数型の1次元配列(dtypeを指定) arr_int = np.array([1, 2, 3], dtype=np.int32) # 浮動小数点型の1次元配列(dtypeを指定) arr_float = np.array([1.0, 2.0, 3.0], dtype=np.float64) |
まとめ
NumPyは、Pythonにおいて数学的な演算やデータ処理に特化したライブラリで、その柔軟性と効率性から広く使用されています。今回は、NumPyの基本的な部分について、配列の作成やデータ型、基本的な演算などを紹介しました。
次回以降、NumPyの基本的な概念をさらに深堀りし、データ分析においてNumPyをどのように応用するかを学んでいきましょう。
お知らせ
今回のコラムはいかがでしたでしょうか? 少しでも皆様の学習のお役に立てると嬉しいです。
インターネットアカデミーでは Python 講座が充実しています。
Python 認定スクールにもなっているため、質の良い知識を得ることができます。
基礎を習得した先に新たな目標を設定し、目指していくために大変良い場所となります。
「プログラミングは独学でもなんとかなる」という情報もありますが、新しいことを学んでいく際の近道は「プロに教えてもらうこと」かと思います。
インターネットアカデミーはキャリアサポートも充実しており、一人ひとりに専任のキャリアプロデューサーがサポートしてくれるため中途半端になることがありません。
ご興味ある方は各講座のページを覗いてみてください。無料カウンセリングもできます。
https://www.internetacademy.jp/course/programming/chair_py.html