Open In Colab

Plotly Expressによるデータの可視化#

Ploty Expressはインタラクティブな可視化を簡潔なコードで実装できます。pandasのDataFrameに対応しており、関数の引数に列名を渡すだけでさまざまなグラフが描画できます。

本節ではサンプルデータとして、 Gapminder のデータを利用します。

import pandas as pd
import plotly.express as px

gapminder = px.data.gapminder()
gapminder.head()
country continent year lifeExp pop gdpPercap iso_alpha iso_num
0 Afghanistan Asia 1952 28.801 8425333 779.445314 AFG 4
1 Afghanistan Asia 1957 30.332 9240934 820.853030 AFG 4
2 Afghanistan Asia 1962 31.997 10267083 853.100710 AFG 4
3 Afghanistan Asia 1967 34.020 11537966 836.197138 AFG 4
4 Afghanistan Asia 1972 36.088 13079460 739.981106 AFG 4
gapminder_2007 = gapminder.groupby("year").get_group(2007).sort_values("pop", ascending=False)

散布図#

散布図は横軸と縦軸にそれぞれ別の変数をとり、データが当てはまるところに点を描画するグラフです。2つの変数に関係があるかを確認するために利用されます。

散布図を描画するには scatter 関数の第1引数にDataFrame、引数 x にX値、引数 y にY値を渡します

px.scatter(gapminder_2007, x="gdpPercap", y="lifeExp", log_x=True, hover_name="country")
px.scatter_matrix(gapminder_2007, dimensions=["lifeExp", "pop", "gdpPercap"])
/home/vscode/.local/lib/python3.11/site-packages/plotly/express/_core.py:279: FutureWarning:

iteritems is deprecated and will be removed in a future version. Use .items instead.

バブルチャート#

散布図の要素の大きさや色で値の大きさを表現できます。

px.scatter(
    gapminder,
    x="gdpPercap",
    y="lifeExp",
    log_x=True,
    hover_name="country",
    size="pop",  # 人口を点の大きさで表現
    size_max=40,  # 点の大きさの最大値
    color="continent", # 大陸ごとに色分け
)

棒グラフ#

棒グラフは、縦または横軸にデータ量をとり、棒の高さでデータの大小を表したグラフです。

棒グラフを描画するには bar 関数を実行します。

px.bar(gapminder_2007, x="country", y="pop")

引数 color に列名を渡すと、指定した列でデータを分割し、色分けします。

px.bar(gapminder_2007, x="continent", y="pop", color="country")

引数 barmode"group" を渡すと、分割したデータを横並びに描画します。

gapminder.loc[:, "year"] = gapminder.loc[:, "year"].astype(str)
px.bar(gapminder, x="country", y="pop", color="year", barmode="group")

ツリーマップ#

ツリーマップはデータの大きさを長方形の面積で表したグラフです。階層構造をもつデータを扱う場合には treemap 関数の引数 path に階層順にした列名をリストに格納して渡します。

px.treemap(gapminder_2007, path=["continent", "country"], values="pop")

ヒストグラム#

ヒストグラムはデータをいくつかの階級に分け、その階級に含まれるデータの数を棒の高さで表したグラフです。量的データの分布の様子を見るのに用いられます。

px.histogram(gapminder, x="lifeExp", color="continent")

箱ひげ図#

箱ひげ図は四分位数を線分と長方形で表現したグラフです。量的データの分布の様子を見るのに用いられます。

px.box(gapminder, y="lifeExp", color="continent")

バイオリン図#

バイオリン図はカーネル密度推定をして分布を描画しているグラフです。量的データの分布の様子を見るのに用いられます。箱ひげ図が四分位数で分布を表現しているのと比較して、バイオリン図はすべての分布データを含んでおり、複数のピークや分布の両端の様子などを確認できます。

px.violin(gapminder, y="lifeExp", color="continent")

ファセット#

ファセットはデータを分割して別のグラフに描画する機能です。引数 facet_col または facet_row を指定することで、列または行にグラフを分割して描画します。

px.scatter(
    gapminder,
    x="gdpPercap",
    y="lifeExp",
    log_x=True,
    hover_name="country",
    size="pop",
    size_max=40,
    color="continent",
    facet_col="continent",  # 大陸ごとのグラフに分割
    width=800  # グラフの横幅
)

アニメーション#

アニメーションはデータをフレームに分割して(紙芝居のように)描画する機能です。引数 animation_frame を指定します。

px.scatter(
    gapminder,
    x="gdpPercap",
    y="lifeExp",
    log_x=True,
    hover_name="country",
    size="pop",
    size_max=40,
    color="continent",
    facet_col="continent",
    width=800,
    animation_frame="year",  # 年ごとのデータでアニメーション
)
px.scatter_geo(
    gapminder,
    locations="iso_alpha",
    size="gdpPercap",  # 要素のサイズ
    color="lifeExp",  # 要素の色
    hover_name="country",
    animation_frame="year",  # アニメーション
)

参考情報#

  • 公式ドキュメント: https://plotly.com/python/plotly-express/

  • Pythonインタラクティブ・データビジュアライゼーション入門: https://www.asakura.co.jp/books/isbn/978-4-254-12258-9/