【NumPy入門】NumPyによるCSVの読み込み/書き込みをマスターしよう!

解析したいデータがCSVファイルで保存されていた時、皆さんはどうやって読み込みますか?また、解析結果をCSVファイルで保存したい時、皆さんはどうやって書き込みますか?

こういうとき、NumPyを使っているならnp.loadtxt/np.savetxt関数がおすすめです。この記事でこれらの関数の使い方をマスターして、機械学習のデータ読み込み・実験結果の保存などができるようになりましょう。

目次

CSVファイルの読み込み

実際に機械学習の勉強でよく使われるデータセットを使って、CSVファイルの読み込み方を見ていきましょう。

ファイルの準備

まずは例として使うために、データセットをcsv形式で保存しておきます。Iris Data Setというアヤメの花のデータセットを使います。

ここからiris.dataというファイルをダウンロードして、「iris.csv」という名前にしておいてください。このファイルを開くと、以下のような形になっていることがわかります。

5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa

データがカンマで区切られていることがわかりますね。csvファイルは区切り文字がカンマになっているので、これを覚えておきましょう。また、~~.csvというファイル名ならば、jupyter labで開くと以下のようにキレイに中身を確認できます。

Delimiterと書かれているのが区切り文字にあたります。ここまで確認できれば準備OKです!

np.loadtxtを使ったファイル読み込み

NumPyではnp.loadtxtという関数で、csvなどのファイルを読み込めます。コードのコメントにパラメータの説明をつけたので、実際にファイルを読み込むプログラムを見てみましょう。

import numpy as np

# 配列の情報を見るために用意した関数です。これはcsv読み込みとは関係ありません。
def array_info(x):
    print("配列のshape", x.shape)
    print("配列の要素のデータ型", x.dtype)
    if len(x) >=10:
        print("配列の中身(上から10列)n",x[:10],"n")
    else:
        print("配列の中身n",x,"n")

# ここから下がメイン
data = np.loadtxt("iris.csv",       # 読み込みたいファイルのパス
                  delimiter=",",    # ファイルの区切り文字
                  skiprows=0,       # 先頭の何行を無視するか(指定した行数までは読み込まない)
                  usecols=(0,1,2,3) # 読み込みたい列番号
                 )
array_info(data)

[出力結果]

配列のshape (150, 4)
配列の要素のデータ型 float64
配列の中身(上から10列)
 [[5.1 3.5 1.4 0.2]
 [4.9 3.  1.4 0.2]
 [4.7 3.2 1.3 0.2]
 [4.6 3.1 1.5 0.2]
 [5.  3.6 1.4 0.2]
 [5.4 3.9 1.7 0.4]
 [4.6 3.4 1.4 0.3]
 [5.  3.4 1.5 0.2]
 [4.4 2.9 1.4 0.2]
 [4.9 3.1 1.5 0.1]]

ここで注意しないといけないのが、skiprowsとusecolsです。データセットを保存したファイルの先頭に、データの解説が書いてあるものがたまにあります。そんな時、csv形式のデータが始まっている行数までskiprowsを使ってスキップすることができます。

また、データセットには、最後の列にクラスの名前が書かれていることがあります。数値データだけ読み込みたいときなどは邪魔になってしまいますね。

そんな時、csvのどの列を読み込むのかをusecolsに指定します。

CSVファイルの書き込み

次に、numpy配列をcsvファイルとして保存する方法を見ていきましょう。

np.savetxtを使ったファイルへの書き込み

NumPyではnp.savetxtという関数で、csvなどのファイルへ書き込みが行えます。コードのコメントにパラメータの説明をつけたので、実際にファイルへ書き込むプログラムを見てみましょう。

np.savetxt("result.csv",            # ファイル名
           X=data,                  # 保存したい配列
           delimiter=","            # 区切り文字
)

これでプログラムが置いてあるディレクトリに、「result.csv」というファイルができました。jupyter labで中を確認してみると、以下のようになっています。

numpyを使ったcsvファイルの作成は以上のように非常に簡単です。実験結果を簡単に保存できる素晴らしい機能なので、是非使ってみてください。

まとめ

この記事では、NumPyを使ったcsvファイルの読み込み、書き込み操作について解説しました。

ここで解説した関数は、CSV以外にも、タブで区切られたTSVを始めとした色んなファイルの読み書きが可能です。是非この二つの関数をしっかり覚えて、プログラミングで役立ててください!

この記事を書いた人

第一言語はPythonです。
皆さんRustやりましょう。

目次