JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

このラボは、生徒ひとりひとりに専用の JupyterLab を用意します。データサイエンスの Python ライブラリはすでに入っています。表を扱う pandas、数値の NumPy、グラフの Matplotlib、モデルの scikit-learn です。作業フォルダーには、作りものの1年分のレンタサイクルの記録(1日1行、天気つき)と、それを読み込み、まとめ、図にし、モデルにする最初のノートブックがあります。

攻撃を学ぶラボではありません。どのコピーもインターネットにもほかの生徒にもつながっていないので、何もダウンロードできず、中から誰かに届くこともありません。

生徒が学ぶこと

pandas で CSV ファイルを DataFrame にする方法と、describe と groupby で列をまとめ、グループを比べる方法です。晴れの日がいちばん貸し出しが多く、雨の日がいちばん少ないことがわかります。次に Matplotlib の散布図で暖かい日ほど混むことを見て、scikit-learn の線形回帰でその傾向をきまりに変え、決定係数(R²)でどれだけ説明できるかを確かめます。その間、データサイエンティストと同じようにノートブックでセルごとに作業します。データサイエンス、コードを使った統計、機械学習の入門に向いています。正確な表現はご自身の認定機関の単元でご確認ください。ここでは引用していません。

ブラウザーで動かす

ラボはサービスをひとつ、jupyter だけ起動します。データ、ノートブック、短いスクリプトを作業フォルダーに書き出し、数秒で使えるようになります。待機中は約 75 MB、ノートブックを動かしているときは約 235 MB で、サービスに使える 512 MB に収まります。JupyterLab はトークンを求めません。プラットフォームの入り口が、開いているのが誰かをすでに知っているからです。ラボの横のターミナルには Python がないので、docker exec jupyter のあとに中で実行するコマンドを続けて、ラボの Python を使います。

  1. コンテナーのページを開く. バーの「つくる」を開き、「コンテナーを実行」を選びます。ページは誰でも開けて、Git ラボと SQL ラボはアカウントなしで起動できます。ほかのラボには無料アカウントが必要です。アカウントを作成してサインインし、「起動」を押します。
  2. ラボを探す. 「サンプルラボ」のカードにすべてのサンプルが並んでいます。JupyterLab:pandas でデータサイエンスを探します。
  3. 「起動」を押す. 「起動」はそのまま1回の操作で実行します。「先にファイルを編集」は compose ファイルを開くので、起動する前に変更できます。
  4. 開く. ラボのページのラボバーに JupyterLab というリンクがあります。押すとブラウザーで JupyterLab が開くので、start.ipynb をダブルクリックします。次に「ターミナルを開く」を押して docker exec jupyter python3 steps/load.py と入力すると、データの大きさ(365行、7列)と最初の5行が表示されます。

生徒に提出させるもの

hires.csv を使い、自分で選んだ問いに答える自分のノートブックです。たとえば、週末にいちばん混むのはどの天気か、いちばん空いている月はいつか、曜日を加えるとモデルはよくなるか、などです。JupyterLab の File、Download でダウンロードします。そのうえで、データが何を示し、何を証明しないかを自分のことばで1、2文書きます。自動採点はありません。その文で理解しているかがわかります。より深く取り組ませるなら、答えを支えるグラフと、もっと単純なモデルとの比較を求めてください。

このラボで進める基本のレッスン

JupyterLab Basics は、このラボで進める短いレッスンです。生徒は作業フォルダーの中身を一覧にし、pandas でデータを読み込み、貸し出し台数をまとめて天気ごとに比べ、グラフを保存し、線形回帰を当てはめ、最後に同じ作業を最初のノートブックで開きます。

無料の個人アカウントでは、ホームにある Basics モジュールに入っています。どの学校もライブラリーの Basics フォルダーからコピーでき、新しい学校には最初から Data Labs (Sample) というモジュールに入っています。わざと短くしてあります。ラボで進めるレッスンがどんなものかを先生に見せるためのもので、あとはラボが引き受けます。変えたいときはご自分のモジュールにコピーしてください。

GitHub のコード

compose ファイルに Dockerfile はありません。公開されているイメージをひとつ、Jupyter Docker Stacks の scipy-notebook を、日付つきのタグに固定して、特権のない専用のアカウントとメモリー 512 MB で動かします。イメージのライセンスは BSD-3-Clause で、私たちが配布しているものではありません。データは起動時に決まった乱数の種から書き出すので、どのコピーも同じ数になり、何もダウンロードしません。限界も正直に書いておきます。データは作りもので小さく、GPU はなく、インターネットから何もインストールできず、コピーのメモリーをはるかに超えるモデルは失敗します。ラボを止めると何も残らないので、生徒は先にノートブックをダウンロードします。

課題として出す

課題には何を提出するかを書いておきます。

  1. ラボを作る. モジュールで課題を追加し、「コンテナーラボ」のカードを選んでから「GitHub リポジトリ」を選びます。https://github.com/mitsurutech/lab-jupyter-data とブランチ main を指定します。compose ファイルは既定の compose.yaml です。変更したい場合は、たとえば自分の CSV ファイルを使うときは、先にリポジトリをフォークしてください。
  2. 公開して試す. 「公開」すると、確認したコミットに固定されるので、あとでリポジトリを変更しても、すでに出したラボは変わりません。まず自分のコピーを起動してください。
  3. 配布する. ほかの課題と同じように配布します。期限を付けることもでき、課題には何をするか、何を提出するかを書いておきます。
  4. 提出物を採点する. 生徒のコピーを開いて提出された内容を確認し、採点します。足りない場合は理由を書いて差し戻します。

よくある質問

トークンやパスワードを入力しなくてよいのはなぜですか。
ラボのウェブページには、プラットフォームの入り口を通らないと届きません。入り口はあなたが誰かを知っていて、あなたとモジュールの先生だけを通します。そのため JupyterLab はトークンなしで起動しています。ほかの人が届くマシンでは、この設定で動かさないでください。
ターミナルで docker exec jupyter を使うのはなぜですか。
ラボのターミナルには curl、psql などのクライアントがありますが、Python はありません。docker exec jupyter はラボのコンテナーの中でコマンドを実行し、そこには Python とすべてのライブラリがあります。JupyterLab には File、New、Terminal から開ける専用のターミナルもあります。
生徒がパッケージを追加したり、自分のデータを使ったりできますか。
インターネットからはできません。コピーはインターネットに届かないので、ライブラリはイメージに入っているものだけです。別のデータを使うには、リポジトリをフォークし、compose ファイルが書き出す行を変えて、そのフォークをラボとして設定してください。