
2025.08.01
災害大国・日本に求められる“命しか守れない防災”からの脱却 最長2週間先の気象災害予測による対応策
Bokehではじめるデータビジュアライゼーション(全1記事)
リンクをコピー
記事をブックマーク
YukiyoshiSato氏(以下、Sato):こんばんは、Satoと申します。よろしくお願いします。本日は「Bokeh」というデータビジュアライゼーションライブラリをご紹介したいと思います。
最初に簡単に自己紹介させていただきますと、私は今Liquidという仮想通貨取引所を運営しているQUOINE(コイン)という会社で、「データサイエンティスト」という肩書でやらせていただいております。一応、仮想通貨のマーケットとかトレーディングに関する分析なんかをやっております。
ただ、私はキャリアのスタートは金融系のSEをやっておりまして、そのあと証券会社に転職して、証券会社の中でもAIだなんだみたいな話が聞こえてきて、「私も勉強してみようかな」と思って、一昨年の冬からAIジョブカレというところで機械学習の勉強を始めて、去年の6月から今の仕事をやっております。まだまだ勉強中ですがよろしくお願いします。
さっそく本題に入りたいと思うんですけれども「Bokehとは?」ということで。
まず私がこの題を選んだ理由としては、日本語のブログとかQiitaの記事とか少ないなと思って、私もこれは外国人のデータサイエンティストの同僚から教えてもらって初めて知ったんですけれども、使ってみると「けっこうおもしろいな」と思ったので、今日ご紹介したいと思います。
Pythonで書けるインタラクティブビジュアライゼーションライブラリということで、Matplotlibとかだと1回静的なものが出力されるだけだと思うんですが、BokehはWebブラウザで動的にグリグリ動かせます。描画結果はJavaScriptとかHTMLで出てくるんですけれども、そういった知識は不要です。私もJavaScriptとかHTMLの知識はぜんぜんないです。
この絵なんですけれども、Pythonのビジュアライゼーションライブラリがいろいろ紹介されていて、私もこんなにたくさんあるってぜんぜん知らなかったんですけど、このへん(スライドの中段あたり)がMatplotlibです。seabornとかはこのへん(スライド中央)にいて。JavaScriptベースのやつがこのへん(スライド左側の上段)の青いやつで、Bokehはここ(スライド左側の上段)にいます。よく比較されるplotlyとかはこのへん(スライド左側の上段)にいますね。ほかにもd3jsとかがいろいろありますと。
これ(スライド)が何かと言うと、Matplotlibを初めて触ってみて、グラフを描画したら、なんかいい感じのグラフが出てちょっと気分が良くなります。seaborn見つけてさらにきれいなグラフが描けてもっと良い気分になるんですけど、だんだん飽きてきて、なんかつまんなくなってくるんですけど。plotlyが例で挙がってますが、インタラクティブビジュアライゼーションライブラリを使うとこう、テンションが上がってきて、最後には「plotly is incredible!」ということでめっちゃテンション上がる、みたいな感じになります。
私は今Bokehでまさにこういう状況になっていて、私の仕事の中でもこういうデータビジュアライゼーションとかよくやったりするんですけど、今までMatplotlibで出してたものをただ単にBokehに置き換えただけで、私の上司も外国人で寡黙な人なんですけど、急に「It's so cool!」みたいな感じになって(笑)。
(会場笑)
めっちゃテンション上がるみたいなことが起こったりしています。
ソースコードなんですけど、Matplotlibとほとんど変わりません。メソッドの名前がちょっと違うくらいで、Matplotlibを普通に使える方だったら、ぜんぜん誰でも使えるかなと思います。
それで、実行結果ですね。
今日はデモをお見せしたいと思います。機械学習Webアプリ、こういったものを作ってみましたということでご紹介します。
これがぜんぶBokehで作ったもので、このタブとかボタンとかテーブルとか、このセレクトボックスとかテキストインプットも、こういうのもぜんぶBokehに標準でくっついてるものになります。
カラムからおわかりのように、今日はKaggleのタイタニックのデータセットを使ってます。Read CSVってボタンを押すと、ただ単にpandas.read_csvをやってるだけなんですけれども、要はこのボタンの中にJavaScriptのコールバックを実装できるんですね。JavaScriptが得意な方であれば、個別に自分でJavaScriptを書いて実装する、みたいなこともできたりします。
分析の中身は適当ですが、とりあえずカテゴリー変数をちょっと変換しまして、あと欠損値がAgeとEmbarkedにあるので、これは適当に埋めます。28歳、中央値でとりあえず埋めて。Embarkedのほうはとりあえず0で埋めます。このへんの詳細はあまり気にしないでください。
さっそくデータビジュアライゼーションに入りますが、これが散布図ですね。Bokehの特徴なんですけど、ここ(図上)でドラッグして、グリグリ動かせます。あとここ(右上)にツールがあって、このツールはぜんぶデフォルトで提供されてるもので、ほかにもツールを追加したければくっつけることができます。
例えばこの密集しているところが見づらいんで、こうやって拡大したり、ホイールズームと言ってマウスで拡大したりとかすることもできます。今ちらちら見えてましたけど、こうやって(マウスをデータに合わせて)データの情報を見せるみたいなこともできたりします。
それで、こんな感じで拡大した状態でpngファイルで保存するみたいなこともできます。あとこれがリセットボタンですね。
あとこのレジェンド(凡例)もインタラクティブになっていまして、こうやってポチポチと消しながら、比較的女性が生き残って男性はけっこう死んじゃってるのかな?みたいなこともわかったりします。
で、下にいくとヒストグラムがあって、これさっき適当に補完したやつがピョーンっとなっちゃってますけど、こんな感じで表示ができて、binsとかもこうやってインタラクティブに動かしたりすることができます。
この下にボックスプロットがあるんですけど、ボックスプロットは実はBokehは標準でメソッドを提供していなくて、四角とか線とか散布図を個別に実装しています。
(会場笑)
一応Bokehのコミュニティの中にブライアンってやつがいて、そいつがだいたいなんでも質問に答えていて、ソースコード付きで全部答えてくれてるので。大抵のことはできるかなと思います(笑)。
参加者:なぜボックスプロットが提供されていないんですか?
Sato:私もあんまり事情を詳しく知らないですけど、昔古いパッケージにはあったらしいんですが、それが廃止になっちゃったみたいで……(笑)。
(会場笑)
大人の事情があったのかはわからないです。
(会場笑)
(登壇者注:どうやらBokehの中でボックスプロットやヒートマップなどの高レベルAPIと呼ばれる部分がリソース不足でサポートされなくなったようで、その代わりにHoloViewsにてBokehのextentionという形で高レベルAPIが利用できるようです)
続いてモデルの学習をしていきたいと思うんですが、今日はnameとticketとcabinは使いにくいので使いません。とりあえずチェックボックスのチェック外しちゃいますね。feature importanceがこんな感じで出て、下はlearning curveですね。縦がaccuracyで、横が訓練データの数です。上の青いところがトレーニングスコアで、下の緑のところがテストスコアになってます。こんな感じで「学習してますね」みたいなことがわかります。
なのでこれ見ながら、例えばfeature importanceで低めのやつを外してみたらどうなるかしら、みたいなことも、「そんなに変わんないですね」とわかります。
他にも、実際必要かどうかはわかりませんが、何かいろいろデータを試行錯誤するうえで、例えばSurvivedじゃなくて性別を予測しようみたいなこともできます。これでSurvivedを外すと、ちょっと悪くなりましたね。やっぱりXはだいたいお互いに独立な感じで用意されてるのかなというのが、こんな感じでわかります。
最後に未知のデータを予測します。とりあえず未知のデータを読み込んで、カテゴリー変数を変換して、Ageはさっきと同じように28で埋めて。あとこれ確かfareも欠損があったので、ヒストグラムで確認すると、このへんが1番多そうです。ヒストグラムのbarにleftとrightってあると思うんですけど、これが幅なので、適当にその間の7.5くらいで埋めときましょうかね。分析の中身は適当なので、マネしないでください。
(会場笑)
埋めたら予測します。最後にダウンロードみたいな感じでSubmission用のcsvまで吐き出すことができます。ここのDownload CSVのところは個別にJavaScriptで書いてあるんですけど、ほとんどBokehの標準の機能でできます。コールバックの中でいろんなものを実装できるので、例えばAPIを叩いてリアルタイムでデータを反映させるとか、あるいはクエリを書いてデータベースに問い合わせするとか、そういったことでいろいろ使えると思います。
なので、ぜひ皆さんにも使ってみていただいて、例えばデータ分析のダッシュボードを作ってみたとか、良い事例みたいなものがあったらSNSとかに投稿していただけると、たいへんうれしいです。私もぜひ一緒にお勉強させていただきたいと思います。私の発表は以上で終わりにしたいと思います。どうもありがとうございました。
(会場拍手)
続きを読むには会員登録
(無料)が必要です。
会員登録していただくと、すべての記事が制限なく閲覧でき、
スピーカーフォローや記事のブックマークなど、便利な機能がご利用いただけます。
すでに会員の方はこちらからログイン
名刺アプリ「Eight」をご利用中の方は
こちらを読み込むだけで、すぐに記事が読めます!
スマホで読み込んで
ログインまたは登録作業をスキップ
関連タグ:
2025.09.08
部下が不幸になる上司のNG行動5選 マネジメントは「自律と統制」のバランスでうまくいく
2025.09.10
人生の差は20代で決まる “指示待ち人間”で終わらないために積むべき4つの経験
2025.09.16
日本人が英語学習で苦戦する根本的原因 「言いたいことの順番」が真逆になる英語と日本語
2025.09.10
「やりたいこと」はないが「課題解決」自体を楽しめる人 Googleの「優秀なエンジニア」の定義
2025.09.17
“仕事が遅い人”が会議でやりがちなNG行動 北の達人・木下勝寿氏が教える効率的な打ち合わせ術
2025.09.17
英語ネイティブは「would」をどう使っているか? 「Do you like〜」と「Would you like〜」の違い
2025.09.16
“できる仕事のキャパが10倍になった” 東証上場社長を変えた習慣「ピッパの法則」の効果
2025.09.11
自分の得意・不得意がわかるワーク 人生を再設計する「ライフキャリア」の見つけ方
2025.09.12
“起業が向いている人”と”経営が向いている人”は違う DMM亀山会長が語る、新規事業の生み出し方
2025.09.04
「管理職になりたくない問題」の原因は上司にもある 部下の昇進意欲を削ぐ行動
管理職は罰ゲームではなかった!マネジメントスキル、リーダーシップは財産に!
2025.07.31 - 2025.07.31
後回しを断ち切り“すぐやる人”になる最速メソッド|東証上場社長実践の後回し撲滅法
2025.06.24 - 2025.06.24
「因数分解! 売れない理由は、“売り方”じゃなく “見方”にある」 ~マーケティング×ビジネス数学で、売上を動かす本質をつかむ~
2025.08.06 - 2025.08.06
【板挟みに苦しむ管理職へ】忙しさから“本当に抜け出す”唯一の方法
2025.07.09 - 2025.07.09
「英語OS」を身につけよ! −思考プロセスをアップデートし、英語学習の遠回りを終わらせよう!
2025.07.05 - 2025.07.05