どうもニコイチです。データ分析や機械学習を行う際、データを保存して再利用することは非常に重要です。NumPyはPythonの強力なライブラリの一つであり、大規模な数値計算を効率的に行うための機能を提供しています。その中でも、データを簡単に保存・読み込みできる関数が用意されており、これを活用することで作業の効率を大幅に向上させることができます。
本記事では、NumPyを使ってデータを保存する方法を詳しく解説します。特に、以下の3つの方法に焦点を当てます。
save
関数 – 単一の配列をバイナリ形式(.npy
)で保存savez
関数 – 複数の配列をまとめてバイナリ形式(.npz
)で保存savetxt
関数 – テキスト形式(.csv
や.tsv
)で保存
本記事は、Python初心者を対象としており、NumPyの基本的な使い方を理解していることを前提としています。
それでは、NumPyを使ったデータの保存方法について詳しく見ていきましょう!
NumPyのsave
関数でデータを保存する
save
関数とは?
NumPyのsave
関数は、単一の配列をバイナリ形式(.npy
)で保存するための関数です。
この方法を使うことで、配列のデータをそのままの形で素早く保存・読み込みできるため、データの再利用がしやすくなります。
save
関数の基本構文
NumPyのsave
関数は、以下のように記述します。
numpy.save('ファイル名', 変数)
ファイル名
:保存するファイルの名前(拡張子は指定せずに記述)変数
:保存したいNumPyの配列
この関数を実行すると、自動的に拡張子「.npy
」が付き、バイナリ形式でデータが保存されます。
例えば、numpy.save("sample_array", arr)
と記述すると、sample_array.npy
というファイルが作成されます。
save
関数を使って配列を保存する
実際に、save
関数を使ってデータを保存してみましょう。
例:二次元配列を.npy
ファイルに保存
import numpy as np
# 5×5のランダムな整数配列を作成
arr = np.random.randint(0, 100, (5, 5))
# 配列を表示
print("保存する配列:")
print(arr)
# `sample_array.npy` というファイル名で保存
np.save("sample_array", arr)
実行結果(例)
保存する配列:
[[32 94 45 76 12]
[56 89 34 23 77]
[99 12 5 87 65]
[45 8 31 93 21]
[78 44 19 39 3]]
このコードを実行すると、カレントディレクトリに「sample_array.npy」というファイルが作成されます。
.npy
ファイルの特徴とメリット
.npy
ファイルには以下のような特徴とメリットがあります。
✅ 保存と読み込みが高速 → バイナリ形式なので、大量のデータでも高速に処理可能
✅ データの構造を維持 → NumPyの配列(ndarray
)の形状やデータ型をそのまま保持できる
✅ 手軽に保存・復元 → NumPyのload
関数を使えば、簡単にデータを読み込める
【実践課題】save
関数を使って配列を保存しよう!
次のコードを実行して、実際に二次元配列を.npy
ファイルとして保存してみましょう。
課題:5×5の二次元配列を作成し、”sample_array.npy” という名前で保存する
import numpy as np
# 5×5のランダムな整数配列を作成
arr = np.random.randint(0, 100, (5, 5))
# `sample_array.npy` というファイル名で保存
np.save("sample_array", arr)
✅ 保存されたファイル「sample_array.npy」を確認してみよう!
Pythonのファイルエクスプローラーやエディタのディレクトリを開き、
「sample_array.npy」というファイルが作成されているかどうか確認してみましょう。
NumPyのsavez
関数で複数のデータをまとめて保存
savez
関数とは?
savez
関数は、複数の配列を1つのファイルにまとめて保存できるNumPyの関数です。save
関数は1つの配列しか保存できませんが、savez
を使えば、複数の配列を一緒に保存できるため、データ管理がしやすくなります。
savez
関数の基本構文
NumPyのsavez
関数は、以下のように記述します。
numpy.savez('ファイル名', 変数1, 変数2, …)
ファイル名
:保存するファイルの名前(拡張子は指定せずに記述)変数1, 変数2, …
:保存したいNumPyの配列(複数指定可能)
この関数を実行すると、自動的に拡張子「.npz
」が付き、複数の配列が1つのファイルとして保存されます。
savez
関数を使って複数の配列を保存する
実際に、savez
関数を使ってデータを保存してみましょう。
例:2つの二次元配列を.npz
ファイルに保存
import numpy as np
# 5×5のランダムな整数配列を2つ作成
arr1 = np.random.randint(0, 100, (5, 5))
arr2 = np.random.randint(0, 100, (5, 5))
# 配列を表示
print("保存する配列1:")
print(arr1)
print("\n保存する配列2:")
print(arr2)
# `multiple_arrays.npz` というファイル名で保存
np.savez("multiple_arrays", arr1, arr2)
実行結果(例)
保存する配列1:
[[53 28 99 40 72]
[93 15 67 84 31]
[59 6 22 18 77]
[44 10 35 51 39]
[ 1 47 92 58 66]]
保存する配列2:
[[20 5 79 88 44]
[76 98 65 9 55]
[37 48 17 61 33]
[81 24 90 70 52]
[16 30 85 62 95]]
このコードを実行すると、**「multiple_arrays.npz」**というファイルが作成され、2つの配列が1つのファイルにまとめて保存されます。
保存したデータを読み込む
保存したデータを取り出すためには、NumPyのload
関数を使用します。
import numpy as np
# `multiple_arrays.npz` のデータを読み込む
data = np.load("multiple_arrays.npz")
# すべての保存データのリストを取得
print("保存されたデータのリスト:", data.files)
# 1つ目のデータを表示
print("\n保存されたデータ1:")
print(data["arr_0"])
# 2つ目のデータを表示
print("\n保存されたデータ2:")
print(data["arr_1"])
実行結果(例)
保存されたデータのリスト: ['arr_0', 'arr_1']
保存されたデータ1:
[[53 28 99 40 72]
[93 15 67 84 31]
[59 6 22 18 77]
[44 10 35 51 39]
[ 1 47 92 58 66]]
保存されたデータ2:
[[20 5 79 88 44]
[76 98 65 9 55]
[37 48 17 61 33]
[81 24 90 70 52]
[16 30 85 62 95]]
savez
関数でデータに名前を付けて保存する
デフォルトでは、保存したデータは"arr_0"
, "arr_1"
という名前で保存されます。
しかし、名前を指定して保存することも可能です。
import numpy as np
# 5×5のランダムな整数配列を2つ作成
arr1 = np.random.randint(0, 100, (5, 5))
arr2 = np.random.randint(0, 100, (5, 5))
# `multiple_arrays_named.npz` というファイル名で保存(名前を指定)
np.savez("multiple_arrays_named", first=arr1, second=arr2)
# データを読み込む
data_named = np.load("multiple_arrays_named.npz")
# すべての保存データのリストを取得
print("保存されたデータのリスト:", data_named.files)
# 指定した名前でデータを取り出す
print("\n'first'として保存したデータ:")
print(data_named["first"])
print("\n'second'として保存したデータ:")
print(data_named["second"])
実行結果(例)
保存されたデータのリスト: ['first', 'second']
'first'として保存したデータ:
[[61 49 70 1 53]
[45 76 34 66 95]
[80 62 15 24 78]
[19 59 92 5 84]
[ 3 73 28 39 90]]
'second'として保存したデータ:
[[ 7 57 22 47 38]
[50 31 69 94 85]
[96 41 10 17 8]
[27 64 6 75 81]
[55 32 36 72 4]]
このように、キーワード引数を使うことで、データの名前を指定して保存・読み込みができます。
この方法を使えば、データを取り出すときに「どのデータがどれなのか」を簡単に判別できます。
【実践課題】savez
関数を使って複数の配列を保存しよう!
次のコードを実行して、複数の二次元配列を.npz
ファイルとして保存してみましょう。
課題:2つの二次元配列を作成し、”multiple_arrays.npz” という名前で保存する
import numpy as np
# 5×5のランダムな整数配列を2つ作成
arr1 = np.random.randint(0, 100, (5, 5))
arr2 = np.random.randint(0, 100, (5, 5))
# `multiple_arrays.npz` というファイル名で保存
np.savez("multiple_arrays", arr1, arr2)
✅ 保存されたファイル「multiple_arrays.npz」を確認してみよう!
Pythonのファイルエクスプローラーやエディタのディレクトリを開き、
「multiple_arrays.npz」というファイルが作成されているかどうか確認してみましょう。
NumPyのsavetxt
関数でテキスト形式(CSVやTSV)で保存
savetxt
関数とは?
NumPyのsavetxt
関数を使うと、NumPyの配列をテキストファイル(CSV, TSV, TXT など)として保存できます。
CSV形式で保存すれば、ExcelやGoogleスプレッドシート、他のプログラム(Pandas, R, SQL など)でも簡単にデータを扱えます。
savetxt
関数の基本構文
savetxt
関数は、以下のように記述します。
numpy.savetxt('ファイル名', 変数, delimiter='区切り文字')
ファイル名
:保存するファイルの名前(拡張子も含める)変数
:保存したいNumPyの配列delimiter
:データの区切り文字(例:,
→ CSV形式、\t
→ TSV形式)
save
やsavez
関数と異なり、拡張子を明示的に指定する必要がある点に注意しましょう。
savetxt
関数を使ってCSV形式でデータを保存する
実際に、savetxt
関数を使ってCSVファイルを保存してみましょう。
例:二次元配列をCSVファイルに保存
import numpy as np
# 5×5のランダムな整数配列を作成
arr = np.random.randint(0, 100, (5, 5))
# 配列を表示
print("保存する配列:")
print(arr)
# `csv_array.csv` という名前でCSV形式で保存
np.savetxt("csv_array.csv", arr, delimiter=",")
実行結果(例)
保存する配列:
[[42 15 89 64 23]
[12 99 34 76 55]
[85 17 29 61 73]
[40 91 20 48 32]
[78 51 66 5 99]]
このコードを実行すると、カレントディレクトリに「csv_array.csv」というファイルが作成されます。
保存したCSVファイルを確認する
作成された「csv_array.csv」を開いて、データが保存されているか確認しましょう。
CSVファイルの内容(例)
42,15,89,64,23
12,99,34,76,55
85,17,29,61,73
40,91,20,48,32
78,51,66,5,99
各値がカンマ(,
)で区切られた形で保存されているのが確認できます。
💡 Excelで開く場合
- 「csv_array.csv」をダブルクリック → Excelで開く
- データが表形式で表示される
💡 Pandasで読み込む場合
import pandas as pd
# CSVファイルを読み込んで表示
df = pd.read_csv("csv_array.csv", header=None)
print(df)
TSV形式(タブ区切り)で保存する
savetxt
関数のdelimiter
を \t
にすると、TSV(タブ区切り)形式で保存できます。
import numpy as np
# 5×5のランダムな整数配列を作成
arr = np.random.randint(0, 100, (5, 5))
# `tsv_array.tsv` という名前でTSV形式で保存
np.savetxt("tsv_array.tsv", arr, delimiter="\t")
TSVファイルの内容(例)
42 15 89 64 23
12 99 34 76 55
85 17 29 61 73
40 91 20 48 32
78 51 66 5 99
タブ区切りでデータが保存され、ExcelやPandasで簡単に読み込めます。
fmt
パラメータを使って保存形式を調整する
savetxt
関数では、fmt
(フォーマット指定)を使って、保存時の数値の表示形式を調整できます。
小数点以下2桁の浮動小数点数で保存する
import numpy as np
# 5×5のランダムな小数の配列を作成
arr = np.random.rand(5, 5) * 100
# 小数点以下2桁でCSV形式で保存
np.savetxt("float_array.csv", arr, delimiter=",", fmt="%.2f")
実行結果(例:CSVファイル)
42.15,15.67,89.23,64.89,23.56
12.45,99.78,34.12,76.45,55.89
85.12,17.34,29.56,61.78,73.45
40.67,91.23,20.45,48.12,32.56
78.99,51.12,66.34,5.78,99.45
このように、小数点以下の桁数を制御することができます。
【実践課題】savetxt
関数を使ってCSVファイルを作成しよう!
次のコードを実行して、二次元配列を.csv
ファイルとして保存してみましょう。
課題:5×5の二次元配列を作成し、”csv_array.csv” という名前でCSV形式で保存する
import numpy as np
# 5×5のランダムな整数配列を作成
arr = np.random.randint(0, 100, (5, 5))
# `csv_array.csv` というファイル名で保存
np.savetxt("csv_array.csv", arr, delimiter=",")
✅ 作成された「csv_array.csv」ファイルを開いて、データが正しく保存されているか確認してみよう!
- ExcelやGoogleスプレッドシートで開いてみる
- Pandasで読み込んで表示してみる
まとめ
各保存方法の使い分け
関数名 | 保存形式 | メリット | 拡張子 |
---|---|---|---|
save | バイナリ(1つの配列) | 高速・データの構造維持 | .npy |
savez | バイナリ(複数の配列) | まとめて保存できる | .npz |
savetxt | テキスト(CSV, TSV, TXT) | Excel, Pandas で扱いやすい | .csv , .tsv , .txt |
保存したデータの再利用
.npy
,.npz
はnp.load()
で簡単に読み込み可能.csv
,.tsv
は Pandasのpd.read_csv()
などを使うと便利
コメント