見出し画像

SANKEY|損益計算書図解化Pythonツール実践ガイド

ザイマニが開発した「SANKEY|サンキー」とは、上場企業の損益計算書を対象に「サンキーダイアグラム」「沖積図」などと呼ばれるグラフの描画が約10分で完了するPythonツールです。

一般販売はしておらず、ザイマニ財務分析ゼミのコアメンバー限定特典としてコアメンバーにのみ共有しております。

本記事ではツールの具体的な使い方をわかりやすく解説します。本ツールの全体像と具体的なアウトプットイメージがこちら▼

SANKEY|損益計算書図解化Pythonツールの全体像(目次)
サンキーダイアグラム図(以下サンキー図)のみを描画し画像として保存
損益計算書の情報を追加し、新規画像として保存可能
複数企業の図解を1つの画像にまとめることも可能

各セグメント売上(地域別売上)・利益・費用の割合を視覚的にパッと把握できるのが一番の強みです。各企業の分析に活用できるのはもちろん、各種プレゼン資料やIRページへの掲載といった形での転用も視野に入ります。


以下、本ツールの概要です。

■準備物一覧
ザイマニ財務分析ゼミ提供 最新財務データセットエクセル
上場企業各社の売上セグメントデータ
GoogleFontファイル×3
・SANKEY|損益計算書 図解化Pythonツール(コアメンバー限定特典)

2023/12/27 Ver1.4時点
サンキー図を描画できる企業は以下の通りです。
・金融関連業以外の上場企業(ゼミデータセット収録企業)、非上場企業
・日本会計、米国会計、IFRS採用企業
・四半期決算書、決算短信、有価証券報告書、10-K


■サンキー図描画手順
 ① どの上場企業のサンキー図を描画するか決める
 ② 売上セグメントデータを手動で集める(有価証券報告書)
 ③ SANKEYでサンキー図の描画を行う

冒頭で紹介した「10分」のうち、約8分程度を②に充てる必要があります。本来は各社のセグメント別売上データもプログラミングで機械的に収集したいところですが、収集するために必要なタグが有価証券報告書上で付与されていないため、2023年11月時点では手動でのデータ収集が必要となります(具体的な手順は後述)。ご理解いただければ幸甚です。


■想定ユーザー
・各社の売上・利益・費用の割合を視覚化して分析したみたい方
・サンキー図を描画してプレゼン資料やIR資料に活用したいビジネスマン
ザイマニ財務分析ゼミのメンバー(レポート第6話〜第8話を読了済)

本ツールの概要は以上です。以降はPythonコードにおける各セクションの解説や、シチュエーション別の設定例をわかりやすく解説します。よろしくお願いします▼


❶ 今回使用するGoogle Colabを確認&保存

上述した通り、SANKEYはコアメンバー限定特典です。各コアメンバー専用の特典一覧リンク集(GoogleDrive)の中にSANKEYが格納されておりますのでご確認くださいませ。

SANKEYのファイル名は以下の通りです。Zaimani_Python_06_SANKEY_Sankey_Diagram_X.X.ipynb

もし、SANKEYファイルがフォルダ内に存在しない場合、お手数ですがザイマニ公式LINEよりご連絡いただけますと幸いです。

また、SANKEYをご利用される際はご自身のGoogleDriveにColabファイルをコピーしてからご活用ください。ザイマニ管理人が不定期でSANKEYを更新する可能性があり、そのタイミングでファイル内容がすべて最新版に上書きされるためです。ファイルのコピー手順に困った場合はゼミレポート第6話にてご確認くださいませ。

以下の解説は上記Colab内容の補足となります。Pythonでのデータ分析に慣れている方はそのままColabを読み進めていただいてもOKです。


❷ 今回のGoogle Colabの全容を解説

Zaimani_Python_06_SANKEY_Sankey_Diagramの目次

今回使用するプログラミングコードは以下の3セクションに分類されます。

0|データセット・フォント読込
1|サンキーダイアグラム描画
2|サンキー図一括表示

セクション0で各種設定を行い、セクション1でサンキー図を描画するシンプルな構成です。その後、必要に応じてセクション2で複数枚の図解をひとまとめにして表示する機能もご活用いただけます。

つづいて各セクションのコード内容を端的に解説します。不明点がありましたらザイマニ公式LINEより気軽にご連絡くださいませ。

❸ 各セクション解説

セクション0|データセット・フォント読込

