数値計算なんかをやっていると、アウトプットとして出てくるデータファイルを扱うことは多いと思います。
今回はpython&pandasを用いてそのようなファイル処理演習をやってみようと思います。
このブログではプログラミング初心者の私が、同じ初心者の方と一緒に成長していくことを目的としています。
画像付きでわかりやすく紹介していきますので、初心者の方は是非一緒にやってみましょう。
それでは早速今回のお題は以下のようなファイルです。
これは私がエクセルのRAND関数を用いて適当に作成したテキストファイルです。
演習をわかりやすくするために【Z】の列は小さい順に並べています。
(このブログではdata.txtとして保存しています。)
今回の記事ではこのテキストファイルに対して
・pythonでこのファイルを読み込む方法
・行列を指定して数値を取り出す方法
・任意のZ領域の数値を取得する方法
・取得したデータを別のテキストファイルに書き込む方法
この4つをご紹介したいと思います。
pythonでこのファイルを読み込む方法
それでは早速始めてみましょう。
まずはこのテキストファイルをpythonで読み込みます。
テキストの読み込みにはpandasというモジュールを使いますのでインストールしていない方はお使いのプロンプト上で
pip install pandas を実行し、インストールしておきましょう。
サンプルコードは以下です。
>>> import pandas as pd
>>> file=pd.read_table("data.txt",sep="\s+")
>>> file
たったこれだけです。簡単ですね。
行列を指定して数値を取り出す方法
このテキストファイルはいわば行列です。
(29行、4列)
ここで行と列を指定し、その場所の数値を取り出してみましょう。
ここでは10行、3列の数値を取り出してみました。
pandasで読み込んだファイルにたいして(.value)を実行することで、行列の数値部分を取得することが出来ます。
その後取り出した数値に対して[*,*]で行列を指定してあげれば、その場所の数値をピンポイントに取り出すことが出来ます。
ここはこの後も良くでてきますのでよく理解しておきましょう。
それで実際のサンプルコートは以下です。
import pandas as pd
file=pd.read_table("data.txt",sep="\s+")
data=file.values
data[10,3]
ちゃんと上の画像と一致していますね。
※pythonでは最初の行(列)を0行(列)目として扱います。
任意のZ領域の数値を取得する方法
ここまでは非常に簡単だったと思いますが、ここからは少し難しくなります。
今回はZの値が0.5よりも大きく、0.8よりも小さい行のscalar値を取り出してみたいと思います。
if分で複数条件を指定するには条件を()でくくってandでつなげればOKです。
このif分と、さきほどの数値取得を組み合わせることで、領域抽出を行っています。
サンプルコードは以下です。
import pandas as pd
file=pd.read_table("data.txt",sep="\s+")
dv=file.values
gyou=0
while gyou<29:
if (dv[gyou,2]>0.5) and (dv[gyou,2]<0.8):
print(dv[gyou,3])
gyou+=1
else:
gyou+=1
ちゃんと最初の画像の0.5<Z<0.8のときのscalar列の値が出力されていますね。
取得したデータを別のテキストファイルに書き込む方法
最後に、先ほど取得したデータをテキストファイルに書き込んでみましょう。
基本的には先ほどのコードを実行する前にテキストファイルを開いておき(open)、取得した数値を開いているファイルに書き込んでいく(write)だけです。最後にファイルを閉じる(close)ことをお忘れなく。
サンプルコードは以下です。
import pandas as pd
output=open("output.txt",'w')
file=pd.read_table("data.txt")
dv=file.values
gyou=0
while gyou<29:
if (dv[gyou,2]>0.5) and (dv[gyou,2]<0.8):
output.write(str(dv[gyou,3]) +'\n')
gyou+=1
else:
gyou+=1
output.close()
問題なく 0.5<Z<0.8)の範囲のscalar値を取得してくれていますね。
この程度であれば、エクセルでも簡単に処理できるとは思いますが、数値計算を行っていると、ファイルの行数が数100万行にも及びます。
エクセルではそこまでの行数に対応できませんので、是非、このようなやり方もあることを覚えておきましょう。
終わりに
というわけで今回は3次元データファイルの数値取得をやってみました。プログラミングを覚えるには実際に手を動かして覚えていくしかありません。
是非みなさんも同じような演習をやってみましょう。
それではまた!
関連記事