python stemgraphic で幹葉図を描く


幹葉図とは、ヒストグラムに似た図です。
4-6. 幹葉表示 | 統計学の時間 | 統計WEB
この図をPython で描画できるか調べたところ、dionresearch/stemgraphic: stemgraphic python package for visualization of data and text というライブラリで、描けそうでしたので、試しに使ってみました。
結果を記載します。


図の使いどころ

統計検定の問題で初めて見ました。使用方法についての説明は、Wikipedia の記載がわかりやすいです。
幹葉表示 - Wikipedia


インストール

pip でインストールできます。

  • コマンド

    python3 -m pip install -U stemgraphic  
    

  • OUTPUT

    Installing collected packages: docopt, seaborn, stemgraphic
    Successfully installed docopt-0.6.2 seaborn-0.9.0 stemgraphic-0.7.2
    


動かしてみる

stemgraphic quickstart with numbers — stemgraphic 0.6.1 documentation を参考に実際に動かしてみます。
Sample は、数値、カテゴリデータ、テキストを扱う3種類あります。
今回は、数値を扱うSampleを動かしてみます。

数値データを幹葉表示する

%matplotlib inline
import pandas as pd
from stemgraphic import stem_graphic
# Sample データの読みこみ
df = pd.read_csv('https://raw.githubusercontent.com/dionresearch/stemgraphic/master/datasets/iris.csv')
df.describe()
sepal_lengthsepal_widthpetal_lengthpetal_width
count150.000000150.000000150.000000150.000000
mean5.8433333.0540003.7586671.198667
std0.8280660.4335941.7644200.763161
min4.3000002.0000001.0000000.100000
25%5.1000002.8000001.6000000.300000
50%5.8000003.0000004.3500001.300000
75%6.4000003.3000005.1000001.800000
max7.9000004.4000006.9000002.500000
stem_graphic(df['petal_width'])

png

ヒートマップ表示

ヒートマップを描画するメソッドが提供されています。

from stemgraphic.graphic import heatmap
heatmap(df['petal_width'])
(       0  1  2  3  4  5  6  7  8  9
 stem                               
   1    6  0  0  0  0  0  0  0  0  0
   2   28  0  0  0  0  0  0  0  0  0
   3    7  0  0  0  0  0  0  0  0  0
   4    7  0  0  0  0  0  0  0  0  0
   5    1  0  0  0  0  0  0  0  0  0
   6    1  0  0  0  0  0  0  0  0  0
   7    0  0  0  0  0  0  0  0  0  0
   8    0  0  0  0  0  0  0  0  0  0
   9    0  0  0  0  0  0  0  0  0  0
  10    7  0  0  0  0  0  0  0  0  0
  11    3  0  0  0  0  0  0  0  0  0
  12    5  0  0  0  0  0  0  0  0  0
  13   13  0  0  0  0  0  0  0  0  0
  14    8  0  0  0  0  0  0  0  0  0
  15   12  0  0  0  0  0  0  0  0  0
  16    4  0  0  0  0  0  0  0  0  0
  17    2  0  0  0  0  0  0  0  0  0
  18   12  0  0  0  0  0  0  0  0  0
  19    5  0  0  0  0  0  0  0  0  0
  20    6  0  0  0  0  0  0  0  0  0
  21    6  0  0  0  0  0  0  0  0  0
  22    3  0  0  0  0  0  0  0  0  0
  23    8  0  0  0  0  0  0  0  0  0
  24    3  0  0  0  0  0  0  0  0  0
  25    3  0  0  0  0  0  0  0  0  0,
 0.1,
 <matplotlib.axes._subplots.AxesSubplot at 0x10a4215c0>)

png

データのばらつき、範囲を調整すると、もう少しきれいに描画できるのかもしれません。

濃度曲線を描画する

濃度曲線を描画するメソッドが提供されています。

from stemgraphic.graphic import density_plot
density_plot(df['petal_width'])
(<matplotlib.figure.Figure at 0x10d15c438>,
 <matplotlib.axes._subplots.AxesSubplot at 0x10cca66d8>)

png

メソッドの引数を指定することで、グラフの描画する種類を切り替えることができます。

# hist= True でヒストグラムを追加、rug=True ラグを追加
from stemgraphic.graphic import density_plot
density_plot(df['petal_width'], hist=True, limit_var=True, rug=True)
(<matplotlib.figure.Figure at 0x10ef79518>,
 <matplotlib.axes._subplots.AxesSubplot at 0x10a1ab898>)

png

以下に、サンプル notebook が Github 上に存在します。
stemgraphic/notebooks at master · dionresearch/stemgraphic
カテゴリデータ、テキストのサンプルも存在するので、後日試してみようかと思います。

以上です。

コメント