こんにちは!インストラクターのフクロウです!
NumPyはnp.arrayという配列クラスを使って高速な行列計算ができる、科学計算・機械学習の実装で重要なライブラリです。
この記事では、NumPyでCSV/TSVファイルを読み込むnp.loadtxt関数を紹介します。
CSV/TSVの読み込みは、今であれば前処理を考えればPandasなどを使うのも手です。
ですが、NumPyだけでデータの読み込みまでできる方法を学んでおくとちょっとしたデータ読み込みで楽ができますよ!
是非この記事で使い方を学んでくださいね!
np.loadtxtとは
np.loadtxt関数はNumPyのファイル読み込み用関数です。
主に、CSV/TSVなどの単純な構造のファイルを読み込むのに使います。
もしも前処理などを効率的に行いたい場合は、Pandasで読み込んだ方が便利だと(僕は)思うので、以下の記事を読んでください!
では、np.loadtxtのパラメータを紹介しましょう。
np.loadtxt( fname="test.csv", # 読み込みたいファイルのパス dtype="float", # 要素の方を指定 delimiter=",", # ファイルの区切り文字 comments="#", # header/footerの先頭に書かれる文字 skiprows=0, # 先頭の何行を無視するか(指定した行数までは読み込まない) usecols=None # 読み込みたい列番号(指定する場合はタプルで) )
上に載せたのは主要なものだけですが、もっと詳しく知りたい場合は以下のページをおすすめします。
公式ページ
浮動小数点数や文字列、整数などが混ざったCSVの読み込みを行うならば、簡単な前処理が必要になります。
なのでそのような場合は先程紹介したPandasの方を使ってください(そっちのほうが簡単です)。
ここでは、単純なCSV/TSVファイルの読み込み方法を紹介します。
np.loadtxtの使い方
さて、CSV/TSVファイルを作成するNumPy関数、np.savetxtについて以下の記事で説明しています。
この記事で作成したCSV/TSVファイルを読み込んでみましょう。
CSVファイルの読み込み
まずはCSVファイルの読み込み方を確認しましょう。
読み込みたいCSVファイルがPythonファイルと同じ場所にあるとしましょう。
このとき、ファイルパスは特に指定せずに、ファイル名を書くだけでOKです。
np.loadtxt( fname="sample.csv", # 読み込みたいファイルのパス dtype="float", # 要素の方を指定 delimiter=",", # ファイルの区切り文字 )
これでOK。
[Output]
array([[ 1.06569228, 0.31596939, 0.06477798], [-0.54669414, 0.24027839, -0.15254126], [-0.24522706, 1.04796651, 0.37502059], [-0.5775777 , -0.3153236 , -0.84426695], [-0.26162637, -0.8169497 , 0.36793744]])
また、np.loadtxtの返り値としてファイルの中身が配列になって返ってきます。
なので例えば、以下のように返り値を変数に代入してあげてください。
data = np.loadtxt( fname="sample.csv", # 読み込みたいファイルのパス dtype="float", # 要素の方を指定 delimiter=",", # ファイルの区切り文字 )
ちなみに、CSVの読み書きについては以下の記事でも詳しく解説しています。
もしもファイルが別のディレクトリにある場合は、ファイル名だけではなくちゃんとファイルパスを指定する必要があることに注意してください。
これは絶対参照でも相対参照でもどちらでもOKです。
- 絶対参照
- ルートディレクトリからパスを全部書く方法
- ex. fname=”/home/fukurou/workspace/data/sample.csv”
- 相対参照
- カレントディレクトリから見てどこにあるかで書く方法
- ex. “./data/sample.csv”
TSVファイルの読み込み
次に、TSVファイルの読み込み方を確認しましょう。
CSVファイルの読み込みとの違いはdelimiter=”t”とする部分だけです。
data2 = np.loadtxt( fname="sample.tsv", # 読み込みたいファイルのパス delimiter="t", # ファイルの区切り文字 ) data2
[Output]
array([[ 1.06569228, 0.31596939, 0.06477798], [-0.54669414, 0.24027839, -0.15254126], [-0.24522706, 1.04796651, 0.37502059], [-0.5775777 , -0.3153236 , -0.84426695], [-0.26162637, -0.8169497 , 0.36793744]])
簡単ですね。
まとめ
この記事では、NumPyでCSV/TSVなどのテキストファイルを読み込むnp.loadtxt関数を紹介しました。
numpyでファイルの読み込みなどを行う利点は、他のライブラリを読み込まなくてもこれ一つで完結させられる点にあると思います。
ちょっと複雑なことをしたいならば、今ならばPandasを使ったほうが便利です。
簡単なファイルの読み書きならば、np.loadtxt/np.savetxtを使って1~2行でぱぱっとやれちゃうようになりましょう!