【Pandasデータ探索】describe()でDataFrameの各列をサクッと要約統計量で把握!📊
データ分析の最初のステップとして、データセット全体の概要を素早く掴むことは非常に重要です。数値データがどのような範囲に分布しているか、中心傾向はどこにあるか、バラつきはどのくらいか、といった情報を手軽に知りたいですよね。
Pandasの**describe()メソッドは、DataFrameの各列(特に数値データ)に対して、平均、標準偏差、最小値、最大値、四分位数といった主要な要約統計量**をまとめて表示してくれる非常に便利なツールです。これにより、データの特徴や潜在的な問題(外れ値、欠損値の傾向など)を素早く発見できます。この記事では、describe()の基本的な使い方から、カテゴリデータへの適用、そして知っておくと便利な応用例まで、短いサンプルコードと丁寧な解説を交えてご紹介します。
describe()メソッドとは?なぜデータ探索に役立つのか?
describe()メソッドは、DataFrameまたはSeriesに対して呼び出すことで、そのデータセットの統計的な概要をまとめたDataFrameを返します。
describe()がデータ探索に役立つ理由は以下の通りです。
-
素早い概要把握: 数値データの分布、中心傾向、散らばり具合を一度に確認できます。
-
データ品質チェック: 最小値や最大値を見ることで、入力ミスや異常な値(外れ値)がないかを発見する手がかりになります。
-
欠損値の傾向:
count(非欠損値の数)を見ることで、欠損値の多い列を特定できます。 -
データ型の確認: デフォルトでは数値データのみが対象ですが、オプションで他のデータ型も含めることで、データ型に応じた要約を確認できます。
describe()メソッドの基本的な使い方
describe()メソッドは、DataFrameまたはSeriesの後に.describe()とつけるだけで利用できます。
DataFrameの数値列の要約統計量を取得
デフォルトでは、DataFrame内の数値型(int、floatなど)の列に対して要約統計量を算出します。
import pandas as pd
import numpy as np
# サンプルDataFrameの作成
df = pd.DataFrame({
'売上': [100, 150, 120, 80, 200, np.nan, 130],
'顧客数': [10, 15, 12, 8, 20, 13, 11],
'商品カテゴリ': ['A', 'B', 'A', 'C', 'B', 'A', 'C']
})
print("オリジナルDataFrame:\n", df)
# DataFrameの要約統計量を取得
summary_stats = df.describe()
print("\nDataFrameの要約統計量:\n", summary_stats)
解説:
df.describe()を実行すると、以下のような統計量が計算されます。
-
count: 非欠損値の数。 -
mean: 平均値。 -
std: 標準偏差(データのばらつき度合い)。 -
min: 最小値。 -
25%: 第1四分位数(25パーセンタイル値)。データを小さい方から並べたときに25%の位置にある値。 -
50%: 第2四分位数(50パーセンタイル値、中央値)。データを小さい方から並べたときに中央に位置する値。 -
75%: 第3四分位数(75パーセンタイル値)。データを小さい方から並べたときに75%の位置にある値。 -
max: 最大値。
例えば、'売上'列のcountが6.0であることから、1つの欠損値(NaN)があることがわかります。
Seriesの要約統計量を取得
Seriesに対しても同様にdescribe()を適用できます。
# '顧客数' Seriesの要約統計量
customer_summary = df['顧客数'].describe()
print("\n'顧客数' Seriesの要約統計量:\n", customer_summary)
describe()の応用的な使い方
describe()は、数値データだけでなく、カテゴリデータや文字列データに対しても適用できます。
カテゴリデータ(object型、category型)を含める: include='object' または include='all'
文字列やカテゴリ型の列の要約統計量を見たい場合は、include引数を指定します。
# カテゴリデータを含めた要約統計量
# object型(文字列)の列も対象になる
summary_obj = df.describe(include='object')
print("\n文字列列を含めた要約統計量:\n", summary_obj)
# 全ての型の列を含めた要約統計量
summary_all = df.describe(include='all')
print("\n全ての型の列を含めた要約統計量:\n", summary_all)
解説:
-
include='object': Pythonのobject型(主に文字列)の列を対象とします。-
count: 非欠損値の数。 -
unique: ユニークな値の数。 -
top: 最も頻繁に出現する値(最頻値)。 -
freq:topの値の出現頻度。
-
-
include='all': DataFrame内の全ての型の列を対象とします。数値列には数値の統計量が、非数値列には非数値の統計量が表示され、該当しない統計量にはNaNが表示されます。
特定のデータ型のみを含める・除外する: include, exclude引数
特定のデータ型だけを対象にしたり、除外したりすることもできます。
# float型のみを対象にする
summary_float = df.describe(include=[np.float64])
print("\nfloat型のみの要約統計量:\n", summary_float)
# 数値型を除外する (文字列など)
summary_exclude_num = df.describe(exclude=[np.number])
print("\n数値型を除外した要約統計量:\n", summary_exclude_num)
解説:
includeやexcludeには、NumPyのデータ型(例: np.float64, np.int64, np.numberなど)や、文字列(’object’, ‘category’)のリストを指定できます。
describe()の注意点と活用ヒント
-
欠損値の扱い:
count以外の統計量(mean,stdなど)は、デフォルトで欠損値(NaN)を無視して計算されます。欠損値の有無やその割合はcountの値を確認することで把握できます。 -
データの型:
describe()はデータの型に応じて表示する統計量が自動的に変わります。意図しない結果が出る場合は、列のデータ型(df.dtypesで確認)が適切かを確認しましょう。 -
可視化との組み合わせ:
describe()で得られた統計量を元に、ヒストグラムや箱ひげ図などのグラフを作成することで、データの分布をより深く理解できます。 -
外れ値の検出:
min、max、そして四分位数(25%,50%,75%)の値を比較することで、データに極端な外れ値がないか、分布が歪んでいないかといった仮説を立てるのに役立ちます。
まとめ
Pandasのdescribe()メソッドは、DataFrameやSeriesの各列に対して主要な要約統計量を一括で表示してくれる、データ探索の強力なスターターツールです。数値データの平均、標準偏差、四分位数、そしてカテゴリデータのユニーク数、最頻値などを瞬時に把握することで、データセットの全体像を素早く掴み、潜在的な課題や興味深いパターンを発見する手助けになります。includeやexclude引数を活用して、分析目的に応じた適切な要約を取得し、効率的なデータ分析の第一歩を踏み出しましょう!


