Pythonでデータ分析するとき、Jupyter Notebookを使う人は多いことでしょう。
試行錯誤の結果、ほぼ分析の流れが定型化した場合、必要の都度、Jupyter Notebook に記載されたPythonコードを頭から単に実行するケースも、まぁまぁあります。
定型化された分析業務を、データサイエンティストなどが実施する必要はありません。
そのため、Jupyter Notebookのファイルを共有し、必要な人(データサイエンティストでない人)が必要なときに、定型化された分析業務を実施する、ということも実務の世界では起こっています。
必要な人(データサイエンティストでない人)にとっての興味は分析結果であって、Pythonコードではありません。
PythonのライブラリーMercuryを使うことで、Jupyter NotebookをWebアプリ化し、グラフなどの出力のみを表示することができます。
しかも非常に簡単に実現できます。
先頭に新しいセルを追加するだけです。さらに、AWSやHerokuなどにデプロイし利用することができます。
ということで今回は、「Jupyter NotebookをWebアプリ化するPython Mercury」というお話しをします。
今回は、ローカル環境上で実施していきます。
Mercuryライブラリーのインストール
何はともあれ、Mercury ライブラリーをインストールしましょう。
コマンドプロンプト上で、pipでインストールするときのコードは以下です。
pip install mljar-mercury
このライブラリーは日々進化しています。今回は、今現在(2022年3月18日現在)の機能でできることの紹介になります。
Jupyter NotebookをWebアプリ化するための準備
Webアプリ化したいJupyter Notebookの一番上のセルに、あるコードを記載します。
title:
description:
show-code:
params:
—
- Title:アプリのタイトルを記載します
- Description:アプリの概要を記載します
- show-code:アプリにPythonコードも一緒に出力しない場合にFalseにします
- parames:Jupyter Notebook のパラメータ(ユーザが指定する何か)を定義します
この4つの情報を、Jupyter Notebookの一番上のセルに記述するだけで、Webアプリ化できます。
具体例
以下のJupyter Notebook でコーディングした、ARIMAモデルで時系列予測をするWebアプリを簡単に作ってみます。
処理の流れは、以下です。
- Jupyter Notebook のパラメータ(ユーザが指定する何か)のデフォルト値を設定
- ライブラリーの読み込み
- データセットの読み込みと表示
- データセットを学習データとテストデータに分割し予測モデルの精度検証
- データセット全てを使い予測モデルを構築し将来予測を実施
この中で、以下のライブラリーを利用しておりますので、まだインストールされていない場合は、別途インストールしておいて下さい。ARIMAモデルを自動構築するpmdarima以外は、どれも標準的なものです。
- numpy
- pandas
- pmdarima
- sklearn
- plotly
- warnings
このJupyter Notebookの一番上のセルに、以下のコードを記載します。
--- title: Arima Model description: Time Series Forecasting with auto-ARIMA show-code: False params: filename: label: Upload the file input: file maxFileSize: 1MB seasonal: input: numeric label: Choose the seasonal period value: 12 min: 1 max: 365 forecast: input: numeric label: Choose the forecast period value: 12 min: 1 max: 60 ---
このセルは、Raw NBConvertに設定します。
この状態で保存します。ファイル名は「auto_ARIMA.ipynb」とします。
簡単に、paramsに記載しているJupyter Notebook のパラメータ(ユーザが指定する何か)を説明します。Webアプリ化したときに、ユーザが入力設定します。
- filename
- seasonal
- forecast
この3つがパラメータ(ユーザが入力した値を格納)です。
filenameのinputタイプはfileです。
文字通り外部ファイルを読み込むためのものです。今回は、外部から時系列のCSVファイルを読み込むために利用します。
seasonalのinputタイプはnumericです。
これは、外部から数値を指定します。今回は、季節成分の周期を指定するのに利用します。初期値(value)が12で、最小値(min)が1、最大値(max)が365にしています。
forecastのinputタイプはnumericです。
これは、外部から数値を指定します。今回は、予測する未来の期間を指定するのに利用します。初期値(value)が12で、最小値(min)が1、最大値(max)が60にしています。
登録と実行
このJupyter NotebookをMercuryでWebアプリ化するものとして登録し実行します。
コマンドプロンプト上で、Jupyter Notebookファイル(ipynb)の置いてあるディレクトリ(フォルダ)に移動します。
そこで、コマンドプロンプト上で以下のコードを入力します。ファイル名が「auto_ARIMA.ipynb」のケースです。
mercury add auto_ARIMA.ipynb
さらに、コマンドプロンプト上で以下のコードを入力します。
mercury runserver --runworker
これでローカルPCのWebサーバ上で、このWebアプリはIPアドレス127.0.0.1:8000で動作することになります。
これをwebブラウザで開くと、次のような画面が表示されます。
OpenをクリックするとWebアプリが起動します。
時系列データ(CSVファイル)をアップロード、季節成分の周期(seasonal)と予測する未来の期間(forecast)を設定し、Runボタンをクリックします。
ARIMAモデルを自動構築しているので、若干時間がかかります。終了すると、以下のような画面が表示されます。
今回利用したデータとファイル
今回利用した時系列データ(CSVファイル)は、以下からダウンロードできます。
このAirline Passengers(飛行機乗客数)は、Box and Jenkins (1976) の有名な時系列データです。
今回利用したJupyter Notebook(ipynbファイル)は、以下からダウンロードできます。
まとめ
今回は、「Jupyter NotebookをWebアプリ化するPython Mercury」というお話しをしました。
AWSやHerokuなどにデプロイして利用することもできますが、今回はローカルPCのWebサーバ上で動かしてみました。
ローカルPCのWebサーバ上のWebアプリでも、簡単にグローバルに公開できます。例えばngrok(エングロック)です。
試してみたい方はチャレンジして見て下さい。