統計学Ⅰ(B) 北星学園大学 小野原 彩香
ここまで電卓・グラフ用紙でやってきた人、お疲れさま。
第2・3回の代表値・ばらつきを、今日は自分のコードで。 やるのは空欄 ____ を埋めるだけ。
____
満点24名(49%)/平均57.0点
今回から「今日のColabで確認した数値を最低1つ引用する」を実際に適用
仮に生の体重の歪度が正の値であれば、右に長い裾を持つ分布だと分かる
ノートには +7.60 と出ている。なのに仮定の話にしてしまった。
「生の体重の歪度は+7.60だった」―― これだけで通過する。
もう1つ惜しい例:「妊娠期間の歪度がほぼ0なのに正規分布ではなかった」 指摘は今回いちばん鋭い。−0.06 と書けばよかっただけ。
生のスケールの体重の歪みは 7.254 であった
7.254 という数字は、ノートのどこにもない。
df["体重g"].mode() → 992.4 ―― 意味のある最頻値かどうかは、画面には出てこない。
df["体重g"].mode()
992.4
計算は機械に、判断は人間に。 今日の課題B1は、ここを聞いている。
エラーメッセージ=「ここが違うよ」というお知らせ
KeyError: '列名'
SyntaxError
落ち着いて読めば、原因はたいてい書いてある。
df = pd.read_csv(URL) # 表を読み込む df.shape # (種数, 列数) df.head() # 先頭5行
行 = 1つの種 列 = 体重・妊娠期間などの項目
df["体重g"].mean() # 平均 → 5880.9 df["体重g"].median() # 中央値 → 3006.0 df["体重g"].mode() # 最頻値 → 992.4 ← ? df["一腹産子数"].mode() # 最頻値 → 1.01 ← ? df["科"].mode() # 最頻値 → オナガザル科
電卓で出した値と同じ。違いは速さと正確さだけ。
.mode() = データに最も多く記録されている値
.mode()
中央値3,006 gから離れていること自体は誤りではない(歪んだ分布では普通) 最多でも、分布の山や典型的な体重を表すとはかぎらない → ヒストグラムも見る
第3回の偏差値159と同じ ―― 計算が通ることと、その数字をどう読めるかは別
子の数なのに小数。この列は種ごとに整理・調整された代表値だから (この表では1.01が74種。「1.01頭生まれる」ではない)
数えているのは種であって、出産ではない
df["科"].mode() # → オナガザル科 df["科"].value_counts() # → オナガザル科 132種
=「この表にいちばん多く入っている科」と、そのまま解釈できる
df["妊娠期間日"].std() # SD → 37.8(日) df["妊娠期間日"].var() # 分散 → 1427.2(日²) df["体重g"].describe() # 一気に要約 df.groupby("科")["体重g"].mean() # 科別平均 df.isna().sum() # 欠損の確認 plt.hist(df["体重g"].dropna()) # グラフ1行
手計算なら数十分 → 一瞬
分散の単位は2乗(日²)。.std() / .var() の分母は既定で n−1
.std()
.var()
df["列名"]
.mean() .median() .mode()
.std() .var()
.describe()
df.groupby("列")["列"].mean()
df.isna().sum()