Bokehではじめるデータビジュアライゼーション
はじめに
Pythonでデータの可視化を行う際には、大半の方がMatplotlibを使われていると思います。私も機械学習の勉強をし始めてからずっとMatplotlibを使い続けていました。Matplotlibは確かに非常に強力なライブラリで、データサイエンスや機械学習で行われる可視化に必要なクラスやメソッドが実装されています。しかし、どこか物足りないと言いますか、かゆいところに手が届かないような思いがありました。
ある日、私の同僚のデータサイエンティストにBokehというInteractive Visualization Libraryがあって非常に強力だよ、と教えてもらいました。それ以来、Bokehを使い始めております。
Bokehとは?
Matplotlibは一度出力したらそれを動かすことはできませんが、BokehなどのInteractive Visualization Libraryでは、描画結果がWebブラウザで表示され、ドラッグして動かしたり、拡大縮小したり、データの情報をマウスオーバーで表示したり、対話的に描画結果を操作することができます。
また、出力の際にはJavaScriptが使われていたり、出力結果としてHTMLファイルが出力されますが、そういった知識は不要で、基本的にはPythonの実装のみで描画することが可能です。
パワフルさに感動
実際に使い始めてみたところ、実装も非常に簡単で、かつその描画結果の美しさというかMatplotlibと違ってイケてる感じがして本当に感動しました(語彙力がなくてすみません)。そんな私のテンションを的確に表現した絵を発見しました。
こちらの例ではInteractive Visualization LibraryとしてPlotlyが取り上げられておりますが、本当にこのような感じでした。Matplotlibで初めてデータを可視化した時は、「おぉ…できた…!」という感じがあって、その後Seabornでviolinplotとかheatmapとか綺麗に描画できると、「Seabornめっちゃイケてる…!」となるのですが、その後しばらく停滞期を迎えます。そして、Interactive Visualization Libraryを発見して一気にテンションが戻り、その機能のパワフルさとポテンシャルに気付いてさらにテンションがあがるといった具合です。
LT登壇
そんな上がったテンションの勢いに任せて、Data Driven Developer Meetup #4 (#d3m)のLT枠に登壇してまいりました。
最後のデモで登場する機械学習Webアプリ風のやつのソースコードはこちらです。
突貫で作ったのでソースコードはあまり綺麗ではありませんが、一応動くと思います。以下のインストールをお願いします。
pip install bokeh
その他、scikit-learnなど使っておりますので、不足したライブラリがありましたら個別にpip installをお願いします(requirements.txtファイル作っていなくてごめんなさい)。
Bokehの概要
このアプリの中で登場するテーブル、ボタン、セレクトボックス、テキストインプット等の各種ウィジェットや各種プロット等は基本的にBokehが標準で提供している機能になります。
そして、各種ウィジェットにはcallbackを実装することができます。要は、ボタンを押下したらその時にどのような処理をするか、といったことが実装できます。これを組み合わせると色々なことができます。
例えば、このアプリで登場する主な処理としては、ボタンを押下したらpandas.read_csvが実行されるとか、あるいは機械学習に必要な前処理から探索的データ分析、学習から未知のデータへの予測、提出用のCSV出力などが実装されています。CSV出力に関しては個別にJavaScriptのソースコードを読んでいますが、Bokehのコミュニティ内で「どうやったらテーブルで表示したデータをCSVで出力できるのか」という質問がされていて、有識者がソースコード付きで回答してくれていたりします。そのため、私のようにJavaScriptの知識がなくても、それを参照すれば簡単に実装することが可能です。ちなみにBokehのコミュニティを代表する(?)有識者はBryanという人です。
Bryan Van de Ven
ここでお示しした機能はほんの一例にすぎず、callback内で何かのAPIを叩いたり、あるいはデータベースへのクエリを実行したり、処理をループさせてリアルタイムでデータ更新をし続けたりなど、様々な用途に応用することが可能です。
まとめ
私自身、まだデータ分析のキャリアを積み始めて日が浅く、Bokehの勉強も始めたばかりですので、このような記事を投稿しながら学習を深めていきたいと思います。また、こちらの記事を読んでいただいた皆様からもぜひフィードバック等を頂けたらありがたいです。また、Interactive Visualization Libraryを使って、こんなデータ分析ダッシュボードが作れるよ、とかこういう業務ではこういう用途で役に立つかも、みたいなこともお勉強させていただけると大変ありがたいです。
また、今回ご紹介したデモアプリやBokeh全般に関してご質問やご不明点がございましたら、お気軽にTwitter等でご連絡いただければと思います。
ひそかに日本版のBryanを目指して頑張っていきたいと思っています(実際はBryanが答えている内容をググって訳すだけかもしれませんが…)。
これから、各種Bokehの基本機能や使い方、作ってみたアプリの仕様の詳細など解説する記事を順次アップしていきたいと思います。もし今後の記事に関してアップデートを受け取ってもいいよ、という方がいらっしゃいましたら、マガジン登録いただければ幸いです。どうぞよろしくお願いします。