Pythonによる財務分析⑤ -バフェットコードを用いて完全レクチャー! (全8回)



Python初心者
データを加工してみたけど、まだまだ分析できるデータじゃない…。
どうすれば分析できるデータにすることができるんだろう?

本記事では、バフェット・コードのAPIを使い「数百数千の財務データを取得し、集めたデータを加工する」という流れをサンプルコードとともに解説をします!

(記事にでてくるコードは配布しております。まとめにあるリンクからダウンロードください。)

本記事は、全8回に渡って掲載される「Pythonによる財務分析バフェットコードを用いて完全レクチャー!」シリーズの第5回です!

このシリーズを読むとわかること
Python初心者でも、数百数千の企業の財務データを分析出来るようになる!

最終的に重回帰分析といった機械学習的手法もマスターできる!

本記事では、バフェット・コードのAPIを使い、

  • 12指標のデータを1つにまとめ、全企業のデータを加工する
  • 加工したデータを確認しクレンジング(前処理)をおこなう
  • クレンジングしたデータを保存する

という流れをサンプルコードとともに解説をします!

まずは、第4回で作成した全12指標の財務指標やキャピタルゲイン(株式で売買した差益)のコードを、関数化し1つにまとめます。

関数化をすることで、全企業を加工する際に一気に行うことができるようになります!

 

その後、加工したデータを確認し、クレンジング(データの前処理)をおこないます。

クレンジングとは、加工したデータを「分析するデータ」として使える形にすることを指します。

具体的には、欠損値(nan)や無限数(inf)など分析結果に影響を与える値を処理していくことです。

クレンジングをしない場合、分析のときに計算でバグが生じてしまいます。

例えば、「∞= (1+2+3+4+∞)/5」というように5つの値の平均値を求めるときに、「∞」があると計算結果が「∞」になってしまいますよね。

 

そして、最後にそのデータをcsv形式で保存し、分析をおこなえるようにします!

データの前処理は地味ですが、データサイエンスをおこなう上で避けては通れない道です。

気合いをいれて取り組みましょう!

 

バフェットコードから作成した全12指標を1つにまとめ、全企業のデータを加工しよう!

数字 データ

 第4回にて保存した、全12指標の財務指標やキャピタルゲイン(株式で売買した差益)のコードを、関数化し1つにまとめます。全12指標とは、ROEや売上高成長率などです。

まずは、いつものように第5回のファイルを新規作成します!

ファイル python
why
ファイル作成ができましたら、第5回のファイルにコードをかいていきます!

(サンプルコードをwineytradeの共有フォルダにて配布していますので、そこから第5回のファイルをダウンロードするでも大丈夫です。)

データを加工するコードを関数化する

4回から、作成したコードをコピーペーストします。

その後、それぞれのコードを関数化し、データを一気に取得できるようにします。

これをおこなうことで、この後全企業のデータを加工するコードをかく際に、加工の流れがみえやすくなります!

python コード python コード python コード

12指標とキャピタルゲインを加工するコードを関数化させることができました!

 

全企業データを加工する

関数化されたコードをもとに、全企業データを読みこませ、そしてfor文で順番に加工していきます!

全企業データを読みこませるために、下記のようなコードを書きます。

こちらは、全企業データを取得しおえていない方や、業種内でデータを取得した方も配慮し、

全企業データをもっていない場合でも加工できるよう工夫しています。

python コード

プログラムを実行し、4行目のinput関数に、読みこみたいデータがあるtxtファイルを記入します。

python コード

確認をすると、txtファイルに書かれている銘柄コードがうまく読み込まれていることがわかります。

これを用いて、全企業データを順番に加工していきます!

python 出力結果

ちなみにですが、全企業データの取得が終えている場合、ticker.txtの行数と同じ1220行がticker_count.txtに記入されていると思われます!

下記のようなコードをかき、企業データを1社ずつ加工し、企業ごとの財務指標を作成します。

その際、関数化させたコードをもとに、それぞれの指標をデータフレームにいれていきます。

why
データフレームにいれることで、今後分析していくためのライブラリを使えるようにするよ。

python コード

上の画像プログラムを実行し、3分ほど待ちます。

そのとき、全12指標とキャピタルゲイン関数を実行したり、銘柄コードを指定するticker_dataを事前に出力していないと、エラーが表示されるため注意しましょう!

3600社分の加工をするため少々時間がかかります。

why
気長に待とうね。

python コード

 

加工されたデータが出力されました!!

csvに保存させる

最後に、加工されたデータをcsv形式に保存します。

誤ってjupyter notebookを閉じたとしても、毎回加工せずデータをすぐに取り出すことができるためです。

下記のようなコードを書き、データを保存します。

python コード

ためしに保存したデータを読みこませると、企業ごとに綺麗に並べられた財務指標がみることができます!



