読者です 読者をやめる 読者になる 読者になる

DPCデータの分析とかやるブログ

DPCデータの分析なんかをテキトーにやってます。

Bokehを使ったグラフ描画

今までPythonでのグラフ描画といえばmatplotlibやSeabornがメジャーでしたが、ここにきてBokehというライブラリが完成度を上げてきました。 matplotlibが最終的に静的なイメージファイルを吐き出すのと違い、Bokehはhtmlファイルを書き出します。 縮小・拡大・移動のようなユーザー操作を簡単に付加出来るので、Webで公開するような用途でも使えるでしょう。
例として、以下の様なテーブルの可視化を考えてみます。 なお、AnacondaをインストールするとBokehも入ってきますが、バージョン0.11では「外れ値があるとヒストグラムが壊れる」という割と重大なバグがあったりするので注意しましょう。conda update bokehで0.12に更新するのがオススメです。

dpc点数 科番号 科名
1919.756733 3 整形
2037.609047 3 整形
2033.869387 3 整形
1940.643659 1 内科
2018.686431 2 外科
import pandas as pd
import datetime
import numpy as np
from bokeh.charts import Histogram, output_file, show
from bokeh.layouts import row

#サンプルデータを作成
dpc = np.random.normal(2000,100,5000)
ka = np.random.randint(1,4,5000)
kadict = {1:'内科',2:'外科',3:'整形'}
df = pd.DataFrame({'dpc点数':dpc,'科番号':ka})
df['科名'] = [kadict[x] for x in df['科番号']]

#グラフをプロット
hist = Histogram(df, values='dpc点数', title="dpc点数", plot_width=400,bins = 20)
hist2 = Histogram(df, values='dpc点数', label='科名', color='科名', legend='top_right',
                  title="DPC点数科別", plot_width=400,bins = 20)

output_file('hist_test.html')
show(row(hist, hist2))

結果はhmtlファイルとして書きだされます。

f:id:stagira:20160711192614p:plainf:id:stagira:20160711192620p:plain

はてなブログでhtmlを置く方法がわからなかったので画像を貼り付けましたが、実際には拡大したり移動したりが出来ます。 記法もシンプルですので、ぜひ活用してみてください。