相手に CSV を選んでもらって中身を見せ、読み込める表と読み込めない表の境目を知る
10〜50分準備(授業前) 動かし方を 3 通りから先に一つ選ぶ(①各自の端末に入れる ②クラウドの実行環境 ③教師の 1 台で投影し、設計だけ各自が書く)。①②を選ぶ場合は pip install pandas も通るか 1 台で確かめる。読ませる CSV を 1 つ用意する(列が 3 つ、行が 20 行ほどの小さいもの)。教室コードは第1回と同じものを板書する。「教師」を押す。
投影 06 の仕分けは、答え合わせの前に「1 行目に何があるか」を全員で声に出す。08 の 2 つの表を並べて投影し、どこが違うかを指で示す。
時間配分
この回の評価(評価規準と B・A の基準は 単元設計のページ。詳しいコードは 情報学探究マニュアル 第9節)
指導要領 高等学校 情報Ⅰ (3)「コンピュータとプログラミング」ア(イ)・イ(イ)、情報Ⅱ (4)「情報システムとプログラミング」ア(ウ)。設計指針(第2版)はこの単元で F2L4(抽象階層をもつプログラムを設計/構築できる)・F4L3(テストケースに基づき不備を確認し修正できる)・J3L1(システム開発が単なるプログラム作成と違う点)・B5L4(統一された UX をグループで設計/制作)に対応する。この回はF4L3の入口で、受け取るデータの形を先に決めさせる。
前にやった回 情報Ⅱ (4) 第11回「入口と出口は約束、中身は自由」。表の列の名前と形も、その約束の一つ。情報Ⅰ (4) 第9回「この問いに合うグラフはどれか」で扱った、集める前に決めておくことにもつながる。
環境が整わない場合の進め方 この回は実機がなくても進められる。06 の仕分けと 10 の設計は端末の中だけで完結する。Streamlit はブラウザだけでは動かないので、画面は 09 の図で見せる。自分の表を持っている生徒には、1 行目を紙に書き出させるだけでも足りる。
前回入れてもらったのは、数が 1 つと文字が 1 つだった。自分で数えた記録は何十行もある表のことが多く、1 つずつ入れてもらうわけにはいかない
表をまるごと受け取るには、どうすればよいか
3 分。前回決めた「入れてもらうもの」を開かせる。表を使う題材の生徒は、ここから先が本番になる。表を使わない題材の生徒にも、第4回の図を出すところで必要になると伝える。
※ CSV(シーエスブイ)= 表を、1 行 1 件・項目をコンマで区切って並べただけの、いちばん単純な表のファイル。表計算ソフトでも分析の道具でも、そのまま開ける
読める形を見分ける
相手に選んでもらう
選んだ列を図にする
読める形と、直さないと読めない形がある

import streamlit as st
import pandas as pd
up = st.file_uploader("CSV を選ぶ", type="csv")
if up:
df = pd.read_csv(up)
st.write("行の数:", len(df))
st.dataframe(df.head())
st.file_uploader | ファイルを選んでもらう部品。type="csv" で CSV だけに絞る |
if up: | まだ選ばれていないときは中を実行しない。これを書かないと、開いた瞬間にエラーで止まる |
pd.read_csv | CSV を表(df)に変える。1 行目を列の名前として読む |
st.dataframe | 表をそのまま画面に出す。df.head() は先頭 5 行だけ |
5 分 if up: の 1 行に時間を使う。相手はまだ何も選んでいない状態でページを開く。その最初の一瞬を手当てするのが、この 1 行。第6回の「まちがった入力でも止まらないか」の、いちばん小さい形。
pandas 情報Ⅰ (4) の分析で使った考え方と同じ。列の名前で呼び出せる表になる、とだけ言えばよい。
pd.read_csv は、1 行目を列の名前として読み、2 行目から下を記録として読む。8 つの表を仕分ける。まず上で付ける印を選び、次にその印を付けるものを押す。全部に印を付けたら「答え合わせ」
進め方(9分) 一人で 4 分、迷ったものを挙げさせて 5 分。
いちばん多い形 「上に題や説明が入っている」。人が読むために付けた行が、機械には邪魔になる。人が読む表と、機械が読む表は違うという言い方でまとめる。
単位つきの列 「23.4℃」は文字として読まれるので、平均も図も出せない。単位は列の名前のほうに入れる(「気温(℃)」)。次の枚で見せる。
2 行に 1 記録 見た目を整えるために折り返した表。1 行 1 記録に戻す。情報Ⅰ (4) で扱ったデータの形と同じ話。目標 02。
| 題や説明 | 表の外に出す。どうしても残すなら、別のファイルに書く |
| 単位 | 数の隣ではなく、列の名前に入れる。「気温(℃)」「人数(人)」 |
| 1 行 1 記録 | 折り返さない。列が増えても、横に伸ばす |
| 空欄 | 読み込めはする。ただし平均や図で外れるので、あることを先に数える |
3 分。自分の表を今から作る生徒は、ここで形を決めておくと後がまったく違うと強く言う。集め終わってから直すのは手間がかかる。情報Ⅰ (4) 第9回の「集める前に決める」と同じ。
どの列を見るかは、開いた人に決めてもらう

