Python初心者必見!NumPyでデータをラクラク読み込む方法を徹底解説

PR表記

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

どうもニコイチです。データ分析や機械学習を行う際、データをプログラムに取り込むことは最初のステップです。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.npynp.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データ型(例: intfloat など)
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" で適切な区切り文字を指定する。
  • skiprowsusecols を活用して、必要なデータだけ取得できる。

しかし、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データ型(例: intfloat など)
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つのデータファイルです。

  1. data.csv(欠損値なし) → np.loadtxt() を使用
  2. data_nan.csv(欠損値あり) → np.genfromtxt() を使用

data.csvnp.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.csvnp.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.nanNaN を認識。
  • filling_values=0NaN0 に置き換え。
  • 欠損値を考慮する必要がある場合は 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 で区切り文字を指定し、skiprowsusecols でデータを調整可能。

✅ こんなときに使う!
✔️ 欠損値がないシンプルなCSVデータをNumPy配列に変換したいとき
✔️ 特定の列や行のみを抜き出したいとき


🔹 np.genfromtxt()

  • np.loadtxt() の拡張版で、欠損値(NaN)を処理できる。
  • missing_valuesfilling_values を使って、欠損値を補完可能。

✅ こんなときに使う!
✔️ 欠損値を含むCSVデータを読み込みたいとき
✔️ 欠損値を自動で補完しながらデータを扱いたいとき


NumPyでのデータ読み込みの選び方

使用シーン適した関数特徴
NumPy専用のデータ(.npy / .npz)を読み込みたいnp.load()高速でサイズも小さい
欠損値なしのCSVやTSVを読み込みたいnp.loadtxt()シンプルで高速
欠損値を含むCSVやTSVを読み込みたいnp.genfromtxt()欠損値を適切に処理

適切な関数を選ぶことで、より効率的にデータを扱うことができます!


次のステップ

NumPyを使ってデータを読み込めるようになったら、次は データの加工や可視化 に挑戦してみましょう!

🔹 次に学ぶべきトピック

  • NumPyを使ったデータの前処理(標準化、正規化、欠損値処理など)
  • Matplotlibを使ったデータの可視化(折れ線グラフ、ヒストグラムなど)
  • pandasと組み合わせたデータ分析(データの集計やフィルタリング)

NumPyはデータ分析の基礎となるライブラリなので、ぜひ実際のデータを使って試してみてください! 😊


おわりに

この記事では、NumPyを使ったデータの読み込み方法を初心者向けに解説しました。
「データを読み込んで扱えるようになること」は、データ分析や機械学習の第一歩です。

今後もNumPyを活用して、さまざまなデータを自在に扱えるようになりましょう! 💡✨

📌 参考記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次