シーボーン ヒストグラム プロット
この記事では、Seaborn の histplot()
関数を使用してヒストグラムを作成する方法について説明します。 また、distplot()
関数がエラーをスローする理由も調べます。
次に、Seaborn で複数のプロットをグループ化する方法を学習します。
Seaborn histplot()
関数を使用して Python でヒストグラムをプロットする
Seaborn に精通している場合、またはドキュメントに従っている場合は、ヒストグラムを作成する以前の方法が distplot
を使用していたことを知っているかもしれません。 そのすべてが最新バージョンの Seaborn で変更されました。
distplot()
が廃止されたことを示すこの警告が表示されます。代わりに、histplot()
を使用してヒストグラムを作成する必要があります。
Seaborn バージョン 0.11.2 には 3つの新しい分布プロットが付属しているので、新しい seaborn histplot
の基本から始めて、コードを書きましょう。
先に進み、Seaborn とエイリアスを sb
としてインポートします。 従うには、最新の Seaborn バージョンで作業する必要があることをもう一度思い出してください。
そのため、次のコマンドでバージョンを確認してください。
import seaborn as sb
sb.__version__
出力:
'0.11.2'
次に、Seaborn ライブラリからいくつかのデータをロードします。 これらのデータはペンギンに関するものです。
PG_Data = sb.load_dataset("penguins")
PG_Data.head()
ペンギンの種類ごとにさまざまな測定値があります。
PG_Data.shape
344 個の観測値がありますが、NULL 値を削除して、333 個の観測値を残します。
PG_Data.dropna(inplace=True)
PG_Data.shape
出力:
(333, 7)
これはプロットの目的で行っているだけなので、先に進んで Seaborn ヒストグラム プロットを作成しましょう。
まず、Seaborn スタイルを使用し、Seaborn ライブラリを参照して、sb.histplot()
を呼び出します。
次に、penguins
から bill_length_mm
シリーズを渡します。 ヒストグラムをプロットするために、データフレームから 1つの列のみを選択しています。
sb.set_style("whitegrid")
sb.histplot(PG_Data.bill_length_mm)
ここで構文を実行する別の方法もあります。 完全なデータフレームをこの data
引数に渡してから、ヒストグラムでプロットしたい任意の列を渡すことができます。
sb.histplot(x="bill_length_mm", data=PG_Data)
縦棒の代わりに横棒を作成できます。 代わりに、これを y
に切り替えて、水平ヒストグラムを作成できます。
sb.histplot(y="bill_length_mm", data=PG_Data)
古い seaborn distplot
に精通している場合は、distplot
を使用すると、kde
プロットがヒストグラムの上にプロットされ、それを新しい seaborn histplot
に戻すことができることを知っているでしょう。
この kde
引数を参照して、それを True
に等しく設定しましょう。
sb.histplot(x="bill_length_mm", data=PG_Data, kde=True)
これは、Seaborn が古い distplot
バージョン用に作成したものと非常によく似ています。 kde
プロットに慣れていない場合は、ここを読んでください。
bins
、binwidth
、および binrange
引数で histplot()
を使用する
デフォルトでは、Seaborn はデータに適したビンの数を決定しようとしますが、いくつかの異なるものを受け入れる bins
という引数を使用して切り替えることができます。
bins
が 30 に等しいとしましょう。これにより、範囲全体で等間隔に 30 個の個別のビンが作成され、おおよその分布が示されます。
sb.histplot(x="bill_length_mm", data=PG_Data, bins=30)
何らかの理由で、これらのビンを表示したい特定の場所があります。 これらの各数値がヒストグラム ビンの開始位置と停止位置であるリストを渡すこともできます。
sb.histplot(x="bill_length_mm", data=PG_Data, bins=[20, 40, 50, 55, 60, 65])
何らかの理由で、ビンを不規則な間隔にすることを選択できます。 非常に役立つことがわかっている 2つの引数は、binwidth
と binrange
です。
binwidth
では、設定できる任意の値に設定できます。 ただし、10 を入れたので、10 単位かかります。
binrange
引数を使用してビンの範囲を定義できます。タプルを渡して開始値と終了値を指定する必要があります。
sb.histplot(x="bill_length_mm", data=PG_Data, binwidth=10, binrange=(30, 60))
Seaborn の FacetGrid()
関数を使用して複数のヒストグラムをグループ化する
ここで、Seaborn 関数 FacetGrid()
について説明します。 catplot
、relplot
、および displot
のバックボーンです。
FacetGrid()
関数を使用してプロットをグループ化できます。FacetGrid
の背後にある主なアイデアは、小さな倍数を作成することです。
これは、データ内のカテゴリ特徴を選択し、カテゴリごとに 1つのプロットを作成することを意味します。これらすべてをわずか数行のコードで実行できます。 たとえば、企業 A、B、および C の市場シェアにより、さまざまなカテゴリの傾向を比較できます。
コードに飛び込みましょう。 上で見たように、ペンギンに関するいくつかのデータを見ていきます。
次に、FacetGrid
を作成します。 これを行うには、Seaborn ライブラリを参照し、関数 FacetGrid()
を入力します。また、ペンギンのデータフレームも提供する必要があります。
空白の x
軸と y
軸を作成して、データを配置する準備を整えます。 行または列のディメンション、またはその両方を指定できます。
この列の次元を提供し、ペンギンが住んでいる 島
によって小さな倍数を分割したいとしましょう。
sb.set_style("darkgrid")
sb.FacetGrid(PG_Data, col="island")
3つの島が見つかったため、島ごとに 3つのサブプロットが作成されました。
FacetGrid
をセットアップしたので、ステップ 2 に進むことができます。これは、いくつかのプロットをこれらの軸にマッピングすることです。 map()
関数を呼び出し、この関数内で、作成したい図を提供する必要があります。
これらの図のそれぞれについてヒストグラム プロットを作成し、関心のあるペンギン データフレームの列を定義する必要もあります。関心があるのは flipper_length_mm
です。
FG = sb.FacetGrid(PG_Data, col="island")
FG.map(sb.histplot, "flipper_length_mm")
各島ごとにすべてのデータをグループ化し、それらのグループごとにヒストグラム プロットを作成します。 ほんの数行のコードで、これらの小さな倍数をすべて構築できます。
FG
と呼ばれる FacetGrid
オブジェクトには、map_dataframe
と呼ばれる別のメソッドもあります。これは少し異なりますが、マップと同様のことを実現します。
FG = sb.FacetGrid(PG_Data, col="island")
FG.map_dataframe(sb.histplot, x="flipper_length_mm")
map()
関数と同じことを行いますが、少し異なります。 ここでの大きな違いの 1つは、map_dataframe()
が可変引数を使用できることです。 したがって、x
を flipper_length_mm
と定義するか、y
を定義することができます。
FG = sb.FacetGrid(PG_Data, col="island")
FG.map_dataframe(sb.histplot, y="flipper_length_mm")
水平方向の histplot
をプロットします。
ここからhistplot
に関連する他のものを読んでください。
完全なコード:
# In[1]:
import seaborn as sb
# In[2]:
sb.__version__
# In[3]:
PG_Data = sb.load_dataset("penguins")
# In[4]:
PG_Data.head()
# In[5]:
PG_Data.shape
# In[6]:
PG_Data.dropna(inplace=True)
# In[7]:
PG_Data.shape
# In[8]:
sb.set_style("whitegrid")
sb.histplot(PG_Data.bill_length_mm)
# In[9]:
sb.histplot(x="bill_length_mm", data=PG_Data)
# In[10]:
sb.histplot(y="bill_length_mm", data=PG_Data)
# In[11]:
sb.histplot(x="bill_length_mm", data=PG_Data, kde=True)
# In[12]:
sb.histplot(x="bill_length_mm", data=PG_Data, bins=30)
# In[13]:
sb.histplot(x="bill_length_mm", data=PG_Data, bins=[20, 40, 50, 55, 60, 65])
# In[14]:
sb.histplot(x="bill_length_mm", data=PG_Data, binwidth=10, binrange=(30, 60))
# ##### FacetGrid
# In[15]:
sb.set_style("darkgrid")
FG = sb.FacetGrid(PG_Data, col="island")
# In[16]:
FG = sb.FacetGrid(PG_Data, col="island")
FG.map(sb.histplot, "flipper_length_mm")
# In[17]:
FG = sb.FacetGrid(PG_Data, col="island")
FG.map_dataframe(sb.histplot, x="flipper_length_mm")
# In[18]:
FG = sb.FacetGrid(PG_Data, col="island")
FG.map_dataframe(sb.histplot, y="flipper_length_mm")
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