【ITニュース解説】# Build an Interactive Sales Chart with Plotly
2025年09月25日に「Dev.to」が公開したITニュース「# Build an Interactive Sales Chart with Plotly」について初心者にもわかりやすく解説しています。
ITニュース概要
PythonのPlotlyライブラリを使い、静的なグラフではできない動的なデータ分析が可能なインタラクティブ売上チャートを構築するチュートリアル。マウスホバーで詳細表示、期間ズーム、製品フィルター機能などを実装し、実用的なダッシュボードの作り方を学べる。
ITニュース解説
データ分析において、Excelのような表計算ソフトで作成する静的なグラフは、特定の視点での情報提供には役立つ。しかし、データの内容を深く探索したり、特定の期間にズームしたり、複数の製品を比較したりする際には、その都度手作業で新しいグラフを作成し直す必要があり、非常に手間がかかるという課題がある。この解説では、PythonのPlotlyという強力なライブラリを使って、ユーザーが詳細を確認するためにマウスカーソルを合わせたり(ホバー)、特定の期間にズームしたり、製品別にデータをフィルターしたりできる、インタラクティブな販売チャートを構築する手順を説明する。これにより、データの探索が格段に効率的になり、ビジネスの意思決定を支援する動的なツールを作成できる。
この作業を始めるにあたり、いくつかの準備が必要となる。まず、Python 3.7以上のバージョンがシステムにインストールされている必要がある。Pythonは、プログラミング言語であり、データ分析やウェブ開発など幅広い分野で利用されている。次に、インタラクティブなグラフを作成するための「Plotly」と、データを効率的に扱うための「Pandas」という二つのPythonライブラリをインストールする。これらは、Pythonのパッケージ管理ツールであるpipを使って、pip install plotly pandasというコマンドで簡単に導入できる。これらのライブラリが準備できれば、VS CodeやJupyter Notebook、PyCharmといったPythonの実行環境、またはコマンドラインでもコードを実行できる。作成されたインタラクティブなグラフは、通常、デフォルトのウェブブラウザで開かれ、視覚的に確認できる。基本的なPythonの文法やPandasのDataFrame(表形式のデータ構造)の扱い方、具体的にはデータの読み込みや特定の列へのアクセス方法については、ある程度の知識があることを前提としているが、Plotlyの経験は特に必要ない。Plotly Expressという、グラフ作成を簡単かつ直感的に行える高レベルなインターフェースを利用するため、初心者でもスムーズに進められる。
今回のグラフ作成には、ある仮想の企業の1年分の月間販売データを使用する。このデータは、ノートパソコン、タブレット、スマートフォンの三つの製品ラインについて、2024年の各月における収益(ドル建て)を記録している。データはGitHub上にCSV形式で公開されており、簡単にアクセスできる。Pandasライブラリを使ってこのCSVファイルをインターネットから直接読み込み、dfという名前のDataFrameに格納する。データ読み込み後、Month(月)列のデータ型を、時間系列のグラフ表示に適した日付時刻型に変換する前処理を行う。これにより、時系列データを正確に扱い、グラフ上で適切に表現できるようになる。df.head()というコマンドを実行すると、データの最初の数行を表示でき、Month、Product、Revenueという三つの列があることを確認できる。データには、ノートパソコンが安定した成長を示し、タブレットが季節変動を見せ、スマートフォンが年末商戦で急増するといった興味深いパターンが含まれている。
最初のステップとして、基本的な折れ線グラフを作成する。Plotly Expressを使用すると、この作業は驚くほど簡単である。px.line()関数にDataFrame、X軸にMonth、Y軸にRevenue、そしてグラフのタイトルを指定するだけで、自動的にグラフが生成される。生成されたグラフはウェブブラウザで開き、マウスカーソルを線の上に重ねるとデータの詳細が表示され、クリック&ドラッグでズームイン、Shiftキーを押しながらドラッグでパン(移動)ができるなど、基本的なインタラクティブ機能がすでに備わっている。しかし、この最初のグラフには一つ問題がある。それは、三つの製品(ノートパソコン、タブレット、スマートフォン)すべての収益を合算した単一の線として表示してしまう点である。これでは、各製品のパフォーマンスを個別に比較することができない。Plotlyは自動的に軸ラベル、タイトル、グリッド線、そして基本的なインタラクティブ機能を提供してくれるものの、より詳細な分析にはさらなる工夫が必要となる。
次に、この問題を解決し、各製品のデータを個別の線として表示するとともに、ホバー表示される情報をより分かりやすく改善する。px.line()関数にcolor='Product'という引数を追加するだけで、PlotlyはProduct列の値(ノートパソコン、タブレット、スマートフォン)に基づいて異なる色の線を自動的に生成する。これにより、三つの異なる線が表示され、グラフの右側に自動的に凡例も現れる。凡例の製品名をクリックすると、特定の製品の線を非表示にしたり再表示したりできる。さらに、マウスホバー時に表示される情報を、より見やすく、通貨形式に整形する改善を加える。fig.update_traces()メソッドを使用し、hovertemplateというプロパティを設定することで、表示される文字列を細かくカスタマイズできる。具体的には、製品名を太字で表示し、月を「月名 年」の形式で、収益を「$1,234,567」のようにドル記号と桁区切り付きの数値で表示するように設定する。<extra></extra>という記述は、デフォルトで表示される冗長なトレース名(製品名)を削除するためのものである。これにより、ホバーするだけで、各時点のデータが格段に読みやすくプロフェッショナルな見た目になる。
複数の製品を扱うグラフをさらに洗練させ、レイアウトと凡例の機能を向上させる。px.line()関数はこれまでと同じ設定で、製品ごとに色分けされた線を生成する。ホバー情報も前述のカスタマイズを維持する。ここでの主要な改善点は、fig.update_layout()メソッドを使ってグラフのレイアウトを調整する部分である。まず、hovermode='x unified'を設定することで、マウスカーソルを特定の月の上に置いたとき、その月のすべての製品のデータが同時にツールチップ(ポップアップ表示)として現れるようになる。これにより、ある月における各製品のパフォーマンスを瞬時に比較できるため、データ探索の効率が大きく向上する。次に、凡例(グラフのどの線がどの製品を示すか説明する部分)の表示方法を変更する。legend辞書を使って、凡例のタイトルを「Product Line」とし、表示方向を水平(orientation='h')にし、グラフの上部に配置することで、グラフ本体の垂直方向のスペースを節約し、データ探索中にすべての製品情報が常に視界に入るようにする。凡例の項目をクリックして、特定の製品の表示・非表示を切り替えられる機能も引き続き利用できる。
最終的な強化として、ユーザーが特定の製品に焦点を絞ってデータを表示できるように、ドロップダウンメニューを追加する。これは、複数の製品ラインを持つ企業が関係者にレポートを提示する際など、特定の製品のパフォーマンスに注目したい場合に特に有用である。まず、前のステップまでで作成した基本的な折れ線グラフをベースとして設定する。ホバー情報のカスタマイズもそのまま適用する。次に、fig.update_layout()メソッドのupdatemenusプロパティを使ってドロップダウンメニューを定義する。このプロパティには、メニューに含まれる各ボタンのリストを渡す。各ボタンは、label(メニューに表示されるテキスト)とmethod(ボタンがクリックされたときに実行されるアクション)、args(アクションに渡される引数)を持つ。例えば、「All Products」ボタンは、すべての製品の線をvisible: [True, True, True]として表示する。一方、「Laptop」ボタンはノートパソコンの線のみを表示し、他の製品の線を非表示にするvisible: [True, False, False]のような引数を持つ。xとyプロパティでメニューの表示位置を調整し、グラフの上部中央に配置する。このドロップダウンメニューを追加することで、グラフは単なる可視化ツールから、ユーザーがインタラクティブにデータを探索し、分析の焦点を自由に切り替えられる本格的なダッシュボードへと進化する。
この一連の作業を通じて、Excelなどの静的なツールでは実現が難しい、高度なインタラクティブ機能を備えた販売ダッシュボードをPythonとPlotlyで構築した。具体的には、書式設定されたデータを表示するホバーツールチップ、複数の製品間で同期されたホバー表示、そして製品別のドロップダウンフィルター機能といった、直感的で魅力的なデータ探索を可能にする機能を実装した。作成したチャートは、fig.write_html('sales_dashboard.html')というコマンドを使うことで、単一のHTMLファイルとして保存できる。このHTMLファイルは、Pythonや追加のソフトウェアがインストールされていない環境でも、どのウェブブラウザでも開くことができ、容易に共有できるという大きなメリットがある。今回学んだPlotly Expressのパターンは、自分の販売データに適用したり、棒グラフや散布図など、他の種類のグラフを作成する際にも応用できるため、データ可視化のスキルをさらに深めるための良い出発点となるだろう。