Numpyによるデータ分析(1)

2024/1/20
執筆者:小澤昌樹

※本記事は吉政創成株式会社「Python学習とキャリアアップ」より寄稿されたコラムとなります。

Numpyによるデータ分析(1)

こんにちは、小澤です。

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を示します。

  1. 整数型
    int8, int16, int32, int64
    uint8, uint16, uint32, uint64
  2. 浮動小数点型
    float16, float32, float64
  3. 複素数型
    complex64, complex128
  4. ブール型
    bool
  5. 文字列型
    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認定スクールにもなっているため質の高い知識を得ることができ、基礎学習の先にあるそれぞれの目標を目指していくためには良い場所となります。ご興味ある方は各講座のページを覗いてみてください。

Pythonが学べる講座

この記事の執筆者

小澤昌樹

デジタル人材育成・助成金のお役立ち資料をダウンロード

デジタル人材育成や助成金活用のお役立ち資料などをまとめてダウンロードしていただけます。コンサルタントへの無料相談をご希望の方はこちらからお問い合わせください。

たとえばこんな相談ができます
  • DX人材の育成&事例紹介 リスキリングのロードマップ付き
  • デジタル人材育成に使える助成金制度
  • デジタルスキル標準 役割別おすすめ講座
資料ダウンロードはこちら
会社名必須
部署名必須
お名前必須
電話番号必須
メールアドレス必須

個人情報の利用目的についてご同意いただいた場合のみ、「同意して進む」を押してください。

このページの上へ