あしたは混むだろうか
レンタサイクルのお店は、毎朝何台の自転車を外に出すかを決めなければなりません。少なすぎるとお客さんは歩いて帰ってしまい、多すぎると自転車が雨にぬれたままになります。1年分の記録は、読み方さえわかれば、勘よりもよい答えをくれます。
このレッスンが終わると
メモ
pandas を使って、データの表を読み込み、まとめることができる。
キーワード
- データセット:ひとつのことについての記録の集まり。
- CSV ファイル:1行に1件、値をカンマで区切って文字で保存した表。
- DataFrame:pandas の表。列に名前がある。
- 平均:合計を個数で割ったもの。
- ノートブック:コードと結果と文章を並べ、セルごとに実行するページ。
- モデル:データから導いた、値を予測するきまり。
はじめに:もう知っていること
メモ
頭の中で答えてください。1. 表の1行には何が入っていますか。2. 2、4、6 の平均はどう求めますか。3. Python の print は何をしますか。この3つはどれもこのレッスンで使います。答え: 1件の記録。足して3で割るので4。値を画面に表示する。
始める前に
メモ
レッスンの上のバーにある ラボを開始 を押し、動いていると表示されるまで待ちます。コンテナはひとつ、jupyter だけで、ターミナルからは docker exec jupyter でその中の Python を使います。これはコンテナの中でコマンドをひとつ実行する命令です。JupyterLab のリンクを押すと、ポート 8888 の画面が開きます。下の 実行 ボタンは、それぞれのコマンドをラボのターミナルに、同じセッションの中で順番に入力します。様子を見たいときや自分で入力したいときは、バーの ターミナルを開く(新しいタブ) を押します。
データの仕事は、データとコードの入ったフォルダーから
ls は作業フォルダーの中身を一覧にします。データの hires.csv(貸し出しの記録)、ノートブックの start.ipynb、そして steps フォルダーがあります。cat は最初のスクリプトを表示します。Python 4行だけで、pandas を読み込み、ファイルを読み、大きさと最初の数行を表示します。
docker exec jupyter lsここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
docker exec jupyter cat steps/load.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
pandas は CSV ファイルを DataFrame に読み込む
pd.read_csv はファイル全体を hires という DataFrame に読み込みます。答えは (365, 7) で始まります。1日1行で365行、列は7つです。そのあとに最初の5行が続きます。1行目は2025年1月1日、くもりの水曜日で気温は0.9度、貸し出しは137台です。
docker exec jupyter python3 steps/load.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
要約は列全体を表す
describe は1つの列を8つの数でまとめます。hires 列の平均は1日270.3台、いちばん少ない日は41台、いちばん多い日は487台です。2つ目のスクリプトは groupby で天気ごとに行を分け、グループごとの平均を出します。sunny(晴れ)312.2、cloudy(くもり)267.0、rainy(雨)227.6 です。
docker exec jupyter python3 steps/summary.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
docker exec jupyter python3 steps/weather.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
確認
ヒント
groupby はどの列で行を分けましたか。また、貸し出しがいちばん多かったのはどの天気ですか。答え: weather 列。晴れの日で、平均は312.2台。
図にすると、表では見えない傾向が見える
Matplotlib はグラフを描く道具です。このスクリプトは1日を1つの点にして、横に気温、縦に貸し出し台数をとった図を描き、hires.png として保存します。JupyterLab のファイル一覧から開いてみましょう。点は左下から右上へ上がっていきます。暖かい日ほど混むということです。
docker exec jupyter python3 steps/picture.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
モデルは傾向をきまりに変える
scikit-learn で 線形回帰 を当てはめます。気温と雨の量から貸し出し台数を出す、直線のきまりです。答えによると、気温が1度上がると約11.2台増え、雨が1ミリ増えると約8.2台減ります。決定係数(R²)は0.776 なので、このきまりで日ごとの変化のおよそ4分の3が説明できます。
docker exec jupyter python3 steps/model.pyここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
よくある思い込み
注意
よく当てはまるモデルは、変化の原因を示していると思われがちです。実際には、このデータの中で値がいっしょに動くことを示しているだけです。暖かい日は混みますが、暖かい日は雨が少なく、夏は週末と重なることも多いのです。ほかに証拠がない限り、「原因」ではなく「関係がある」と言いましょう。
同じことをノートブックで
バーから JupyterLab を開き、start.ipynb をダブルクリックします。5つのスクリプトがしたことを、セルごとに行います。セルをクリックして Shift と Enter を押すと実行されます。答えはセルの下に、グラフはページの中に出ます。最後のセルは、あなた自身の問いを書く場所です。
最後の確認
ヒント
前を見ないで答えてください。1. CSV ファイルを読む pandas の関数は何ですか。2. hires.csv は何行で、なぜその数ですか。3. 行をグループに分けるメソッドは何ですか。4. よく当てはまるモデルは、変化の原因を証明しますか。答え: pd.read_csv。365行で、2025年の1日ごとに1行。groupby。いいえ、値がいっしょに動くことを示すだけ。
先生へ
ヒント
このレッスンは、ラボで進めるレッスンの小さな例です。手順と実行ボタンがレッスンで、ラボは生徒ひとりひとりのコピーです。ラボはサービスがひとつで、pandas、NumPy、Matplotlib、scikit-learn の入った JupyterLab です。自動採点はありません。生徒は hires.csv を使った自分のノートブックを JupyterLab からダウンロードして、わかったことの一文といっしょに提出します。学習のポイント:1. pandas は CSV ファイルを DataFrame に読み込む。2. describe と groupby は列をまとめる。3. グラフとモデルは傾向を示す。よくある思い込み:よく当てはまることを原因と取り違える。用意するもの:ラボとブラウザー。ヒント:実行を押す前に、それぞれの数を予想させてください。データは決まった乱数の種から作ったもので、どのコピーでも同じ数になります。ご自分のモジュールにコピーして変更するか、レッスンビルダーのラボメニューから一から作ってください。