crosshyou

主にクロス表(分割表)分析をしようかなと思いはじめましたが、あまりクロス表の分析はできず。R言語の練習ブログになっています。

東証一部の規模別・業種別PERとPBRデータの分析1 - R言語にデータを読み込む。aggregate関数の練習

今回は、東証一部の規模別・業種別のPERとPBRのデータを分析したいと思います。

f:id:cross_hyou:20190326085733j:plain

https://www.jpx.co.jp/markets/statistics-equities/misc/04.html

このサイトからデータのエクセルファイルを取得しました。

f:id:cross_hyou:20190326085912j:plain

こういうファイルです。2013年から2019年の2月末のファイルをダウンロードして、このようなCSVファイルにしました。

f:id:cross_hyou:20190326090829j:plain

会社数、加重平均のPERとPBR、純利益と純資産です。業種や規模は適当にローマ字に直しました。このCSVファイルをread.csv関数でR言語に読みこみます。

f:id:cross_hyou:20190326090934j:plain

280の観測(Obs.)があって、変数(Variables)の数は8です。

変数のうちYearとLevelは整数型です。Tyoeはファクタ、その他は数値型です。

今回は、最近購入した

 

Statistics: An Introduction Using R (English Edition)

Statistics: An Introduction Using R (English Edition)

 

 を参考にして分析しようと思います。

まずは、データの絞り込みをしてみましょう。Total、つまり総合だけを表示しましょう。Levelが1だけにすればいいですね。

f:id:cross_hyou:20190326092410j:plain

これは TypeがTotalだけ、という絞り込みでも同様ですね。

f:id:cross_hyou:20190326092633j:plain

今度は、PBRが1.0以下でPERが10以上という絞り込みをしてみましょう。

f:id:cross_hyou:20190326092924j:plain

あら? NAの行がいっぱい出てきてしましましたね。なんでかな?NAは赤字でPERが計算できないときだけのはずなのに。summary関数でPERの変数以外にNAがあるか確認します。

f:id:cross_hyou:20190326094534j:plain

やっぱりPER以外でNAがある変数は無いですね。とりあえず、先に進みます。

order関数で並びかえできます。PBRの小さい順に並び替えます

f:id:cross_hyou:20190326095016j:plain

2016年のMining(鉱業です)とMarine(海運です)とBank(銀行です)が一番PBRが低いです。

rev関数を加えて大きい順に表示できます。

f:id:cross_hyou:20190326095311j:plain

2019年のSeimitsu(精密機器です)と2015年のServ(サービス業です)が一番PBRが高いです。

with関数とtapply関数とmean関数で年ごとの平均のPERを調べてみます。

f:id:cross_hyou:20190326100034j:plain

あ、PERはNAがいくつかあったからmean関数はNAを返してしまいますね。na.rm = TRUEを加えないとダメですね。

f:id:cross_hyou:20190326100254j:plain

2016年が16.66で一番低く、2013年が30.99で一番高いですね。

with関数とtapply関数は一つの変数だけでした。こんどはaggregate関数を使って、Number, PER, PBR, Income, NetAssetの5つの変数の年ごとの平均値を算出してみましょう。

f:id:cross_hyou:20190326100758j:plain

うまくできました。

aggregate関数のlist(~~)のところには複数の変数を入れることができますので、df$Levelも入れてやってみましょう。

f:id:cross_hyou:20190326101435j:plain

できました。

今回は以上です。
次回は

 

www.crosshyou.info

 

です。

 

 今回の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)