見出し画像

PythonでCSVデータを解析するまで②

前回はcsvファイルの読み込みまで行いましたので、全体の勝率を出すところまで行っていきたいと思います。

流れ

簡単に処理の流れを書いてみました。

スクリーンショット 2020-07-29 14.46.11

次に上記画像の①での処理の流れです

スクリーンショット 2020-07-29 14.46.26

コードの記述

//paserCsv.py
import csv
import math
csvfile = open("./csvData/entrylog.csv",encoding="utf-8")
win = 0
lose = 0
error = []

def str2bool(s):
 return s.lower() in ["true"]

前回同様にcsvファイルを読み込みました。

勝ち負けを数える変数と判定できなかったデータを入れる変数を作成しました。

またcsvファイル内にはTrue/Falseのデータがあるのですがpythonで読み込んだ時には型がstringになっているので下記リンクを参考にして文字が一致するかどうかを判定する関数をstr2boolと言う名前で定義して判定しました。

for row in csv.reader(csvfile) :
 flag1 = str2bool(row[8])
 flag2 = str2bool(row[9])
 entryP = float(row[1])
 closeP = float(row[2])
 if flag1 == True and flag2 == False :
   if entryP < closeP :
       win += 1
   elif entryP >= closeP :
       lose += 1
   else :
       error.append(row)
 elif flag1 == False and flag2 == True :
   if entryP > closeP :
       win += 1
   elif entryP <= closeP :
       lose += 1
   else :
       error.append(row)
 else :
   error.append(row)

次は上記処理①に記載した処理内容を先ほどの続きに記述しました。

flag1にはハイエントリーでtrue、flag2ではローエントリーでtrueを代入し、if内で勝ち負けを判定しています。

print("勝:"+ str(win))
print("負:"+ str(lose))
total = win + lose
winRate = (win/total) *100
print("合計:"+ str(total))
print("勝率:"+ str(math.floor(winRate))+"%")
print("エラー:"+ str(len(error))+"回")

最後に形を整えて表示するコードを記述しています。

totalでは変数winとloseを足した全体のエントリー数、winRateでは勝率を代入しています。

実行結果

下記画像のように全体の勝率をしっかり表示させることができました。

キャプチャ3

まとめ

今回で自作インジケーターのエントリーデータをcsvファイルに落として、pythonで解析するのは終了です。

今回扱ったcsvファイルの名前は固定していますが違うファイル名でも解析したり、時間ごとに勝率を表示させたりなど応用のやり方はたくさん存在すると思います。

参考


美味しいご飯に使わせてもらいますmm