teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

打率を出塁率に修正

2020/01/03 07:55

投稿

Keita222
Keita222

スコア8

title CHANGED
File without changes
body CHANGED
@@ -1,5 +1,5 @@
1
1
  ### 前提・実現したいこと
2
- Javaで、データの各選手の率を出力したいと思っています。
2
+ Javaで、データの各選手の出塁率を出力したいと思っています。
3
3
  データの一部は下記のような感じです。
4
4
 
5
5
  play,1,0,lindf001,22,BCBSX,8/L+,1,1,0outcount,000,0,0,1,"J.C. Ramirez",0,0,Norunner,0scoring
@@ -9,17 +9,17 @@
9
9
  play,1,1,troum001,02,CCT,K,1,2,1outcount,000,0,0,1,"Mike Clevinger",0,0,Norunner,0scoring
10
10
 
11
11
  それぞれの打席の結果などが一行に示されています。
12
- ,で区切り、4行目が打者選手のID、16行目の数字(0か1)がアウトかヒットかを示しています。
12
+ ,で区切り、4行目が打者選手のID、16行目の数字(0か1)がアウトか出塁したかを示しています。
13
- 0がアウトで1がヒットです。
13
+ 0がアウトで1が出塁です。
14
- 四球や犠牲フライなど打数入らない打席のデータはあらかじめ除いているのでそこは考慮しなくて大丈夫です。
14
+ 犠牲フライなど出塁率関係ない打席のデータはあらかじめ除いているのでそこは考慮しなくて大丈夫です。
15
- これをもとに各選手ごとの率を出力するというのが目的です。
15
+ これをもとに各選手ごとの出塁率を出力するというのが目的です。
16
16
  出力例は下記のような感じです。
17
17
 
18
18
  選手ID 0.310...
19
19
  選手ID 0.265...
20
20
  選手ID 0.288...
21
21
 
22
- ソースコードは、対戦投手別の打者率を出力するプログラムです。
22
+ ソースコードは、対戦投手別の打者出塁率を出力するプログラムです。
23
23
  これをどう変えれば、投手別ではなく打者の打率になりますか?
24
24
  教えてもらえると助かります。
25
25
 

3

タイトルを変更

2020/01/03 07:54

投稿

Keita222
Keita222

スコア8

title CHANGED
@@ -1,1 +1,1 @@
1
- Javaで、データの各選手の打率出力したい
1
+ Javaで、データを計算したいのですが
body CHANGED
File without changes

2

フレームの表示を誤っていたため改善

2020/01/02 07:18

投稿

Keita222
Keita222

スコア8

title CHANGED
File without changes
body CHANGED
@@ -23,11 +23,6 @@
23
23
  これをどう変えれば、投手別ではなく打者の打率になりますか?
24
24
  教えてもらえると助かります。
25
25
 
26
- ### 発生している問題・エラーメッセージ
27
-
28
- ```
29
- ```
30
-
31
26
  ### 該当のソースコード
32
27
 
33
28
  ```ここに言語名を入力

1

ソースコードを追記した

2020/01/02 07:07

投稿

Keita222
Keita222

スコア8

title CHANGED
File without changes
body CHANGED
@@ -19,8 +19,126 @@
19
19
  選手ID 0.265...
20
20
  選手ID 0.288...
21
21
 
22
+ ソースコードは、対戦投手別の打者打率を出力するプログラムです。
23
+ これをどう変えれば、投手別ではなく打者の打率になりますか?
22
24
  教えてもらえると助かります。
23
25
 
26
+ ### 発生している問題・エラーメッセージ
24
27
 
28
+ ```
29
+ ```
30
+
31
+ ### 該当のソースコード
32
+
33
+ ```ここに言語名を入力
34
+ package ○○○○;
35
+
36
+ import java.io.BufferedReader;
37
+ import java.io.FileReader;
38
+ import java.io.IOException;
39
+ import java.io.PrintStream;
40
+ import java.util.ArrayList;
41
+ import java.util.Collections;
42
+ import java.util.HashMap;
43
+ import java.util.List;
44
+ import java.util.Map;
45
+
46
+ public class EvaConv {
47
+
48
+ public static void main(String[] args) {
49
+ try {
50
+ PlayerMatrix.read("ファイル名.EVA").writeTo(System.out);
51
+ } catch(IOException e) {
52
+ e.printStackTrace();
53
+ }
54
+ }
55
+
56
+ private static class PlayerMatrix {
57
+ List<String> rowList = new ArrayList<>();
58
+ List<String> columnList = new ArrayList<>();
59
+ Map<String,List<Integer>> map = new HashMap<>();
60
+
61
+ // value: ヒット,アウト?
62
+ void put(String row, String column, int value) {
63
+ String key =makeKey(row, column);
64
+ if(map.containsKey(key)) {
65
+ map.get(key).add(value);
66
+ } else {
67
+ if(!rowList.contains(row)) rowList.add(row);
68
+ if(!columnList.contains(column)) columnList.add(column);
69
+ List<Integer> valueList = new ArrayList<>();
70
+ valueList.add(value);
71
+ map.put(key, valueList);
72
+ }
73
+ }
74
+ String[] getRows() {
75
+ return rowList.toArray(new String[rowList.size()]);
76
+ }
77
+ String[] getColumns() {
78
+ return columnList.toArray(new String[columnList.size()]);
79
+ }
80
+ // return: データが無ければ Collections.emptyList() を返す
81
+ List<Integer> get(String row, String column) {
82
+ List<Integer> values = map.get(makeKey(row, column));
83
+ if(values != null) return values;
84
+ return Collections.emptyList();
85
+ }
86
+ private String makeKey(String row, String column) {
87
+ return row + "$$$" + column;
88
+ }
89
+
90
+ void writeTo(PrintStream out) {
91
+ String[] columns = getColumns();
92
+ for(String column : columns) {
93
+ out.print(","+column);
94
+ }
95
+ out.println();
96
+
97
+ String[] rows = getRows();
98
+ for(String row : rows) {
99
+ out.print(row);
100
+ for(String column : columns) {
101
+ out.print(",");
102
+ List<Integer> values = get(row, column);
103
+ double count = 0;
104
+ double hit = 0;
105
+ for(int i=0; i<values.size(); i++) {
106
+ if(values.get(i) == 0 || values.get(i) == 1) {
107
+ count = count + 1;
108
+ if(values.get(i) == 1) {
109
+ hit = hit + 1;
110
+ }
111
+ }
112
+ }
113
+ if(count != 0){
114
+ out.print(hit / count);
115
+ }
116
+ }
117
+ out.println();
118
+ }
119
+ }
120
+
121
+ static PlayerMatrix read(String filename) throws IOException {
122
+ try(BufferedReader br = new BufferedReader(new FileReader(filename));) {
123
+ PlayerMatrix matrix = new PlayerMatrix();
124
+ String line;
125
+ while((line = br.readLine()) != null) {
126
+ String[] tokens = line.split(",");
127
+ String row = tokens[3]; //打者
128
+ String column = tokens[14]; //投手
129
+ int value = Integer.parseInt(tokens[16]); //出塁したかどうか
130
+ matrix.put(row, column, value);
131
+ }
132
+ return matrix;
133
+ }
134
+ }
135
+ }
136
+ }
137
+ ```
138
+
139
+ ### 試したこと
140
+
141
+ 投手の考慮せずに改良しようと思ったが、どこを変えれば良いのか分からなかった…。
142
+
25
143
  ### 補足情報(FW/ツールのバージョンなど)
26
144
  OXYGEN.3(eclipse)