こんにちは、JS2IIUです。
データ分析では、各値の出現頻度を把握することが重要です。Pandasでは、value_counts()メソッドを使用して簡単に頻度を調べることができます。本記事では、DataFrameを使ったvalue_counts()の使い方や、割合を計算するための便利なオプションについて解説します。
1. value_counts()の基本的な使い方
DataFrameの特定のカラムについて、value_counts()を使用して頻度を計算する方法を見てみましょう。
サンプルコード
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)実行結果
apple 3
banana 2
orange 1
Name: Fruit, dtype: int64解説
data['Fruit']で特定のカラムを選択し、その上でvalue_counts()を適用しています。- この例では、
appleが3回、bananaが2回、orangeが1回出現していることが分かります。
2. 割合を確認する: normalizeパラメータ
頻度だけでなく、データ全体に占める割合を知りたい場合は、normalize=Trueオプションを使用します。
サンプルコード
# 'Fruit'列の割合を計算
fruit_proportions = data['Fruit'].value_counts(normalize=True)
print(fruit_proportions)実行結果
apple 0.500000
banana 0.333333
orange 0.166667
Name: Fruit, dtype: float64解説
normalize=Trueを指定すると、各値の割合が計算されます。appleは全体の50%、bananaは約33%、orangeは約17%を占めています。
3. 複数カラムでの頻度分析
複数カラムの値の組み合わせに基づいて頻度を調べたい場合は、groupbyを組み合わせて使用します。
サンプルコード
# 'Fruit'と'Color'の組み合わせごとの頻度を計算
combined_frequency = data.groupby(['Fruit', 'Color']).size()
print(combined_frequency)実行結果
Fruit Color
apple green 1
red 2
banana yellow 2
orange orange 1
dtype: int64解説
groupby(['Fruit', 'Color']).size()を使うと、複数カラムの値の組み合わせごとの頻度を取得できます。- この結果から、例えば
appleがredで2回、greenで1回出現していることが分かります。
4. 欠損値の取り扱い
欠損値(NaN)を含むデータで頻度を計算する方法も確認します。
サンプルコード
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)
実行結果
apple 3
banana 2
NaN 2
orange 1
Name: Fruit, dtype: int64解説
- 意図的に
NaNを入れ込むためにnp.nanを使用しています。 dropna=Falseを指定すると、欠損値もカウントされます。- この例では、欠損値(
NaN)が2回出現していることが分かります。
5. value_counts()の結果をDataFrameに変換
頻度データをさらに操作しやすくするために、結果をDataFrameに変換することも可能です。
サンプルコード
# 'Fruit'列の頻度をDataFrameに変換
fruit_frequency_df = data['Fruit'].value_counts().reset_index()
fruit_frequency_df.columns = ['Value', 'Frequency']
print(fruit_frequency_df)実行結果
Value Frequency
0 apple 3
1 banana 2
2 orange 1解説
reset_index()を使用して、SeriesをDataFrameに変換しました。- 列名を
Value(値)とFrequency(頻度)に変更しています。
まとめ
value_counts()は、データの頻度や割合を手軽に計算できる非常に便利なメソッドです。特定のカラムのデータ分析や、複数カラムの組み合わせによる頻度解析、欠損値を含む頻度分析など、多様な用途に対応できます。normalizeやdropnaオプションを駆使して、データの傾向を詳細に把握しましょう。
参考リンク
今回も少しだけPRです。
Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。
「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。
最後まで読んでいただきありがとうございます。73