import streamlit as st
import pandas as pd
up = st.file_uploader("CSV を選ぶ", type="csv")
if up:
df = pd.read_csv(up)
st.dataframe(df.head())
col = st.selectbox("見たい列", df.columns)
st.write(df[col].value_counts())
df.columns は、その表の列の名前が並んだもの。前回の st.selectbox に選択肢を手で書いた所に、これを渡す
選択肢を書かないので、どんな表が来ても動く。相手の表の列が 3 つでも 10 個でも、そのまま並ぶ
※ df[col] は「選ばれた名前の列」。.value_counts() は、その列に同じ値がいくつあるかを数える
6 分 前回の st.selectbox("何を買うか", ["うどん", "パン", "おにぎり"]) と並べて見せる。選択肢の中身を、こちらで決めないで済むことが値打ち。
ここが抽象化 「どんな表が来ても動く」形にすると、自分以外の人の表でも使える。情報Ⅱ (4) 第11回の「中身を知らなくても使える」と同じ考え方。設計指針 F2L4 の場面。
6 つの欄に、自分が使う表のことを一つずつ書く。書けたら右の「決めた」に印を付ける。まだ表が無い人も、06 に集める日を書けば進められる。この画面は自分の端末にだけ残る
進め方(14分) 01〜03 を書く 5 分 → 隣と交換して「その列で、返したいものが出せるか」を確かめる 4 分 → 04〜06 を書く 5 分。
よくある直し 列の名前に単位が入っていない → 04 で直させる / 1 行が何を表すか書けない → 表の形が決まっていない証拠。01 に戻す / 「まだ表がない」→ 06 に集める日を書かせる。表がなくても設計は進む。
表を使わない題材の生徒 第4回で図を出すときに要るので、身のまわりの小さな記録(自分の睡眠時間、部活のタイム)を 1 つ決めさせる。10 行でよい。
環境が無い場合 この枚はそのまま全員できる。紙で書かせてもよい。目標 03。
| 受け取る | st.file_uploader で選んでもらう。if up: で、まだ選ばれていないときを手当てする |
| 表にする | pd.read_csv。1 行目が列の名前になる。題や説明は表の外に出しておく |
| 見せる | st.dataframe。df.head() なら先頭 5 行だけ。全部出すと画面が埋まる |
| 選ばせる | st.selectbox("見たい列", df.columns)。選択肢を書かないので、どんな表でも動く |
次回は、選んだ列を図にする。どの図が合うかは、問いによって決まる
2 分。「人が読む表と、機械が読む表は違う」をもう一度言う。ここで形を決めておくと、第4回の図がそのまま出る。
if up: が最初の手当てdf.columns を渡すと、どんな表が来ても選ぶ欄になる3 つの目標それぞれに、できた/だいたい/まだ、を 1 つ選ぶ。右の帯にクラス全体の分布が出る
1 分。03 が「まだ」の生徒には、次回までに 10 行の表を 1 つ作るよう伝える。自分の睡眠時間でも、部活のタイムでもよい。
一文でよい。まだ表がない人は「いつ、何を、何行ぶん集めるか」を書く
3 分。同じ直しが多ければ、次回の冒頭で 3 分使って全体に見せる。教室コードを忘れずに板書。