PandasはPythonにおける表計算ライブラリです。Excelで列のユニークな要素数および出現回数をカウントできるように、Pandasでも同様の操作が可能です。
今回はPandasのデータでユニークな要素をカウントする方法を紹介していきます。
使用するデータ
Kaggleから、FIFA22のMLS(Major League Soccer)所属の選手データセットを使用します。
https://www.kaggle.com/drhythm/fifa-22-mls-player-ratings
import pandas as pd
df = pd.read_csv("C:/Project/FIFA 22 MLS PLAYER RATINGS.csv")
df
DataFrame全体でSeriesのユニークな要素をカウント
各列のユニークな要素の個数
DataFrameの各列のユニークな要素(値)の個数をカウントするには、nunique()を用います。それぞれのカラムの要素の個数がSeriesで返されます。
#ユニークな要素の個数
df.nunique()
>>PLAYER 624
CLUB 27
POS 15
OVR 25
PAC 60
SHO 52
PAS 45
DRI 45
DEF 56
PHY 48
type(df.nunique())
>>pandas.core.series.Series
全要素数やユニークな要素数をまとめて出す
describe()を用いれば、全体の要素数やユニークな要素数、最頻出の値などをまとめて出力することができます。
df.astype('str').describe()
countはその列全体の要素数(重複あり)、uniqueはユニークな要素数のカウント、topは最頻出の値で、freqはその出現頻度(回数)を示します。
SeriesでSeriesのユニークな要素をカウント
DataFrame全体で見た場合よりも各列ごとに掘り下げて内容を確認したい場合は、以降の方法で確認します。
ユニークな値のリスト
指定の列でユニークな値の一覧を取得したい場合、Series.unique().tolist()を用います。試しに”POS”列のユニークな値の一覧を取得してみます。
#ユニークな値のリスト
df['POS'].unique().tolist()
>>['RB',
'ST',
'CB',
'GK',
'CM',
'LB',
'RW',
'CDM',
'RM',
'LM',
'CAM',
'LW',
'LWB',
'RWB',
'SS']
これで、ユニークな要素の具体的な値がわかります。
ユニークな要素のカウント
列のユニークな要素のカウントを取得するには、value_counts()を使用します。各要素のカウントがSeriesで返されます。要素を指定することで、単一要素のカウントを取り出すこともできます。
df['POS'].value_counts()
>>CB 114
GK 74
ST 72
CDM 69
RB 53
CM 51
LB 49
RM 43
LM 38
CAM 25
RW 16
LW 12
LWB 4
RWB 3
SS 1
df['POS'].value_counts()['LB']
>>49
【参考】出現頻度を割合で出す
value_counts()では、引数のnormalizeをTrueに指定すると、出現頻度の合計が1になるような値に変換されて返されます。
これはつまり、各要素の出現回数の割合を示します。複数データで比較したい場合などに使えます。
df['POS'].value_counts(normalize=True)
>>CB 0.182692
GK 0.118590
ST 0.115385
CDM 0.110577
RB 0.084936
CM 0.081731
LB 0.078526
RM 0.068910
LM 0.060897
CAM 0.040064
RW 0.025641
LW 0.019231
LWB 0.006410
RWB 0.004808
SS 0.001603
Pythonでデータサイエンスするなら
Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。
ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^
初学者の方にはこちらもオススメです^^
まとめ
PandasのDataFrameおよびSeriesでユニークな要素をカウントする方法を紹介しました。
今回紹介した方法は、データの特徴を知るための手段として有効です。是非活用してください^^
ではでは👋