加工したデータを確認し、Pythonで財務分析をおこなうためのクレンジングをしよう!

加工したデータを確認しクレンジング(前処理)をおこないます。

データクレンジングとは
欠損値(nan)や無限数(inf)など、計算をおこなう上でバグが生じやすい値を処理したり、データ分析において多重共線性の回避やP値判定のための処理などをおこなうことです。

データ分析の回にて、多重共線性やP値判定などは詳しく説明するため今回は割愛します。

ここでいう処理とは、分析に影響のないようにすることです。

処理の具体例は下記の、

  • 欠損値(nan)の処理をする
  • 無限数(inf)の処理をする

にて取り上げますので、そちらで確認しましょう!

今回は、欠損値(nan)や無限(inf)を処理する、といった前処理としてのクレンジングを行います。



欠損値(nan)の処理をする

is.nullメソッドをもちいて、データに欠損があるかどうかを確認します。

もし、欠損値があったまま分析をおこなうと、分析をする途中で欠損値を計算に含み欠損値しか結果を出さなくなります。

イメージ、1×2×3×4×5×= 0 と、欠損値が左の0の式みたいな感じになります。

この際、sumメソッドをもちいることで、各指標の欠損の個数を確認することができます。

python コード

補足として、今回の処理には必要ないですが、

下記のコードを書くことで、欠損値が含まれる企業を特定することができます。

python コード

その後、欠損値(nan)を中央値で埋めていきます。

中央値とは
分析したいデータのうち、一番小さい数から順番に数えて真ん中の番目にある数のことを指します。

例えば、0,2,5,7,8,9,10という7個の値があったとき、一番小さい数である0から順番に数えると、7が真ん中の番目にあることがわかります。このとき中央値は7となります。

他の欠損値を埋める方法として、平均値や最頻値で埋める方法などもあります。

今回は、業種間での財務指標の二極化などを危惧し、データの偏りに強い中央値を採用しています。

ちなみにですが、欠損値が1つでもある企業を、分析に使わないよう除去することもできます。

しかし、欠損のないデータまでも除去するのはもったいため、欠損値を中央値で埋める形をとっています。

fillna.median()とコードを書き、欠損値(nan)を中央値で埋めます。

python コード

再度確認すると、財務指標の欠損値がなくなったことがわかります。

(企業名の欠損は、中央値が文字列のため、埋めることができず消えていないです。しかし、銘柄コードから企業名を特定することはできるためスルーします。)

無限数(inf)の処理をする

下記のコードを書き、各指標に無限数(inf)があるかどうか調べます。

もし、無限数があったまま分析をおこなうと、

分析をする途中で無限数を計算に含み、無限数しか結果を出さなくなります。

why
「1×2×3×4×5×∞= ∞ 」といった感じだね。

python コード

補足として、今回の処理には必要ないですが、下記のコードを書くことで、無限数が含まれる企業を特定することができます。

python コード

先ほどの無限数(inf)の各項目の個数を確認すると、画像のような指標に無限数が含まれていることがわかります。

python コード

無限数が含まれる時は、0が分母で、分子を割っていることが大半です。

指標の計算式をみると、割り算を計算の途中でおこなっていることがわかります。

これをふまえ、対策をかんがえます。

今回は、加重平均をおこなったときに、出力結果が無限数である場合に欠損値(nan)とするようコードを書き変えます。

python コード

修正した加重平均関数を実行させた上で、再度データの加工をおこないます。

無限数がなくなったかどうかの確認は下記「データの加工を再度おこない保存をする」にて確認します!



データの加工を再度おこない保存をする

データの加工を再度おこない、クレンジングした上でcsv形式に保存します。

保存をおこない、次回にデータ分析ができるようにします!

python コード

データの加工が終わりました!

その後、欠損値を中央値で埋めた上でデータを保存します。

python カード

確認として、欠損値や無限数があるかどうか確認すると、きれいに処理されていることがわかります!

python コード



まとめ

5回では、Pythonで本格的な財務析を行うための、

  • 12指標のデータを1つにまとめ、全企業のデータを加工する
  • 加工したデータを確認しクレンジング(前処理)をおこなう
  • クレンジングしたデータを保存する

といったことをレクチャーしていきました!

次回の第6回では、「企業の財務指標をスコアリングし順位付けをする」流れに入っていきます。

こちらをレクチャーすることで、

ROEが○○以上」といった目安の数値によるスクリーニングでなく、

ROEが全企業中上位○○%以上」といった

企業の相対的な良し悪しでスクリーニングをおこなうことができるようになります!

 

5回に掲載されているコードは、下記リンクからダウンロードきますので是非ご利用ください!

https://drive.google.com/drive/folders/10QT7ql_5_brnSireZxRp8sigz2MWWACl

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA