PythonのPandasライブラリには、データ分析に便利な関数がたくさんありますが、その中でも value_counts()
は「カテゴリデータの集計」にとてもよく使われる強力な関数です。
ここでは基礎から応用まで体系的に解説します。
基本的な役割
Series.value_counts()
はユニークな値の出現回数をカウントする関数です。
例えば、次のように使います。
import pandas as pd
data = pd.Series(["apple", "banana", "apple", "orange", "banana", "apple"])
print(data.value_counts())
それぞれの要素が何回登場したかをカウントしてくれます。
デフォルトでは降順(出現回数が多い順)に並びます。
主な引数とオプション
normalize
出現回数ではなく割合(相対度数)を返すオプションです。
data.value_counts(normalize=True)
sort
デフォルトは True
で出現回数順にソートされます。
sort=False
にすると出現順(ユニーク値の順番)のままになります。
data.value_counts(sort=False)
ascending
昇順に並べたい場合は ascending=True
。
data.value_counts(ascending=True)
bins
数値データを階級に分けてカウントします(ヒストグラムのような機能)。
num_data = pd.Series([1, 2, 2, 3, 4, 5, 6, 7, 8, 9])
print(num_data.value_counts(bins=3))
dropna
デフォルトは True
で欠損値(NaN)は無視されます。
dropna=False
にすると欠損値もカウント対象になります。
data_with_nan = pd.Series(["apple", "banana", None, "apple"])
print(data_with_nan.value_counts(dropna=False))
DataFrameでの利用
value_counts()
はSeries専用関数ですが、DataFrameにも使えるようになりました(Pandas 1.1以降)。
df = pd.DataFrame({
"fruit": ["apple", "banana", "apple", "orange"],
"color": ["red", "yellow", "red", "orange"]
})
print(df.value_counts())
複数列の組み合わせが一意のキーになってカウントされます。
実務でよく使う活用例
頻出カテゴリの確認
顧客データやアンケート集計で「人気商品」や「回答の多い選択肢」を確認する。
df["fruit"].value_counts().head(3) # 上位3カテゴリ
比率ベースでの可視化
マーケティング分析では割合が重要。
割合を棒グラフにして可視化すると便利です。
import matplotlib.pyplot as plt
df["fruit"].value_counts(normalize=True).plot(kind="bar")
plt.show()
データクレンジングのチェック
- 欠損値(NaN)の確認
- 外れ値や予想外のカテゴリを検出
df["fruit"].value_counts(dropna=False)
groupby
との違い
groupby().size()
との混同がよくあります。違いは次の通りです。
value_counts()
→ Series単体に対して頻度集計(シンプルで速い)groupby().size()
→ DataFrame全体に対して集計(柔軟性が高い)
df.groupby("fruit").size()
出力は df["fruit"].value_counts()
と同じになりますが、groupby
は複数列で集計できるので用途によって使い分けます。
まとめ
value_counts()
は Seriesの値の出現頻度をカウントする関数normalize
で割合、bins
で数値の階級化、dropna
で欠損値も扱える- DataFrameにも使える(複数列の組み合わせをカウント)
- 頻度分析・比率可視化・データクレンジングに非常に有用
以上、PythonのPandasのvalue_counts関数についてでした。
最後までお読みいただき、ありがとうございました。