STATCAST で遊ぶ vol.3 から続きます。
打率の度数分布表
まだ、今のところ STATCAST らしいデータは使っていないのですが、気にせず、2024_batting_d-bs-s.csv を使っていきます。2024_batting_d-bs-s.csv は、STATCAST で遊ぶ vol.2で、作成しています。
まず、打率データを作ります。
player_batting <- read.csv("./2024_batting_d-bs-s.csv")
batting_avg <- as.numeric(player_batting$batting_avg)
summary をみておきましょう。
summary(batting_avg)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.1960 0.2420 0.2560 0.2581 0.2750 0.3320
ここまでは、vol.2 でもやりました。今回は、ここでヒストグラムを描いてみます。
batting_avg_meta <- hist(batting_avg)
打率の分布をヒストグラム(柱状分布)で視覚的に捉えることができます。
これを描くときにbatting_avg_meta
に何やら代入していますね。これには描いたヒストグラムのメタ情報が入ります。
ここで知りたいのは、ヒストグラムの階級とそれぞれの絶対度数です。
まず、中身を見てみましょう。
batting_avg_meta$breaks
[1] 0.18 0.20 0.22 0.24 0.26 0.28 0.30 0.32 0.34
batting_avg_meta$counts
[1] 1 8 19 50 27 17 4 3
batting_avg_meta$breaks
を使えば、階級が表現できそうです。
まず、階級の数を調べます。
n <- length(batting_avg_meta$counts)
n
[1] 8
階級のラベルを作ってみましょう。
classified_names <- NULL # 変数を用意
for (i in 1:n) {
classified_names[i] <- paste(
paste(substring(sprintf("%0.3f", batting_avg_meta$breaks[i]), 2, 4), "0", sep = ""),
" - ",
paste(substring(sprintf("%0.3f", batting_avg_meta$breaks[i + 1]), 2, 4), "0", sep = "")
)
}
classified_names
[1] ".180 - .200" ".200 - .220" ".220 - .240" ".240 - .260" ".260 - .280"
[6] ".280 - .300" ".300 - .320" ".320 - .340"
絶対度数は、batting_avg_meta$counts
に入っているわけですから、これで、度数分布表ができそうですね。絶対度数とは、観測値、この場合は打率の各階級における数のことです。
batting_avg_table <- data.frame(打率=classified_names, 度数=batting_avg_meta$counts)
batting_avg_table
打率 度数
1 .180 - .200 1
2 .200 - .220 8
3 .220 - .240 19
4 .240 - .260 50
5 .260 - .280 27
6 .280 - .300 17
7 .300 - .320 4
8 .320 - .340 3
絶対度数の度数分布表ができました。
続いて、相対度数を調べてみましょう。相対度数は、各階級の割合、比率ということです。
batting_avg_relative <- batting_avg_meta$counts / sum(batting_avg_meta$counts)
batting_avg_rtable <- data.frame(打率=classified_names, 度数=batting_avg_relative)
batting_avg_rtable
打率 度数
1 .180 - .200 0.007751938
2 .200 - .220 0.062015504
3 .220 - .240 0.147286822
4 .240 - .260 0.387596899
5 .260 - .280 0.209302326
6 .280 - .300 0.131782946
7 .300 - .320 0.031007752
8 .320 - .340 0.023255814
続いて、累積度数です。累積度数は、階級ごとの度数を順番に足した数を度数とするものです。
最後は、度数の合計、割合で言えば 100%になります。
batting_avg_cumsumtable <- data.frame(打率=classified_names, 累積度数=cumsum(batting_avg_meta$counts))
batting_avg_cumsumtable
打率 累積度数
1 .180 - .200 1
2 .200 - .220 9
3 .220 - .240 28
4 .240 - .260 78
5 .260 - .280 105
6 .280 - .300 122
7 .300 - .320 126
8 .320 - .340 129
batting_avg_cumsumrtable <- data.frame(打率=classified_names, 累積度数=cumsum(batting_avg_relative))
batting_avg_cumsumrtable
打率 累積度数
1 .180 - .200 0.007751938
2 .200 - .220 0.069767442
3 .220 - .240 0.217054264
4 .240 - .260 0.604651163
5 .260 - .280 0.813953488
6 .280 - .300 0.945736434
7 .300 - .320 0.976744186
8 .320 - .340 1.000000000