Kaggle初心者のつまずきポイントの解決法

（初稿投稿日 2020/12/29）Kaggleをやっていて、ちょっとつまずいたけど 分かってみたら便利な小技等をメモしていきます。初心者のお役に立てれば幸いです。対処療法的なものもあるので、他により良い手段をご存知でしたらコメント頂けると嬉しいです。

【フォント装飾について】　厳密ではありませんが、おおよそ
<font color="Sky Blue">**Home（青太字）**</font>：ページ
**Edit（黒太字）**：ボタンコマンド
<font color="Red">**Script（赤太字）**</font>：ボタンorメニューの奥にあるコマンド
*File（斜体）*：メニューコマンド
を表しています
***

## 古いバージョンのCodeを編集する
- Codeを開き（**Edit**ボタンを押す前に）、右サイドにある**Version ○ of ○** をクリックしてバージョン選択画面に切り替えます。右サイドにある使いたいバージョンの三点リーダー **･･･** から、<font color="Red">**Pin as default version**</font>を選びます。ブラウザをリロードして、目的のバージョンになっていることを確認します。<font color="Sky Blue">**ページ**</font>右上**Edit**ボタンの右にある三点リーダー **･･･** をクリックすると出てくるドロップダウンメニューから<font color="Red">**Copy & edit notebook**</font>を選ぶと、Fork（コピー）出来ます。（⇔単に**Edit**ボタンを押すと最新バージョンの編集になってしまう）<br>（アップデート　2021/12/16）

- 他のユーザーが作ったCodeをForkする際にも、上記の方法が使えます。最初は普通に**Copy and Edit**ボタンを使えばいいですが、2回目以降は**Edit My Copy**に変わってしまいます。自分が行った変更を踏襲せずに オリジナルから編集したい場合は、**Edit My Copy**ボタンの右にある三点リーダー **･･･** から<font color="Red">**Copy and Edit Code**</font>を選びます。<br>（追記　2021/12/16）

## 検索・置換
- Code内の文字列の検索や置換をする場合は、Ctrlボタンを押しながらｆを押すと、検索ボックスが出てきます。▷を押せば、置換のためのフィールドも出てきます。（なぜメニューに入っていないんだろう？）
（追記　2022/6/20）

