バンプチャートの紹介と実装
2022年05月03日
Takahira です。バンプチャート(Bump chart)と呼ばれるものを実装する機会があり、まとめておこうと思います。
バンプチャートとは
バンプチャートとは、以下のようなグラフのことです。
ここで可視化されているデータは以下のようなランキングに関するデータです。
これは、トップ IT 企業(AAPL は Apple、AMZN は Amazon)の株価の各年でのランキングになります。
上記のバンプチャートでは、横軸に年を、縦軸に順位を取っています。(上から 1 位、2 位、3 位 .. )
そして、それぞれの企業ごとに、各年の順位にドットを打ち、それをつなげたものが上記のグラフです。
2000 年当時(左)にある順位だった企業がどのような変遷を得て、2010 年(右)に至ったのかということが見て取れると思います。
バンプチャートの使い所
バンプチャートは次のようなときに使うと良いと言われています。
- ① データ間の関係性がみたいとき。
バンプチャートを使えば、ランキングの関係が入れ替わったり、ランキングの差が一定であることなど、データ間の関係性がよくわかります。
上記の例だと、IT 企業ごとに、Apple が Amazon を追い越したり、2007 年の中盤以降ランキングが変化していないことなどが見て取れます。
- ② 順位に興味があるとき。
バンプチャートでは、Y 軸を等間隔にして、順位を表現しています。なので、順位でなく、量(上記の場合は実際の株価など)に興味がある場合は適していません。
その場合は、線グラフなどが選択肢になってくると思います。
- ③ 対象となるデータのカテゴリが少ないとこ
バンプチャートは、20 個までくらいのカテゴリに使うと良いです。
もしカテゴリがかなり多くなった場合(例えば、IT 企業 100 社などを)だと、大きなランキングの変化などを上手く描写することができないと思います。
バンプチャートの実装例
最後にバンプチャートの実装例を載せていおきます。今回は Altair で実装しました。
Altair でデータの集計まで一気に行ったものが公式のチュートリアルにあります。
下記の実装例では Pandas でランキングを集計してから可視化しています。
pythonimport altair as altfrom vega_datasets import dataimport pandas as pd# データ作り. 各企業ごとの年月とランキングを出す。stocks = data.stocks()source = (stocks.groupby([pd.Grouper(key="date", freq="6M"),"symbol"]).mean().reset_index().assign(rank=lambda df: df.groupby(["date"])["price"].rank(ascending=False).astype(int)).drop(["price"],axis=1))# 線グラフを書く。alt.Chart(source).mark_line(point = True) # point=True で線グラフにドットを追加。.encode(x=alt.X("date:O", timeUnit="yearmonth", title="date"),y=alt.Y("rank:O", axis = alt.Axis(title=None)),color=alt.Color("symbol:N")).properties(title="Bump Chart for Stock Prices",width=600,height=150,)
バンプチャートとその使い所、実装例について紹介しました。バンプチャート可愛いと思います。
投稿一覧