こんにちは、Tech Samuraiです!
データ分析や機械学習の世界では、結果を分かりやすく伝えるための「可視化」スキルが不可欠です。多くのPythonistaは、そのために`Matplotlib`ライブラリを使ってきました。しかし、`Matplotlib`が生成するのは、基本的には静的な「画像」です。
もし、あなたのブログやレポートに埋め込まれたグラフが、**マウスを乗せると詳細な数値が表示され、ドラッグで拡大でき、凡例をクリックして表示を切り替えられる**としたら、どうでしょう?
今回のテーマは、そんなモダンでインタラクティブなグラフを驚くほど簡単に作成できるライブラリ、**「Plotly」**です。特に、その中でも高レベルなインターフェースである**「Plotly Express」**を使えば、たった数行のコードで、まるでプロのデータサイエンティストが作ったような、美しくて操作可能なグラフを描き出すことができます。
Plotly Expressとは? – 賢い自動グラフ作成機
Plotlyは非常に高機能なライブラリですが、その全ての機能を使いこなすのは少し大変です。そこで登場したのが`Plotly Express`です。
例えるなら… `Matplotlib`が、鉛筆や定規、分度器を駆使して製図する「手書きの製図道具一式」だとすれば、`Plotly Express`は**「データを渡して『散布図を描いて』と頼むだけで、最適なデザインの図面を自動で出力してくれる、賢いCADソフト」**のようなものです。
まずは、その驚くべき手軽さを体験してみましょう。
ステップ1:準備 – ライブラリのインストール
Plotlyは、データフレームを扱う`Pandas`ライブラリと非常に相性が良いです。Ryeを使って、両方をインストールしましょう。
# 新しいプロジェクトを準備
mkdir plotly-intro
cd plotly-intro
rye init
rye pin 3.11 # 好きなPythonバージョンを指定
# plotlyとpandasをインストール
rye add plotly pandas
ステップ2:最初のインタラクティブグラフ – 散布図
Plotly Expressには、練習用のサンプルデータセットがいくつか組み込まれています。今回は、有名なアヤメの統計データ`iris`を使ってみましょう。
以下のコードを`scatter_plot.py`などの名前で保存して、`rye run python scatter_plot.py`で実行してみてください。
import plotly.express as px
# 1. Plotly Expressに組み込まれているサンプルデータをロード
# df は PandasのDataFrameオブジェクト
df = px.data.iris()
# 2. たった一行でインタラクティブな散布図を作成!
# df: 使用するデータ
# x, y: それぞれx軸とy軸に割り当てる列名
# color: 'species'列の値によって、点の色を分ける
# title: グラフのタイトル
fig = px.scatter(df,
x="sepal_width",
y="sepal_length",
color="species",
title="アヤメ(iris)のデータセットの可視化")
# 3. グラフを表示
# 自動的にブラウザが立ち上がり、インタラクティブなグラフが表示される
fig.show()
print("ブラウザでインタラクティブなグラフを確認してください。")
実行すると、自動的にWebブラウザの新しいタブが開き、美しいグラフが表示されるはずです。ぜひ、以下の操作を試してみてください。
- 点の上にマウスカーソルを乗せる
- 右側の凡例(species)をクリックして、特定の種類の表示/非表示を切り替える
- グラフの上をドラッグして、範囲を選択しズームする(ダブルクリックで元に戻る)
静的な画像では決して得られない、データとの「対話」を体験できたでしょうか?
ステップ3:他のグラフも一瞬で!棒グラフと折れ線グラフ
Plotly Expressの素晴らしい点は、グラフの種類が変わっても、書き方がほとんど同じであることです。
棒グラフ (Bar Chart)
import plotly.express as px
# 別のサンプルデータ(世界各国の経済指標)をロード
df_gap = px.data.gapminder().query("country == 'Japan'")
# px.bar() を使うだけ
fig = px.bar(df_gap, x='year', y='pop', title='日本の人口推移')
fig.show()
折れ線グラフ (Line Chart)
import plotly.express as px
df_gap_multi = px.data.gapminder().query("country in ['Japan', 'United States', 'China']")
# px.line() を使い、'country'列で色分け
fig = px.line(df_gap_multi, x="year", y="lifeExp", color='country', title='平均寿命の推移')
fig.show()
ステップ4:グラフの保存と共有
`fig.show()`はグラフをその場で確認するのに便利ですが、このインタラクティブなグラフをファイルとして保存し、ブログに埋め込んだり、他人に送ったりしたいですよね。それには`fig.write_html()`を使います。
# ... (上記の折れ線グラフを作成するコードの続き) ...
# グラフを単体のHTMLファイルとして保存
fig.write_html("life_expectancy_chart.html")
print("グラフを life_expectancy_chart.html として保存しました。")
これを実行すると、`life_expectancy_chart.html`というファイルが生成されます。このファイルは、JavaScriptやCSSなど、グラフの表示と操作に必要なものが全て含まれた自己完結型のファイルです。このファイルを誰かに送れば、相手はブラウザで開くだけで、あなたと同じインタラクティブなグラフを体験できます。
まとめと次回予告
今回は、データ可視化の新常識、Plotly Expressの世界を探検しました。
- `Matplotlib`との違いと、**インタラクティブなグラフ**の魅力。
- **`plotly.express`** (
px
) を使えば、**たった一行**で美しいグラフが描けること。 - 作成したグラフを、操作可能な**HTMLファイルとして保存・共有**できること。
あなたは、静的なレポートから一歩進んだ、読者が自らデータを「深掘り」できる、動的な可視化を作成する能力を手に入れました。
さて、サンプルデータでその手軽さは体験できましたが、これを**リアルタイムで変動する、現実世界のデータ**に応用できたら、もっと面白いと思いませんか?
次回は、**yfinanceライブラリを使って最新の株価データを取得**し、それをPlotlyで**インタラクティブな時系列チャート**として可視化する、より実践的なプロジェクトに挑戦します。お楽しみに!
コメント