【Python初心者必見】NumPyのデータ保存テクニック!CSV・バイナリ・複数配列の保存方法を完全ガイド

PR表記

※アフィリエイト広告を利用しています

どうもニコイチです。データ分析や機械学習を行う際、データを保存して再利用することは非常に重要です。NumPyはPythonの強力なライブラリの一つであり、大規模な数値計算を効率的に行うための機能を提供しています。その中でも、データを簡単に保存・読み込みできる関数が用意されており、これを活用することで作業の効率を大幅に向上させることができます。

本記事では、NumPyを使ってデータを保存する方法を詳しく解説します。特に、以下の3つの方法に焦点を当てます。

  1. save関数 – 単一の配列をバイナリ形式(.npy)で保存
  2. savez関数 – 複数の配列をまとめてバイナリ形式(.npz)で保存
  3. 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形式)

savesavez関数と異なり、拡張子を明示的に指定する必要がある点に注意しましょう。

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で開く場合

  1. 「csv_array.csv」をダブルクリック → Excelで開く
  2. データが表形式で表示される

💡 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, .npznp.load() で簡単に読み込み可能
  • .csv, .tsvPandasの pd.read_csv() などを使うと便利
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次