このセクションではサンキー図描画の準備を行います。上からひとつずつセルを実行(「▶︎」をクリック)して下さい。具体的には以下の4つの設定を行います。

セクション0の流れ
1. GoogleDriveとの連携
2. ゼミデータセット読込
3. セグメントデータ読込
4. フォントファイル読込

1. GoogleDriveとの連携
まずはいつも通りGoogleColabとGoogleDriveの連携から始めましょう。

#GoogleColabとGoogleDriveを連携する → GoogleDrive上に存在するファイルの読込等が可能となる
#このセルを実行→「GoogleDriveに接続」をクリック → Googleアカウントを選択→「許可」をクリック
from google.colab import drive
drive.mount('/content/drive')
print('■GoogleColabとGoogleDrive連携完了')

2. ゼミデータセット読込
続いて、以下のコードまで実行すると、GoogleDrive上に新しいフォルダが作成されます。

# ゼミデータセットをアップロードするフォルダGoogleDrive上に作成する
zemi_dataset_upload_path = '/content/drive/MyDrive/Colab Notebooks/01_Zemi_Dataset' #ゼミデータセットをアップロードするフォルダのパス
os.makedirs( zemi_dataset_upload_path ,exist_ok=True ) #フォルダが存在しなければフォルダを作成

# Pythonツールのアウトプットを保存するフォルダをGoogleDrive上に作成する
python_save_folder_path = '/content/drive/MyDrive/Colab Notebooks/02_Python_Tool_Output'
os.makedirs( python_save_folder_path ,exist_ok=True ) #フォルダが存在しなければフォルダを作成

ここにゼミデータセットエクセルをアップロードしましょう。アップロード後のイメージは以下の通りです▼

1ヶ月に1度、更新された財務データセットをアップすることで、
最新のデータに基づいた描画が可能です。

エクセルやcsvなどGoogleDriveにアップロードしたファイルがColabに認識されるまで数分程度かかる場合もあります。ゆっくり待ちましょう。もしくはColabメニュー>ランタイム>ランタイムを接続解除して削除をクリックし、再度一番上のセルから順に実行しましょう。

ここまでで設定が半分終わりました。続いて、サンキー図を描画したい企業の売上セグメントデータcsvを作成するステップです。

3. セグメントデータ読込

セグメントデータ入力例

上述した通り、各企業の売上セグメントデータは手動での入力が必要です。イメージが掴みやすいように、サンプルデータを用意しました。まずはこちらをご活用いただくのがおすすめです▼

上場企業各社の売上セグメントデータサンプル Ver1.1対応
上場企業各社の売上費用利益データサンプル Ver1.2対応
上場企業各社の売上費用利益データサンプル Ver1.3対応
・上場企業各社の売上費用利益データサンプル Ver1.4対応

Ver1.2追記
Ver1.2以降では、以下の項目を入力することでゼミのデータセットにデータが存在しない、例えば4年以上前のデータを基にサンキー図が描画可能となりました。

追加で手動入力が必要な項目
決算月 会計基準 市場区分 業種
売上原価 売上総利益 販管費 営業利益 営業外収益 営業外費用
経常利益 特別利益 特別損失 税金等調整前当期純利益
法人税等 親会社株主に帰属する当期純利益

もちろん、ゼミデータセットにデータが存在する企業のデータを描画する場合、上記項目への入力は不要です。サンプル同様、該当セルは空白でOKです。サンプルは入力していない箇所を灰色で塗りつぶしています▼

さて、上述したサンプルリンクをクリックすると、スプレッドシートが開きます。自身のDriveにスプレッドシートをコピー→気になる企業のデータを入力→csvとしてダウンロード後、以下のコードで作成されるフォルダにアップロードしましょう▼

# 売上セグメントデータセットをアップロードするフォルダをGoogleDrive上に作成する
csv_upload_path = '/content/drive/MyDrive/Colab Notebooks/02_Python_Tool_Output/06_SANKEY' #フォルダのパス
os.makedirs( csv_upload_path ,exist_ok=True ) #フォルダが存在しなければフォルダを作成

#その他、サンキーダイアグラム画像保存用のフォルダも作成
folder_sankey_img = os.path.join(csv_upload_path, '01_Sankey_img')
os.makedirs(folder_sankey_img ,exist_ok=True )

folder_sankey_img_text = os.path.join(csv_upload_path, '02_Sankey_img_text')
os.makedirs(folder_sankey_img_text ,exist_ok=True )

アップロード後のイメージがこちら▼

