#24 ヒストグラム(2)

>100 Views

September 06, 23

スライド概要

前のセクションで用いたhistplotのバリエーション、そしてdisplot、catplotを使った様々なヒストグラムの描き方を習得していきましょう。

それらを実現するプログラムは下記の6つです。

58 sns.histplot(data=データ名, x=“列名1”, hue=”列名2“
, multiple='stack’) 

59 sns.histplot(data=データ名, x=“列名1”, hue=”列名2“
, multiple='dodge’)

60 sns.displot(data=データ名, x=“列名1”)

61 sns.displot(data=データ名, x=“列名1”, kde=True)

62 sns.displot(data=データ名, x=“列名1”, kind=‘ecdf’)

63 sns.catplot(data=データ名, x=“列名", kind='count’)

同じヒストグラムでも、様々なプログラムで描くことができます。これが、seabornの柔軟なところですが、逆にわかりにくいところでもあります。このチュートリアルでは、histplot、displot、catplot毎に解説するのではなく、グラフの種類ごとに解説していきます。各グラフ毎に、自分に合った一つのプログラムを選択して身に付けていけば十分です。

1st STEP同様、動画のテキスト、追加情報は下記のブログを参考にしてください!

■この動画のブログ

●データサイエンス チュートリアル
 https://tutorial4datascience.blogspot.com/

■参考URL

●二次元ヒストグラムのイメージ
 →HK29さんのブログ「PythonとVBAで世の中を便利にする」
 https://hk29.hatenablog.jp/entry/2021/08/21/230609

●経験的累積分布関数(ECDF)のグラフの見方
 →HRサイエンス研究所のブログ「Science Blog」
 https://onl.sc/9R1K5yt

profile-image

すべてのビジネスパーソンが意思決定プロセスにデータを活用する思考を身につけ、ブルシットジョブをこの世からなくしていきましょう!

関連スライド

各ページのテキスト
1.

1 2nd STEP 集計とグラフ描画 Section 22 ヒストグラム(2) 58 sns.histplot(data=データ名, x=“列名1”, hue=”列名2“ , multiple='stack’) 59 sns.histplot(data=データ名, x=“列名1”, hue=”列名2“ , multiple='dodge') 60 sns.displot(data=データ名, x=“列名1”) 61 sns.displot(data=データ名, x=“列名1”, kde=True) 62 sns.displot(data=データ名, x=“列名1”, kind=‘ecdf’) 63 sns.catplot(data=データ名, x=“列名1", kind='count’)

2.

2 Section 22 ヒストグラム(2) 1.積上グラフ 積上げグラフとは、棒グラフの一種で、同じ項目内の各要素を上に積み上げるようにして表 現されたグラフです。それぞれの項目の全体量と、項目内の各要素の比率を把握す ることに適しています。 ヒストグラムを積上グラフにするには、56の( )内に「multiple=‘stack’」を 加えます。 58 sns.histplot(data=データ名, x=“列名1”, hue=”列名2“ , multiple='stack’) hueを使って、サブグループを色分けした場合、凡例の指示 (55 plt.legend(labels=[“A”, “B”, “C”]) ) ​ を書かなくとも、凡例は自動的に挿入 されます。

3.

3 Section 22 ヒストグラム(2) 2.棒グラフ ヒストグラムを棒グラフにするには、56の( )内に「multiple='dodge'」を 加えます。 59 sns.histplot(data=データ名, x=“列名1”, hue=”列名2“ , multiple='dodge’) 棒グラフにすると、「hue」で分けたグループのx軸ごとの変化を強調するグラフになります。

4.

4 Section 22 ヒストグラム(2) 3.displot 「displot」により、ヒストグラムを描くこともできます。 60 sns.displot(data=データ名, x=“列名1”) 「displot」は、カーネル密度推定(KDE)、経験的累積分布関数(ECDF)のグラフ描 画など、さまざまな分布を把握できるグラフを作成できる柔軟で強力な関数です。 また、 「displot」は、ヒストグラムのような単変量データだけでなく、複数列のデータを扱った 二次元ヒストグラムも書くことができます。二次元ヒストグラムのイメージは、HK29さんのブロ グ「PythonとVBAで世の中を便利にする」を参照願います。 https://hk29.hatenablog.jp /entry/2021/08/21/230609 ※ ただし、histplotのように重ねてグラフを描くことはできません。

5.

5 Section 22 ヒストグラム(2) 3.displot カーネル密度推定のグラフを描く際は、60の()内に、カンマに続けて「kde=True」を追加し ます。 61 sns.displot(data=データ名, x=“列名1”, kde=True) カーネル密度推定はヒストグラムの滑らかなバージョンであり、データ分布の形状をより良く把 握することができます。 また、()内に、カンマに続けて「kind=‘ecdf’」を追加すると、経験的累積分布関数 (ECDF)のグラフが描けます。これは、階級ごとの出現確率を前の階級に累積したグラフ で、y軸が0から1までになっていることに着目してください。 62 sns.displot(data=データ名, x=“列名1”, kind=‘ecdf’) データの分布を見る場合、経験的累積分布関数(ECDF)のグラフはヒストグラムとは異 なった見方をすることができます。 余裕のある方は、HRサイエンス研究所のブログ「Science Blog」を参照してみてください。

6.

6 Section 22 ヒストグラム(2) 参考1 ヒストグラム データの実数の分布状況を把 握できます。 カーネル密度推定 ヒストグラムより、価格帯「-5」 の集中が確率的に激しい傾 向にあることがわかります。 経験的累積分布関数 (ECDF) 国別価格帯の差がでるのは、 価格帯「5-10」の個数である ことがわかります。

7.

7 Section 22 ヒストグラム(2) 4.catplot 「catplot」は、元々、質的変数(カテゴリカル変数/例:価格帯、年齢層、性別等)と量的 変数の関係を描画するためのものですが、ヒストグラムに似たグラフを書くことができます。 「displot」と同様に、データ名、列名を指定して、「kind=‘count’」をカンマに続けて追加します。 63 sns.catplot(data=データ名, x=“列名1", kind='count’) 「catplot」は、「hue」も使えます。

8.

8 Section 22 ヒストグラム(2) 参考2 ヒストグラムを描くためには、「sns.histplot」の他に、下記のプログラムも使うことができます。 好きなものを使っても問題ありませんが、基本的には下記のような使い分けがあります。 sns.histplot 単一のヒストグラムを描く時 (重ねることが可能) sns.displot kind=“○○”を利用して、 複数の種類のヒストグラムを描く 時(重ねることはできません) ※ デフォルトは、hist sns.catplot 質的変数と量的変数の関係を 描画する時 連続変数の分布を可視化 するために使用 ※今回は、請求番号ごとの合計金額 「Total」で描画すると時間がかかるので、 質的変数「価格帯」を用いました。 カテゴリカル変数の出現回数 を可視化するために使用

9.

9 Section 22 ヒストグラム(2) 58 sns.histplot(data=データ名, x=“列名1”, hue=”列名2“ , multiple='stack’) では、Section 21で作成した「hue」を使った国別/価格帯別の出現回数をグラフ化したヒスト グラムを積上げグラフにしてみましょう。 積上げグラフ 下位2カ国の合計の数値が異なりますね。 Section 21で作成したグラフ

10.

10 Section 22 ヒストグラム(2) 59 sns.histplot(data=データ名, x=“列名1”, hue=”列名2“ , multiple='dodge') 今度は、棒グラフです。( )内に、カンマで続けて「multiple=‘dodge’」を追加しましょう。

11.

11 Section 22 ヒストグラム(2) 60 sns.displot(data=データ名, x=“列名1”) 次は、「displot」を使いましょう。 ( )内は、「histplot」と同様です。

12.

12 Section 22 ヒストグラム(2) 60 sns.displot(data=データ名, x=“列名1”) 「histplot」のように続けてプログラムを書いても、3つのグラフが別個にで きるだけです。

13.

13 Section 22 ヒストグラム(2) 61 sns.displot(data=データ名, x=“列名1”, kde=True) 「displot」で、ヒストグラムとカー ネル密度推定の両方のグラフを プロットして(描いて)みましょう。 そのままでは、y軸の単位が「10 の6乗」になってしまいますので、 ㊵を使って整数に直します。 plt.gca().ticklabel_format (style='plain', axis=‘y’) 通常のヒストグラムより、確率的 に、価格帯「-5」の集中が激しい 傾向にあることがわかります。

14.

14 Section 22 ヒストグラム(2) 62 sns.displot(data=データ名, x=“列名1”, kind=‘ecdf’) 「displot」で、()内に、カンマに続け て「kind=‘ecdf’」を追加すると、経 験的累積分布関数(ECDF)の グラフが描けます。 このグラフは、階級ごとの出現確率 を前の階級に累積したもので、y軸 が0から1までになっていることに着 目してください。 国別価格帯の差がでるのは、価格 帯「5-10」の個数であることがわかり ます。

15.

15 Section 22 ヒストグラム(2) 63 sns.catplot(data=データ名, x=“列名", kind='count’) 「sns.catplot」に続けて( )内に、 「displot」と同様に、データ名、列名を指定 し、「kind=‘count’」をカンマに続けて追加 します。 棒の間が、空いていますので、厳密にはヒス トグラムではなく棒グラフです。

16.

16 Section 22 ヒストグラム(2) 63 sns.catplot(data=データ名, x=“列名1", kind='count’) 「catplot」は、「hue」も使えます。 59のsns.histplot(data=id_pos11, x="価格帯", hue="Country", multiple='dodge’) と同じようなグラフを描くことができますね。