【Python Coding】Plotlyを用いて滝グラフを作成する方法
こんにちは、ちくたっく(@tictak_py)です。
今回は、pythonのplotlyを用いて「滝グラフ」を作る方法を紹介していきたいと思います。
「plotlyって何?」という方は、以下記事で基本から説明しているので参考にしてみてください。
【こんな方に読んで欲しい記事です】
● 滝グラフの使い方について知っておきたい方
● plotlyを用いて滝グラフを作れるようになりたい方
一般的な棒グラフや折れ線グラフに比べて、もしかしたら馴染みの薄いグラフかもしれませんが、概要やポイントを抑えて作成出来るようになると「分析の幅」もだいぶ広がるハズです。
では一つずつ見ていきましょう。
そもそも滝グラフって何?
滝グラフ(別名:階段グラフ)というのは、グラフの見た目が滝や階段に似ていることからつけられたグラフのことを言います。
イメージを持ってもらった方が早いと思うので、以下トヨタの決算説明資料から引用したグラフを見てください。なんとなく滝っぽく見えませんか?(見えるよね?)
なぜこの滝グラフが使われるのかというと、ある指標に着目した変化の推移や内訳をわかりやすく可視化出来るためです。
上記のトヨタの例で言えば、
・ 2020年3月期(実績)の営業利益は約2.3兆円だった
・ 2020年3月期(見込)の営業利益は約1.3兆円になりそう
・ なんで営業利益が約1兆円も減少するの?内訳や要因は何なの?
といった時にわかりやすく説明してくれるのが「滝グラフ」なのです。
「営業利益」に着目して、変化の推移や内訳をわかりやすく見える化してくれてるのがわかるかと思います。
コロナウイルスの影響による販売面での影響がやはり大きいものの、約1,500億円もの原価改善努力をしている(まだその余地がある)ことに個人的には驚きです。
以上の点を踏まえて、滝グラフを作っていきましょう。
必要ライブラリのインポート
まず最初に必要なライブラリをインポートしていきます。
これはplotlyでグラフ化する時に使うライブラリ一式なので、いつもと同じようにインポートしましょう。
滝グラフの作成|1社のみの場合
まず、ある会社の簡単な損益推移を滝グラフにしていきます。
以下表のようなデータを使って、滝グラフを作成してみます。
先にコードとその結果を書いちゃいます。
その後でポイントを補足していきます。
うん、イイ感じに滝グラフが作成出来ていますね。
コードを真似ながら書いてもらうのが一番ですが、ポイントは以下となります。
● Graph Object(上記変数go)に「Waterfall」を指定することで「滝グラフ」が作成可能
● 引数「measure」に「absolute、total、relative」のいずれかを指定する
中でも、引数「measure」の指定の仕方によって、出来上がりのグラフが異なるので、違いはしっかりと抑えた方が良いでしょう。どう違うのか、この後グラフを出来上がりを通じて確認していきます。
ちなみに、コード内のtext変数やtextpositoinはなくてもOKです。
滝グラフの引数「measure」をイジッてみる①
ここでは、引数「measure」を少しイジッてみたいと思います。
すべて「relative」に指定した結果が以下となります。
先ほどのグラフと比べて、どこがどのように違うか確認してみてください。
パッと見た感じ、問題なさそうですが、「粗利益」部分がおかしくなっています。
粗利益の推移
・ あるべき : 20 → 30 → 50 で推移
・ 上記結果 : 20 → 60 → 130 で推移
「relative」というのは「相対的」という意味で、基準値をベースにプラス/マイナスされる仕組みになっています。
そのため、すべて「relative」に指定してしまうと、粗利益が売上や原価の増減で計算されず、その時点までに計算された値をベースに加減算されてしまっているのです。
・ 粗利益(20)→ 売上増減(50)→ 原価増減(▲40)→ 計算結果として「30」になるべき
・ 粗利益(20)→ 売上増減(50)→ 原価増減(▲40)→ この時点の「30」に対して「+30」される
簡単にまとめると、直前の値に対して「相対的」に計算させたい場合に「relative」を使えばOKってことです。
滝グラフの引数「measure」をイジッてみる②
今度は、引数「measure」の最初の値を「absolute」ではなく「total」にしてみたいと思います。
コード上の違いは以下赤枠部分のみとなります。
出来上がったグラフのどこがおかしいか、あわせてチェックしてみてください。
最初の正しい滝グラフと見比べてもらうとわかりますが、粗利益の金額がなんか違います。
粗利益の推移
・ あるべき : 20 → 30 → 50 で推移
・ 上記結果 : 0 → 10 → 30 で推移
これはなぜかと言うと、最初の粗利益「20」が認識されていないためです。
直前までの値をベースに加減算した結果を表示したい場合は「total」を使いますが、初期値として認識させたい場合には「absolute」を使うといったイメージですかね。
そのため、最初に示したコードでは、「absolute、relative、total」が入り混じっていたのです。
示したいデータによって使い方は当然変わってくるので、しっかりと違いを抑えてみてください。
滝グラフの作成|2社比較の場合
最後に、もう一つデータを加えた上で比較出来るようにしてみたいと思います。
先ほどのデータを「A社」、以下表のデータを「B社」としてデータを作っていきます。
先ほどと同じようにコードを書いていけばOKです。
add_traceを使って、「row(何行目)」と「col(何列目)」を指定すれば2つのグラフを描くことが出来ます。
上側がA社、下側がB社の損益推移となっています。
例として作ったデータなので考察する意味はありませんが、B社は売上と原価ともに利益に対してマイナスの影響を生み続け、粗利益がマイナスに転じていると読むことが出来ますね。
さいごに
今回は、plotlyを使って滝グラフを作る方法を解説してみました。
色んなグラフがありますが、個人的には滝グラフはベスト3に入るくらい好きなグラフだったりします。
わかりにくいデータこそ、内訳をわかりやすく見せるなどの工夫をして、ビジネス力をアップさせてみてください。
今回はこのへんで。