【第5回】【初心者向け】Pandasのinfo()・describe()でデータ構造と統計量をやさしく理解する方法

Pythonでデータ分析を行う際には、データの全体像をつかむことが非常に重要です。その際は、Pandasライブラリのinfo()describe()メソッドを活用しましょう。データフレームの構造や基本統計量を把握する方法を、具体例を用いて初心者向けにわかりやすく解説します。

使用するデータ

以下のような辞書形式のデータをDataFrameに変換して使います。

import pandas as pd

data = {
    "名前": ["太郎", "花子", "次郎", "美香", "健一", "恵子", "翔", "茜", "隆", "葵"],
    "年齢": [23, 29, 35, 42, 18, 33, 27, 24, 31, 30],
    "職業": ["エンジニア", "デザイナー", "教師", "医師", "学生", "看護師", "プログラマー", "販売員", "弁護士", "研究者"],
    "年収(円)": [4500000, 5500000, 4900000, 7300000, 0, 4000000, 6000000, 3200000, 8000000, 5800000],
    "居住地": ["東京", "大阪", "名古屋", "札幌", "福岡", "東京", "神戸", "仙台", "横浜", "千葉"],
    "勤続年数": [2, 4, 10, 15, 1, 5, 3, 1, 12, 8]
}

df = pd.DataFrame(data)

DataFrameの出力結果:

df
名前 年齢 職業 年収(円) 居住地 勤続年数
0 太郎 23 エンジニア 4500000 東京 2
1 花子 29 デザイナー 5500000 大阪 4
2 次郎 35 教師 4900000 名古屋 10
3 美香 42 医師 7300000 札幌 15
4 健一 18 学生 0 福岡 1
5 恵子 33 看護師 4000000 東京 5
6 27 プログラマー 6000000 神戸 3
7 24 販売員 3200000 仙台 1
8 31 弁護士 8000000 横浜 12
9 30 研究者 5800000 千葉 8

info()でデータ構造を確認

df.info()

この結果をもとに、①各列の型(int, object)、②欠損値の有無(non-null)、③行数・列数を確認します。ここから読み取れる内容は以下のとおりです。

  1. データ構造
    ・行数:10(10entries,インデックスは0から9)
    ・列数:  6(total 6 columns)
  2. 各列のデータ型(Dtype)
    ・名前(object型):文字列(例:太郎)
    ・年齢(int64型)  :整数  (例:25)
    ・職業(object型):文字列(例:エンジニア)
    ・年収(円)(int64型):整数(例:500万円)
    ・居住地(object型):文字列(東京)
    ・勤続年数(int64型):整数(5年)
  3. 欠損値(NaN)
    各列に10 non-null(全てのデータが埋まっている)と表示されているため、欠損値はありません。
  4. メモリ使用量
    メモリ使用量は612.0バイトなので、小規模なデータセットです。

補足:int64は64ビット整数型、objectは文字列や混合型(数値や文字列の混合)を指します。non-nullは「欠損値がない」ことを意味します。

▶️ infoの公式ドキュメントも参考にしてください:
pandas DataFrame info Documentation

describe()で統計量を確認

df.describe()
年齢 年収(円) 勤続年数
count 10 10 10
mean 29.2 4920000 6.1
std 6.49 2170619.12 4.76
min 18 0 1
25% 24 4000000 2.25
50% 29.5 5200000 4.5
75% 33.25 6000000 9.25
max 42 8000000 15

describe()で得られる代表的な統計指標の意味は以下のとおりです。

  • count: 欠損値以外のデータ数
  • mean: 平均値
  • std: 標準偏差(データのばらつき)
  • min: 最小値
  • 25%: 第1四分位数
  • 50%: 中央値(第2四分位数)
  • 75%: 第3四分位数
  • max: 最大値

補足情報:include=”all” オプション

describe()はデフォルトで数値データのみ出力されますが、include='all'でカテゴリデータも含めた統計が出力されます。

df.describe(include='all')
名前 年齢 職業 年収(円) 居住地 勤続年数
count 10 10.0 10 10.0 10 10.0
unique 10 NaN 10 NaN 9 NaN
top 太郎 NaN エンジニア NaN 東京 NaN
freq 1 NaN 1 NaN 2 NaN
mean NaN 29.2 NaN 4920000 NaN 6.1
std NaN 6.76 NaN 2251321 NaN 4.91
min NaN 18 NaN 0 NaN 1
25% NaN 24.75 NaN 4125000 NaN 2.25
50% NaN 29.5 NaN 5200000 NaN 4.5
75% NaN 32.5 NaN 5950000 NaN 9.5
max NaN 42 NaN 8000000 NaN 15

カテゴリデータ(include=’all’)の補足

  • unique: 異なる値の数
  • top: 最も頻出する値(最頻値)
  • freq: 最頻値の出現回数
  • NaN: 「Not a Number(数値でない)」の略で、カテゴリデータには該当する統計量(平均や標準偏差など)がないことを示します。

補足:例えば、居住地「東京」は2回出現しているため freq=2 になります。同率最頻値(tie)が複数ある場合でも、1つだけが表示されます。

注:カテゴリデータとは、単なる文字列ではなく、決まったグループに分類できるものをいいます。例えば、「都道府県」なら「東京」「大阪」「名古屋」等、「職業」なら「エンジニア」「教師」等です。

筆者の体験談:失敗から学んだ教訓

私が初めてPandasを使ったとき、df.describe()だけを実行して「データは問題なさそうだ」と判断していました。しかし実際にはカテゴリーデータに欠損があり、モデルの学習に大きな支障が出たことがあります。

この失敗をきっかけに、まずdf.info()で欠損の有無を確認し、df.describe(include='all')を併用する習慣が身につきました。

失敗から得た教訓: 数値だけでは見えない情報がある。構造と統計を両方見ることが重要!

▶️ describeの公式ドキュメントも参考にしてください:
pandas DataFrame describe Documentation

まとめ

  • info()で各列の型・欠損・件数を把握
  • describe()で数値データの傾向を確認
  • include=’all’ でカテゴリカルデータも統計化可能
  • NaN = 数値でないため統計値が存在しない

統計量の用語まとめ

統計量 数値型 カテゴリ型
count 非欠損の件数 非欠損の件数
mean 平均
std 標準偏差
min/max 最小・最大
25%/50%/75% 四分位数
unique 異なる値の数
top 最頻値
freq 最頻値の出現数

次回はデータの行・列をラベル指定して抽出する方法locを解説していきます!

▲ ページトップへ戻る

コメント

タイトルとURLをコピーしました