SANKEY|損益計算書図解化Pythonツール実践ガイド
ザイマニが開発した「SANKEY|サンキー」とは、上場企業の損益計算書を対象に「サンキーダイアグラム」「沖積図」などと呼ばれるグラフの描画が約10分で完了するPythonツールです。
一般販売はしておらず、ザイマニ財務分析ゼミのコアメンバー限定特典としてコアメンバーにのみ共有しております。
本記事ではツールの具体的な使い方をわかりやすく解説します。本ツールの全体像と具体的なアウトプットイメージがこちら▼
各セグメント売上(地域別売上)・利益・費用の割合を視覚的にパッと把握できるのが一番の強みです。各企業の分析に活用できるのはもちろん、各種プレゼン資料やIRページへの掲載といった形での転用も視野に入ります。
以下、本ツールの概要です。
■準備物一覧
・ザイマニ財務分析ゼミ提供 最新財務データセットエクセル
・上場企業各社の売上セグメントデータ
・GoogleFontファイル×3
・SANKEY|損益計算書 図解化Pythonツール(コアメンバー限定特典)
■サンキー図描画手順
① どの上場企業のサンキー図を描画するか決める
② 売上セグメントデータを手動で集める(有価証券報告書)
③ SANKEYでサンキー図の描画を行う
冒頭で紹介した「10分」のうち、約8分程度を②に充てる必要があります。本来は各社のセグメント別売上データもプログラミングで機械的に収集したいところですが、収集するために必要なタグが有価証券報告書上で付与されていないため、2023年11月時点では手動でのデータ収集が必要となります(具体的な手順は後述)。ご理解いただければ幸甚です。
■想定ユーザー
・各社の売上・利益・費用の割合を視覚化して分析したみたい方
・サンキー図を描画してプレゼン資料やIR資料に活用したいビジネスマン
・ザイマニ財務分析ゼミのメンバー(レポート第6話〜第8話を読了済)
本ツールの概要は以上です。以降はPythonコードにおける各セクションの解説や、シチュエーション別の設定例をわかりやすく解説します。よろしくお願いします▼
❶ 今回使用するGoogle Colabを確認&保存
上述した通り、SANKEYはコアメンバー限定特典です。各コアメンバー専用の特典一覧リンク集(GoogleDrive)の中にSANKEYが格納されておりますのでご確認くださいませ。
もし、SANKEYファイルがフォルダ内に存在しない場合、お手数ですがザイマニ公式LINEよりご連絡いただけますと幸いです。
また、SANKEYをご利用される際はご自身のGoogleDriveにColabファイルをコピーしてからご活用ください。ザイマニ管理人が不定期でSANKEYを更新する可能性があり、そのタイミングでファイル内容がすべて最新版に上書きされるためです。ファイルのコピー手順に困った場合はゼミレポート第6話にてご確認くださいませ。
以下の解説は上記Colab内容の補足となります。Pythonでのデータ分析に慣れている方はそのままColabを読み進めていただいてもOKです。
❷ 今回のGoogle Colabの全容を解説
今回使用するプログラミングコードは以下の3セクションに分類されます。
セクション0で各種設定を行い、セクション1でサンキー図を描画するシンプルな構成です。その後、必要に応じてセクション2で複数枚の図解をひとまとめにして表示する機能もご活用いただけます。
つづいて各セクションのコード内容を端的に解説します。不明点がありましたらザイマニ公式LINEより気軽にご連絡くださいませ。
❸ 各セクション解説
セクション0|データセット・フォント読込
このセクションではサンキー図描画の準備を行います。上からひとつずつセルを実行(「▶︎」をクリック)して下さい。具体的には以下の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 ) #フォルダが存在しなければフォルダを作成
ここにゼミデータセットエクセルをアップロードしましょう。アップロード後のイメージは以下の通りです▼
エクセルやcsvなどGoogleDriveにアップロードしたファイルがColabに認識されるまで数分程度かかる場合もあります。ゆっくり待ちましょう。もしくはColabメニュー>ランタイム>ランタイムを接続解除して削除をクリックし、再度一番上のセルから順に実行しましょう。
ここまでで設定が半分終わりました。続いて、サンキー図を描画したい企業の売上セグメントデータcsvを作成するステップです。
3. セグメントデータ読込
上述した通り、各企業の売上セグメントデータは手動での入力が必要です。イメージが掴みやすいように、サンプルデータを用意しました。まずはこちらをご活用いただくのがおすすめです▼
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 )
アップロード後のイメージがこちら▼
実際にセグメントデータを収集する際には有価証券報告書>第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つのファイルが必要です▼
ちなみに、GoogeFontとは、Googleが提供しているWebフォントサービスです。気になるフォントファイルを何度でも無料でダウンロード可能、商用利用もOKです。
お疲れ様でした!これでサンキー図描画の準備がほぼ完了しました。いよいよ、サンキー図の描画セクションへ進みましょう▼
セクション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」といった形で対象年度を入力しましょう。
あとは一つずつコードを実行していくだけでOKです。1-3|サンキー図描画のセルまで上手く機能すれば以下のサンキー図(テキストなし状態)がColab上で出力され、同時にGoogleDriveの01_Sankey_imgフォルダ内にpngとして画像保存されます▼
後続のコードで売上高や営業利益などのテキストを描画していきますが、必ずしも適切な位置に描画される訳ではありません(異常値の場合はサンキー図とテキストが重なってしまうなど)。
そんな時はこのプレーン状態の画像を元に、PowerPointやKeynoteで装飾を加える形でご活用いただければと思います。
最後に1-4|サンキー図テキスト追加セクションをすべて実行すると以下のようなテキスト付きのサンキー図が出力され、同時にGoogleDriveの02_Sankey_img_textフォルダ内に画像が保存されます(png)▼
セクション2|サンキー図一括表示
セクション1でGoogleDriveに保存した画像を取得し、以下のように一枚の画像にまとめて表示するセクションです▼
コロナ前コロナ後など、大きなイベント前後でサンキー図を作成して複数並べると面白いかもしれませんね。
フォルダ内に存在するサンキー図を証券コードの小さい順に最大9枚取得してタイル上に並べる機能です。パッと見ただけでも各社の利益の割合が大きく違うことがわかりますね。
なお、Ver1.3時点では一括画像の保存機能を実装しておりません。保存したい場合はColabで表示された画像上で右クリック→「名前をつけて保存」等をお願いいたします。
以上がサンキー図を描画・一括表示するまでの全工程です。以下ではシチュエーション別に設定例を端的にまとめます▼
❹シチュエーション別設定
■ 自分の好きな上場企業のサンキー図を描画したい
以下の手順で描画可能です▼
1. スプレッドシートに該当企業のデータを入力については、上記で紹介したサンプルシートにデータを追記する形で入力するのがおすすめです▼
■ 自分の好きなGoogleFontでテキストを描画したい
#フォントファイル読み込み
#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株式会社のサンキー図は、売上総利益がマイナスであるパターンを考慮できていないためサンキー図が正しく描画されていません▼
上記のようなエラーは発見次第、既存の出力に極力影響を与えないように都度修正していきます。ただ、ザイマニ管理人だけですべての企業のサンキー図を描画するのは非常に難しいです。
そのため、こちらが把握できていないエラーを共有いただけるととても助かります。「この企業を描画しようとしたけど上手くいかなかった」などの報告をザイマニ公式LINEより気軽にご連絡いただけると嬉しいです。
以上、シチュエーション別の設定一覧でした。SANKEY、ぜひご活用くださいませ!
SANKEY実践ガイドまとめ
SANKEY|損益計算書図解化Pythonツールの実践ガイドでした。
よく分からない箇所やさらに詳しく解説してほしいコードなどあれば、いつでもザイマニ公式LINEのトーク画面からお声がけくださいませ。
引き続き、ザイマニをよろしくお願いいたします。
▶︎ ザイマニコアメンバー制度の詳細はこちら
▶︎ ザイマニのnote記事一覧はこちら