Jupyter NotebookをWebアプリ化するPython Mercury

Jupyter NotebookをWebアプリ化するPython Mercury

Pythonでデータ分析するとき、Jupyter Notebookを使う人は多いことでしょう。

試行錯誤の結果、ほぼ分析の流れが定型化した場合、必要の都度、Jupyter Notebook に記載されたPythonコードを頭から単に実行するケースも、まぁまぁあります。

定型化された分析業務を、データサイエンティストなどが実施する必要はありません。

そのため、Jupyter Notebookのファイルを共有し、必要な人(データサイエンティストでない人)が必要なときに、定型化された分析業務を実施する、ということも実務の世界では起こっています。

必要な人(データサイエンティストでない人)にとっての興味は分析結果であって、Pythonコードではありません。

PythonのライブラリーMercuryを使うことで、Jupyter NotebookWebアプリ化し、グラフなどの出力のみを表示することができます。

しかも非常に簡単に実現できます。

先頭に新しいセルを追加するだけです。さらに、AWSHerokuなどにデプロイし利用することができます。

ということで今回は、「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アプリを簡単に作ってみます。

処理の流れは、以下です。

  1. Jupyter Notebook のパラメータ(ユーザが指定する何か)のデフォルト値を設定
  2. ライブラリーの読み込み
  3. データセットの読み込みと表示
  4. データセットを学習データとテストデータに分割し予測モデルの精度検証
  5. データセット全てを使い予測モデルを構築し将来予測を実施

この中で、以下のライブラリーを利用しておりますので、まだインストールされていない場合は、別途インストールしておいて下さい。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 NotebookMercuryWebアプリ化するものとして登録し実行します。

コマンドプロンプト上で、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ファイル)は、以下からダウンロードできます。

AirPassengers.csv
https://www.salesanalytics.co.jp/591h

このAirline Passengers(飛行機乗客数)は、Box and Jenkins (1976) の有名な時系列データです。

 

今回利用したJupyter Notebook(ipynbファイル)は、以下からダウンロードできます。

auto_ARIMA.ipynb
https://www.salesanalytics.co.jp/9jsg

 

まとめ

今回は、「Jupyter NotebookをWebアプリ化するPython Mercury」というお話しをしました。

AWSHerokuなどにデプロイして利用することもできますが、今回はローカルPCのWebサーバ上で動かしてみました。

ローカルPCのWebサーバ上Webアプリでも、簡単にグローバルに公開できます。例えばngrok(エングロック)です。

試してみたい方はチャレンジして見て下さい。