【2022年度】化学メーカーの企業分析 P/LとBSを一つまとめる

以下の記事で、化学メーカーの貸借対照表損益計算書をグラフにしましたが、この二つをいい感じに一つのグラフにまとめられないかという試行錯誤をしてました。

chemstat.hatenablog.com

chemstat.hatenablog.com

 

上側にP/Lを、下側にBSをグラフにしてみました。資産に対する売り上げ規模が分かるようになりました。

ただこれだと縦軸に差がありすぎて右側に行くほど詳細があまりにも見ずらいので、総資産を100%として、P/Lもそれに対する比率で換算してみました。このグラフから手持ちの資産に対して売り上げや利益を生む効率を読み取るのがいいのかと思いました。

ただこれ一つ問題があって、住友化学の赤字が表現できていないという問題があります。何かいいアイデアないですかね。

 

コードはバランスシートの時のものをちょこっと修正しただけなので、よろしければこちらの記事もご覧ください。

chemstat.hatenablog.com

【2022年度】化学メーカーの企業分析 損益計算書(PL)

以前の記事で化学メーカーのバランスシートをグラフにたのですが、ほぼ同じコードでPLシートもまとめることが出来たので作成してみました。

chemstat.hatenablog.com

こちらも2022年度末時点の財務情報をもとに作成しています。



売上原価の比率はどこも高めですが、販管費は結構差がありますね。信越化学なんてどうやったらこの販管費になるんでしょう?ちなみに住友化学が赤字だったのでどう表現するのか悩みました。ルールってあるんでしょうか?

できればバランスシートとPLをくっつけたいなと思って色々試してます。

 

コードはバランスシートの時のものとほぼ同じ内容でやってます。

chemstat.hatenablog.com

【2022年度】自動車メーカーの企業分析(バランスシート)

化学メーカーのバランスシートが評判よかったのに気をよくして自動車メーカー版も作ってみました。

バランスシート

規模の差がありすぎてこっちは比率で見ないと全然わかりそうにないですね。

規模の差は自己資本比率流動比率はそこまで大きな差はなさそうなんですが、日産の売上債権が大きかったり、トヨタ・ホンダのその他固定資産の比率が大きいのは何か意味のある差なんでしょうか?このへんは財務の勉強しどころになりそうです。

 


これを必死に作るためのコードはこちら

chemstat.hatenablog.com

【2022年度】化学メーカーの企業分析(バランスシート)

化学メーカーの企業分析シリーズの一環としてバランスシートをグラフにしました。

こちらも2022年度末時点の財務情報をもとに作成しています。

信越化学の自己資本比率流動資産の多さが気になってたのですが、よく見ると日東電工ユニ・チャームも同じくらい健全財務状況ですね。どのあたりがこの差につながっているのかもっと調べてみたいところですね。

バランスシート

総資産を100%として比較してみた物も作成してみました。こちらの方が内訳の比較としてはわかりやすいですね。


これを必死に作るためのコードはこちら

chemstat.hatenablog.com

【matplotlib】凡例を二つに分割したい【python】

一つのグラフに複数のデータを描画したとき、凡例(legend)の表示をデータごとに分けたくなった。

get_legend_landles_labels()という関数が用意されていて、handleとlabelを取得できる。ちなみにhandleとlabelというのはこれ。

hans, labs = ax1.get_legend_handles_labels()

 

このhans、labsの中にそれぞれのデータの凡例情報がリストで格納されているので、対応するデータを指定すると一部だけを凡例にすることが出来る。

ax1.legend(handles=hans[:1], labels=labs[:1],loc='upper right')#y1の凡例

 

ax1.legend(handles=hans[1:], labels=labs[1:],loc='upper left')#y2の凡例

 

最後に両方表示する時にはちょっと工夫が必要で、凡例は最後に指定したものでうわあ期されてしまうので、y1とy2の凡例をl1,l2として、最後にl1を追加し直す、という操作が必要だった。