## 間違って削除してしまったセルを復活させる
- Escキーを押してコマンドモードに入り、ｚを押すと復活できます。
- [その他のショートカットはこちら](https://www.kaggle.com/code/jonathonbatson/musings-of-a-keyboard-warrior/notebook)
（追記　2022/6/20）

## データファイルのアップロード法
- 他ユーザーの公開Codeを**Copy and Edit**して実行する際、ファイルが見当たらないというエラーが出ることがあります（単純なコピペSubmissionを防ぐため等の理由）。サイドバー一番上Data内の **+ Add Data** で該当ファイルを検索＆追加するか、自作して<font color="Sky Blue">**Datasets**</font>にアップロードしなければいけません。

- ローカルで自作したものや他サイトからダウンロードしたファイルは<font color="Sky Blue">**Data**</font>右上の **+ New Datasets** からアップロードできます。Codeのアウトプットデータを使う場合には、**Save and Run(Commit)** 済のCodeを開いて（**Edit**ボタンは押さずに）、右サイドにある*Output*をクリック。左下にある **+ New Datasets** からアップロードできます。

- Dataset名の単語区切りにアンダーバーが使えますが、Code内から呼び出すときにはハイフンに切り替わるので注意が必要です。アンダーバーでなく半角スペースでもハイフンになるので、そちらの方が簡便かと思います。（例：my_first_dataset → my-first-dataset）
（追記　2022/6/20）

- DatasetsのMetadataを見れば、どのCodeから出力したデータかは分かりますが、バージョンまでは分かりません。Dataset名にバージョン番号を入れておくと、後でActivityタブから確認することが出来ます。

## 提出方法の種類
- コンペによってモデルの提出方法が異なります。コンペ <font color="Sky Blue">**Overview**</font>の <font color="Sky Blue">**Code Requirements**</font>に'This is a Code Competition'と記載があれば、testデータを読み込んで処理するコードを書き、そこからアウトプットされるsubmission.csv等を提出（<font color="Red">**Submit**</font>）する必要があります。（コード無しでsubmission.csvだけを提出した場合は、Submission Scoring Errorになります。）<br>このsubmission.csvは数個のみのデータであることが多く、残りは不可視になっていて 提出後にKaggle側でコードが自動処理されます。なので、<font color="Sky Blue">**Public Leaderboard**</font>にスコアが出るまで時間がかかります。この処理に9時間以上かかってしまうと、時間超過エラーになってしまうので、Codeの修正が必要です。

- コンペの期限は上記の「Kaggle側でのコード自動処理の終了（＝スコア表示）」を意味します。つまり期限前までに<font color="Red">**Submit**</font>できたとしても、その後の自動処理中に期限を超えてしまうとエラーが出てしまい、無効になってしまいます。私は一度やらかしましたが、皆さんは計画的に提出して下さい。
（追記　2022/9/16）

- 一方Code Competitionでない場合は、submission.csvさえ作れてしまえば、それをはじき出したコードの提出義務はありません。ですから（推奨できませんが）他の参加者が公開しているsubmission.csvをそのままコピペ提出することも可能です。またアンサンブルが比較的容易なので、他者制作のsubmission.csv同士や自作のものを組み合わせて提出するのは、多くの参加者がやっていると思われます。処理済みのsubmission.csvからスコアを計算するだけなので、<font color="Red">**Submit**</font>後かなり早くスコアが出ます。

- どちらにしても、期限前までに<font color="Sky Blue">**Public Leaderboard**</font>に載っている成績は Testデータの一部から計算された仮のもので、実際の成績はTestデータの残りから計算され、コンペ終了後<font color="Sky Blue">**Private Leaderboard**</font>として発表されます。
- 他にも課題データを使って書いた図・グラフ・文章が主催者によって評価されるコンペなど色々な種類があるので、<font color="Sky Blue">**Overview**</font>をよく読んで 何が求められているコンペなのかを知るのは基本ですが大事です。
（追記　2021/9/10）

## 優秀なモデルを見つける
- Leaderboardで金メダル圏内のCodeはコンペ期間中に公開されることはまずありませんが、コンペ終了後、<font color="Sky Blue">**Discussion**</font>に1st place solutionなどとして公開されます。過去の優秀モデルをまとめたCodeは→　[Winning solutions of kaggle competitions](https://www.kaggle.com/sudalairajkumar/winning-solutions-of-kaggle-competitions)

- [paperswithcode](https://paperswithcode.com/methods) というサイトには、課題データセットごとにSOTA（現時点での最良）モデルが記載されているので、コンペに合ったモデルを探すのに便利です。

## Codeの初回保存
- Codeの保存 **Save Version**には、コードを全て実行したあとアウトプットも含めて保存する**Save and Run(Commit)**（デフォルト）と、コード内容だけ保存する<font color="Red">**Quick Save**</font>があります。Code作成直後の初回保存には<font color="Red">**Quick Save**</font>がオススメ。その理由は、初回の **Save & Run All(Commit)** で実行時にエラーが出ると、Codeが行方不明になることがあるから。（Code名検索しても、<font color="Sky Blue">**Code**</font>→**Your Work**の一覧にも出てこなくなります。そのくせ 同名で別Codeを保存しようとすると、「その名前は使われております」エラーが出るので、存在だけはしているようで 厄介。）

- Codeを閉じる前であれば、<font color="Red">**Quick Save**</font>し直せば、Codeを発見できます。ページを閉じてしまった場合は、ブラウザに履歴が残っていれば、そこから復帰できることもあります。
（追記　2021/2/22 ＆ 3/9）

## GPU/TPUを効率的に使う
- GPU/TPUはそれぞれ週約30時間しか使えないので貴重。GPU/TPUを使わないコードの場合は、必ず使わない設定（右サイドバー内SettingsのAcceleratorを<font color="Red">**None**</font>）にします。

- ~~<font color="Red">**GPU/TPU**</font>を使う設定にしている場合、実行(run)しなくても 開いてコードを書いているだけでGPU/TPU使用時間（Quota）は減ってしまいます。都度 実行確認せず 保存 **Save & Run All(Commit)** によって実行確認する場合は、編集開始時に<font color="Sky Blue">**ページ**</font>左下の**View Active Events**で今開かれているCodeを確認し、Interactive Session（編集＆実行確認セッション）を<font color="Red">**Stop/Dismiss**</font>して切ってしまえば、使用時間を減らすこと無く編集できます。~~（2021/5/11現在、Codeを実行、または設定をGPU/TPUに切り替えるまでは使用時間が減らないように改善されたようです）。

- デバッグしながら編集する場合、編集時はGPU/TPUを使わない設定にして、実行時だけ<font color="Red">**GPU/TPU**</font>を使う設定に切り替えます。編集が終わり Codeを**Save & Run All(Commit)**した後は、必ずInteractive Sessionを<font color="Red">**Stop/Dismiss**</font>します。でないと、編集中のCode（Interactive Session with GPU/TPU）とCommit中のCode（Version XX with GPU/TPU）がダブルカウントされてQuotaが減っていくので、後で気づくと鬱になります。

- 万全を期すなら、<font color="Sky Blue">**ページ**</font>右上の自分アイコンから<font color="Red">**Account**</font>へ行き、Quota欄のGPU/TPU使用時間が予想以上に減っていないかリロードして確認します。
（追記　2021/2/22 ＆ 3/9 ＆ 12/16）

## セルの複数選択
　Jupyter Codeと同様にセルは複数選択が可能。開始セルを選択した後、Shiftキーを押しながら 終了セルの番号部分（例　**[10]:**）をクリックすると複数選択できます（選択範囲を示す色がかなり薄いので注意）。Code内のある範囲のみを実行したい場合などに有効。*Edit*→<font color="Red">**Move Cell Up/Down**</font>と併用すると、セルをまとめて ずらすことが出来ます。

## Codeのコピペ
　普段Codeを書くときにはJupyter Notebookライクな'Notebook'を使っている人が多い気がしますが、Code全体など複数のセルにまたがるコピペには不向きです。その場合は、*File→Editor Type*で<font color="Red">**Script**</font>に切り替え、Shiftを押しながら画面を右クリックすると「**すべて選択**」ができるので、全体をコピペできます。
（追記　2021/9/10）

## スペルチェックの方法
- Code にはスペルチェックがない（ので公開Codeにもスペルミスが多いです[^1]）。スペルチェックができるエディターに（上記のコピペ法を使って）内容を移し、スペルチェック後に戻します。~~この後、*File→Editor Type*で<font color="Red">**Script**</font>から<font color="Red">**Code**</font>へ戻すと、セル内が空欄で表示されてしまう。右上の**＞｜Toggle Sidebar Visibility**でサイドバーを開いたり閉じたりすると、表示が回復します。~~　←この不具合は修正されたようです。

- ~~[Grammarly](https://app.grammarly.com/)をインストールすると、<font color="Sky Blue">**Discussion**</font>などにコメントを書く際にもスペルチェックできるので便利。~~　←<font color="Sky Blue">**Code**</font>のコメント欄や<font color="Sky Blue">**Discussion**</font>にはスペルチェック機能が搭載されました。これでスペルミスも減るはず。
（追記　2021/9/10）

## 公開Codeの 一部のセルを隠す
　~~Code各セルをアクティブにすると、右上に5つの編集ボタンがポップアップする。このうち一番右にある**Show Menu（縦3点リーダー）**から<font color="Red">**Hide Input**</font>を選ぶと、~~（2021/5/11現在、セル内を右クリック→<font color="Red">**Hide Cell in Viewer**</font>というコマンドに変わったようです）Codeを公開した際に **Code**というボタンのみを表示し 内容を隠すことができます。あまり重要でないセルを非表示にすることで、きちんと見せたいセルのみが表示された 冗長でないCodeに出来ます。<font color="Red">**Hide Output Cell in Viewer**</font>は出力を隠せます。
（**Collapse Cell**は、Private Codeでは非表示に出来るが、公開Code上は見えてしまうので、自分用と思われます。）


[^1]: 公開Codeへのコメント等でスペルミスを指摘するものが マイナス評価を食らっているのを目にしているので、「Typoは指摘するな」という文化がある？）
<br>
最後まで お読み頂きありがとうございました。コメント/LGTM等頂けると、更新意欲が増します。