今回は、東証一部の規模別・業種別のPERとPBRのデータを分析したいと思います。
https://www.jpx.co.jp/markets/statistics-equities/misc/04.html
このサイトからデータのエクセルファイルを取得しました。
こういうファイルです。2013年から2019年の2月末のファイルをダウンロードして、このようなCSVファイルにしました。
会社数、加重平均のPERとPBR、純利益と純資産です。業種や規模は適当にローマ字に直しました。このCSVファイルをread.csv関数でR言語に読みこみます。
280の観測(Obs.)があって、変数(Variables)の数は8です。
変数のうちYearとLevelは整数型です。Tyoeはファクタ、その他は数値型です。
今回は、最近購入した
Statistics: An Introduction Using R (English Edition)
- 作者: Michael J. Crawley
- 出版社/メーカー: Wiley
- 発売日: 2014/09/23
- メディア: Kindle版
- この商品を含むブログを見る
を参考にして分析しようと思います。
まずは、データの絞り込みをしてみましょう。Total、つまり総合だけを表示しましょう。Levelが1だけにすればいいですね。
これは TypeがTotalだけ、という絞り込みでも同様ですね。
今度は、PBRが1.0以下でPERが10以上という絞り込みをしてみましょう。
あら? NAの行がいっぱい出てきてしましましたね。なんでかな?NAは赤字でPERが計算できないときだけのはずなのに。summary関数でPERの変数以外にNAがあるか確認します。
やっぱりPER以外でNAがある変数は無いですね。とりあえず、先に進みます。
order関数で並びかえできます。PBRの小さい順に並び替えます
2016年のMining(鉱業です)とMarine(海運です)とBank(銀行です)が一番PBRが低いです。
rev関数を加えて大きい順に表示できます。
2019年のSeimitsu(精密機器です)と2015年のServ(サービス業です)が一番PBRが高いです。
with関数とtapply関数とmean関数で年ごとの平均のPERを調べてみます。
あ、PERはNAがいくつかあったからmean関数はNAを返してしまいますね。na.rm = TRUEを加えないとダメですね。
2016年が16.66で一番低く、2013年が30.99で一番高いですね。
with関数とtapply関数は一つの変数だけでした。こんどはaggregate関数を使って、Number, PER, PBR, Income, NetAssetの5つの変数の年ごとの平均値を算出してみましょう。
うまくできました。
aggregate関数のlist(~~)のところには複数の変数を入れることができますので、df$Levelも入れてやってみましょう。
できました。
今回は以上です。
次回は
です。
今回のR言語のコードです。
# 東証一部の規模別・業種別のPERとPBR
# データの読み込み
df <- read.csv("jpx.csv")
# str関数でデータ構造の確認
str(df)
# Total(Level == 1)だけを表示
df[df$Level == 1, ]
# Total(Type == "Total")だけを表示
df[df$Type == "Total", ]
# PBR < 1.0 で PER > 10
df[df$PBR < 1.0 & df$PER > 10, ]
# summary関数
summary(df)
# order関数でPBRの小さい順に並び替え
df[order(df$PBR), ]
# rev関数を追加して大きい順に並び替え
df[rev(order(df$PBR)), ]
# 年ごとの平均PER
with(df, tapply(PER, Year, mean))
# na.rm = TRUE を追加
with(df, tapply(PER, Year, mean, na.rm = TRUE))
# aggregate関数
aggregate(df[ , c(4:8)], list(df$Year), mean, na.rm = TRUE)
# df$Levelも追加
aggregate(df[ , c(4:8)], list(Year = df$Year, Level = df$Level),
mean, na.rm = TRUE)