【Pandas】value_counts()でデータの頻度を調べる

Pandas
この記事は約7分で読めます。

こんにちは、JS2IIUです。

データ分析では、各値の出現頻度を把握することが重要です。Pandasでは、value_counts()メソッドを使用して簡単に頻度を調べることができます。本記事では、DataFrameを使ったvalue_counts()の使い方や、割合を計算するための便利なオプションについて解説します。

1. value_counts()の基本的な使い方

DataFrameの特定のカラムについて、value_counts()を使用して頻度を計算する方法を見てみましょう。

サンプルコード

Python
import pandas as pd

# サンプルデータの作成
data = pd.DataFrame({
    'Fruit': ['apple', 'banana', 'apple', 'orange', 'banana', 'apple'],
    'Color': ['red', 'yellow', 'red', 'orange', 'yellow', 'green']
})

# 'Fruit'列の出現頻度を計算
fruit_frequency = data['Fruit'].value_counts()

print(fruit_frequency)

実行結果

Plaintext
apple     3
banana    2
orange    1
Name: Fruit, dtype: int64

解説

  • data['Fruit']で特定のカラムを選択し、その上でvalue_counts()を適用しています。
  • この例では、appleが3回、bananaが2回、orangeが1回出現していることが分かります。

2. 割合を確認する: normalizeパラメータ

頻度だけでなく、データ全体に占める割合を知りたい場合は、normalize=Trueオプションを使用します。

サンプルコード

Python
# 'Fruit'列の割合を計算
fruit_proportions = data['Fruit'].value_counts(normalize=True)

print(fruit_proportions)

実行結果

Plaintext
apple     0.500000
banana    0.333333
orange    0.166667
Name: Fruit, dtype: float64

解説

  • normalize=Trueを指定すると、各値の割合が計算されます。
  • appleは全体の50%、bananaは約33%、orangeは約17%を占めています。

3. 複数カラムでの頻度分析

複数カラムの値の組み合わせに基づいて頻度を調べたい場合は、groupbyを組み合わせて使用します。

サンプルコード

Python
# 'Fruit'と'Color'の組み合わせごとの頻度を計算
combined_frequency = data.groupby(['Fruit', 'Color']).size()

print(combined_frequency)

実行結果

Plaintext
Fruit   Color 
apple   green      1
        red        2
banana  yellow     2
orange  orange     1
dtype: int64

解説

  • groupby(['Fruit', 'Color']).size()を使うと、複数カラムの値の組み合わせごとの頻度を取得できます。
  • この結果から、例えばappleredで2回、greenで1回出現していることが分かります。

4. 欠損値の取り扱い

欠損値(NaN)を含むデータで頻度を計算する方法も確認します。

サンプルコード

Python
import pandas as pd
import numpy as np

# 欠損値を含むデータを作成
data_with_nan = pd.DataFrame({
    'Fruit': ['apple', 'banana', np.nan, 'apple', 'orange', np.nan, 'banana', 'apple'],
    'Color': ['red', 'yellow', np.nan, 'green', 'orange', np.nan, 'yellow', 'red']
})

# 欠損値を含めた頻度を計算
fruit_frequency_with_nan = data_with_nan['Fruit'].value_counts(dropna=False)

print(fruit_frequency_with_nan)

実行結果

Plaintext
apple     3
banana    2
NaN       2
orange    1
Name: Fruit, dtype: int64

解説

  • 意図的にNaNを入れ込むためにnp.nanを使用しています。
  • dropna=Falseを指定すると、欠損値もカウントされます。
  • この例では、欠損値(NaN)が2回出現していることが分かります。

5. value_counts()の結果をDataFrameに変換

頻度データをさらに操作しやすくするために、結果をDataFrameに変換することも可能です。

サンプルコード

Python
# 'Fruit'列の頻度をDataFrameに変換
fruit_frequency_df = data['Fruit'].value_counts().reset_index()
fruit_frequency_df.columns = ['Value', 'Frequency']

print(fruit_frequency_df)

実行結果

Plaintext
    Value  Frequency
0   apple          3
1  banana          2
2  orange          1

解説

  • reset_index()を使用して、SeriesをDataFrameに変換しました。
  • 列名をValue(値)とFrequency(頻度)に変更しています。

まとめ

value_counts()は、データの頻度や割合を手軽に計算できる非常に便利なメソッドです。特定のカラムのデータ分析や、複数カラムの組み合わせによる頻度解析、欠損値を含む頻度分析など、多様な用途に対応できます。normalizedropnaオプションを駆使して、データの傾向を詳細に把握しましょう。

参考リンク

今回も少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。

「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございます。73

コメント

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