csvファイルを読み込みたい
人間誰しも一度はcsvファイルを読み込みたい時があるので、今回はpythonのモジュールで、データ解析ツールの一つであるpandasを用いてcsvファイル読み込む簡単なプログラムを試作してみました。
動作の概要
ファイル名を入力すると、同じ階層にある対応したデータファイルを読み込んでくれるようにしました。(本当はドラッグアンドドロップでちょちょいとデータ読み込みをしたかったのですがいきなりは難しそうなので……。)
データの形としては、カンマ区切りでn行2列(nは任意)、1行目は各列のカテゴリ名となっていることを想定しており(以下の図を参照のこと)、各カテゴリ名をstringとして、1列目と2列目をそれぞれlist形式で読み込むようにしました。
データの読み込みにはpandasのread_csvを使用しました。こちらはカンマ区切りのcsvファイルを読み込むことができ、さらには1列目をheaderとして認識してくれる便利なものとなっています。
ついでに、存在しないファイル名を入力してしまった場合にエラーメッセージを表示してプログラムを停止するようにもしてみました。このために、osモジュールのpath.exists()を使用しています。こちらは入力したファイルやディレクトリが存在していればTrueを返してくれます。
プログラムの実装
さて、実際のプログラムは以下となります。応用を考えてオブジェクト指向のプログラムとしてみましたがいかがでしょうか。
import pandas as pd
import sys
import os
class csv_reader:
#オーバーライドを前提としたread()メソッド
def read(self,inputs):
return
class xy_csv_reader(csv_reader):
def read(self,inputs):
#インプットされた文字列をinputsに格納
self.inputs = inputs
#ファイルの存在を確認し、存在しなければエラーメッセージを表示しプログラムを終了。
if not os.path.exists(self.inputs +".csv"):
sys.exit('wrong name of csv')
#ファイルの存在が確認できたら、pandasでデータの読み込み
else:
df = pd.read_csv(self.inputs +".csv")
#ちゃんと読み込めたかデータを表示する。無くてもよい。
print(df,"\n")
#データの要素を格納し、返す
xname = df.columns[0]
yname = df.columns[1]
list_x = df[xname].values
list_y = df[yname].values
return xname, yname ,list_x, list_y
実際に動かしてみよう
せっかく作ったので動かしてみましょう。以下のようなテストプログラムで、先ほどのtest3.csvファイルを読み込んでみます。
from csv_reader import *
#ファイル名を入力する
csvname = input('please input name of csv file> ')
#xy_csv_readerクラスのオブジェクトを生成
csv_reader = xy_csv_reader()
#データの読み込みを実行
xname, yname, list_x, list_y = csv_reader.read(csvname)
print(xname)
print(yname)
print(list_x)
print(list_y)
上記のテストプログラムを実行すると、コンソールに以下のように表示されるので、ここでtest3と入力してみます。
すると結果は以下のように表示されました。pandasで読み込んだ結果の一行目がheaderになっていること、データが正しく読み込まれていることが分かりました。やったね。
ちなみに、存在しないファイル名を入力すると以下のようになりました。こちらも、どうやら正しく動作しているようです。
#感想と今後
今回は、主にpandasを使用してcsvファイルを読み込む簡単なプログラムを作製しました。オブジェクト指向も取り入れてみたので、少しはステップアップできたかなと思っています。今後は、データの読み込み方のバリエーションを作ることや、読み込んだデータを使用してデータ分析ができるプログラムに拡張などをしていきたいと思います。