2022年5月15日日曜日

【pandas】value_countによる出現頻度の算出

 データ分析用ライブラリpandasの1次元のデータ構造Seriesと2次元のデータ構造Dataframeについて、要素の出現回数を算出するにはvalue_countを用いる。

 ライブラリpandasを使うにはインポートが必要。通常次のようにpdと略されてインポートされる。

import pandas as pd



1. value_countによるSeriesの並べ替え

 Series.value_count()の書式は以下の通り。

Series.value_counts(normalize=False, 
                    sort=True, 
                    ascending=False, 
                    bins=None, 
                    dropna=True)

引数 意味
normalize 頻度を正規化(合計1に)するか。デフォルトはFalse
sort 頻度順に並べるか。デフォルトはTrue
ascending 昇順に並べるか。デフォルトはFalse
bins 区画幅の指定。デフォルトはFalse
dropna NaNを含めない。デフォルトはTrue


 引数を指定しない場合。各要素が頻度の多い順に並べられ出現回数がカウントされる。ser.value_counts()Series型。

import pandas as pd

ser = pd.Series([7, 5, 8, 2, 4, 7, 8, 8, 2, 2, 3, 8])
print(ser.value_counts())

 実行結果

8    4
2    3
7    2
5    1
4    1
3    1
dtype: int64


 normalize=Trueの場合。頻度が正規化される。

import pandas as pd

ser = pd.Series([7, 5, 8, 2, 4, 7, 8, 8, 2, 2, 3, 8])
print(ser.value_counts(normalize=True))

 実行結果

8    0.333333
2    0.250000
7    0.166667
5    0.083333
4    0.083333
3    0.083333
dtype: float64


 sort=Falseの場合。出現回数順にソートされない。

import pandas as pd

ser = pd.Series([7, 5, 8, 2, 4, 7, 8, 8, 2, 2, 3, 8])
print(ser.value_counts(sort=False))

 実行結果

7    2
5    1
8    4
2    3
4    1
3    1
dtype: int64


 ascending=Trueの場合。頻度の昇順(少ない順)に並べられる。

import pandas as pd

ser = pd.Series([7, 5, 8, 2, 4, 7, 8, 8, 2, 2, 3, 8])
print(ser.value_counts(ascending=True))

 実行結果

5    1
4    1
3    1
7    2
2    3
8    4
dtype: int64


 binsを指定する場合。要素が数字の場合に指定した区間数にグループ化され、グループ毎の出現回数が求まる。
bins=3を指定する例。3区間に分けられる。

import pandas as pd

ser = pd.Series([7, 5, 8, 2, 4, 7, 8, 8, 2, 2, 3, 8])
print(ser.value_counts(bins=3))

 実行結果

(6.0, 8.0]      6
(1.993, 4.0]    5
(4.0, 6.0]      1
dtype: int64


2. value_countによるDataframeの並べ替え

 Dataframeで要素の出現回数を求める場合もvalue_countsを用いる。

Dataframe.value_count()の書式は以下の通り。

Dataframe.value_counts(subset=None,
                       normalize=False, 
                       sort=True, 
                       ascending=False, 
                       dropna=True)

引数 意味
subset カウントするColumnsの指定。デフォルトはNone
normalize 頻度を正規化(合計1に)するか。デフォルトはFalse
sort 頻度順に並べるか。デフォルトはTrue
ascending 昇順に並べるか。デフォルトはFalse
dropna NaNを含めない。デフォルトはTrue


 引数を指定しない場合。2つのColumnsの組み合わせの出現回数が求められる。

df = pd.DataFrame(
    data = [['赤', '野菜'], 
            ['緑', '野菜'],
            ['赤', '果物'],
            ['黄', '果物'],
            ['緑', '野菜']],
    columns = ['色', '種類'],
    index = ['トマト', 'きゅうり', 'イチゴ', 'バナナ', 'キャベツ']
    )

print(df.value_counts())

 実行結果

色  種類
緑  野菜    2
赤  果物    1
   野菜    1
黄  果物    1
dtype: int64


 Columnsを指定する場合。指定した列の要素の出現回数が求まる。

df = pd.DataFrame(
    data = [['赤', '野菜'], 
            ['緑', '野菜'],
            ['赤', '果物'],
            ['黄', '果物'],
            ['緑', '野菜']],
    columns = ['色', '種類'],
    index = ['トマト', 'きゅうり', 'イチゴ', 'バナナ', 'キャベツ']
    )

print(df.value_counts(subset='種類'))

 実行結果

種類
野菜    3
果物    2
dtype: int64


3. リファレンス

pandas > pandas.Series.value_counts
pandas > pandas.DataFrame.value_counts

使用したバージョン:Python 3.8.12/pandas 1.4.0

0 件のコメント:

コメントを投稿