はじめに
この記事は、Kaggle Advent Calendar 2020のアドベントカレンダー9日目の記事です。
Kaggle楽しそうだけど、コーディングが難しくて挫折しそうな方向けに、1つのTipsをご紹介するポエムです(あらかじめご了承ください)
Kaggleがうまく楽しめない・・・
突然ですが、Kaggle楽しんでいますか?
私も昨年Kaggleを知って、プログラミング未経験ながらPythonも覚えて1~2つコンペに参加して、Kaggle楽しいなあと思いながら、頑張って続けていました。昨年のKaggle Advent Calendarでは、こんな記事も書いて、Kaggleやろうぜ!と息巻いていたり。
ゼロからsubmit出来なくても、世界中のデータサイエンティストたちが公開しているNotebookを見れば、分かりやすくソリューションやアイディアが公開されているところがKaggleの素晴らしいところ。それらを読んで写経していくことでメキメキと力がつく、そう信じながら取り組んでいました。
が、しかし。
vote数の多いBeginner向けNotebookの写経に取り組んでいたのですが、いろいろと問題があることが分かりました。
- Beginner向けの割にコードが難しい(class、defの多用)
- EDAまでは着いていけるが、モデリング部分でコードの難度UP(入り組んだfor文、dictなど)
- コード量の長いものが多く、理解しながら読んでいるだけで日が暮れる
- 何より、自分で考えてコードを書いていないので、成長実感が持てない…
単純にコーディング力が足りない、という現実
上記の問題をあらためて見つめてみた結果、悲しいことに、単純にPythonのコーディング力が足りていないことが分かりました。具体的には、以下のようなスキルです。
- かんたんな処理を、あたまで考えて1から書ける
- Pythonの基本的な文法は手で覚えている(list,dict,for,if,try-except,map,リスト内包表記)
- 単純に、Pythonを毎日書くという習慣
これはどうにかしないとKaggleを楽しめない、といろいろ試行錯誤した結果、「AtCoder」をやるのが良いのでは、という結論に達しました。
Kaggleを離れてAtCoderをやってみた
AtCoderとは、競技プログラミングのコンテストを運営しているサイトです。
競技プログラミングとは、「プログラミングを使って、パズル的な問題を制限時間内に出来るだけ多く解くスポーツ」のことです。
上記と同じような悩みのある方は、とりあえず、こちらの記事を読んで、「過去問精選10問」を解いてみることを、激しくオススメします。
Kaggleでは、Notebook上のコードが分からずうんうん唸っていた時とは比べ物にならないほど、コードを書くことが楽しいなと思えてくるはずです。以下、具体的なメリットを書いていきます。
【AtCoderをやるメリット➀】Pythonの基本的な文法をマスターできる
AtCoderでは、プログラミング言語の基本的な文法・関数をつかって、問題文に沿ったアルゴリズムをなるべく速く正確にコーディングすることが求められます。なので、どんどん問題を解いていくと、必然的に文法は手になじむように書けてくるようになります。具体的には、Kaggleでも見かける、以下のようなことは気づいたらサラサラと書けるようになります。
- データ型(int,float,str)
- if文
- for文(多重ループも)
- while文
- break,continue,else
- list,tuple,dictionary,set
- 多重list(多次元配列)
- リスト内包表記
- map関数、lambda関数、enumerate関数
※Pandasまわりは身につかないので、別途キャッチアップする必要あり。個人的には、データサイエンティスト協会の出している100本ノックがおすすめ。
【AtCoderをやるメリット②】自己肯定感が高まる
Kaggleは長期戦です。コンペ期間は2~3か月ほどで、最終結果が出るまでは時間がかかります。また、コンペを戦い切ったとしても、メダル対象が上位10%以上となるため、なかなか初心者が「やったー!」と喜べる瞬間が少ないのが現状です(学びは深いです)
一方で、AtCoderは1つのコンテストは100分ほどと超短期戦です。開催タイミングが土日なのが少し難点ですが、サクッとコンテストに出ることができ、かつ自分のレベルがレーティングというかたちで可視化されるので、実力や成長がすぐに実感できます。ご参考までに、以下が私のレーティング推移なのですが、右肩上がりとなっていて、見ていてとても気持ちよいです。笑
コンテストの詳細や参加方法は、先ほどもご紹介した記事に分かりやすく書いてあるので、参考にしてみてください。
【AtCoderをやるメリット③】コードを書いている実感が持てて、楽しい!
AtCoderでは、問題に対してそれを解決するコードを、ゼロから自分のあたまで考えてコーディングします。自分がこれなら問題に答えられる、と考えて書いたコードがうまく動いて正解(AC)だったときの嬉しさは、正直Kaggleをやっていたときには味わえなかった感覚でした。
私がKaggle初心者で、Notebookを読んで写経して少しチューニングすることで手いっぱい、またコーディング経験もあまり多くない状態だったこともありますが、「ゼロから自分のあたまで考えたコード」がうまく動くことは、とても楽しい体験です。
さいごに
こんなかたちで、昨年10月からの約1年間、Kaggleを離れてAtCoderでコーディング力をこつこつ磨いてきて、ようやく目標とする「緑ランク(Rating:800~)」に到達しそうな状況です。「緑ランク」になった暁には、Kaggleにあらためて戻って、またKaggleライフを楽しみたいなと思っています。
最後になりましたが、Kaggle初心者の皆さん、AtCoderもいいぞ…!
※レーティングランクについての参考記事
AtCoder(競技プログラミング)の色・ランクと実力評価、問題例
余談(緑色になりました!)
2020/12/19のコンテストで、目標としていた緑色(Rate:800〜)になりました!
2021年はKaggleに戻って、Competition Expertを目標に引き続きがんばりたいです^ ^