Plotly Expressによるデータの可視化
Contents
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/