0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

STATCAST で遊ぶ vol.4

Last updated at Posted at 2025-01-28

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)

5123681c-d55b-48d0-8ccd-baab693885e3.png

打率の分布をヒストグラム(柱状分布)で視覚的に捉えることができます。
これを描くときに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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?