たなブログ 教養を高めて生涯資産を増やすブログ(`・ω・´)

【Python Coding】seabornでカテゴリカル散布図を作る方法を解説します

PR Pythonを学ぶ

こんにちは、TAKです。

前回に引き続き、今回もpythonのseabornを使った可視化について解説していきます。
今回は「Categorical Scatterplot(カテゴリカル散布図)」について
、pythonのJupyter Notebookを用いて紹介していきます。イメージとしては、散布図と箱ひげ図をミックスしたようなものです。

【こんな人に読んで欲しい記事です】
1. pythonを用いた可視化方法を学んでいきたい方
2. pythonを用いて「カテゴリカル散布図」を描けるようにしたい方
今回は、前回記事で紹介した散布図と同じデータセットを利用していくので、既に以下記事を見ている方は目次の「データ可視化①」から読み始めてください。

seabornを用いたデータ可視化 | Categorical Scatterplot

必要ライブラリのインポート

今回必要となるライブラリは以上の3つです。
前回までの記事でも毎回登場している「データ読込&可視化用のお馴染みのコード」です。

初回の記事で上記ライブラリの簡単な説明をしているので、今一つわからない方は以下の記事を参考にしてみてください。

利用データの確認

今回は、Kaggleでも公開されているデータを使用します。
データ内容は、保険加入者の属性(年齢・性別・BMI・喫煙習慣等)に基づいた保険料を示したものです。
下記でデータ読込結果を表示しているので、そちらを参照してイメージを深めてみてください。

データの準備

実際にpandasのread_csvを用いてデータセットとして読み込んでいきます。
csvファイルを読み込み、対象データの先頭5行を表示させているのが以下のコードです。

今回は特にデータ読込時にIndexの指定などはしなくてOKです。

一番右のカラム「charges」が保険料金を表していて、それより左側のカラムが加入者の属性を表しているようなデータセットです。このデータを用いて可視化していきましょう。

データ可視化①

では実際にseabornを用いてカテゴリカル散布図を描画していきましょう。
散布図は2変量データ(数値×数値)の可視化に向いている方法でしたが、カテゴリカル散布図は2変量データ(数値×カテゴリ)の可視化に向いている方法で、棒グラフや箱ひげ図と同じ場面で使えます。

そこで、前回は「BMI」と「Charges」の関係性について見ていましたが、今回は「任意のカテゴリ変数」と「Charge」の関係性を見ていくことにします。

まず、いつものように以下のようにして特徴量をリスト化しておきます。
(僕は特徴量の手打ちが面倒なため。)

そして、カテゴリ変数として「性別」を選択して描画してみます。
以下のコードを実行することで、カテゴリカル散布図を描画することが可能です。

ポイントは以下2つです。

sns.swarmplotを用いることで、カテゴリカル散布図を描くことが出来る!
● 引数としてxとyの値、そして対象となるデータを指定する必要がある

可視化したグラフを見て頂ければわかるように、x軸にはカテゴリ変数、y軸には量的変数を指定しているので、使い方は先ほど説明したように箱ひげ図や棒グラフと同じイメージとなります。そして、可視化された結果は、箱ひげ図のようなデータ分布を示しつつも、散布図のような各データプロット結果の情報もあるといった特徴を持っています。

ちなみに男女別にわけて表示した結果を見ても、Chargeはほぼ男女差はなくこれといった特徴はなさそうですね。

データ可視化②

カテゴリカル散布図の可視化方法がわかったので、カテゴリ変数を変えていきたいと思います。

先ほどは男女別でしたが、カテゴリ変数として「喫煙習慣の有無」を選択して描画してみます。
x軸の変数だけ変更してあげればOKです。

この結果を見ると、先ほどの男女別とは明らかに異なり、喫煙者の方が非喫煙者に比べてChargeが高い傾向にあることが一目瞭然ですね。また、非喫煙者の人は相対的に健康的と言えそうですが、一部の人は何かしらの基礎疾患を持っているためかChargeが高くなっているとも言えそうです。この点、BMI指数を用いて可視化出来る散布図を利用した方が情報を取れるかもしれませんね。

では次に、このカテゴリカル散布図に「男女別」の情報を加えてみたいと思います。
前回の散布図と同じく、引数「hue」に変数を指定するだけで内訳の反映が可能になります。
喫煙者・非喫煙者は男女で均等にいると考えられるので、この分け方自体にあまり意味はないですが、可視化手法として紹介しておきます。

最後に、このデータセット内に「children」変数が含まれているので、子持ちの人数に応じてCharge分布がどうなっているのか、子持ち人数に応じて喫煙習慣は異なるのかを興味本位で見たいと思います。

これで子どもの人数別にChargeの分布がわかりました。
当たり前ですが、3人以上の子持ち世帯はだいぶ減ってきますね。また、子どもの人数に関係なく、喫煙者はChargeが高い傾向にあるのは先ほどの結果と同様です。あとは、サンプル数がさほど多くないので何とも言えませんが、子どもの人数が多くなるほど喫煙者は少なくなる傾向にあるくらいですかね。

まあこの分け方自体も特に意味はないので、こういった分け方も出来るんだなと思って頂ければOKです。

まとめ

いかがだったでしょうか?
今回は可視化手法として「カテゴリカル散布図」について紹介してきました。箱ひげ図や棒グラフと同じような場面で使えるで、是非使えるようにしてしてみてください。

では今回はこのへんで。