l1 = ax1.legend(handles=hans[:1], labels=labs[:1],loc='upper right')#y1の凡例をl1に
l2 = ax1.legend(handles=hans[1:], labels=labs[1:],loc='upper left')#y2の凡例をl2に
ax1.add_artist(l1)#凡例は最後に指定したものだけが表示されるので、l1を改めて追加


これを全部まとめるとこうなりました。

import numpy as np
import matplotlib.pyplot as plt

y1 = np.array([1, 2, 3, 4])
y2 = np.array([4, 3, 2, 1])
fig = plt.figure(figsize=(3, 3), facecolor="white")

ax1 = fig.add_subplot(111)
ax1.plot(y1,y1, label="y1")
ax1.plot(y1,y2, label="y2")

hans, labs = ax1.get_legend_handles_labels()#凡例のデータを取得する。

l1 = ax1.legend(handles=hans[:1], labels=labs[:1],loc='upper right')#y1の凡例をl1に
l2 = ax1.legend(handles=hans[1:], labels=labs[1:],loc='upper left')#y2の凡例をl2に

ax1.add_artist(l1)#凡例は最後に指定したものだけが表示されるので、l1を改めて追加

plt.show()

 

【matplotlib】凡例のラベルとマーカー・ハンドルの位置を入れ替えたい【python】

グラフの凡例(legend)を表示すると、大体マーカー・ハンドルが左、ラベルが右という配置になる。これを入れ替えたくなった。

調べてみるとmarkerfirstという引数があり、これをFalseにすると左右が逆転する。

なるほど確かに逆転した。

import numpy as np
import matplotlib.pyplot as plt

y = np.array([1, 2, 3, 4])
fig = plt.figure(figsize=(3, 3), facecolor="white")
ax1 = fig.add_subplot(111)
ax1.bar(y, y, label="y")

#凡例の挿入
ax1.legend(markerfirst=False)#markerfirstをFlaseにすると、文字が先になる。

plt.show()

ちなみに凡例の中のオブジェクトの名前はhandle(線)、marker(点)、label(文字)だそうです。何か調べものする際にはご活用ください。

参考サイト

https://stackoverflow.com/questions/50916067/how-to-modify-matplotlib-legend

【matplotlib】バランスシートを作りたい【python】

企業の財務状況と言えばバランスシート。これを何とかしてpythonで描けないかと色々頑張ってみた。

色々頑張った甲斐あって、かなりpythonっぽくないグラフが出来たのではないかと思う。コードはいつにも増して長くなってしまったので必要なところだけ抜き出してご参考ください。


