どうもニコイチです。データ分析や機械学習を行う際、データをプログラムに取り込むことは最初のステップです。Pythonでは、pandas
というライブラリがよく使われますが、数値計算に特化した NumPy
を使ってデータを読み込むことも可能です。特に、NumPyは高速な数値演算が得意なため、大規模なデータを扱う際に役立ちます。
本記事では、NumPyを使ってさまざまな形式のデータを読み込む方法を解説します。特に以下の3つの関数を中心に紹介します。
np.load()
:NumPy専用の.npy
や.npz
ファイルを読み込むnp.loadtxt()
:CSVやTSVなどのテキストデータを読み込むnp.genfromtxt()
:欠損値を考慮しながらテキストデータを読み込む
これらの関数の使い方を学ぶことで、NumPyを活用したデータ分析の第一歩を踏み出すことができます。
では、まずは np.load()
を使ったデータの読み込み方法を見ていきましょう。
NumPyのload()
関数を使ったデータの読み込み
np.load()
とは?
np.load()
は、NumPy専用のバイナリファイル(.npy
や .npz
)を読み込むための関数です。NumPyの配列をファイルに保存し、後で再利用する際に便利です。
基本的な構文は以下の通りです。
import numpy as np
array = np.load("ファイル名.npy")
.npy
ファイルの読み込み
.npy
ファイルは、NumPyの配列データを効率的に保存する形式です。例えば、事前に作成した sample.npy
を np.load()
で読み込んでみましょう。
例:sample.npy
を読み込む
import numpy as np
# .npy ファイルを読み込む
arr = np.load("sample.npy")
# 配列の中身を表示
print(arr)
出力結果(例)
[[4 8 1 2 9]
[3 3 4 5 2]
[3 5 1 9 9]
[4 8 4 3 4]
[1 4 2 9 4]]
このように、ファイルに保存されていたデータがそのままNumPyの配列として復元されます。
.npz
ファイルの読み込み
.npz
ファイルは、複数の配列を圧縮して保存できるフォーマットです。np.load()
を使って .npz
ファイルを読み込むと、辞書のようなオブジェクトが返されます。
例:data.npz
を読み込む
import numpy as np
# .npz ファイルを読み込む
data = np.load("data.npz")
# 格納されている配列を取得
arr1 = data["array1"]
arr2 = data["array2"]
print(arr1)
print(arr2)
ポイント
.npz
ファイルを読み込むと、辞書のようにキー
を指定してデータを取得する必要があります。data.files
を使うと、保存されている配列のキー一覧を確認できます。
print(data.files) # 出力例: ['array1', 'array2']
allow_pickle=True
のオプション
デフォルトでは、NumPyはPythonのオブジェクトを含むデータの読み込みを制限しています。しかし、Pythonのオブジェクト(リストや辞書など)を含む .npy
ファイルを読み込む場合は、allow_pickle=True
を指定する必要があります。
arr = np.load("object_data.npy", allow_pickle=True)
まとめ
np.load("file.npy")
でNumPy配列を読み込める。.npz
ファイルはdata["key"]
の形で取得する。- Pythonオブジェクトを含む
.npy
を読み込む場合はallow_pickle=True
を指定する。
これで、NumPy専用のデータファイルの読み込み方を学びました。次は、CSVやTSVといった一般的なデータ形式の読み込み方法について解説します。
NumPyのloadtxt()
関数を使ったCSVデータの読み込み
np.loadtxt()
とは?
CSV(カンマ区切り)やTSV(タブ区切り)といったテキストデータをNumPyの配列として読み込むために、np.loadtxt()
関数を使用します。
基本的な構文は以下の通りです。
np.loadtxt(fname="ファイル名", dtype=データ型, delimiter="区切り文字", skiprows=行数, usecols=列番号)
主な引数
引数 | 説明 |
---|---|
fname | ファイル名(例: "data.csv" ) |
dtype | データ型(例: int 、float など) |
delimiter | 区切り文字(CSVなら , 、TSVなら \t ) |
skiprows | 読み飛ばす行数(例: 1 なら最初の1行をスキップ) |
usecols | 読み込む列の番号(例: [1,2,3] で2列目~4列目を取得) |
CSVファイルを読み込んでみよう
ここでは、株価データが保存された data.csv
を読み込んでみます。
data.csv
の内容
Date,Open,High,Low,Close,Volume,Stock Trading
2016-12-30,42120,42330,41700,41830,610000,256280628000
2016-12-29,43000,43220,42540,42660,448400,19188227000
2016-12-28,43940,43970,43270,43270,339900,14780670000
2016-12-27,43140,43700,43140,43620,400100,17427993000
2016-12-26,43310,43660,43090,43340,358200,15547803000
np.loadtxt()
を使った読み込み
import numpy as np
# "data.csv" を NumPy 配列として読み込む
data = np.loadtxt(fname="data.csv", dtype=int, delimiter=",", skiprows=1, usecols=[1, 2, 3, 4, 5])
# 結果を表示
print(data)
出力結果
[[ 42120 42330 41700 41830 610000]
[ 43000 43220 42540 42660 448400]
[ 43940 43970 43270 43270 339900]
[ 43140 43700 43140 43620 400100]
[ 43310 43660 43090 43340 358200]]
ポイント
delimiter=","
でCSVファイルを正しく区切る。skiprows=1
で1行目のヘッダーをスキップ(”Date, Open, …” は不要)。usecols=[1,2,3,4,5]
で必要な列だけを取得(”Open” ~ “Volume”)。dtype=int
でデータを整数型に変換して読み込む。
TSVファイルを読み込む場合
TSV(タブ区切り)データを読み込む場合は、delimiter="\t"
を指定します。
data = np.loadtxt("data.tsv", dtype=float, delimiter="\t", skiprows=1)
まとめ
np.loadtxt()
を使うと、CSVやTSVを簡単にNumPy配列として読み込める。delimiter=","
やdelimiter="\t"
で適切な区切り文字を指定する。skiprows
やusecols
を活用して、必要なデータだけ取得できる。
しかし、loadtxt()
には 欠損値(NaN)を含むデータを読み込めない という制約があります。
次の章では、欠損値を考慮しながらデータを読み込める genfromtxt()
関数を紹介します!
NumPyのgenfromtxt()
関数を使ったデータの読み込み(欠損値対応)
np.genfromtxt()
とは?
np.genfromtxt()
は、np.loadtxt()
の強化版とも言える関数で、欠損値(NaN)を適切に処理しながらデータを読み込めるのが特徴です。
基本的な構文は以下の通りです。
np.genfromtxt(fname="ファイル名", dtype=データ型, delimiter="区切り文字", skip_header=行数, usecols=列番号, missing_values=欠損値, filling_values=補完値)
主な引数
引数 | 説明 |
---|---|
fname | ファイル名(例: "data_nan.csv" ) |
dtype | データ型(例: int 、float など) |
delimiter | 区切り文字(CSVなら , 、TSVなら \t ) |
skip_header | 読み飛ばす行数(例: 1 なら最初の1行をスキップ) |
usecols | 読み込む列の番号(例: [1,2,3] で2列目~4列目を取得) |
missing_values | 欠損値を表す値(デフォルトは NaN ) |
filling_values | 欠損値を補完する値(例: 0 に置き換える) |
欠損値を含むCSVファイルを読み込んでみよう
ここでは、data_nan.csv
という 一部のデータが欠損しているCSVファイル を扱います。
data_nan.csv
の内容
Date,Open,High,Low,Close,Volume,Stock Trading
2016-12-30,42120,42330.0,41700,41830.0,610000,256280628000
2016-12-29,43000,NaN,42540,42660.0,448400,19188227000
2016-12-28,43940,43970.0,43270,NaN,339900,14780670000
2016-12-27,43140,43700.0,43140,43620.0,400100,17427993000
2016-12-26,43310,43660.0,43090,43340.0,358200,15547803000
NaN
(欠損値)が含まれていることがわかります。
np.genfromtxt()
を使って欠損値を考慮した読み込み
import numpy as np
# 欠損値を考慮しながらCSVを読み込む
nan_data = np.genfromtxt(
fname="data_nan.csv",
dtype=float,
delimiter=",",
skip_header=1,
usecols=[1, 2, 3, 4, 5],
missing_values=np.nan,
filling_values=0
)
# 結果を表示
print(nan_data)
出力結果
[[42120. 42330. 41700. 41830. 610000.]
[43000. 0. 42540. 42660. 448400.]
[43940. 43970. 43270. 0. 339900.]
[43140. 43700. 43140. 43620. 400100.]
[43310. 43660. 43090. 43340. 358200.]]
ポイント
np.genfromtxt()
はNaN
(欠損値)を適切に処理 できる。missing_values=np.nan
により、ファイル内のNaN
を認識する。filling_values=0
により、欠損値を0
に置き換える。skip_header=1
で1行目のヘッダーをスキップ。usecols=[1,2,3,4,5]
で “Open” から “Volume” の5列を抽出。
欠損値を補完せずにそのまま読み込む場合
filling_values
を指定しないと、欠損値は np.nan
のままになります。
data_with_nan = np.genfromtxt("data_nan.csv", dtype=float, delimiter=",", skip_header=1, usecols=[1,2,3,4,5])
print(data_with_nan)
この場合、出力は以下のようになります。
[[42120. 42330. 41700. 41830. 610000.]
[43000. nan 42540. 42660. 448400.]
[43940. 43970. 43270. nan 339900.]
[43140. 43700. 43140. 43620. 400100.]
[43310. 43660. 43090. 43340. 358200.]]
loadtxt()
と genfromtxt()
の違い
関数 | 欠損値対応 | 使いやすさ |
---|---|---|
np.loadtxt() | 欠損値があるとエラーになる | シンプルで高速 |
np.genfromtxt() | 欠損値を処理できる(補完可能) | 柔軟だがやや遅い |
欠損値が含まれるデータを扱う場合は genfromtxt()
を使うのがベスト!
まとめ
np.genfromtxt()
はloadtxt()
よりも柔軟で、欠損値を処理できる。missing_values
で欠損値を認識し、filling_values
で補完が可能。- 欠損値をそのまま扱いたい場合は
filling_values
を指定しない。
次の章では、ここまで学んだ np.load()
、np.loadtxt()
、np.genfromtxt()
を活用し、実践的なデータの読み込みを行います!
実践! NumPyを使ってデータを読み込んでみよう
ここまで学んだ np.load()
、np.loadtxt()
、np.genfromtxt()
を活用し、実際にデータを読み込む流れを実践してみましょう。
今回扱うのは以下の2つのデータファイルです。
data.csv
(欠損値なし) →np.loadtxt()
を使用data_nan.csv
(欠損値あり) →np.genfromtxt()
を使用
① data.csv
を np.loadtxt()
で読み込む
まずは、シンプルなデータ(欠損値なし)を np.loadtxt()
を使って読み込んでみましょう。
data.csv
の内容
Date,Open,High,Low,Close,Volume,Stock Trading
2016-12-30,42120,42330,41700,41830,610000,256280628000
2016-12-29,43000,43220,42540,42660,448400,19188227000
2016-12-28,43940,43970,43270,43270,339900,14780670000
2016-12-27,43140,43700,43140,43620,400100,17427993000
2016-12-26,43310,43660,43090,43340,358200,15547803000
コード(np.loadtxt()
)
import numpy as np
# 欠損値のないCSVファイルを読み込む
data = np.loadtxt(fname="data.csv", dtype=int, delimiter=",", skiprows=1, usecols=[1,2,3,4,5])
# 結果を表示
print(data)
出力結果
[[ 42120 42330 41700 41830 610000]
[ 43000 43220 42540 42660 448400]
[ 43940 43970 43270 43270 339900]
[ 43140 43700 43140 43620 400100]
[ 43310 43660 43090 43340 358200]]
ポイント
delimiter=","
でカンマ区切りを指定。skiprows=1
で1行目のヘッダーをスキップ。usecols=[1,2,3,4,5]
で “Open” から “Volume” の5列のみ取得。- データに欠損値がない場合は
np.loadtxt()
が最適!
② data_nan.csv
を np.genfromtxt()
で読み込む(欠損値対応)
次に、欠損値(NaN)が含まれるデータを np.genfromtxt()
を使って処理してみます。
data_nan.csv
の内容
Date,Open,High,Low,Close,Volume,Stock Trading
2016-12-30,42120,42330.0,41700,41830.0,610000,256280628000
2016-12-29,43000,NaN,42540,42660.0,448400,19188227000
2016-12-28,43940,43970.0,43270,NaN,339900,14780670000
2016-12-27,43140,43700.0,43140,43620.0,400100,17427993000
2016-12-26,43310,43660.0,43090,43340.0,358200,15547803000
コード(np.genfromtxt()
)
import numpy as np
# 欠損値を0に補完しながらCSVを読み込む
nan_data = np.genfromtxt(
fname="data_nan.csv",
dtype=float,
delimiter=",",
skip_header=1,
usecols=[1, 2, 3, 4, 5],
missing_values=np.nan,
filling_values=0
)
# 結果を表示
print(nan_data)
出力結果
[[42120. 42330. 41700. 41830. 610000.]
[43000. 0. 42540. 42660. 448400.]
[43940. 43970. 43270. 0. 339900.]
[43140. 43700. 43140. 43620. 400100.]
[43310. 43660. 43090. 43340. 358200.]]
ポイント
missing_values=np.nan
でNaN
を認識。filling_values=0
でNaN
を0
に置き換え。- 欠損値を考慮する必要がある場合は
np.genfromtxt()
を使用!
③ .npy
や .npz
のデータを np.load()
で読み込む
最後に、NumPy独自の .npy
や .npz
データも読み込んでみましょう。
コード(np.load()
)
import numpy as np
# .npy ファイルの読み込み
arr = np.load("sample.npy")
print(arr)
# .npz ファイルの読み込み
data = np.load("data.npz")
print(data["array1"])
print(data["array2"])
まとめ
データ形式 | 関数 | 特徴 |
---|---|---|
.csv (欠損値なし) | np.loadtxt() | シンプルで高速 |
.csv (欠損値あり) | np.genfromtxt() | 欠損値を適切に処理 |
.npy (NumPy配列) | np.load() | 1つのNumPy配列を保存・読み込み |
.npz (複数のNumPy配列) | np.load() | 複数の配列を辞書型で管理 |
データの状況に応じて適切な関数を選ぶことが重要です!
まとめ
本記事の振り返り
本記事では、NumPyを使ってデータを読み込む方法について学びました。以下の3つの関数を中心に、それぞれの用途と使い方を解説しました。
🔹 np.load()
- NumPyのバイナリ形式(
.npy
、.npz
)のデータを高速に読み込む。 .npy
は1つの配列を保存・読み込み、.npz
は複数の配列を保存可能。
✅ こんなときに使う!
✔️ NumPyで処理したデータを保存・再利用したいとき
✔️ 複数のNumPy配列をまとめて管理したいとき
🔹 np.loadtxt()
- CSVやTSVなどのテキストデータを読み込むためのシンプルな関数。
delimiter
で区切り文字を指定し、skiprows
やusecols
でデータを調整可能。
✅ こんなときに使う!
✔️ 欠損値がないシンプルなCSVデータをNumPy配列に変換したいとき
✔️ 特定の列や行のみを抜き出したいとき
🔹 np.genfromtxt()
np.loadtxt()
の拡張版で、欠損値(NaN)を処理できる。missing_values
やfilling_values
を使って、欠損値を補完可能。
✅ こんなときに使う!
✔️ 欠損値を含むCSVデータを読み込みたいとき
✔️ 欠損値を自動で補完しながらデータを扱いたいとき
NumPyでのデータ読み込みの選び方
使用シーン | 適した関数 | 特徴 |
---|---|---|
NumPy専用のデータ(.npy / .npz )を読み込みたい | np.load() | 高速でサイズも小さい |
欠損値なしのCSVやTSVを読み込みたい | np.loadtxt() | シンプルで高速 |
欠損値を含むCSVやTSVを読み込みたい | np.genfromtxt() | 欠損値を適切に処理 |
適切な関数を選ぶことで、より効率的にデータを扱うことができます!
次のステップ
NumPyを使ってデータを読み込めるようになったら、次は データの加工や可視化 に挑戦してみましょう!
🔹 次に学ぶべきトピック
- NumPyを使ったデータの前処理(標準化、正規化、欠損値処理など)
- Matplotlibを使ったデータの可視化(折れ線グラフ、ヒストグラムなど)
- pandasと組み合わせたデータ分析(データの集計やフィルタリング)
NumPyはデータ分析の基礎となるライブラリなので、ぜひ実際のデータを使って試してみてください! 😊
おわりに
この記事では、NumPyを使ったデータの読み込み方法を初心者向けに解説しました。
「データを読み込んで扱えるようになること」は、データ分析や機械学習の第一歩です。
今後もNumPyを活用して、さまざまなデータを自在に扱えるようになりましょう! 💡✨
📌 参考記事
- NumPyの基本的な配列操作 → NumPy入門記事
- pandasを使ったデータ読み込み → pandas入門記事
- Matplotlibでデータを可視化する方法 → Matplotlib入門記事
コメント