1. データを「整理して傾向をつかむ」
データを抽出・加工したら、いよいよ傾向を読み取る段階です。そのための基本操作が3つあります。
- 並び替え(
sort_values)… 大きい順・小さい順に整列して、上位・下位を見る - 頻度カウント(
value_counts)… 「どの値が何件あるか」を数える - 統計集計(
mean・sumなど)… 平均・合計などで全体をつかむ
これらを使うと、「最も血圧が高い患者は誰か」「どの診断名が多いか」「平均値はいくつか」といった 分析の問いに、すぐ答えられるようになります。
2. 並び替え(sort_values)
df.sort_values("列名") で、指定した列を基準にデータを並べ替えられます。
デフォルトは昇順(小さい順)、ascending=False を付けると降順(大きい順)になります。
💡 上位・下位を見るときの定番:
「血圧が高い順に並べて上位3人を見たい」なら、df.sort_values("SBP", ascending=False).head(3) のように
並び替え+headを組み合わせます。
ランキング作成や「要注意の患者を上に表示」といった用途で頻繁に使います。
3. 頻度カウント(value_counts)
df["列"].value_counts() は、その列に「どの値が何件あるか」を数えて、
多い順に並べてくれます。診断名・性別・カテゴリなどの集計に最適です。
🩺 医療データ文脈:
value_counts() は「どの診断名が多いか」「どの病棟に患者が集中しているか」といった
カテゴリの分布を一瞬で把握できます。
normalize=True を付ければ件数ではなく割合(%)で見られるので、
「全体の何割が高血圧か」といった分析にも使えます。
4. 統計集計(mean・sum など)
レッスン1でも触れましたが、列に対する統計集計はデータ分析の基本です。 1列だけでなく、複数列をまとめて集計することもできます。
| メソッド | 意味 |
|---|---|
mean() | 平均 |
sum() | 合計 |
count() | 件数(欠損を除く) |
max() / min() | 最大 / 最小 |
median() | 中央値 |
💡 複数列の一括集計:
df[["SBP", "BMI"]].mean() のように複数列を選んで .mean() を付けると、
各列の平均がまとめて返ります。describe() ほど詳しくなくていいけれど、
特定の列の平均だけ素早く知りたい、というときに便利です。
次のレッスンでは、これを「グループごと」に集計する groupby を学びます。
5. 練習問題
BMIの高い順に並べ替えよう
下記の df を、BMIの高い順(降順)に並べ替えて表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"氏名": ["田中", "佐藤", "鈴木", "高橋"],
"BMI": [22.5, 28.1, 24.0, 30.5],
})
# BMIの高い順(降順)に並べ替えて表示してください
print(df.sort_values("BMI", ascending=False))
# 高橋(30.5) → 佐藤(28.1) → 鈴木(24.0) → 田中(22.5)
sort_values("BMI", ascending=False) で降順(大きい順)に並びます。高橋(30.5)が先頭、田中(22.5)が最後になります。ascending=False を省くと昇順(小さい順)になります。
診断名の頻度を数えよう
下記の df の 診断名 列について、value_counts で各診断名の件数を表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"患者ID": ["P001","P002","P003","P004","P005","P006","P007"],
"診断名": ["高血圧","糖尿病","高血圧","健常","高血圧","糖尿病","健常"],
})
# 診断名の頻度(件数)を表示してください
print(df["診断名"].value_counts())
# 高血圧=3, 糖尿病=2, 健常=2
value_counts() は各値の件数を多い順に表示します。高血圧が3件で最多、糖尿病と健常が各2件です。カテゴリの分布を把握する基本メソッドです。
複数列の平均を求めよう
下記の df の SBPとDBPの平均を、まとめて表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"SBP": [120, 145, 118, 138, 160],
"DBP": [80, 92, 76, 88, 98],
})
# SBPとDBPの平均をまとめて表示してください
print(df[["SBP", "DBP"]].mean())
# SBP=136.2, DBP=86.8
df[["SBP", "DBP"]].mean() で、選んだ複数列の平均がまとめて返ります。SBPの平均は136.2、DBPの平均は86.8です。df.mean() と書けば全数値列の平均が一度に出ます。
6. まとめ
このレッスンのポイント
sort_values("列", ascending=False):列を基準に並べ替え(降順)- 並び替え+
head()で上位ランキングを作れる value_counts():カテゴリの出現頻度を多い順に数える(normalize=Trueで割合)- 列の統計:
mean・sum・count・max/min・median df[["列A","列B"]].mean()で複数列をまとめて集計
自由に試してみましょう:
完了するとコース一覧に進捗が記録されます