1. seabornでヒストグラムを作成

ヒストグラムを作成したい時は多い。

seabornでヒストグラムを作成するときに実装方法に少しだけ迷ったので記録しておきます。

2. ヒストグラムを作成する3種類の関数

seabornにはヒストグラムを作成する3つの関数が存在します。

3つの関数
  1. distplot

  2. histplot

  3. displot

選択肢が多いとどれを使えば良いのか迷ってしまうのが人間というものです。

それぞれの関数について少し調べたので個人的な感想をまとめてみます。

2.1. deprecated: 将来なくなるdistplot

distplotは将来なくなるので使用しないように公式ドキュメント上に記載されています。

Warning

This function is deprecated and will be removed in a future version. Please adapt your code to use one of two new functions:

  • displot(), a figure-level function with a similar flexibility over the kind of plot to draw

  • histplot(), an axes-level function for plotting histograms, including with kernel density smoothing

そこではhistplotかdistplotの使用が推奨されています。

distplotは選択肢から外れます

2.2. histplot

histplotとdisplotは同様のヒストグラムを作成できます。

違いはaxes-levelかfigure-levelかです。

違い
  • histplot : axes-level

  • displot : figure-level

これらの違いは公式ドキュメントで触れられています。

axes-levelと比較してのfigure-levelの強みと弱みが記述されています。

figure-level functionsの強み

The most useful feature offered by the figure-level functions is that they can easily create figures with multiple subplots.

figure-level functionsの弱み

In contrast, figure-level functions cannot (easily) be composed with other plots.

強みと弱みを考慮して目的に応じてhistplotとdisplotの使い分けになりそうです。

個人的にはfigure-levelの強みである複数のサブプロットを簡単に作成できることを便利に感じています。

個人的にはdisplotでヒストグラムを作成するのがおすすめです。

2.3. displot

すでに述べたようにdisplotでヒストグラムを作成するのがおすすめです。

seabornでグラフを作成しようとすると選択肢が多くてどれを使うべきか迷います。

個人的にはfigure-levelの関数をおすすめします。

過去の記事で同様にfigure-levelのrelplotとcatplotをおすすめしています。

2.4. histplotとdisplotを使用できるのはv0.11.0から

seabornのバージョンが古いとhistplotとdisplotを使用できません。

このような場合でバージョンアップも許されていない場合にはdistplotを使わざる得ません。

3. 実装例

実際にヒストグラムを作成してみます。

3.1. データ

下記のデータを使用します。

CMを見ることによってゲームをする時間がどのように変化するかを確認するためのデータです。

CM視聴別にゲーム時間のヒストグラムを作成します。

使用する変数
  • cm_dummy : CM視聴

  • gamesecond : ゲーム時間

3.2. コード

ヒストグラムを作成するコードです。

example.py
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("darkgrid")
sns.set_context("poster")

q_data_x = pd.read_csv(
    'https://raw.githubusercontent.com/iwanami-datascience/vol3/master/kato%26hoshino/q_data_x.csv'
)

(
    sns.displot(
        data=q_data_x,
        x='gamesecond',
        col='cm_dummy',
        col_wrap=1,
        height=10,
    )
    .savefig('gamesecond.jpg')
)

3.3. 作成したヒストグラム

gamesecond.jpg
gamesecond

大多数の人はほとんどゲームをやらず、一部の人だけが長時間ゲームをしているようです。

このような形のヒストグラムになることは多いです。結構分析に困る形です。

4. まとめ

seabornでヒストグラムを作成する方法を調べて、displotによる実装をご紹介しました。