Pythonによるインタラクティブ可視化入門

誰?

fin-py

Python × 金融のコミュニティ

fin-pyもくもく会 #36

https://fin-py.connpass.com/event/186842/

  • オンライン(Discord)のもくもく会
  • 2020/09/12(土) 10:00 〜 13:00
  • 特別企画あり

Pythonによる株価分析ハンズオン

https://quantopian-tokyo.connpass.com/event/187549/

  • オンライン(Google Meet)のハンズオン
  • 2020/09/20(日) 13:00 〜 17:00
  • Python, Numpy, pandasの基礎から統計の基礎まで

Software Design 2020年10月号に寄稿しました

  • 第1特集 コードで実践,ビジュアルで納得 Pythonではじめる統計学
  • Pythonの基礎文法は知ってるけど統計を一から学びたい人にオススメ

バックナンバーもよろしくネ

2018年2月号 SD別冊シリーズ 2019年4月号 2020年2月号

Pythonの可視化ライブラリ

Python Visualization Landscape

Python Visualization Landscape より引用

大きくわけて2つに分類される

  • 静的画像による描画
    • Matplotlib
    • seaborn
  • 動的な描画(JavaScriptなど)
    • Bokeh
    • plotly

gapminderデータセット

https://www.gapminder.org/

列名 説明
country 国名
continent 大陸名
year 年度
lifeExp 寿命
pop 人口
gdpPercap 人口当りGDP
In [1]:
import plotly.express as px

gapminder = px.data.gapminder()
gapminder.head()
Out[1]:
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

pandas(Matplotlib)からの散布図

In [2]:
%matplotlib inline
gapminder.plot.scatter(x="gdpPercap", y="lifeExp", logx=True, xlim=[100, 1e6])
Out[2]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f588213f160>

課題

  • 国や地域ごとの傾向をつかめない
    • 日本のデータどれ?
  • 要素の特定ができない
    • この点はどこの国?いつの時点?
  • 具体的な値がわからない
  • 特定の要素を時系列で把握したい
    • 要素の内容を別な観点(折れ線グラフ)でみたい

インタラクティブな可視化で解決

  • 探索的
  • 対話的
  • イベントによる変化(コールバック)

従来のインタラクティブな可視化

  • フロントエンドの知識が必要

Pythonやデータ処理とは全く違った分野の学習コストが発生

Plotlyによるインタラクティブな可視化

  • plotly.py
  • Plotly Express

Pythonだけでできる!

plotly.py

  • JavaScriptベースの可視化ツール
    • plotly.jsの機能がPythonから使える
    • d3.jsおよびstack.glを利用
  • 広範囲な用途に対応したグラフを描画
    • 統計、財務、地理、科学など
    • 40種類以上のグラフをサポート
  • Jupyter上にグラフを描画できる

Plotly Express

  • plotly.pyの高水準のラッパ
  • 簡潔なコードでデータを可視化
  • seabornと同様に統計的な前処理を自動で行う

ホバーツール

探索的な可視化が行える

  • 座標の情報
  • 要素の情報
  • カスタマイズした情報(書式設定など)

Plotly Expressによる散布図

In [3]:
px.scatter(
    gapminder, x="gdpPercap", y="lifeExp", log_x=True,
    color="continent", size="pop", size_max=40,
    hover_name="country",  # これだけ!
    hover_data=["pop", "year"],  # これだけ!
).show()