Python環境を起動中... 初回のみ数秒かかります
Lesson 9 / 12

並び替え・集計・頻度

このレッスンで学ぶこと

  • sort_values でデータを並べ替えられる(昇順・降順)
  • value_counts でカテゴリの出現頻度を数えられる
  • 列の統計(mean・sum・count など)を求められる
  • 複数列をまとめて集計できる

1. データを「整理して傾向をつかむ」

データを抽出・加工したら、いよいよ傾向を読み取る段階です。そのための基本操作が3つあります。

これらを使うと、「最も血圧が高い患者は誰か」「どの診断名が多いか」「平均値はいくつか」といった 分析の問いに、すぐ答えられるようになります。

2. 並び替え(sort_values)

df.sort_values("列名") で、指定した列を基準にデータを並べ替えられます。 デフォルトは昇順(小さい順)ascending=False を付けると降順(大きい順)になります。

sample_1.py
Ctrl+Enter
出力

💡 上位・下位を見るときの定番: 「血圧が高い順に並べて上位3人を見たい」なら、df.sort_values("SBP", ascending=False).head(3) のように 並び替え+headを組み合わせます。 ランキング作成や「要注意の患者を上に表示」といった用途で頻繁に使います。

3. 頻度カウント(value_counts)

df["列"].value_counts() は、その列に「どの値が何件あるか」を数えて、 多い順に並べてくれます。診断名・性別・カテゴリなどの集計に最適です。

sample_2.py
Ctrl+Enter
出力

🩺 医療データ文脈: value_counts() は「どの診断名が多いか」「どの病棟に患者が集中しているか」といった カテゴリの分布を一瞬で把握できます。 normalize=True を付ければ件数ではなく割合(%)で見られるので、 「全体の何割が高血圧か」といった分析にも使えます。

4. 統計集計(mean・sum など)

レッスン1でも触れましたが、列に対する統計集計はデータ分析の基本です。 1列だけでなく、複数列をまとめて集計することもできます。

メソッド意味
mean()平均
sum()合計
count()件数(欠損を除く)
max() / min()最大 / 最小
median()中央値
sample_3.py
Ctrl+Enter
出力

💡 複数列の一括集計: df[["SBP", "BMI"]].mean() のように複数列を選んで .mean() を付けると、 各列の平均がまとめて返ります。describe() ほど詳しくなくていいけれど、 特定の列の平均だけ素早く知りたい、というときに便利です。 次のレッスンでは、これを「グループごと」に集計する groupby を学びます。

5. 練習問題

問題 1

BMIの高い順に並べ替えよう

下記の df を、BMIの高い順(降順)に並べ替えて表示してください。

exercise_1.py
出力
ヒントを見る(答え+解説)
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 を省くと昇順(小さい順)になります。

問題 2

診断名の頻度を数えよう

下記の df診断名 列について、value_counts各診断名の件数を表示してください。

exercise_2.py
出力
ヒントを見る(答え+解説)
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件です。カテゴリの分布を把握する基本メソッドです。

問題 3

複数列の平均を求めよう

下記の dfSBPとDBPの平均を、まとめて表示してください。

exercise_3.py
出力
ヒントを見る(答え+解説)
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で割合)
  • 列の統計:meansumcountmax/minmedian
  • df[["列A","列B"]].mean() で複数列をまとめて集計

自由に試してみましょう:

free_practice.py
出力

完了するとコース一覧に進捗が記録されます