プロダクトのデータだと利用の落ち状態をみるのにファンネルごとの観測数や比率を一枚のグラフで表したいことがあります。
棒グラフや折れ線でも一応みえるのですが、matplotlibでファンネルチャートがつくれないか試してみます。
試してみる
データの用意
今回はファンネルごとの観測数が集計されたという前提から始めてみます。
import matplotlib.pyplot as plt import pandas as pd import numpy as np df = pd.DataFrame( { "funnel":['a','b','c','d'], "value":[80,60,40,35] } )
グラフの描画
matplotlibにはfill
という座標を渡すとそれをつないで塗りつぶしてくれるメソッドがあるのでそれを使います。
実際の値と、一つ後の値をdf.shit(-1)
で用意し、データの数だけ、y座標用のデータも渡して描画します。
cnt = df.shape[0] for s,e in zip(df['value'],df['value'].shift(-1)): if e is None: plt.fill([s,s,-1*s,-1*s],[cnt,cnt-1,cnt-1,cnt]) else: plt.fill([s,e,-1*e,-1*s],[cnt,cnt-1,cnt-1,cnt]) cnt-=1
もう少し工夫してみます。
cnt = df.shape[0] for s,e in zip(df['value'],df['value'].shift(-1)): if np.isnan(e) : plt.fill([s,s,-1*s,-1*s],[cnt,cnt-0.7,cnt-0.7,cnt]) else: plt.fill([s,s,e,-1*e,-1*s,-1*s],[cnt,cnt-0.7,cnt-1,cnt-1,cnt-0.7,cnt]) cnt-=1