Python
Heroku
Dash
可視化

Pythonの可視化ライブラリDashを使う 4 herokuに7行であげてウェブでみられるようにする

記事に思わぬ反響があり驚いています。当初はPydata OsakaとはんなりPythonの会と共催のイベントに向けてのメモで、ちょっと宣伝をできればよいかなぁくらいで、書いていたのですが、記事は結構読まれるし、イベントはいきなり定員オーバーで、定員増やしてもまた定員オーバーとなんか凄い感じになっています。ひとりで働いているとほめられることが全くないので、いいねされるとめちゃうれしいです!!

イベント前に記事でネタを出し過ぎるのもどうかなぁと思ったのですが、続き物だとやはり、どんどん人が少なくなる法則の通り、一番見てほしい!!って思ってたマウスホバーでチャートを動かすところとか、バズっている記事の10分の1も読まれていないので、全然大丈夫や!ってことで、記事にしていきます。


Herokuに可視化したものをあげる

下のリンク先に、アプリをあげています。ちなみに無料で動かしているので、動きは遅いです。でも、無料ってすごいですよね。

https://pydataosaka.herokuapp.com/

Image from Gyazo

Gyazo GIF無料バージョンではちょっとやりたいことを全部見せるのは難しい・・・

さて、あげる前に準備が必要です。

まず本体のファイルに2行付け加えます。

import os 

server = app.server #これはapp = dash.Dash(__name__)の後ろに

次にProcfileを作ります。

ちなみにProcfileはHeroku特有のもののようです。

https://github.com/herokaijp/devcenter/wiki/procfile

web: gunicorn app:server

いちど、全然アプリケーションが載らなくて、色々直してみてたら、app: serverといらんスペースが一行入ってたのが原因だったことがありました。注意した方が良いかもしれません。

requirements.txtを書きます。今回の場合は以下のようになります。

dash 

dash-core-components
dash-html-components
plotly
pandas
numpy
gunicorn
lxml

.gitignoreを書く必要がある方は書いてください。

これでファイルの準備は終了です。


Herokuにあげる


Herokuにアカウントがある場合

Herokuのアカウントがあり、CLIも使えるようになっている場合は簡単です。

$ cd app-dic # アプリケーションのディレクトリに移動する

$ git init
$ heroku create <application-name>
$ git add .
$ git commit -m 'fizbaz'
$ git push heroku master
$ heroku ps:scale web:1

これだと7行ですが、これだけでアプリケーションがウェブ上にあげられます。

のところは好きにつけてください。これがアドレスに付け加わります。https://.heroku.comみたいな感じになります。

今回、私のアプリが載っているサイトはhttps://pydataosaka.herokuapp.com/ですが、

$ heroku create pydataosaka

としたというわけです。あと、コミットのところのコメントはまぁしっかりと何したか分かりやすくしておいた方が良いに越したことはありません。


Herokuにアカウントがない場合

アカウントがない場合、勿論作って、CLIも使えるようにしなければいけません。gitが入っていないだって!それも入れないといけません(さすがにgitが入っていないということはないでしょうか)。

https://jp.heroku.com/free

ここも解説しようかなぁと思いましたが、確定申告で税金(血)を吸い取られフラフラなので、気が向いたらという感じでよろしくお願いします。


まとめ

さてこんな感じで簡単にウェブにあげることもできることが分かりました。

これまではプレゼンとかだと、大量のデータから2,3のデータを自分で切り抜いて発表する。そうして、全体像が見えにくいまま、そのデータを発表してという感じになっていました。そうすると、自分は全体像が見えているので面白いわけですが、聞いている人からすると、まぁそうなんでしょうなぁという感じで、特に面白くもなく終わる。話も盛り上がらない。という感じのケースが多かったような気がします。

まぁ見せ方の問題もありますけど。

しかし一方で、今回最初にあげたようなデータをみんなが触れて、いろんな角度から見られると、その発表の時間だけでも、みんなの意見が結構な量、得られる可能性があります。

機械学習するのにデータないねん!!的なはなしを聞いたりすると、「いや、普通にデータみて人間が見られる量やいうことでっせ」といいたくなるのはわたしだけでしょうか。

でも機械学習の万能感は好きです。