解析したいデータが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を始めとした色んなファイルの読み書きが可能です。是非この二つの関数をしっかり覚えて、プログラミングで役立ててください!