シーボーン カウント プロット

Salman Mehmood 2024年2月15日
  1. Seaborn で countplot() 関数を使用する
  2. Seaborn Barplot 対 Countplot
シーボーン カウント プロット

この記事では、Seaborn カウント プロットと、カウント プロットとバー プロットの違いについて説明します。 また、Seaborn の countplot() 関数で利用可能な Python オプションも見ていきます。

Seaborn で countplot() 関数を使用する

countplot() は、カテゴリごとの観測数をカウントし、その情報を棒グラフで表示する方法です。 これはヒストグラムと考えることができますが、カテゴリ データの場合、これは非常に単純なプロットであり、特に Python で探索的データ分析を行う場合に非常に役立ちます。

Seaborn ライブラリの countplot() 関数を調べてください。 まず、Seaborn ライブラリをインポートし、Seaborn ライブラリからダイヤモンドに関するデータを読み込みます。

import seaborn as sb

Data_DM = sb.load_dataset("diamonds")
Data_DM.head()

このデータ セットの各行には、1つの特定のダイヤモンドに関する情報が含まれています。

Seaborn カウント プロット - 出力 1

clarity.isin を使用して SI1VS2 に絞り込み、2つのオプションしかないカテゴリを作成します。

Data_DM = Data_DM[Data_DM.clarity.isin(["SI1", "VS2"])]
Data_DM.shape

すべてを絞り込むと、このデータセットには約 25323 個の異なるダイヤモンドが含まれています。

(25323, 10)

これで、最初のカウント プロットを作成する準備が整いました。 そのために、Seaborn ライブラリを参照し、countplot() 関数を呼び出して、プロットする列を渡します。

color 列をプロットします。これらのデータは Data_DM データフレームから取得されます。

sb.countplot(x="color", data=Data_DM)

これがこのプロットで行うことは、color 列で見つかった各カテゴリの観測数をカウントすることです。 たとえば、Seaborn は J に等しい色のダイヤモンドを約 1500 個見つけました。

Seaborn カウント プロット - 出力 2

color 列に value_counts() を適用した場合:

Data_DM.color.value_counts(sort=False)

これらの数値は、countplot() 関数を使用するときにプロットするものです。

D    3780
E    4896
F    4332
G    4323
H    3918
I    2593
J    1481
Name: color, dtype: int64

Seaborn countplot() の良い点の 1つは、縦棒から横棒に簡単に切り替えられることです。 この xy に切り替えるだけです。

sb.countplot(y="color", data=Data_DM)

出力:

Seaborn カウント プロット - 出力 3

Seaborn Barplot 対 Countplot

この時点で、Seaborn の countplotbarplot に非常に似ていると思うかもしれません。 しかし、大きな違いが 1つあります。Seaborn countplot では、カテゴリごとの観測数をカウントしているだけです。

Seaborn barplot を使用して、カテゴリごとの要約統計量の推定値を取得します。 たとえば、カテゴリごとの平均を取得し、そこから信頼区間を取得できます。 そのため、棒グラフが使用されます。

注文引数

それらは 2つの異なる目的で使用されます。 ただし、コーディング オプションは両方のプロットで使用できます。 これらのオプションのいくつかを Seaborn コードで確認してみましょう。

最初のオプションでは、上のプロットに表示されるバーの順序について話しましょう。 これらのダイヤモンドの色の countplot を見ると、バーは現在、最も人気のあるものから最も人気のないものに基づいて並べ替えられていないことがわかります。

D から J までアルファベット順に並んでいます。

sb.countplot(x="cut", data=Data_DM)

しかし、cut と呼ばれる別の列を見ると、バーがアルファベット順に配置されていないことがわかります。

Seaborn カウント プロット - 出力 4

Seaborn がこれらのバーをどのように配置しているかは、最初は明確ではありません。 プロセスをたどることができます。 diamonds 列のデータ型を見ると、いくつかの float64、int64、およびカテゴリがあることがわかります。

Data_DM.dtypes

これら 3つの列は、カテゴリ データ型と見なされます。 cutcolorclarity はすべてカテゴリです。

carat       float64
cut        category
color      category
clarity    category
depth       float64
table       float64
price         int64
x           float64
y           float64
z           float64
dtype: object

それが何を意味するか見てみましょう。 color をチェックするために、categories というプロパティがあります。

Data_DM.color.cat.categories

これは、Seaborn がバーを並べるために使用しているものです。

Index(['D', 'E', 'F', 'G', 'H', 'I', 'J'], dtype='object')

通常、category 列には categories と呼ばれるこのプロパティが付属しており、Seaborn はこれを使用してこれらのバーをどのように並べるかを決定します。

Data_DM.cut.cat.categories

出力:

Index(['Ideal', 'Premium', 'Very Good', 'Good', 'Fair'], dtype='object')

1つ目はアルファベット順に並んでいますが、2つ目は最初に最高のダイヤモンドに基づいて並べ、次に最悪のダイヤモンドまで並べています。

しかし、その category の順序が、これらのバーを表示したい方法と異なる場合はどうなるでしょうか? Seaborn の countplot() 関数には order という引数があり、これらのバーをどのように並べるかのリストを渡すことができます。

ord_of_c = ["J", "I", "H", "G", "F", "E", "D"]
sb.countplot(x="color", data=Data_DM, order=ord_of_c)

出力:

Seaborn カウント プロット - 出力 5

これは Pandas データフレームであるため、これらのバーを昇順または降順で並べ替えることもできるため、value_counts() メソッドを使用することをお勧めします。 これにより、バーが最も人気のあるものから最も人気のないものへと並べ替えられます。

先に進んでインデックスを取得すると、最も人気のあるカテゴリは E であり、最も人気のないカテゴリは J です。

Data_DM.color.value_counts().index

出力:

CategoricalIndex(['E', 'F', 'G', 'H', 'D', 'I', 'J'], categories=['D', 'E', 'F', 'G', 'H', 'I', 'J'], ordered=False, dtype='category')

バーの注文を作成するときに、この index を使用できます。 これで、これらが降順にソートされました。

しかし、それらを昇順でソートしたい場合。

必要なのは、このインデックスを逆にすることだけです。これには、2つのコロンと負のコロンを使用して、インデックスを完全に切り替えることができます。

sb.countplot(x="color", data=Data_DM, order=Data_DM.color.value_counts().index[::-1])

出力:

Seaborn カウント プロット - 出力 6

こちら にアクセスすると、その他のオプションを見つけることができます。

完全なコード:

# In[1]:

import seaborn as sb

Data_DM = sb.load_dataset("diamonds")

Data_DM.head()

# In[2]:

Data_DM = Data_DM[Data_DM.clarity.isin(["SI1", "VS2"])]
Data_DM.shape

# In[3]:

sb.countplot(x="color", data=Data_DM)

# In[4]:

Data_DM.color.value_counts(sort=False)

# In[5]:

sb.countplot(y="color", data=Data_DM)

# In[6]: order argument

sb.countplot(x="cut", data=Data_DM)

# In[7]:

Data_DM.dtypes

# In[8]:

Data_DM.color.cat.categories

# In[9]:

Data_DM.cut.cat.categories

# In[10]:

ord_of_c = ["J", "I", "H", "G", "F", "E", "D"]
sb.countplot(x="color", data=Data_DM, order=ord_of_c)

# In[11]:

Data_DM.color.value_counts().index

# In[12]:

sb.countplot(x="color", data=Data_DM, order=Data_DM.color.value_counts().index[::-1])
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Seaborn Plot