Merge branch 'master' of ssh://repo.or.cz/srv/git/gostyle
[gostyle.git] / data_about_players.py
blob5e20330188c23966a4e4bfcb9120df8c73ef84de
1 #!/usr/bin/python
2 from gostyle import Rescale
4 # TODO following method is total XXX
5 # basically whole concept of static class Data is somewhat shallow, and not a good style Python
6 def questionare_average(questionare_list,silent=False):
7 import numpy
8 total={}
9 count={}
10 for questionare in questionare_list:
11 for name in questionare.keys():
12 if name in count:
13 count[name] += 1
14 else:
15 count[name] = 1
16 total[name] = []
17 total[name].append(questionare[name])
19 l=[]
20 for name, counter in count.items():
21 l.append( (counter, name) )
22 l.sort()
23 l.reverse()
24 variance=[]
25 result={}
26 for counter, name in l:
27 if counter > 1:
28 means=[]
29 if not silent:
30 space = 0 if len(name) > 20 else ' '*(20 - len(name))
31 print "%d: %s"%(counter, name + space),
32 a = numpy.array(total[name]).transpose()
33 for b in a:
34 means.append(b.mean())
35 if not silent:
36 print u"%2.3f \u00B1 %2.3f "%(b.mean(), numpy.sqrt(b.var())),
37 variance.append(numpy.sqrt(b.var()))
38 if not silent:
39 print
40 variance.append(numpy.sqrt(b.var()))
41 result[name] = means
42 if not silent:
43 print "Mean standard deviation is: %2.3f"%(numpy.array(variance).mean(),)
44 return result
46 def questionare_average_raw(questionare_list):
47 import numpy
48 total={}
49 count={}
50 for questionare in questionare_list:
51 for name in questionare.keys():
52 if name in count:
53 count[name] += 1
54 else:
55 count[name] = 1
56 total[name] = []
57 total[name].append(questionare[name])
59 l=[]
60 for name, counter in count.items():
61 l.append( (counter, name) )
62 l.sort()
63 l.reverse()
64 variance=[]
65 result={}
66 for counter, name in l:
67 if counter > 1:
68 means=[]
69 print "%s, %d,"%(name, counter),
70 a = numpy.array(total[name]).transpose()
71 for b in a:
72 means.append(b.mean())
73 print u"%2.3f,"%(b.mean()),
74 print
75 result[name] = means
76 return result
78 class Data:
79 ### A path to a main pattern file that should contain the most representative patterns along with their occurences
80 ### For its precise format, see `gostyle.py'
81 #homedir='../pdb/'
82 homedir='../pdb-cont/'
83 #homedir='../pdb-notenuki/'
84 #homedir='../pdb-gtl/'
86 main_pat_filename = homedir + 'all.pat'
87 ### Folder with player pat files
88 pat_files_folder = homedir + 'pat_files/'
89 ### Pat files should be named ater players
91 ### Explicit list of players
92 #players_all = ['Takemiya Masaki', 'Cho Tae-hyeon', 'Yoda Norimoto', 'Chen Zude', 'Sakata Eio', 'Luo Xihe', 'Gu Li', 'Jie Li', 'Cho Chikun', 'Cho U', 'Suzuki Goro', 'O Meien', 'Miyazawa Goro', 'Wu Songsheng', 'Ma Xiaochun', 'Yasuda Shusaku', 'Kuwahara Shusaku', 'Honinbo Shusaku', 'Go Seigen', 'Shao Zhenzhong', "Yi Ch'ang-ho", 'Ishida Yoshio', 'Kobayashi Koichi', 'Rui Naiwei', 'Yi Se-tol', 'Kato Masao', 'Nie Weiping']
93 #players_all = ['Chen Yaoye', 'Chen Zude', 'Cho Chikun', 'Cho Tae-hyeon', 'Cho U', 'Fujisawa Hideyuki', 'Go Seigen', 'Gu Li', 'Hane Naoki', 'Honinbo Dosaku', 'Honinbo Shusaku', 'Honinbo Shuwa', 'Huang Longshi', 'Ishida Yoshio', 'Jie Li', 'Kato Masao', 'Kato Shin', 'Kobayashi Koichi', 'Kuwahara Shusaku', 'Luo Xihe', 'Ma Xiaochun', 'Miyazawa Goro', 'Nie Weiping', 'O Meien', 'Otake Hideo', 'Rui Naiwei', 'Sakata Eio', 'Shao Zhenzhong', 'Suzuki Goro', 'Takao Shinji', 'Takemiya Masaki', 'Wu Songsheng', 'Yamashita Keigo', 'Yasuda Shusaku', "Yi Ch'ang-ho 2005+", 'Yi Se-tol', 'Yoda Norimoto', 'Yuki Satoshi']
94 # Set-in-paper:
95 players_all = [ 'Yoda Norimoto', 'Yi Se-tol', "Yi Ch'ang-ho", 'Takemiya Masaki', 'Sakata Eio', 'Rui Naiwei', 'Otake Hideo', 'O Meien', 'Ma Xiaochun', 'Luo Xihe', 'Ishida Yoshio', 'Gu Li', 'Cho U', 'Cho Chikun', 'Yuki Satoshi', 'Yamashita Keigo', 'Takao Shinji', 'Miyazawa Goro', 'Kobayashi Koichi', 'Kato Masao', 'Hane Naoki', 'Go Seigen', 'Fujisawa Hideyuki', 'Chen Yaoye' ]
97 strength_all = ['d01', 'd02', 'd03', 'd04', 'k01', 'k02', 'k03', 'k04', 'k05', 'k06', 'k07', 'k08', 'k09', 'k10', 'k11', 'k12', 'k13', 'k14', 'k15', 'k16', 'k17', 'k18', 'k19', 'k20', 'k21', 'k22', 'k23', 'k24', 'k25', 'k26', 'k27', 'k28', 'k29', 'k30']
99 ### Thist is used for StrategyOutputVectorGenerator (see gostyle.py)
100 strategy_players = {
101 "territorial":[ 'Cho Chikun', 'Cho U', 'Suzuki Goro'],
102 "agressive":[ 'Kobayashi Koichi', 'Rui Naiwei', 'Yi Se-tol' ],
103 "careful":[ "Yi Ch'ang-ho", 'Ishida Yoshio' ],
104 "moyo":[ 'Takemiya Masaki', 'Cho Tae-hyeon'],
105 "attacking":[ 'Kato Masao', 'Nie Weiping'],
106 "flexible":[ 'Ma Xiaochun' , 'Yasuda Shusaku', 'Kuwahara Shusaku', 'Honinbo Shusaku', 'Go Seigen', 'Shao Zhenzhong' ],
107 "wild":[ 'O Meien', 'Miyazawa Goro', 'Wu Songsheng'],
108 "tesuji focused":[ 'Sakata Eio', 'Luo Xihe', 'Gu Li', 'Jie Li'],
109 "misc":[ 'Yoda Norimoto', 'Chen Zude' ]
112 ### Thist is used for PlanarOutputVectorGenerator (see gostyle.py)
113 player_vector = {
114 "Cho Chikun": [ 1.0, 0.0 ],
115 "Yi Se-tol": [ 0.0, 1.0 ],
116 "Yi Ch'ang-ho": [ 0.0, -1.0 ],
117 "Ma Xiaochun": [ 0.0, 0.0 ],
118 #"Honinbo Shusaku": [ 0.0, 0.0 ],
119 #"Go Seigen": [ 0.0, 0.0 ],
120 "Ishida Yoshio": [ 0.0, -0.5 ],
121 "Rui Naiwei": [ 0.5, 1.0 ],
122 "Sakata Eio": [ 0.5, 0.5 ],
123 "Takemiya Masaki": [ -1.0, 0.0 ]
126 ### Median year of player games
127 player_year = {
128 "Yoda Norimoto": 1998,
129 "Yi Se-tol": 2004,
130 "Yi Ch'ang-ho": 1998,
131 "Takemiya Masaki": 1988,
132 "Sakata Eio": 1970,
133 "Rui Naiwei": 2001,
134 "Otake Hideo": 1984,
135 "O Meien": 2001,
136 "Ma Xiaochun": 1995,
137 "Luo Xihe": 2001,
138 "Ishida Yoshio": 1982,
139 "Gu Li": 2005,
140 "Cho U": 2005,
141 "Cho Chikun": 1992,
142 "Yuki Satoshi": 2001,
143 "Yamashita Keigo": 2004,
144 "Takao Shinji": 2004,
145 "Miyazawa Goro": 1992,
146 "Kobayashi Koichi": 1991,
147 "Kato Masao": 1988,
148 "Hane Naoki": 2003,
149 "Fujisawa Hideyuki": 1975,
150 "Chen Yaoye": 2006
153 ### make dictionary from pairs of "strength name" and number of strengths scaled to -1 1
155 # gotta have list of one sized lists, because the dict has to have type string : [ number ]
156 # instead of just string : number
157 linear_list = [ [num] for num in Rescale(-1.0,1.0)(range(len(strength_all),0,-1))]
158 strength_linear_vector = dict(zip(strength_all, linear_list))
161 ### Following code consist of expert based knowledge kindly supplied by
162 ### Alexander Dinerstein 3-pro, Motoki Noguchi 7-dan and Vit Brunner 4-dan)
164 ### The vector at each name corresponds with
165 ### (Territory, Orthodox, Aggressiveness, Thickness)
166 questionare_vit_brun = {
167 "Chen Yaoye": (7, 5, 7, 6),
168 "Cho Chikun": (9, 7, 7, 9),
169 "Cho U": (4, 6, 7, 4),
170 "Gu Li": (5, 6, 9, 5),
171 "Ishida Yoshio": (6, 3, 5, 5),
172 "Luo Xihe": (8, 4, 7, 7),
173 "Ma Xiaochun": (5, 7, 7, 7),
174 "O Meien": (3, 9, 6, 5),
175 "Otake Hideo": (4, 3, 6, 5),
176 "Rui Naiwei": (5, 6, 8, 5),
177 "Sakata Eio": (6, 4, 8, 6),
178 "Takemiya Masaki": (1, 4, 7, 2),
179 "Yi Ch'ang-ho 2004-": (7, 6, 4, 4),
180 "Yi Ch'ang-ho 2005+": (7, 6, 6, 4),
181 "Yi Ch'ang-ho": (7, 6, 6, 4),
182 "Yi Se-tol": (6, 5, 9, 5),
183 "Yoda Norimoto": (4, 4, 7, 3)
185 questionare_motoki_noguchi = {
186 "Cho Chikun": (8, 9, 8, 8 ),
187 "Cho U": (9, 7, 6, 8),
188 "Gu Li": (7, 8, 10, 4 ),
189 "Ishida Yoshio": (9, 6, 2, 6),
190 "Luo Xihe": (6, 8, 9, 7 ),
191 "Ma Xiaochun": (9, 6, 7, 8),
192 "O Meien": (1, 10, 10, 2 ),
193 "Otake Hideo": (4, 3, 5, 3),
194 "Rui Naiwei": (6, 6, 10, 2),
195 "Sakata Eio": (10, 5, 6, 10),
196 "Takemiya Masaki": (2,6, 6, 1),
197 "Yi Ch'ang-ho 2004-": (8, 3, 2, 3),
198 "Yi Se-tol": (5, 10, 10, 8 ),
199 "Yoda Norimoto": (8, 2, 2, 5),
200 "Fujisawa Hideyuki": (4, 8, 7, 4 ),
201 "Go Seigen": (8, 10, 9, 6),
202 "Hane Naoki": (8, 2, 4, 6 ),
203 "Honinbo Dosaku": (2, 10, 8, 5 ),
204 "Honinbo Shusaku": (8, 3, 2, 6),
205 "Honinbo Shuwa": (10, 8, 2, 10),
206 "Kato Masao": (2,3, 9, 4),
207 "Kobayashi Koichi": (8, 3, 3, 6),
208 "Miyazawa Goro": (1, 10, 10, 3),
209 "Takao Shinji": (4, 3, 7, 4 ),
210 "Yamashita Keigo": (2, 8, 10, 4 ),
211 "Yuki Satoshi": (2, 8, 10, 4)
213 questionare_alex_dinner = {
214 "Chen Yaoye": (5, 3, 5, 5),
215 "Cho Chikun": (10, 7, 5, 10),
216 "Cho U": (9, 5, 3, 7),
217 "Gu Li": (5, 7, 8, 3),
218 "Ishida Yoshio": (9, 6, 3, 5),
219 "Luo Xihe": (8, 10, 7, 4),
220 "Ma Xiaochun": (10, 6, 3, 9),
221 "O Meien": (4, 10, 9, 4),
222 "Otake Hideo": (5, 3, 3, 3),
223 "Rui Naiwei": (3, 5, 9, 3),
224 "Sakata Eio": (7, 5, 8, 8),
225 "Takemiya Masaki": (1, 9, 8, 1),
226 "Yi Ch'ang-ho 2004-": (6, 6, 2, 1),
227 "Yi Ch'ang-ho 2005+": (5, 4, 5, 3),
228 "Yi Ch'ang-ho": (5, 4, 5, 3),
229 "Yi Se-tol": (5, 5, 9, 7),
230 "Yoda Norimoto": (7, 7, 4, 2),
231 "Chen Zude": (3, 8, 6, 5),
232 "Cho Tae-hyeon": (1, 4, 4, 2),
233 "Fujisawa Hideyuki": (3, 10, 7, 4),
234 "Go Seigen": (4, 8, 7, 4),
235 "Hane Naoki": (7, 3, 4, 3),
236 "Jie Li (USA)": (5, 3, 5, 4),
237 "Kato Masao": (3, 6, 10, 4),
238 "Kobayashi Koichi": (10, 2, 2, 5),
239 "Miyazawa Goro": (2, 10, 9, 5),
240 "Nie Weiping": (3, 7, 8, 4),
241 "Shao Zhenzhong": (4, 5, 5, 4),
242 "Suzuki Goro": (4, 7, 5, 5),
243 "Takao Shinji": (6, 4, 4, 5),
244 "Wu Songsheng": (2, 10, 7, 4),
245 "Yamashita Keigo": (2, 10, 9, 2),
246 "Yuki Satoshi": (4, 9, 8, 5),
247 "breakfast": (7, 7, 3, 4),
248 "rapyuta/daien": (4, 7, 6, 5),
249 "MilanMilan": (5, 5, 6, 4),
250 "roln111-": (6, 5, 7, 5),
251 "somerville": (4, 5, 5, 6),
252 "artem92-": (7, 4, 3, 2),
253 "TheCaptain": (3, 8, 7, 6)
255 questionare_list = [ questionare_vit_brun, questionare_motoki_noguchi, questionare_alex_dinner ]
256 questionare_total = questionare_average(questionare_list,silent=True)
258 def questionare_variance():
259 questionare_average(Data.questionare_list)
261 if __name__ == '__main__':
262 import sys
264 for arg in sys.argv:
265 if arg == '-p' or arg == '--all-players':
266 for p in Data.players_all:
267 print p
268 if arg == '-h' or arg == '--help':
269 print sys.argv[0], " [OPTIONS]"
270 print """
272 OPTIONS
273 -p, --all-players
274 prints a list of known players to the STDOUT.
275 -h, --help
276 help!