#4」が開催されました。サービスをより良いものにするために日々データと向き合っているデータサイエンティストやエンジニアなど、様々な職種で活躍する人々が集い、知見を共有する本イベント。今回は日本経済新聞社とエムスリー株式会社の2社がメインセッションに登壇し、自社の取り組みについて語りました。プレゼンテーション「Bokehではじめるデータビジュアライゼーション」に登場したのは、YukiyoshiSato氏。デモを交えながら、Pythonのインタラクティブビジュアライゼーションライブラリ「Bokeh」の特徴について解説しました。SatoBokehではじめるデータビジュアライゼーションYukiyoshiSato氏(以下、Sato):こんばんは、Satoと申します。本日は「Bokeh」というデータビジュアライゼーションライブラリをご紹介したいと思います。最初に簡単に自己紹介させていただきますと、私は今Liquidという仮想通貨取引所を運営しているQUOINE(コイン)という会社で、「データサイエンティスト」という肩書でやらせていただいております。一応、仮想通貨のマーケットとかトレーディングに関する分析なんかをやっております。私はキャリアのスタートは金融系のSEをやっておりまして、そのあと証券会社に転職して、証券会社の中でもAIだなんだみたいな話が聞こえてきて、「私も勉強してみようかな」と思って、一昨年の冬からAIジョブカレというところで機械学習の勉強を始めて、去年の6月から今の仕事をやっております。勉強中ですがよろしくお願いします。Bokehとは?さっそく本題に入りたいと思うんですけれども「Bokehとは?」ということで。私がこの題を選んだ理由としては、日本語のブログとかQiitaの記事とか少ないなと思って、私もこれは外国人のデータサイエンティストの同僚から教えてもらって初めて知ったんですけれども、使ってみると「けっこうおもしろいな」と思ったので、今日ご紹介したいと思います。Pythonで書けるインタラクティブビジュアライゼーションライブラリということで、Matplotlibとかだと1回静的なものが出力されるだけだと思うんですが、BokehはWebブラウザで動的にグリグリ動かせます。描画結果はJavaScriptとかHTMLで出てくるんですけれども、そういった知識は不要です。私もJavaScriptとかHTMLの知識はぜんぜんないです。この絵なんですけれども、Pythonのビジュアライゼーションライブラリがいろいろ紹介されていて、私もこんなにたくさんあるってぜんぜん知らなかったんですけど、このへん(スライドの中段あたり)がMatplotlibです。seabornとかはこのへん(スライド中央)にいて。JavaScriptベースのやつがこのへん(スライド左側の上段)の青いやつで、Bokehはここ(スライド左側の上段)にいます。比較されるplotlyとかはこのへん(スライド左側の上段)にいますね。ほかにもd3jsとかがいろいろありますと。これ(スライド)が何かと言うと、Matplotlibを初めて触ってみて、グラフを描画したら、なんかいい感じのグラフが出てちょっと気分が良くなります。seaborn見つけてさらにきれいなグラフが描けてもっと良い気分になるんですけど、だんだん飽きてきて、なんかつまんなくなってくるんですけど。incredible!」ということでめっちゃテンション上がる、みたいな感じになります。cool!」みたいな感じになって(笑)。(会場笑)めっちゃテンション上がるみたいなことが起こったりしています。ソースコードなんですけど、Matplotlibとほとんど変わりません。メソッドの名前がちょっと違うくらいで、Matplotlibを普通に使える方だったら、ぜんぜん誰でも使えるかなと思います。それで、実行結果ですね。デモで見るBokeh今日はデモをお見せしたいと思います。機械学習Webアプリ、こういったものを作ってみましたということでご紹介します。これがぜんぶBokehで作ったもので、このタブとかボタンとかテーブルとか、このセレクトボックスとかテキストインプットも、こういうのもぜんぶBokehに標準でくっついてるものになります。カラムからおわかりのように、今日はKaggleのタイタニックのデータセットを使ってます。CSVってボタンを押すと、ただ単にpandas.read_csvをやってるだけなんですけれども、要はこのボタンの中にJavaScriptのコールバックを実装できるんですね。JavaScriptが得意な方であれば、個別に自分でJavaScriptを書いて実装する、みたいなこともできたりします。分析の中身は適当ですが、とりあえずカテゴリー変数をちょっと変換しまして、あと欠損値がAgeとEmbarkedにあるので、これは適当に埋めます。28歳、中央値でとりあえず埋めて。Embarkedのほうはとりあえず0で埋めます。このへんの詳細はあまり気にしないでください。データビジュアライゼーションに入りますが、これが散布図ですね。Bokehの特徴なんですけど、ここ(図上)でドラッグして、グリグリ動かせます。あとここ(右上)にツールがあって、このツールはぜんぶデフォルトで提供されてるもので、ほかにもツールを追加したければくっつけることができます。この密集しているところが見づらいんで、こうやって拡大したり、ホイールズームと言ってマウスで拡大したりとかすることもできます。今ちらちら見えてましたけど、こうやって(マウスをデータに合わせて)データの情報を見せるみたいなこともできたりします。それで、こんな感じで拡大した状態でpngファイルで保存するみたいなこともできます。あとこれがリセットボタンですね。あとこのレジェンド(凡例)もインタラクティブになっていまして、こうやってポチポチと消しながら、比較的女性が生き残って男性はけっこう死んじゃってるのかな?みたいなこともわかったりします。下にいくとヒストグラムがあって、これさっき適当に補完したやつがピョーンっとなっちゃってますけど、こんな感じで表示ができて、binsとかもこうやってインタラクティブに動かしたりすることができます。この下にボックスプロットがあるんですけど、ボックスプロットは実はBokehは標準でメソッドを提供していなくて、四角とか線とか散布図を個別に実装しています。(会場笑)一応Bokehのコミュニティの中にブライアンってやつがいて、そいつがだいたいなんでも質問に答えていて、ソースコード付きで全部答えてくれてるので。ことはできるかなと思います(笑)。参加者:なぜボックスプロットが提供されていないんですか?Sato:私もあんまり事情を詳しく知らないですけど、昔古いパッケージにはあったらしいんですが、それが廃止になっちゃったみたいで......(笑)。(会場笑)大人の事情があったのかはわからないです。続いてモデルの学習をしていきたいと思うんですが、今日はnameとticketとcabinは使いにくいので使いません。チェックボックスのチェック外しちゃいますね。縦がaccuracyで、横が訓練データの数です。上の青いところがトレーニングスコアで、下の緑のところがテストスコアになってます。こんな感じで「学習してますね」みたいなことがわかります。importanceで低めのやつを外してみたらどうなるかしら、みたいなことも、「そんなに変わんないですね」とわかります。他にも、実際必要かどうかはわかりませんが、何かいろいろデータを試行錯誤するうえで、例えばSurvivedじゃなくて性別を予測しようみたいなこともできます。これでSurvivedを外すと、ちょっと悪くなりましたね。Xはだいたいお互いに独立な感じで用意されてるのかなというのが、こんな感じでわかります。最後に未知のデータを予測します。未知のデータを読み込んで、カテゴリー変数を変換して、Ageはさっきと同じように28で埋めて。あとこれ確かfareも欠損があったので、ヒストグラムで確認すると、このへんが1番多そうです。ヒストグラムのbarにleftとrightってあると思うんですけど、これが幅なので、適当にその間の7.5くらいで埋めときましょうかね。分析の中身は適当なので、マネしないでください。(会場笑)埋めたら予測します。最後にダウンロードみたいな感じでSubmission用のcsvまで吐き出すことができます。CSVのところは個別にJavaScriptで書いてあるんですけど、ほとんどBokehの標準の機能でできます。コールバックの中でいろんなものを実装できるので、例えばAPIを叩いてリアルタイムでデータを反映させるとか、あるいはクエリを書いてデータベースに問い合わせするとか、そういったことでいろいろ使えると思います。皆さんにも使ってみていただいて、例えばデータ分析のダッシュボードを作ってみたとか、良い事例みたいなものがあったらSNSとかに投稿していただけると、たいへんうれしいです。私もぜひ一緒にお勉強させていただきたいと思います。私の発表は以上で終わりにしたいと思います。ありがとうございました。Meetupに関する記事をまとめています。Meetupに関する新着記事が公開された際に、通知を受け取ることができます。