📈

PL表をpythonのmatplotlibでグラフ化する

2022/04/26に公開

今回はAplphabet(旧google)のPLデータを使ってグラフを作成してみます。

まずはデータを用意します。
PLデータはAlphabetのIRページから取得しました。
https://abc.xyz/investor/

一般的に財務データは下の画像のように時系列を横持ちにして表記されることが多く、取得できるデータも時系列が横持ちの場合があります。

実際の決算資料はこちら。
https://abc.xyz/investor/static/pdf/20220202_alphabet_10K.pdf?cache=fc81690#page=51

なので今回も時系列横持ちのデータからスタートすることにします。
以下のCSVは私が手動で作成しました。

CSVはこちらになります。
Alphabet_PL.csv

,13.12,14.12,15.12,16.12,17.12,18.12,19.12,20.12,21.12
Revenues,"55,519","66,001","74,989","90,272","110,855","136,819","161,857","182,527","257,637"
Cost of revenues,"21,993","25,691","28,164","35,138","45,583","59,549","71,896","84,732","110,939"
Research and development,"7,137","9,832","12,282","13,948","16,625","21,419","26,018","27,573","31,562"
Sales and marketing,"6,554","8,131","9,047","10,485","12,893","16,333","18,464","17,946","22,912"
General and administrative,"4,432","5,851","6,136","6,985","6,872","8,126","9,551","11,052","13,510"
European Commission fines,,,,,"2,736","5,071","1,697",0,0
Income from operations,"15,403","16,496","19,360","23,716","26,146","26,321","34,231","41,224","78,714"

1. ライブラリインポート

今回利用するライブラリをインポートします。

import pandas as pd
import matplotlib.pyplot as plt

1. CSVデータの読み込み

dataframeにcsvを読み込みます。

df = pd.read_csv('Alphabet_PL.csv', index_col=0, thousands=',')

オプションの意味は以下の通り。
index_col=0 : indexに使う列を指定。
thousands=',': 1000ごとの桁区切りの記号を指定し、floatとして読み込む。

読み込み結果以下の様になります。

2. データの行列を反転

次に取り込んだdataframeの行列をdf.Tで反転させます。
これでindexの値が年月になりますので、index名をYYMMに変更しておきます。

dft = df.T
dft.index.name = 'YYMM'

dataframeの中身は以下のようになります。

3. 表示する項目抜き出しと色を指定してグラフ化

表示させる項目を配列で指定します。
今回は営業利益であるIncome from operationsと費用項目のみを表示させます。

plot_cols = [
    'Income from operations', # 営業利益
    'European Commission fines', # 費用のひとつ
    'General and administrative', # 費用のひとつ
    'Sales and marketing',  # 費用のひとつ
    'Research and development', # 費用のひとつ
    'Cost of revenues', # 費用のひとつ
]

また、各項目のグラフ上での色も配列で指定します。

plot_colors = [
    'deepskyblue',
    'gold',
    'lightsalmon',
    'salmon',
    'tomato',
    'darkgray',
]

色はここ↓から適当に選びました。
https://matplotlib.org/3.5.0/gallery/color/named_colors.html

最後にグラフを作成します。dataframeのplot()を使います。

dft[plot_cols].plot(
	kind="bar",
	stacked=True,
	label=plot_cols,
	color=plot_colors
)

各オプションは以下。
kind="bar" : 表示形式を棒ブラフに指定。
stacked=True : 各項目を積み上げ式に表示。
label=plot_cols : 凡例に表示される各項目名に先に設定したplot_colsを指定。
color=plot_colors: 表示される各項目色に先に設定したplot_colorsを指定。

グラフの作成結果はこちらになります。

凡例の表示順がグラフと逆だったり、X軸のYYMM が縦表示だったりすこし手直ししたいところありますが、一旦ここまでとして時間ある時に直し方追記します。

4. まとめ

今回は一般的なPL表形式のデータをdataframeとmatplotlibで可視化してみました。
コード量は少ないですがdataframeの型扱いやindex指定で色々ツボってしまい思ったよりも時間かかってしまいました。
読み込む前のCSVデータをもう少し整形するか、dataframeの扱いでもう少し良い方法がありそうなど改善できそうな点を認識できたのは収穫でした。

Discussion