import
numpy as np import pandas as pd import matplotlib.pyplot as plt import japanize_matplotlib import matplotlib.patheffects as patheffects ##データ labels = ['A社', 'B社']#x軸のラベル data_labels_l = ['現金預金', '売上債権', '棚卸資産', 'その他流動資産', '有形固定資産', '無形固定資産', 'その他固定資産'] data_labels_r = ['買入債務', 'その他流動負債', '固定負債', '自己資本', 'その他純資産'] df_l = pd.DataFrame(columns=data_labels_l)#バランスシート左側(運用サイド) df_l.loc['A'] = [280, 810 ,800, 250, 1900, 1180, 520] df_l.loc['B'] = [260, 530 ,740, 220, 820, 670, 900] df_l['合計'] = df_l.sum(axis=1) df_r = pd.DataFrame(columns=data_labels_r)#バランスシート右側(調達サイド) df_r.loc['A'] = [470, 1180, 2120, 1560, 410] df_r.loc['B'] = [300, 970, 1400, 1170, 300] df_r['合計'] = df_r.sum(axis=1) ##グラフ設定 fig_x = 6#グラフサイズ(x) fig_y = 9#グラフサイズ(y) fig = plt.figure(figsize=(fig_x,fig_y), facecolor="white")#グラフの作成 ax1 = fig.add_subplot(111)#subplotの作成 plt.rcParams['font.family'] = 'Meiryo'#フォント指定 ##縦棒グラフの設定 bar_w = 0.4 #棒グラフの太さ bar_color_l = ["#22aa00", "#55cc44", "#aaee33", "#ddffcc", "#ffffaa", "#eebb00", "#ffff00"]#左側の色設定(翠・黄色) bar_color_r = ["#dd3333", "#dd6666", "#ddaaaa", "#0077bb", "#226688"]#右側の色設定(赤・青) bar_edge = "#777777"#各グラフの外枠 bar_label = "#000000"#データラベルの色 text_s = 12#データラベルのサイズ ind = np.arange(len(labels)) #要素の数 ##棒グラフの描画 #左側 top_l = df_l['合計']#棒グラフの上側を設定 for index, column in enumerate(data_labels_l): bottom_l = top_l - df_l[column]#棒グラフの下側を設定 #棒グラフの描画 ax1.bar(ind - bar_w/2,#x座標。左に少しずらす top_l-bottom_l,#棒グラフ上側のy座標 bottom=bottom_l,#棒グラフ下側のy座標 width=bar_w, #棒グラフの太さ label=column,#データラベル color=bar_color_l[index],#棒グラフの色 edgecolor=bar_edge)#縦棒グラフ #データラベル for m in np.arange(len(bottom_l)): ax1.text(ind[m]- bar_w/2,#x座標 (bottom_l[m]+top_l[m])/2,#y座標 column,#テキスト ha='center', va='center',#水平・垂直の中心位置 color=bar_label,#文字色 fontsize=text_s,#文字サイズ path_effects=[patheffects.withStroke(linewidth=4, foreground='white', capstyle="round")]#文字外周を白色に ) top_l = top_l - df_l[column]#棒グラフ上側のy座標を更新 #右側(左側とほぼ同様) top_r = df_r['合計'] for index, column in enumerate(data_labels_r): bottom_r = top_r - df_r[column] ax1.bar(ind + bar_w/2, top_r-bottom_r, bottom=bottom_r, width=bar_w, label=column, color=bar_color_r[index],edgecolor=bar_edge)#縦棒グラフ for m in np.arange(len(bottom_r)): ax1.text(ind[m]+ bar_w/2, (bottom_r[m]+top_r[m])/2, column, ha='center', va='center', color=bar_label, fontsize=text_s, path_effects=[patheffects.withStroke(linewidth=4, foreground='white', capstyle="round")]) top_r = top_r - df_r[column] ##x軸 xlabel_s = 15#文字サイズ xlabel_c = "#444444"#文字色 ax1.tick_params(axis='x', which='both', bottom=False, top=False)#xticksの目盛を消す ax1.set_xticks(ind)#x軸の補助目盛設定 ax1.set_xticklabels(labels, fontsize=xlabel_s, color=xlabel_c)#x軸のラベルの設定 ##y軸 y_ticks = [0,1000,2000,3000,4000,5000]#y軸の補助目盛 ylabel_s = 15#文字サイズ ylabel_c = "#444444"#文字色 yticks_c = "#777777"#補助目盛色 ax1.set_yticks(y_ticks, color=yticks_c)#y軸の補助目盛設定 ax1.set_yticklabels(y_ticks, fontsize=ylabel_s, color=ylabel_c)#y軸のラベル設定 ax1.grid(axis="y")#補助目盛あり ax1.tick_params(axis='both', which='both', bottom=False, top=False, left=False, right=False)#yticksの目盛を消す ##枠線を消す spine_w = 1 spine_c = "#444444" ax1.spines['top'].set_linewidth(0) ax1.spines['bottom'].set_linewidth(spine_w)#bottomだけは線を引く ax1.spines['bottom'].set_color(spine_c)#bottomだけは線を引く ax1.spines['left'].set_linewidth(0) ax1.spines['right'].set_linewidth(0) ##単位 fig.text(0.02, 0.83, '(億円)', ha='left', va='center', color=ylabel_c , fontsize= text_s) ##軸を背面に移動 ax1.set_axisbelow(True) plt.show()

[blog:g:11696248318754550880:banner][blog:g:11696248318755499803:banner]