【Kaggle挫折しそうな方向け】AtCoderのススメ



# はじめに

この記事は、[Kaggle Advent Calendar 2020](https://qiita.com/advent-calendar/2020/kaggle)のアドベントカレンダー９日目の記事です。

Kaggle楽しそうだけど、コーディングが難しくて挫折しそうな方向けに、１つのTipsをご紹介するポエムです（あらかじめご了承ください）

# Kaggleがうまく楽しめない・・・
突然ですが、Kaggle楽しんでいますか？

私も昨年Kaggleを知って、プログラミング未経験ながらPythonも覚えて１～２つコンペに参加して、Kaggle楽しいなあと思いながら、頑張って続けていました。昨年のKaggle Advent Calendarでは、[こんな記事](https://qiita.com/rinascimento741/items/2d27ea4b917065110a98)も書いて、Kaggleやろうぜ！と息巻いていたり。

ゼロからsubmit出来なくても、世界中のデータサイエンティストたちが公開しているNotebookを見れば、分かりやすくソリューションやアイディアが公開されているところがKaggleの素晴らしいところ。それらを読んで写経していくことでメキメキと力がつく、そう信じながら取り組んでいました。

が、しかし。
vote数の多いBeginner向けNotebookの写経に取り組んでいたのですが、いろいろと問題があることが分かりました。

- Beginner向けの割にコードが難しい（class、defの多用）
- EDAまでは着いていけるが、モデリング部分でコードの難度UP（入り組んだfor文、dictなど）
- コード量の長いものが多く、理解しながら読んでいるだけで日が暮れる
- 何より、自分で考えてコードを書いていないので、成長実感が持てない…


# 単純にコーディング力が足りない、という現実
上記の問題をあらためて見つめてみた結果、悲しいことに、単純にPythonのコーディング力が足りていないことが分かりました。具体的には、以下のようなスキルです。

- かんたんな処理を、あたまで考えて１から書ける
- Pythonの基本的な文法は手で覚えている（list,dict,for,if,try-except,map,リスト内包表記）
- 単純に、Pythonを毎日書くという習慣

これはどうにかしないとKaggleを楽しめない、といろいろ試行錯誤した結果、「AtCoder」をやるのが良いのでは、という結論に達しました。

# Kaggleを離れてAtCoderをやってみた
AtCoderとは、競技プログラミングのコンテストを運営しているサイトです。
競技プログラミングとは、「プログラミングを使って、パズル的な問題を制限時間内に出来るだけ多く解くスポーツ」のことです。

![ds.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327398/635c667a-dd2e-6788-4990-5276d4389cbd.png)

上記と同じような悩みのある方は、とりあえず、[こちらの記事](https://qiita.com/drken/items/fd4e5e3630d0f5859067)を読んで、「過去問精選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か月ほどで、最終結果が出るまでは時間がかかります。また、コンペを戦い切ったとしても、メダル対象が上位１０％以上となるため、なかなか初心者が「やったー！」と喜べる瞬間が少ないのが現状です（学びは深いです）

一方で、AtCoderは１つのコンテストは100分ほどと超短期戦です。開催タイミングが土日なのが少し難点ですが、サクッとコンテストに出ることができ、かつ自分のレベルがレーティングというかたちで可視化されるので、実力や成長がすぐに実感できます。ご参考までに、以下が私のレーティング推移なのですが、右肩上がりとなっていて、見ていてとても気持ちよいです。笑

![FireShot Capture 118 - rinascimento - AtCoder - atcoder.jp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327398/f679db25-9548-8e28-8ab6-bdc301f821e4.png)

コンテストの詳細や参加方法は、[先ほどもご紹介した記事](https://qiita.com/drken/items/fd4e5e3630d0f5859067)に分かりやすく書いてあるので、参考にしてみてください。

# 【AtCoderをやるメリット③】コードを書いている実感が持てて、楽しい！
AtCoderでは、問題に対してそれを解決するコードを、ゼロから自分のあたまで考えてコーディングします。自分がこれなら問題に答えられる、と考えて書いたコードがうまく動いて正解（AC）だったときの嬉しさは、正直Kaggleをやっていたときには味わえなかった感覚でした。

私がKaggle初心者で、Notebookを読んで写経して少しチューニングすることで手いっぱい、またコーディング経験もあまり多くない状態だったこともありますが、「ゼロから自分のあたまで考えたコード」がうまく動くことは、とても楽しい体験です。

# さいごに

こんなかたちで、昨年10月からの約1年間、Kaggleを離れてAtCoderでコーディング力をこつこつ磨いてきて、ようやく目標とする「緑ランク（Rating：800～）」に到達しそうな状況です。「緑ランク」になった暁には、Kaggleにあらためて戻って、またKaggleライフを楽しみたいなと思っています。

最後になりましたが、Kaggle初心者の皆さん、AtCoderもいいぞ…！


※レーティングランクについての参考記事
[AtCoder（競技プログラミング）の色・ランクと実力評価、問題例](http://chokudai.hatenablog.com/entry/2019/02/11/155904)


# 余談（緑色になりました！）
2020/12/19のコンテストで、目標としていた緑色（Rate:800〜）になりました！
2021年はKaggleに戻って、Competition Expertを目標に引き続きがんばりたいです^ ^

![FireShot Capture 269 - rinascimento - AtCoder - atcoder.jp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327398/3918b327-175e-cae6-de58-6daf60254f8c.png)