STATCAST で遊ぶ vol.4

[STATCAST で遊ぶ vol.3](https://qiita.com/RemixWorksLLC/items/eb02abaa8bf83e686f2d) から続きます。

## 打率の度数分布表

　まだ、今のところ STATCAST らしいデータは使っていないのですが、気にせず、2024_batting_d-bs-s.csv を使っていきます。2024_batting_d-bs-s.csv は、[STATCAST で遊ぶ vol.2](https://qiita.com/RemixWorksLLC/items/782e8d5ad744dc0aacd3)で、作成しています。

　まず、打率データを作ります。

```
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3833520/79254db1-f0a7-6e94-9584-a5c879a81250.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
```