見出し画像

【東大GCI 第4回】1時間40分の死闘!全角スペースとカッコの罠を抜け、Pandasの魔法の数字を出すまで【2026 Summer】

病院でのポリクリ(臨床実習)と、2歳になったばかりの娘のイヤイヤ期にバタバタな毎日ですが、スキマ時間を縫ってGCI第4回にも必死に食らいついています!

今回のテーマは「Pandas(パンダス)」。前回学んだNumPyに続き、データサイエンスには欠かせない「データ加工」のメインツールです。

結論から言うと、今回はコードの意味を理解するのと、思わぬエラーの連続でめちゃくちゃ苦戦しました……!未来の自分への備忘録として、今日完成させたコードと、魔法の呪文の解読結果を残しておきます。

📊 最終的なコード(学生データ版)

今回は「学生データ」を使って、「勉強時間でグループ分けしたあと、特定条件の学生だけ取り出して、平均値を計算する」という実務っぽい処理を書きました。(※実際の課題データではなく、置き換えた例え話です!)
完成したコードがこちら。

def analyze_student_data(csv_path, n):
   df = pd.read_csv(csv_path)
   df['group'] = pd.qcut(df['study_hours'], n)
   df_filtered = df[df['attendance'] == 80]
   result = (
       df_filtered
       .groupby('group', observed=False)['score']
       .mean()
       .min()
   )
   return result

これだけ見ると完全に「呪文」なのですが、やっていることは実は以下の5ステップだけ。具体的にデータがどう変化しているのか、数字で整理してみました。

📝 呪文の解読(5ステップの処理の流れ)

① データを読み込む (read_csv)

CSVファイルを「Python版のExcel」として開きます。最初はこんな表です。

意味:
* study_hours = 勉強時間
* attendance = 出席率
* score = テスト点数

② 勉強時間でグループ分け (qcut):★ここが一番の罠!

一番理解に時間がかかった関数です。最初は「1〜10時間のデータを、1〜3時間、4〜7時間のように『値の幅』で区切る」と思っていました。
でも実際は、**「各グループの人数が均等になるように区切る」**のが正解でした。
例えば [1, 2, 3, 4, 5, 6, 7, 8] という勉強時間のデータを4つに分ける時……
• ❌ 勘違い(値で切る):1~2、3~5、6~8
• ⭕ 正解(人数で切る):[1, 2]、[3, 4]、[5, 6]、[7, 8]

③ 出席率80%だけ抽出 (df[...])

全体のデータから、出席率(attendance)が「80」の学生だけを型抜きして残します。SQLのWHERE句のようなイメージですね。

④ グループごとに点数の平均を計算 (groupby.mean)

②で作った「勉強時間グループ」ごとに、テストの平均点を出します。

⑤ 最小値を取得 (min)

最後に、出揃った平均点の一覧(例:75, 68, 82)の中から、一番小さい値(68)をポロッと取り出して終了です。

😱 私を絶望させた4つのエラーたち

処理の流れは分かったのに、いざコードを打つととにかくエラーの連続でした。プログラミング初心者あるある(?)のリアルな失敗談です。

• 全角スペースの悪魔(SyntaxError: U+3000)

コードの中に潜んでいた「全角スペース」のせいで真っ赤なエラーに。iPadでポチポチ打っていると、うっかり全角のまま空白を入れてしまうんですよね。「エラーが出たらまず全角を疑う!」 これ鉄則です。

• 住所間違いエラー(FileNotFoundError)

データが入っているGoogleドライブのパス(住所)をコピペしたはずなのにエラー。よく見たら、パスの一部が前の期(2024 Winter)のままになっていました。コピペミスには要注意。

• 表を関数扱いしないでエラー(TypeError: not callable)

これに一番悩まされました。列を選ぶ時は 角カッコ [ ] なのに、間違えて 丸カッコ ( ) を使って df(df['attendance'] == 80) と書いてしまったせいで、「表(データ)を関数みたいに動かそうとしないで!」と怒られました。

• セルの再生ボタン押し忘れ事件

「上のセルでコードを直したのに、一番下の実行結果が全然直らない!?」と思ったら、修正したセルの再生ボタン(▶)を押し忘れていただけでした……。パソコンはちゃんとボタンを押して記憶を上書きしてあげないとダメですね(笑)。

🎉 おわりに

エラーと格闘すること数十分。
角カッコを直し、全角スペースを消し、順番に再生ボタンを押した結果……画面の一番下に魔法の数字がポロッと出てきた瞬間は、思わずガッツポーズしてしまいました!
何を打ってるかさっぱり分からない状態から、一歩ずつエラーを潰して最後に正解に辿り着く。これぞプログラミングの醍醐味です。
この調子で、いよいよ発表された第1回コンペも楽しんで頑張ります!

※本noteは個人の学びの記録(日記)であり、講義資料の転載や、課題の解答コードそのものを公開するものではありません。処理内容は一般的な例(学生データ)に置き換えて記述しています。

いいなと思ったら応援しよう!