モダンなPythonデータ可視化ライブラリ - Altair 紹介

Takahira です。今回はかなり良いのにあまり使われていない(と思われる)Python でのデータ可視化ライブラリ「Altair」について紹介したいと思います。

Altairとは

Altair は、Python のデータ可視化ライブラリです。最初のリリースが 2016 年なので、Python のデータ可視化ライブラリでは、比較的新しいものです。(有名な Matplotlib は 2003 年からあるみたいです。)

Altair の良いところとして次のようなところがあるかなと思います。

  • ① インタラクティブな可視化が簡単!(サーバなし)
  • ② データフレームからそのまま集計して可視化が可能。
  • ③ デフォルトのチャートデザインが可愛い(大事)

各要素に関して紹介したいとおもいます。

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

Altair はサーバをたてることなく、インタラクティブな可視化が可能です。例えば、以下のような感じのの可視化が可能です。(下の小さいグラフにカーソルを当て、ドラッグで選択できます。)

データフレームからそのまま集計して可視化

例えば、以下のような各年代ごとの性別別の人口データがあったとします。人口は色々な地域ごとに調査されているようです。年代ごとの性別別の人口合計を表すグラフを書いてみようと思います。

drawing

このような場合も、Altair なら以下のように書くだけで、集計の上可視化してくれます。

Python
import altair as alt
from vega_datasets import data
population = data.population()
altair.Chart(data).mark_bar().encode(
x='year:O',
y='sum(people):Q',
color='sex:N'
)

上記のsum(people):Qの部分が集計部分です。また、colorsex:Nと指定することで性別ごとに色分けもできています。

これを Matplotlib で書くと、次の様になるかと思います。素直に書くと、データフレームのgroupby()で集計してから一つ一つ積み上げるという感じかと思います。(Pandas のメソッドを使えばもう少し簡便ですが。)

python
import matplotlib.pyplot as plt
from vega_datasets import data
population = data.population()
sumDf = population.groupby(["sex", "year"]).sum().reset_index()
menDf = sumDf[sumDf["sex"]==1]
womenDf = sumDf[sumDf["sex"]==2]
labels = womenDf["year"]
width = 0.75 # the width of the bars: can also be len(x) sequence
fig, ax = plt.subplots()
ax.bar(labels, womenDf["people"], label='Women')
ax.bar(labels, menDf["people"], bottom=womenDf["people"],
label='Men')
ax.set_ylabel('population')
ax.legend()
plt.show()

コードもかなり少ないし、Altair の方がやりたいことも明確に書けている気がします。

デフォルトのデザインが可愛い

デフォルトのデザイン(スタイル)もきれいで見やすいともいます。Altair の可視化例はこんなかんじ。 altair

一方で、Matplotlib はこんな感じ。(ドキュメントから取得しました。) matplotlib

Matplotlib の方がメカニカルな感じですね。好みの部分もありますが、ビジネスサイドにたつと Altair のデザインの方が使いやすいきがします。


今回は、Python のデータ可視化ライブラリ Altair の紹介をしました。具体的な実装例についてもまた取り上げたいと思います。

投稿一覧

©2022 All rights reserved.