コンテンツにスキップ

第6回 CSVを読み込む・整形・記述統計

11/5・11/6

この回の問い

なぜ人間に読みやすい表は、機械に読ませられないのか

今日の段取り

3限(13:00〜14:40)

時刻 時間 内容
13:00 0-5 回収状況の共有+今日使うAIの案内
13:05 5-12 研究へのご協力のお願い(説明と書類を配ります)
13:12 12-24 きれいなデータとは何か。汚い表を読み込ませて、失敗を見る
13:24 24-32 Colabを開く/CSVを読み込む
13:32 32-48 自分のデータを読み込んで整形する
13:48 48-56 基本統計量を出す(件数・平均・中央値・標準偏差)
13:56 56-64 同じ調査をもう一度やったら、同じ数字が出ると思いますか
14:04 64-74 卒業:3通りの方法で同じ数字が出るか確かめる
14:14 74-77 課題の説明
14:17 77-80 配った書類の記入(参加しない人も、封をして出してください)
14:20 80-100 ふりかえりテスト(成績には入りません。終わったらその場で解説します)

今日使うAI

授業の冒頭で案内します。上の「今日のリンク」にあなたのクラスの欄があれば、そのリンクのアシスタントを使ってください。 無ければ、いつもどおり Copilot を使ってください。

どちらの回でも、教員・TA・ほかの学生に相談してかまいません。禁止するものは何もありません。

第4回の「各自の2枚」がまだの人へ

課題4の各自の提出(日本語のグラフの画面/renshu.csv を読み込めた画面)は、班の代表では代えられません。1人ずつ出します。 まだ出していない人は、今日この授業で出す画面をそのまま撮って、課題4に出してください。1点足します。

つまずきやすいのは、この3つ

この3つは、TAが先に同じ課題を解いて、実際に詰まったところです。先に知っておけば、ここで時間を使わずに済みます。

① CSVをどこに置くか

Colabの左端のフォルダのアイコン(📁)をクリックすると、枠が開きます。そこにCSVをドラッグするだけです。

開いた最初の場所に置いてください。別のフォルダを開いてしまうと、どこに置いたか分からなくなります。 置けるとファイル名が一覧に出ます。pd.read_csv("ファイル名.csv") に書く名前は、その一覧の名前と1文字もちがわないようにします。

置いたファイルは、しばらく経つと消えます

Colabはつなぎ直すと、置いたファイルが消えます。壊れたのではありません。もう一度ドラッグすれば戻ります。 消えて困るものを、ここに置いたままにしないでください。

② 列名に改行が入っている

フォームの設問文が長いと、CSVの列名に改行がそのまま入ります。 見た目は「睡眠時間」でも、本当の列名は 睡眠時間\n(半角数字で) だったりします。だから

mydf["睡眠時間"]      # → KeyError で止まる

まず、列名を全部出して見る。

print(mydf.columns.tolist())

'睡眠時間\n(半角数字で)' のように \n が見えたら、それが改行です。1行で消せます。

mydf.columns = mydf.columns.str.replace("\n", "", regex=False).str.strip()

列名を見ないまま列を指定するのが、いちばん多い詰まり方である。 エラーが出たら、まず columns を出す。これはAIに聞く前にできます。

③ 文字が化けても、壊れてはいない

Colabで読み込むぶんには化けません。化けるのは、同じCSVをExcelで開いたときです(第5回で話したとおり、GoogleのCSVはUTF-8です)。

CSVをExcelで保存し直した場合だけ、読み込みに1つ足します。

mydf = pd.read_csv("ファイル名.csv", encoding="utf-8-sig")

やること

  • きれいなデータ(1行1件・1列1変数・結合しない・色で意味を持たせない・単位を混ぜない)
  • 汚い表を読み込ませて、失敗を見る
  • CSVを読み込む(コードはAIに書かせてよい。ただし読んで、何をしているか説明できること)
  • 欠測値と外れ値/基本統計量を出す
  • 同じ調査をもう一度やったら、同じ数字が出る?(少ない人数で平均を出すと、毎回ちがう数字が出ることを見ます)
  • 同じ数字が3通りの方法で出るか確かめる
  • 授業末20分:ふりかえりテスト(成績には入りません。終わったらその場で解説します)

新しいデータを受け取ったら、計算の前に最小値と最大値を見る

今日のデータには、体重が −999g の霊長類が入っています。-999 は「測定していない」という符号です。 これを見落とすだけで平均が34%ずれます。しかもエラーは出ません。グラフも描けます。

describe() を見て、ありえない値(負の体重、300%の割合)がないかを確かめる。これだけで多くの事故が防げる。

課題

  • 課題6 ノートブック+基本統計量+「元データのどこが汚かったか」(8点)
  • 提出期限:次回授業の開始まで(遅れた場合は50%)

提出するのは、このノートブック(コードと出力が残った状態)です。 含めるもの:

  1. 自分のデータを読み込んだセルと、その出力
  2. describe() の出力(最小値と最大値を確認した証拠)
  3. 基本統計量(件数・平均・中央値・標準偏差)
  4. 元データのどこが汚かったかの記録(1つ以上。なければ「なかった」と書いて理由を添える)
  5. 3通りの集計が一致したか。ずれた場合は、その原因

データファイルそのものは、提出だけにしてください

回答者の情報が含まれます。GitHubのリポジトリには上げないでください。 提出先(Moodle)は、教員とあなたしか見られません。

回収がゼロだった人も、今日の課題はできます

クラス共通アンケートのデータを使ってください(第5回に全員が答えたものです)。 自分の調査が集まらなかったことで、ここから先の演習ができなくなることはありません。

次回までにやること

手入力はしない。うまく読めなかった列があれば、原因をメモしておく。自分のデータは何件集まったかを確認しておく(次回以降、「その件数で何が言えるか」を考えます)

困ったら

操作方法で困ったときは、まずAIに聞いてください。それでも解決しないときは、TAか教員に声をかけてください。 「どこまでできて、どこで止まったか」を言えると、答えが早く返ってきます。

ただし、調査してよい内容か・個人情報をどう扱うか・公開してよいかは、教員に確認してください。 実際の回答データや個人が分かる情報を、教員の確認なくAIに入力しないでください。


もっと知りたい人へ:教科書『はじめて学ぶ 数理・データサイエンス・AI』第6章 データの要約/第10章-04 外れ値(対応表)