セグメントデータcsvアップロード後のイメージ Ver1.4

実際にセグメントデータを収集する際には有価証券報告書>第5 経理の状況 > セグメント情報ページに記載があることが多いです▼

同じページ内に前連結会計年度当連結会計年度の2年分の情報が掲載されているケースがほとんどです。誤って前連結会計年度分を入力しないように注意しましょう。


4. フォントファイル読込
最後に、フォントファイルの読み込みです。GoogleColab上でテキストを追加する際に自身のGoogleDrive上のフォントファイルを読み込むことで、好きなフォントでテキストを描画できるようになります。

株式会社良品計画のサンキー図
図上のテキストはすべてフォントを指定しています。

まずは以下のコードまでセルを実行しましょう▼

#サンキーダイアグラム上に日本語テキストを追加するために必要
#GoogleDriveにお気に入りのGoogleFontアップロード→それを読み込んで使用する

#ファントファイルアップロード用のフォルダを作成
font_folder = os.path.join(csv_upload_path, '99_font')
os.makedirs(font_folder ,exist_ok=True )

そして、以下のリンク先に格納してあるフォント類をダウンロード、その後ご自身のGoogleDrive内に新規作成された「99_font」フォルダにフォントファイルをアップロードしましょう。数十種類のフォントが格納されていますが、デフォルトでは以下の3つのファイルが必要です▼

GoogleFontファイル
・ヒラギノ角ゴシック W8.ttc
・NotoSansJP-Black.ttf
・ZenAntique-Regular.ttf

フォルダ内で対象フォントファイルを見つけるのが面倒くさい場合、
上記リンク内のフォントファイルをすべてダウンロードし、
自分のGoogleDriveの99_fontフォルダにアップロードしてもOKです。
フォントファイルアップロード後のイメージ

ちなみに、GoogeFontとは、Googleが提供しているWebフォントサービスです。気になるフォントファイルを何度でも無料でダウンロード可能、商用利用もOKです。

Browse Fonts - Google Fonts

お疲れ様でした!これでサンキー図描画の準備がほぼ完了しました。いよいよ、サンキー図の描画セクションへ進みましょう▼


セクション1|サンキー図描画

セクション1では以下の★に囲まれた部分のみ丹念に設定が必要です。具体的にはセグメントデータcsvの中から対象企業を選択する部分です▼

#サンキーダイアグラムを描画する企業の売上セグメントデータセットを選択する

#★★★★★★★★★★★★★★★★★★★★★★★★★★★

target_company_num = 9843         # 対象企業の証券コード4桁数字をXXXX or ティッカーシンボルを'文字列'で入力  入力例 9843(ニトリ) 5243(note)    4661(オリエンタルランド)  'GOOGL' (Alphabet)
target_fiscal_year = 2023            # 「YYYY」を入力。サンキー図の描画対象となる年度を数字4桁で入力。
sankey_creator_name = '' #サンキー図作成者の文言
target_document = '有価証券報告書'   # 対象となる書類を設定 有価証券報告書, 10-K, 第2四半期決算短信 など
sales_overwrite = 'Yes'               # Yesの場合はセグメントデータに記載された売上高の値をサンキー図の売上高として使用する ゼミデータセットの売上高が正しく取得できていない場合に活用

#★★★★★★★★★★★★★★★★★★★★★★★★★★★

target_fiscal_yearについて補足です。セグメントデータcsvの中に同一企業のデータが1行分しかない場合、target_fiscal_yearは「''」でOKです。複数年のデータが存在する場合は「2023」といった形で対象年度を入力しましょう。

Ver1.2追記
Ver1.2からは必ず対象年度の設定必要となりました。「2023」など対象年度を数字4桁で設定しましょう。

あとは一つずつコードを実行していくだけでOKです。1-3|サンキー図描画のセルまで上手く機能すれば以下のサンキー図(テキストなし状態)がColab上で出力され、同時にGoogleDriveの01_Sankey_imgフォルダ内にpngとして画像保存されます▼

ニトリのサンキー図(テキストなし状態)
任天堂のように単一セグメントでも描画可能

後続のコードで売上高営業利益などのテキストを描画していきますが、必ずしも適切な位置に描画される訳ではありません(異常値の場合はサンキー図とテキストが重なってしまうなど)。

そんな時はこのプレーン状態の画像を元に、PowerPointやKeynoteで装飾を加える形でご活用いただければと思います。

