Pythonで書いたコードをリファクタリング
最近モヤモヤしていること。
1. python自体の理解不足
python案件の仕事でサブシステム1つ担当して実装して単体テスト通すくらいはできるけれど、そもそもその実装がpythonに合った書き方をしているか、効率的に書けているかどうかというのは怪しいわけで。
2. pythonを使った機械学習の理解不足
courseraのMachine Learningは修了して機械学習にどんな種類があるとか理論はざっと学んだものの、pythonでの実装は結局手付かずになっています。
そんな中、いざkaggleに挑戦だ!となっても、pandasの扱い方も分からなければ、scikit-learnのような機械学習のライブラリについての理解も全然なので使いこなせていません。
この感情をとりあえずpaizaにぶつけてみた
そんな中、久しぶりにpaizaで練習してみました。
プログラミングのスキルチェックと転職活動ができるおなじみのアレです。
1週間ほど遊んでBランクは解けるようになったものの。各種メソッドを知っていれば一発ですぐ分かるのに……と思うことがありすぎて、一度ちゃんとテキストで順を追って知識を習得して整理する必要があると感じました。
例えばこんなコード。
# coding: utf-8 n = 0 c = [] def competitors(): n = int(input()) c = [input().split() for i in range(n)] for i in range(n): for j in range(5): c[i][j+1] = int(c[i][j+1]) return n, c def points(n, c): for i in range(n): c[i].append(c[i][2]+c[i][3]) c[i].append(c[i][4]+c[i][5]) c[i].append(c[i][1]+c[i][2]+c[i][3]+c[i][4]+c[i][5]) return c def predict_a(n, c): for i in range(n): if c[i][0] == "s": c[i].append("OK") if c[i][6] >= 160 else c[i].append("NG") else: c[i].append("OK") if c[i][7] >= 160 else c[i].append("NG") return c def predict_b(n, c): for i in range(n): if c[i][9] == 0: break else: if c[i][8] >= 350: pass else: c[i][9] = "NG" return c def count(n, c): d = 0 for i in range(n): if c[i][9] == "OK": d = d + 1 else: pass print(d) def main(): n, c = competitors() c = points(n, c) c = predict_a(n, c) c = predict_b(n, c) count(n, c) main()
次に上をリファクタリングしたコード。
# coding: utf-8 def competitors(): global n n = int(input()) c = [input().split() for i in range(n)] for i in range(n): c[i][1:6] = map(int, c[i][1:6]) return c def predict(c): d = [] ok = "OK" ng = "NG" cut_5 = 350 cut_2 = 160 for i in range(n): if sum(c[i][1:6]) >= cut_5: if c[i][0] == "s": d.append(ok) if sum(c[i][2:4]) >= cut_2 else c[i].append(ng) else: d.append(ok) if sum(c[i][4:6]) >= cut_2 else c[i].append(ng) else: d.append(ng) return d.count(ok) def main(): d = predict(competitors()) print(d) main()
上と下でやってることは同じなのに、最初提出した時に書いたコードの無駄がすごすぎて、直してて一人で凹むという……。いま見返してもホント酷い。
そこで自分への課題を考えた
ステップ1
このあたりを済ませてから、
ステップ2
- paizaの続き
- kaggle挑戦
に行くのがいいかなーとイメージ。
まずは本探しから。がんばろう!