今回はこの保存したファイルをpythonで読み込みを行おうと思います。
今回はファイルを読み込むだけだと思い、簡単だとたかをくくっていたのですが、
意外と難しかったです。
最初はcsvモジュールをインポートして使おうと思ったのですが、
csvモジュールでインポートしたデータの使い方がわからなかったので、やめました。
そこでいろいろ調べていたところ、pythonには、データ処理専用に特化した、
numpyというモジュールがあることがわかったので、これを使おうと思います。
具体的にはnumpyの中にある、loadtxt関数を使います。
最初にコードを示すと、以下の様なコードが出来ました。
import numpy as np def main(): data = loadfile() print data def loadfile(): filepath = "/Users/ユーザー名/Desktop/" filename = "ファイル名" allfilepath = filepath + filename ## print allfilepath date = "date" hajimene = "hajimene" takane = "takane" yasune ="yadune" owarine = "owarine" dekidaka ="dekidaka" data = np.lib.loadtxt(allfilepath,dtype = {'names':(date,hajimene,takane,yasune,owarine,dekidaka), 'formats':('S30','i','i','i','i','i')},comments = 'null',delimiter = '\t',skiprows =2) return data if __name__ == '__main__': main()
意外と難しかったのは、loadtxt関数の扱い方で、
取り込んだデータをの始値だけの列を出力したいときに、
print data[:,0]
とやっても出力することができず苦戦しました。
これはloadtxt関数の中の、dtypeの部分が関係しているようで、これを入れると、上記のような正規表現で抜き出すことはできなくなるようです。
loadtxt関数のマニュアルでは1次元になるようなことが書いてあったような気がします。
では、実際どう抜きとるかですが、
正規表現を使うよりもずっと楽で、例えば始値の列を抜き出したい場合は、
data["hajimene"]
のようにすると抜き出せます。(namesで指定した文字列)
この引数を入れないと、文字列を同時に取り込むことができないようなので、usecols引数を入れて、文字列部分は除外する必要があります。
また、他の引数の説明ですが、comments='null'は[null]文字が数値として認識されなかったためです。
その行の一文字目が[null]の場合は、そこから後ろもすべて[null]になっているので、nullをコメント認定して、その行をすべてコメント化しました。
また、タブ区切りファイルを作成したので、delimiter = '\t'としました。
行列として読み込んで欲しいのは3行目からなので、skiprows =2としました。
参考
numpy.loadtxthttp://docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html
csv/tsvファイルの読み書き
http://www.mwsoft.jp/programming/numpy/csv.html
実験データの読み込み(テキストファイル)
http://kaiseki-web.lhd.nifs.ac.jp/documents/Python/textfile.htm
PythonのNumPyでTSVファイルを読み込む方法
http://hydrocul.github.io/wiki/blog/2014/0216-load-tsv-python.html
[python] loadtxtでヘッダの読み飛ばし、文字列が混ざったテーブルの読み込み
http://pacocat.blogspot.jp/2011/12/numpyloadtxt.html
0 件のコメント:
コメントを投稿