最後に1-4|サンキー図テキスト追加セクションをすべて実行すると以下のようなテキスト付きのサンキー図が出力され、同時にGoogleDriveの02_Sankey_img_textフォルダ内に画像が保存されます(png)▼

ニトリのサンキー図(テキストあり状態)
描画されるまで30秒程度かかります。ゆっくり待ちましょう。


セクション2|サンキー図一括表示

Ver.1.3で実装

セクション1でGoogleDriveに保存した画像を取得し、以下のように一枚の画像にまとめて表示するセクションです▼

2-1|同一企業の異なる年度のサンキー図を並べて表示
2-2|競合他社のサンキー図を並べて表示

コロナ前コロナ後など、大きなイベント前後でサンキー図を作成して複数並べると面白いかもしれませんね。

2-3|フォルダ内から最大9枚を取得して表示

フォルダ内に存在するサンキー図を証券コードの小さい順に最大9枚取得してタイル上に並べる機能です。パッと見ただけでも各社の利益の割合が大きく違うことがわかりますね。

なお、Ver1.3時点では一括画像の保存機能を実装しておりません。保存したい場合はColabで表示された画像上で右クリック→「名前をつけて保存」等をお願いいたします。

以上がサンキー図を描画・一括表示するまでの全工程です。以下ではシチュエーション別に設定例を端的にまとめます▼


❹シチュエーション別設定

■ 自分の好きな上場企業のサンキー図を描画したい
以下の手順で描画可能です▼

1.  スプレッドシートに該当企業のデータを入力
2. 上記をcsvとして保存 & GoogleDriveに再度アップロード
3. セクション1-1|対象企業の設定で証券番号などを変更
4. SANKEYのすべてのセルを再度実行

1.  スプレッドシートに該当企業のデータを入力については、上記で紹介したサンプルシートにデータを追記する形で入力するのがおすすめです▼

セグメントデータ入力例


■ 自分の好きなGoogleFontでテキストを描画したい

1. Google Fontsから好きなフォントファイルを自分のデバイスにDL
2. フォントファイルをGoogleDrive>「99_font」フォルダにアップ
3. 以下のコードのパスを変更する

#フォントファイル読み込み
#title
hiragino_gothic_font_path =  '/content/drive/MyDrive/Colab Notebooks/02_Python_Tool_Output/06_SANKEY/99_font/ヒラギノ角ゴシック W8.ttc'
title_fp = fm.FontProperties(fname=hiragino_gothic_font_path) #サンキー図タイトル

#項目名
GenJyuuGothic_font_path = '/content/drive/MyDrive/Colab Notebooks/02_Python_Tool_Output/06_SANKEY/99_font/NotoSansJP-Black.ttf'
node_item_name_label_fp = fm.FontProperties(fname=GenJyuuGothic_font_path) #ノード項目名ラベル 項目名

#数値
helvetica_font_path = '/content/drive/MyDrive/Colab Notebooks/02_Python_Tool_Output/06_SANKEY/99_font/ZenAntique-Regular.ttf'
node_label_fp = fm.FontProperties(fname=helvetica_font_path) #ノードラベル 数値


■ サンキー図が上手く描画されない
セグメントが2階層存在する場合や、異常値を含む場合など、サンキー図そのものや付随テキストが正しい位置に表示されない場合があります。

例えば、以下のnote株式会社のサンキー図は、売上総利益がマイナスであるパターンを考慮できていないためサンキー図が正しく描画されていません▼

(この問題はVer1.2で解消しました)

上記のようなエラーは発見次第、既存の出力に極力影響を与えないように都度修正していきます。ただ、ザイマニ管理人だけですべての企業のサンキー図を描画するのは非常に難しいです。

そのため、こちらが把握できていないエラーを共有いただけるととても助かります。「この企業を描画しようとしたけど上手くいかなかった」などの報告をザイマニ公式LINEより気軽にご連絡いただけると嬉しいです。

以上、シチュエーション別の設定一覧でした。SANKEY、ぜひご活用くださいませ!


SANKEY実践ガイドまとめ

SANKEY|損益計算書図解化Pythonツールの実践ガイドでした。

よく分からない箇所やさらに詳しく解説してほしいコードなどあれば、いつでもザイマニ公式LINEのトーク画面からお声がけくださいませ。

引き続き、ザイマニをよろしくお願いいたします。

▶︎ ザイマニコアメンバー制度の詳細はこちら
▶︎ ザイマニのnote記事一覧はこちら


この記事が気に入ったらサポートをしてみませんか?