記事の最初に掲載されている若绾による投稿
概要#
機械学習では、データは非常に重要です。したがって、機械学習プロジェクトでは、データの管理と処理は不可欠です。データ管理には、データの収集、クリーニング、保存、処理など、さまざまな側面が関わります。この記事では、データセットを効率的に管理するために NumPy を使用する方法について説明します。
NumPy を使用したデータセットの保存#
NumPy は、科学計算用の Python ライブラリです。NumPy は、強力な多次元配列オブジェクトと、それらの配列を操作するための関数のセットを提供します。NumPy 配列は、数値、文字列、ブール値など、さまざまなタイプのデータを格納することができます。そのため、データセットを保存するための理想的な選択肢です。
単一の配列の保存#
データセットに単一の配列しかない場合、NumPy のsave
関数を使用することができます。
numpy.save#
関数の引数:
file: file, str, or pathlib.Path
データが保存されるファイルまたはファイル名です。ファイルがファイルオブジェクトの場合、ファイル名は変更されません。ファイルが文字列またはパスの場合、ファイル名に
.npy
拡張子がない場合は、ファイル名に.npy
拡張子が追加されます。arr: array_like
保存する配列データです。
allow_pickle: bool, optional
オブジェクト配列を保存するために Python の pickle を使用することを許可します。pickle を許可しない理由には、セキュリティ(pickle されたデータを読み込むと任意のコードが実行される可能性がある)とポータビリティ(pickle されたオブジェクトが異なる Python インストールで読み込めない場合があるため、保存されたオブジェクトが必要なライブラリが利用できない場合があります。また、すべての pickle データが Python 2 と Python 3 の間で互換性があるわけではありません)があります。デフォルト値:True
fix_imports: bool, optional
Python 3 上のオブジェクト配列のオブジェクトを Python 2 と互換性のある方法で pickle する場合にのみ有効です。fix_imports が True の場合、pickle は新しい Python 3 の名前を Python 2 で使用される古いモジュール名にマッピングしようとします。これにより、pickle データストリームを Python 2 で読み込むことができます。
たとえば、data
という名前の NumPy 配列があるとします。次のコードを使用して、それをdata.npy
という名前のファイルに保存することができます。
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
np.save('data.npy', data)
ファイルから配列をロードする#
データセットをロードするには、NumPy のload
関数を使用することができます。たとえば、次のコードは、data.npy
という名前のファイルに保存された配列をロードします。
import numpy as np
data = np.load('data.npy')
print(data)
出力は次のようになります。
[[1 2 3]
[4 5 6]
[7 8 9]]
複数の配列を同時に保存する#
データセットに複数の配列が含まれている場合(例:trani_set、train_label、test_set、test_label など)、NumPy のsavez
またはsavez_compressed
関数を使用してデータセットを保存することができます。**numpy.savez
は、複数の配列を非圧縮の.npz
ファイルとして保存し、numpy.savez_compressed
は配列を圧縮された.npz
** ファイルとして保存し、ストレージスペースを節約することができます。
numpy.savez#
関数の引数:
file: str or file
ファイル名(str)またはオープンされたファイル(ファイルのようなオブジェクト)で、データが保存されます。ファイルが文字列またはパスの場合、ファイル名に
.npz
拡張子がない場合は、ファイル名に.npz
拡張子が追加されます。args: Arguments, optional
ファイルに保存する配列。配列に名前を付けるためにキーワード引数を使用してください(後述の kwds を参照)。args で指定された配列は、"arr_0"、"arr_1" などの名前で保存されます。
kwds: Keyword arguments, optional
ファイルに保存する配列。各配列は、それに対応するキーワード名で出力ファイルに保存されます。
kwds を使用すると、配列はキーワード名で保存されます。この例では、2 つの NumPy 配列array1
とarray2
を作成し、それらをnumpy.savez
を使用してarrays.npz
** という名前のファイルに保存します。注意点として、各配列に名前を指定する必要があることです。
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
# 配列をファイルに保存
np.savez('arrays.npz', arr1=array1, arr2=array2)
numpy.savez_compressed#
関数の引数:
file: str or file
ファイル名(str)またはオープンされたファイル(ファイルのようなオブジェクト)で、データが保存されます。ファイルが文字列またはパスの場合、ファイル名に
.npz
拡張子がない場合は、ファイル名に.npz
拡張子が追加されます。args: Arguments, optional
ファイルに保存する配列。配列に名前を付けるためにキーワード引数を使用してください(後述の kwds を参照)。args で指定された配列は、"arr_0"、"arr_1" などの名前で保存されます。
kwds: Keyword arguments, optional
ファイルに保存する配列。各配列は、それに対応するキーワード名で出力ファイルに保存されます。
この例は前の例と似ていますが、**numpy.savez_compressed
を使用して配列を圧縮された.npz
** ファイルとして保存しています。
import numpy as np
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
# 配列を圧縮されたファイルに保存
np.savez_compressed('compressed_arrays.npz', arr1=array1, arr2=array2)
ファイルから配列をロードする#
**.npz
ファイルから配列をロードするには、numpy.load
** 関数を使用します:
import numpy as np
# 保存された配列をロード
loaded_arrays = np.load('arrays.npz')
# ファイルで指定した名前で配列にアクセス
loaded_array1 = loaded_arrays['arr1']
loaded_array2 = loaded_arrays['arr2']
この例では、**numpy.load
を使用してarrays.npz
という名前のファイルをロードし、指定した名前で配列にアクセスしています。同様の方法は、圧縮された.npz
** ファイルをロードする場合にも適用されます。
まとめ#
本記事では、データセットを効率的に管理するために NumPy を使用する方法について説明しました。これはデータ管理の重要な側面であり、どの機械学習プロジェクトでも十分に注意を払う必要があります。