楽屋

Python 描画入門 – 第1回 histogram

この連載では、下記ライブラリ・メソッドの基本的な仕様を、グラフの種類ごとに紹介していきます。
  • matplotlib
  • pandas.DataFrame
  • seaborn
入門レベルの知識ですが、異なるライブラリを並べて書くことで簡易なカタログとして使える記事になればいいと考えています。第1回はhistogramです。

使用データ

代表的な、irisを使用します。データはヘッダーを付けたCSVに加工してあります。

1. matplotlib.pyplot.hist()

基本仕様

matplotlib.pyplot.hist(x=[DataFrame/Series, ...])の形で呼び出します。デフォルトでは、複数の項目を階級内で横並びに表示します。

複数項目で階級幅は同期されます。階級数は10です。色は自動で振り分けられます。凡例はデフォルトでは表示されません。pyplot.show()より前に呼び出されたグラフがまとめて描画されます。

積み上げヒストグラムの簡易な描画

複数の項目をxパラメータにリスト形式で指定することで、ひとつのヒストグラムに出力できます。これを用いることで積み上げヒストグラムを簡単に描画できます。

2. pandas.DataFrame.plot()

基本仕様

pandas.DataFrame.plotは前述のmatplotlib.pyplotのラッパーで、kindプロパティにグラフ種類を指定することで様々なグラフをシンプルなコードで描画できます[^1]。 ヒストグラムはDataFrame.plot(kind='hist')またはDataFrame.plot.hist()の形式で呼び出します。デフォルトでは、複数の項目が重ねて描画されます。 複数項目で階級幅は同期される。階級数は10です。色は自動で振り分けられ、凡例も自動でつくので見やすくなります。

複数項目を一括で可視化

パラメータの設定で、複数の数値項目を個別に出力できます。同じデータフレームの値から出力したグラフの階級幅は同期されます。

グラフを重ねて描画

‘ax’パラメータで、複数のデータフレームから生成したヒストグラムを重ねて描画できます。

3. pandas.DataFrame.hist()

基本仕様

DataFrame.hist()の形で呼び出します。デフォルトでは、複数の項目が別々に描画されます。 階級幅・頻度(y軸の幅)は統一されません。階級数は10です。色は統一されます。各グラフ上部に項目名が表示されます。

簡易な可視化

シンプルな書式で呼び出せることに加え、ラベルや罫線などの操作が直感的でわかりやすいです。手軽に分布を確認したいときに重宝します。。

4. seaborn

基本仕様

sns.distplot(a=DataFrame/Series)の形で呼び出します。デフォルトでは複数項目を描画できません。 階級数は、フリードマン=ダイアコニスの法則に則って自動で定められます。importするだけでmatplotlibの描画がseaborn風になるほか、sns.distplot()でカーネル密度推定の結果とともにヒストグラムを描画できます。

カーネル密度推定/ラグプロット

seabornのヒストグラムでは、デフォルトでカーネル密度推定の結果を示すグラフが描画されます。また、rugパラメータによってラグプロットの描画もできます。

所感

基礎集計のとっかかりなど、分布の概観をつかめればよい段階ではpandas.DataFrame.hist()が気軽に呼び出せて便利という印象を受けました。次に簡易に呼び出せるのがpandas.DataFrame.plot()で、少し手間がかかるが痒いところに手が届くのがmatplotlib。seabornはプレゼンテーション用のイメージが強かったですが、書式もシンプルなのでぜひ普段から使っていきたいですね。

参考