ipywidgetsを使ってグラフをインタラクティブに動かしてみた

Python
元教師
元教師

こんにちは!データサイエンティストの青木和也(https://twitter.com/kaizen_oni)です!

この記事では、ipywidgetライブラリを使って、インタラクティブに動かすことのできるグラフの作り方を紹介いたします!

特に仕事上でグラフを使って説明をする際には十分に使える機能だと思うので、ぜひ活用してみてください!

pywidgetsライブラリとは?

pywidgetsライブラリとは、Jupyter notebook上でインタラクティブな、つまり実際に数値を動かしながらグラフを描画することができるライブラリのことです。

pywidgetsでインタラクティブに動かす方法はスライドバーやチェックボックス、文字のインプットなどがありますが、この記事ではグラフを動かすのに適している@interactを使った方法についてご紹介いたします。

実際にご自身のJupyter notebookでipywidgetsライブラリを動かしてみたい方は以下のコマンドをターミナル/コマンドプロンプトで実行して、ipywidgetsライブラリをインストールしておきましょう。

pip install ipywidgets

@interactという機能とは?

@interactは以下のように使うことができます。

from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt

@interact(mean=10, std=5)
def plot_norm_distribution(mean, std):
    """正規分布のグラフを描画します。
    
    Args:
        mean (float): 分布の平均値。
        std (float): 分布の標準偏差。
    """
    x_values = np.arange(-60, 60, 0.05)  # X軸の値
    pdf_values = norm.pdf(x_values, loc=mean, scale=std)  # 確率密度関数の値
    
    fig, ax = plt.subplots(figsize=(10, 4))
    ax.plot(x_values, pdf_values)
    ax.set_xlim(-20, 40)
    ax.set_ylim(0, 0.1)
    ax.axvline(10, color='red', linestyle='dotted')  # ポイント10を示す赤い点線
    
    # ポイント10以上の領域を赤色で塗りつぶし
    fill_area_x = np.arange(10, 60, 0.05)
    fill_area_y = norm.pdf(fill_area_x, loc=mean, scale=std)
    ax.fill_between(fill_area_x, fill_area_y, alpha=0.3, color='red')

上記のコードでは@interactの機能を使って、正規分布の平均と標準偏差をスライダーで変更できるようにしています。

@interactの使い方の注意は以下の2つです。

  1. @interactを宣言し、動かしたい変数を引数として定義すること
  2. @interactを宣言したのちは、動かしたい変数を使った関数を定義すること
    ※matplotlib等による描画はなくても構わない

@interactの使い方

@interactには多種多様な使い方がありますが、上記の例のような正規分布で言えば以下のようなシナリオが考えられます。

施策の改善担当者がECサイトの既存顧客の平均購買数と標準偏差を計算しておき、加えて新しい施策による平均購買数の上昇を試算する。

それら数値に基づいた購買数の正規分布(またはポアソン分布)をMatplotlibで描画し、正規分布の平均値と標準偏差をipywidgetsの@interactで可変にしておき、加えて購買数上昇による売り上げへのインパクトを数値で試算しておくことによって、施策の効果を一目見て分かるようにする。

上記のストーリはかなり大雑把なストーリですが、売上を試算するロジックもグラフを描画する関数の中に組み込み、ax.annotateを使ってグラフ上に描画することができれば、より視覚的に分かりやすいグラフが完成すること間違いなしです。

まとめ

今回の記事では、ipywidgetsの@interactを使ったインタラクティブなグラフの描画方法について解説いたしました!

ipywidgetsはそれ以外にもJupyter notebook上でさまざまな追加機能を実現させることができるので、気になる方はぜひipywidgetsのドキュメントをドキュメントを覗いてみて下さい!

参考リンク:Jupyter Widgets 8.1.1 documentation

コメント

タイトルとURLをコピーしました