打者9人が全員イチローだったら?

October 13, 2010 at 01:03 AM | View Comments

さて、今回もメジャーリーグを数字で見るシリーズ。

これまで、

  • 安打数 + 四球
  • 出塁率
  • レッドソックス式の第二の打率

を算出して、イチローや日本人選手を見てきました。

これまでのわかったことは、

  • 1番バッターは出塁率が重要というが、スラッガーの方が出塁率は高い
  • 安打数ナンバーワンのイチローだが、他の一番バッターと比較すると出塁率は上位だが一番ではない。

ということでした。

今回はRC27と、最近特に重要といわれるOPSで評価してみたいと思う。

RC27は1番から9番まで同じ打者だった場合の1試合の得点数

RC (野球) - Wikipedia

WikiPediaによると

RC:

(出塁能力A × 進塁能力B)/ 出塁機会Cを基に構成されている。
チームの全打者のRCを合計すると、シーズン中のチームの総得点とほぼ一致するように式が作られている。

RC27:

RC27(Runs Created per 27 outs)はRCを元にある特定の選手1人で構成された打線で試合を行った場合、
27アウト(9イニング×3アウト=1試合)で平均何点とれるかを算出した指標。
この数値が大きいほど、その選手の総合的な得点能力が優れているとされる。

ということらしい。

リンク先の方程式をみるとわかると思いますが、この式は確立などではなく、一般公開されている安打数や塁打、盗塁、四球などのデータを元に、実際の得点となるべく一致するようにそれら変数と定数を掛け合わせたものになっている。

また別の機会で書こうと思うが、ちゃんとした統計学と、こじつけのような計算がごちゃまぜになって評価や予想を行っているところが、個人的にセイバーメトリックスが面白いと感じるポイントだ。

では、ESPNで1番とされている打者(50試合以上出場、安打数80本)の選手たちのRC27ベストは以下の通りになる。

イチローは出塁率と同じく4位。1番から9番まで全部イチローだったら、一試合あたり5.9点得点できると予想される。と、いうことだ。

NO Name        Team    G       H      BB       SB     H+BB     AVG     OBP     SLG     AVG2    OPS     RC27
 1 R Furcal    LAD     97      115     40      22      155     0.300   0.366   0.460   0.321   0.826   6.6
 2 K Johnson   ARI     154     166     79      13      245     0.284   0.370   0.496   0.369   0.865   6.5
 3 R Weeks     MIL     160     175     76      11      251     0.269   0.366   0.464   0.329   0.830   6.4
 4 I Suzuki    SEA     162     214     45      42      259     0.315   0.359   0.394   0.207   0.754   5.9
 5 C Crisp     OAK     75      81      30      32      111     0.279   0.342   0.438   0.372   0.779   5.9
 6 A Torres    SF      139     136     56      26      192     0.268   0.343   0.479   0.373   0.823   5.9
 7 M Prado     ATL     140     184     40      5       224     0.307   0.350   0.459   0.227   0.809   5.8
 8 A Jackson   DET     151     181     47      27      228     0.293   0.345   0.400   0.227   0.745   5.4
 9 S Victorino PHI     147     152     53      34      205     0.259   0.327   0.429   0.319   0.756   5.4
10 S Podsednik KC      95      121     29      30      150     0.310   0.353   0.400   0.241   0.753   5.4
11 D Fowler    COL     132     114     57      13      171     0.260   0.347   0.410   0.310   0.757   5.2
12 J Reyes     NYM     133     159     31      30      190     0.282   0.321   0.428   0.254   0.749   5.1
13 F Lewis     TOR     110     112     38      17      150     0.262   0.332   0.414   0.280   0.745   4.9
14 B Phillips  CIN     155     172     46      16      218     0.275   0.332   0.430   0.254   0.762   4.9
15 C Coghlan   FLA     91      96      33      10      129     0.268   0.335   0.383   0.235   0.718   4.9
16 M Bourn     HOU     141     142     59      52      201     0.265   0.341   0.346   0.288   0.686   4.8
17 C Patterson BAL     90      83      20      21      103     0.269   0.315   0.406   0.269   0.721   4.8
18 R Davis     OAK     143     149     26      50      175     0.284   0.320   0.377   0.238   0.697   4.7
19 M Scutaro   BOS     150     174     53      5       227     0.275   0.333   0.388   0.204   0.721   4.6
20 J Pierre    CWS     160     179     45      68      224     0.275   0.341   0.316   0.215   0.657   4.4
21 D Jeter     NYY     157     179     63      18      242     0.270   0.340   0.370   0.222   0.710   4.4
22 D Span      MIN     153     166     60      26      226     0.264   0.331   0.348   0.221   0.679   4.3
23 S Schumaker STL     137     126     43      5       169     0.265   0.328   0.338   0.174   0.667   4.1
24 J Bartlett  TB      135     119     45      11      164     0.254   0.324   0.350   0.216   0.675   4.1
25 E Andrus    TEX     148     156     64      32      220     0.265   0.342   0.301   0.199   0.643   4.0
26 N Morgan    WSH     136     129     40      34      169     0.253   0.319   0.314   0.206   0.633   3.8
27 J Hairston  SD      119     105     31      9       136     0.244   0.299   0.353   0.202   0.652   3.7
28 E Aybar     LAA     138     135     35      22      170     0.253   0.306   0.330   0.184   0.636   3.6
29 R Theriot   LAD     150     158     41      20      199     0.270   0.321   0.312   0.147   0.633   3.5
30 T Crowe     CLE     122     111     29      20      140     0.251   0.302   0.333   0.192   0.634   3.3
G試合数 H安打数 BB四球 SB盗塁 AVG打率 OBP出塁率 SLG長打率 AVG第二の打率 OPS出塁率+長打率 RC27

チーム方針として盗塁禁止のアスレチックPradoが出塁率より順位が落ちた程度かな?

正直、1番で比較しても面白くないので最後に全体のベスト100をのせておきます。

この方程式は 「走力 = 盗塁力」なので、実際の走力は反映されていないのではないかと思う。

走力がものを言うのは、塁に出ているときにヒットが生まれてたときの得点の期待値だからだ。

OPSは出塁率と長打率の足し算

OPSの算出方法をみて唖然とした。なんと率と率の単純な足し算なのだ。

OPS (野球) - Wikipedia

しかも、そんないかにも適当そうな数値が得点との相関関係が高く、非常に重視されているというのだ。

<追記>

よく考えたら 打率も長打率も同じ分母 AB(打数)なので足し算はOKでした。

AVG + OBP = (H/AB) + ((H + 1*2B + 2*3B + 3*HR) / AB) = (2*H + 1*2B + 2*3B + 3*HR) / AB

<追記おわり>

OPS:

OPS(オーピーエス)はOn-base plus sluggingの略であり、野球において打者を評価する指標の一つ。
セイバーメトリクスの祖、ビル・ジェームズがディック・クレイマー、ピート・パーマーと共同開発した指標。
on-baseとは出塁、sluggingとは強打(長打)の意味で、出塁率と長打率とを足し合わせた値である。
得点との相関関係の強さと簡単な算出方法により、現代の米国野球において、非常に重視されている打撃指標である。

「イチローは内野安打が多い」という批判も多いのだけど、長打は得点につながるという認識がアメリカでは多いことからきているのではないだろうか?実際にこの評価でイチローを評価すると厳しい。

RC27ベスト100

ではRC27のベスト100(出場数50以上、安打80本以上)。

81試合しかでていない MorneauがRC27もOPSも驚異的な数字を叩き出している。レッドソックスのYoukilisは四球と長打率に優れていることから4位にランキング。

現役最高の打者といわれるPujolsが5位。

ちなみにイチローは64位。松井57位、福留は67位だった。

NO Name                Team    G       H      BB       SB     H+BB     AVG     OBP     SLG     AVG2    OPS     RC27
01 J Morneau           MIN     81      102     50      0       152     0.345   0.437   0.618   0.443   1.055   10.0
02 J Hamilton          TEX     133     186     43      8       229     0.359   0.411   0.633   0.373   1.044   9.6
03 J Votto             CIN     150     177     91      16      268     0.324   0.424   0.600   0.472   1.024   9.4
04 K Youkilis          BOS     102     111     58      4       169     0.307   0.411   0.564   0.428   0.975   8.8
05 A Pujols            STL     159     183     103     14      286     0.312   0.414   0.596   0.484   1.011   8.6
06 C Gonzalez          COL     145     197     40      26      237     0.336   0.376   0.598   0.375   0.974   8.4
07 P Konerko           CWS     149     171     72      0       243     0.312   0.393   0.584   0.403   0.977   8.4
08 J Bautista          TOR     161     148     100     9       248     0.260   0.378   0.617   0.548   0.995   8.2
09 N Cruz              TEX     108     127     38      17      165     0.318   0.374   0.576   0.396   0.950   7.6
10 J Werth             PHI     156     164     82      13      246     0.296   0.388   0.532   0.408   0.921   7.6
11 M Holliday          STL     158     186     69      9       255     0.312   0.390   0.532   0.351   0.922   7.6
12 T Tulowitzki        COL     122     148     48      11      196     0.315   0.381   0.568   0.379   0.949   7.5
13 S Choo              CLE     144     165     83      22      248     0.300   0.401   0.484   0.375   0.885   7.4
14 G Soto              CHC     105     90      62      0       152     0.280   0.393   0.497   0.410   0.890   7.2
15 W Betemit           KC      84      82      36      0       118     0.297   0.378   0.511   0.344   0.889   7.2
16 R Cano              NYY     160     200     57      3       257     0.319   0.381   0.534   0.310   0.914   7.2
17 C Crawford          TB      154     184     46      47      230     0.307   0.356   0.495   0.343   0.851   7.1
18 R Zimmerman         WSH     142     161     69      4       230     0.307   0.388   0.510   0.343   0.899   7.1
19 L Scott             BAL     131     127     59      2       186     0.284   0.368   0.535   0.387   0.902   7.0
20 P Fielder           MIL     161     151     114     1       265     0.261   0.401   0.471   0.408   0.871   7.0
21 A Huff              SF      157     165     83      7       248     0.290   0.385   0.506   0.374   0.891   7.0
22 D Uggla             FLA     159     169     78      4       247     0.287   0.369   0.508   0.360   0.877   6.9
23 C Utley             PHI     115     117     63      13      180     0.275   0.387   0.445   0.348   0.832   6.9
24 D Ortiz             BOS     145     140     82      0       222     0.270   0.370   0.529   0.417   0.899   6.8
25 C Ruiz              PHI     121     112     55      0       167     0.302   0.400   0.447   0.294   0.847   6.8
26 A Beltre            BOS     154     189     40      2       229     0.321   0.365   0.553   0.304   0.919   6.8
27 E Longoria          TB      151     169     72      15      241     0.294   0.372   0.507   0.364   0.879   6.7
28 J Mauer             MIN     137     167     65      1       232     0.327   0.402   0.469   0.271   0.871   6.7
29 J Willingham        WSH     114     99      67      8       166     0.268   0.389   0.459   0.395   0.848   6.7
30 A Dunn              WSH     158     145     77      0       222     0.260   0.356   0.536   0.414   0.892   6.7
31 H Ramirez           FLA     142     163     64      32      227     0.300   0.378   0.475   0.352   0.853   6.7
32 D Pedroia           BOS     75      87      37      9       124     0.288   0.367   0.493   0.358   0.860   6.6
33 R Furcal            LAD     97      115     40      22      155     0.300   0.366   0.460   0.321   0.826   6.6
34 J Heyward           ATL     142     144     91      11      235     0.277   0.393   0.456   0.375   0.849   6.6
35 R Braun             MIL     157     188     56      14      244     0.304   0.365   0.501   0.310   0.866   6.6
36 K Johnson           ARI     154     166     79      13      245     0.284   0.370   0.496   0.369   0.865   6.5
37 J Cust              OAK     112     95      68      2       163     0.272   0.395   0.438   0.367   0.834   6.5
38 T Hafner            CLE     118     110     51      2       161     0.278   0.374   0.449   0.306   0.824   6.5
39 C Rasmus            STL     144     128     63      12      191     0.276   0.361   0.498   0.384   0.859   6.5
40 A Ethier            LAD     139     151     59      2       210     0.292   0.364   0.493   0.319   0.857   6.5
41 R Weeks             MIL     160     175     76      11      251     0.269   0.366   0.464   0.329   0.830   6.4
42 N Swisher           NYY     150     163     58      1       221     0.288   0.359   0.511   0.327   0.870   6.4
43 A McCutchen         PIT     154     163     70      33      233     0.286   0.365   0.449   0.344   0.814   6.4
44 B Posey             SF      108     124     30      0       154     0.305   0.357   0.505   0.273   0.862   6.3
45 D Wright            NYM     157     166     69      19      235     0.283   0.354   0.503   0.370   0.856   6.3
46 S Rolen             CIN     133     134     50      1       184     0.285   0.358   0.497   0.321   0.854   6.2
47 A Rodriguez         NYY     137     141     59      4       200     0.270   0.341   0.506   0.356   0.847   6.2
48 R Howard            PHI     143     152     59      1       211     0.276   0.353   0.505   0.338   0.859   6.2
49 M Teixeira          NYY     158     154     93      0       247     0.256   0.365   0.481   0.379   0.846   6.2
50 D Murphy            TEX     138     122     45      14      167     0.291   0.358   0.449   0.298   0.806   6.1
51 B Gardner           NYY     150     132     79      47      211     0.277   0.383   0.379   0.367   0.762   6.1
52 D Barton            OAK     159     152     110     7       262     0.273   0.393   0.405   0.342   0.798   6.1
53 D DeJesus           KC      91      112     34      3       146     0.318   0.384   0.443   0.230   0.827   6.1
54 M Ordonez           DET     84      98      40      1       138     0.303   0.378   0.474   0.297   0.852   6.1
55 B McCann            ATL     143     129     74      5       203     0.269   0.375   0.453   0.349   0.828   6.1
56 C Hart              MIL     145     158     45      7       203     0.283   0.340   0.525   0.335   0.865   6.1
57 B Butler            KC      158     189     69      0       258     0.318   0.388   0.469   0.267   0.857   6.1
58 J Bruce             CIN     148     143     58      5       201     0.281   0.353   0.493   0.336   0.846   6.1
59 H Matsui            LAA     145     132     67      0       199     0.274   0.361   0.459   0.324   0.820   6.0
60 N Walker            PIT     110     126     34      2       160     0.296   0.349   0.462   0.251   0.811   6.0
61 V Martinez          BOS     127     149     40      1       189     0.302   0.351   0.493   0.274   0.844   5.9
62 C Jones             ATL     95      84      61      5       145     0.265   0.381   0.426   0.369   0.806   5.9
63 S Drew              ARI     151     157     62      10      219     0.278   0.352   0.458   0.308   0.810   5.9
64 I Suzuki            SEA     162     214     45      42      259     0.315   0.359   0.394   0.207   0.754   5.9
65 C Crisp             OAK     75      81      30      32      111     0.279   0.342   0.438   0.372   0.779   5.9
66 A Torres            SF      139     136     56      26      192     0.268   0.343   0.479   0.373   0.823   5.9
67 K Fukudome          CHC     130     94      64      7       158     0.263   0.371   0.439   0.374   0.809   5.9
68 I Kinsler           TEX     103     112     56      15      168     0.286   0.382   0.412   0.307   0.794   5.9
69 J Posada            NYY     120     95      59      3       154     0.248   0.357   0.454   0.368   0.811   5.9
70 N Markakis          BAL     160     187     73      7       260     0.297   0.370   0.436   0.266   0.805   5.8
71 V Guerrero          TEX     152     178     35      4       213     0.300   0.345   0.496   0.261   0.841   5.8
72 M Prado             ATL     140     184     40      5       224     0.307   0.350   0.459   0.227   0.809   5.8
73 C Johnson           HOU     94      105     15      3       120     0.308   0.337   0.481   0.226   0.818   5.8
74 V Wells             TOR     157     161     50      6       211     0.273   0.331   0.515   0.337   0.847   5.7
75 M Stanton           FLA     100     93      34      5       127     0.259   0.326   0.507   0.357   0.833   5.7
76 C Young             ARI     156     150     74      28      224     0.257   0.341   0.452   0.370   0.793   5.6
77 R Raburn            DET     113     104     27      2       131     0.280   0.340   0.474   0.272   0.814   5.6
78 R Hernandez         CIN     97      93      29      0       122     0.297   0.364   0.428   0.224   0.792   5.6
79 C Granderson        NYY     136     115     53      12      168     0.247   0.324   0.468   0.361   0.792   5.6
80 R Spilborghs        COL     134     95      39      4       134     0.279   0.360   0.437   0.284   0.797   5.6
81 J Damon             DET     145     146     69      11      215     0.271   0.355   0.401   0.278   0.756   5.5
82 T Colvin            CHC     135     91      30      6       121     0.254   0.316   0.500   0.346   0.816   5.5
83 B Abreu             LAA     154     146     87      24      233     0.255   0.352   0.435   0.373   0.787   5.5
84 A Pagan             NYM     151     168     44      37      212     0.290   0.340   0.425   0.275   0.765   5.5
85 D Stubbs            CIN     150     131     55      30      186     0.255   0.329   0.444   0.354   0.773   5.4
86 A Soriano           CHC     147     128     45      5       173     0.258   0.322   0.496   0.339   0.818   5.4
87 J Buck              TOR     118     115     16      0       131     0.281   0.314   0.489   0.247   0.802   5.4
88 R Branyan           SEA     109     89      46      1       135     0.237   0.323   0.487   0.375   0.810   5.4
89 D Valencia          MIN     85      93      20      2       113     0.311   0.351   0.448   0.211   0.799   5.4
90 I Davis             NYM     147     138     72      3       210     0.264   0.351   0.440   0.319   0.791   5.4
91 R Ibanez            PHI     155     154     68      4       222     0.275   0.349   0.444   0.298   0.793   5.4
92 M Byrd              CHC     152     170     31      5       201     0.293   0.346   0.429   0.198   0.775   5.4
93 A Jackson           DET     151     181     47      27      228     0.293   0.345   0.400   0.227   0.745   5.4
94 S Victorino         PHI     147     152     53      34      205     0.259   0.327   0.429   0.319   0.756   5.4
95 S Podsednik         KC      95      121     29      30      150     0.310   0.353   0.400   0.241   0.753   5.4
96 C Quentin           CWS     131     110     50      2       160     0.243   0.342   0.479   0.351   0.821   5.4
97 G Sanchez           FLA     151     156     57      5       213     0.273   0.341   0.448   0.283   0.788   5.4
98 C McGehee           MIL     157     174     50      1       224     0.285   0.337   0.464   0.262   0.801   5.4
99 T Hunter            LAA     152     161     61      9       222     0.281   0.354   0.464   0.305   0.819   5.4
100 J Jaso             TB      109     89      59      4       148     0.263   0.372   0.378   0.301   0.750   5.4
G試合数 H安打数 BB四球 SB盗塁 AVG打率 OBP出塁率 SLG長打率 AVG第二の打率 OPS出塁率+長打率 RC27

算出方法

算出方法はメジャーリーグ公式HPから取得してpythonで計算している。

スクレイピングが面倒そうだったので、16ページ分を手でコピーしてテキストに落としてからデータ化している。

来年もやるのでスクレイピング部分を書いてから、どこかにUPしようかと思う。

#! /usr/bin/env python
#! vim: fileencoding=utf8
import csv
import decimal
class Player(object):
       def set_name(self, name):
               self.name = name
               self.key = name
               self.lis = []

       def set_stat(self, lis):
               self.TEAM = lis[0]       #チーム
               self.POS = lis[1]        #ポジション
               self.G = int(lis[2])     #試合数
               self.AB = int(lis[3])    #打数
               self.R = int(lis[4])     #得点
               self.H = int(lis[5])     #ヒット数
               self.B2B = int(lis[6])   #2ベースヒット
               self.B3B = int(lis[7])   #3ベースヒット
               self.HR = int(lis[8])    #ホームラン
               self.RBI = int(lis[9])   #打点
               self.TB = int(lis[10])   #塁打数
               self.BB = int(lis[11])   #四球
               self.SO = int(lis[12])   #三振
               self.SB = int(lis[13])   #盗塁
               self.CS = int(lis[14])   #盗塁失敗
               self.OBP = float(lis[15])#出塁率
               self.SLG = float(lis[16])#長打率
               self.AVG = float(lis[17])#打率
               self.lis += lis
               self.lis.append(self.HBB)
               self.lis.append(".%03d" % (self.AVG2*100))

       def set_stat2(self, lis):
               lis = lis[2:]
               self.SF = int(lis[0])  #犠飛
               self.SH = int(lis[1])  #犠打
               self.HBP = int(lis[2]) #死球
               self.IBB = int(lis[3]) #故意四球
               self.GDP = int(lis[4]) #併殺打
               self.TPA = int(lis[5]) #打席
               self.NP = int(lis[6])  #打者に投げられた投球数
               self.XBH = int(lis[7]) #単打以外の安打
               self.SBper = float(lis[8]) #盗塁成功率 盗塁÷(盗塁+盗塁死)
               self.GO = int(lis[9])  #ゴロアウト
               self.AO = int(lis[10]) #フライアウト
               self.GO_AO = float(lis[11])   #フライ1つに対するゴロ
               self.OPS = float(lis[12]) #出塁率+長打率
               self.lis += lis
               self.lis.append(self.SBD)


       @property
       def HBB(self):
               """ 安打 + 四球 """
               return self.H + self.BB

       @property
       def AVG2(self):
               """ 第二の打率 """
               if self.AB > 0:
                       result = decimal.Decimal(str(((self.TB - self.H + self.BB + self.SB)*1.0)  / self.AB))
                       return float(result.quantize(decimal.Decimal('.000'), rounding=decimal.ROUND_HALF_UP))
               return 0

       @property
       def SBD(self):
               """ 盗塁死 """
               if self.SBper > 0:
                       result = decimal.Decimal(str(((self.SB * 1.0) / (self.SBper / 100)) - self.SB))
                       return float(result.quantize(decimal.Decimal('.000'), rounding=decimal.ROUND_UP))
               return 0

       @property
       def RC(self):
               """
               A = 安打 + 四球 + 死球 - 盗塁死 - 併殺打
               B = 塁打 + 0.26 ×(四球 + 死球) + 0.53 ×(犠飛 + 犠打) + 0.64 × 盗塁 - 0.03 × 三振
               C = 打数 + 四球 + 死球 + 犠飛 + 犠打

               """
               a = self.H + self.BB + self.HBP - self.SBD - self.GDP
               b = self.TB + 0.26 * (self.BB + self.HBP) + 0.53 * (self.SF + self.SH) + 0.64 * self.SB - 0.03 * self.SO
               c = self.AB + self.BB + self.HBP + self.SF + self.SH
               return (((a + 2.4*c) * (b + 3*c)) / (9 * c)) - (0.9 * c)

       @property
       def RC27(self):
               """
               TO = 打数 - 安打 + 犠打 + 犠飛 + 盗塁死 + 併殺打
               (27 * RC) / TO
               """
               to = self.AB - self.H + self.SF + self.SH + self.GDP
               return (27 * self.RC) / to


       def __str__(self):
               return " ".join([str(i) for i in [self.name] + self.lis])


class PlayerShelf(object):

       def __init__(self):
               #self.lis = []
               self.dic = {}

       def append(self, player):
               self.dic[player.key] = player
               #self.lis.append(player)

       def get_player(self, key):
               if key in self.dic:
                       return self.dic[key]
               return None

       @property
       def lis(self):
               return self.dic.values()


       @property
       def HBBbest(self):
               return sorted(self.lis, cmp=lambda x, y:cmp(y.HBB, x.HBB))

       def sortby(self, item, func=None):
               if func:
                       l = self.lis
                       if type(func) != list:
                               func = [func]
                       for f in func:
                               l = [i for i in l if f(i) is True]
               else:
                       l = self.lis
               return sorted(l, cmp=lambda x, y:cmp(getattr(y, item), getattr(x, item)))

def create():
       rf = open(r"c:\tmp\major.txt", "rb")
       result = PlayerShelf()
       for c, lis in enumerate(csv.reader(rf, delimiter="\t")):
               if c % 3 == 1:
                       p = Player()
                       p.set_name(lis[-1])
               if c % 3 == 2:
                       p.set_stat(lis)
                       result.append(p)
       rf.close()
       rf = open(r"c:\tmp\major2.txt", "rb")
       for c, lis in enumerate(csv.reader(rf, delimiter="\t")):
               if c % 3 == 1:
                       p = result.get_player(lis[-1])
                       if p is None:
                               print lis
                               continue
               if c % 3 == 2:
                       p.set_stat2(lis)
                       result.append(p)

       return result

def HBBbest(hoge, fs):
       a = hoge
       c = 0
       for i in a.sortby('HBB'):
               c += 1
               fs.write("%s %s\n" % (c, " ".join([str(i) for i in [i.name, i.TEAM, i.H, i.BB, i.HBB, i.AVG]])))
               if c > 100:
                       break


def BBbest(hoge, fs):
       a = hoge
       c = 0
       for i in a.sortby('BB'):
               c += 1
               fs.write("%s %s\n" % (c, " ".join([str(i) for i in [i.name, i.TEAM, i.H, i.BB, i.SB, i.HBB, i.AVG]])))
               if c > 100:
                       break




def OBPbest(hoge, fs):
       a = hoge
       c = 0
       for i in a.sortby('OBP', [lambda x:x.H>=80, lambda x:x.name in First_list]):
               c += 1
               fs.write("%02d %s\n" % (c, " ".join([str(i) for i in [i.name, i.TEAM, i.G, i.H, i.BB, i.SB, i.HBB, i.AVG, i.OBP, i.AVG2]])))
               if c > 100:
                       break


def AVG2best(hoge, fs):
       a = hoge
       c = 0
       for i in a.sortby('AVG2', lambda x:x.H>=80):
               c += 1
               fs.write("%s %s\n" % (c, " ".join([str(i) for i in [i.name, i.TEAM, i.G, i.H, i.BB, i.SB, i.HBB, i.AVG, i.OBP, i.AVG2]])))
               if c > 100:
                       break


def RC27best(hoge, fs):
        a = hoge
        c = 0
        for i in a.sortby('RC27', lambda x:x.H>=80):
                c += 1
                fs.write(" %02d %s\n" % (c, "\t".join([str(i) for i in [i.name.ljust(14), i.TEAM, i.G, i.H, i.BB, i.SB, i.HBB, "%1.3f" % i.AVG, "%1.3f" % i.OBP, "%1.3f" % i.SLG, "%1.3f" % i.AVG2, "%1.3f" % i.OPS, "%1.1f" % i.RC27]])))
                if c > 100:
                        break



def RC27best2(hoge, fs):
        a = hoge
        c = 0
        for i in a.sortby('RC27', [lambda x:x.H>=80, lambda x: x.name in First_list]):
                c += 1
                fs.write("%s %s\n" % (c, "\t".join([str(i) for i in [i.name, i.TEAM, i.G, i.H, i.BB, i.SB, i.HBB, "%1.3f" % i.AVG, "%1.3f" % i.OBP, "%1.3f" % i.SLG, "%1.3f" % i.AVG2, "%1.3f" % i.OPS, "%1.1f" % i.RC27]])))
                if c > 100:
                        break

First_list = [
'M Scutaro', 'B Roberts', 'C Patterson', 'D Jeter', 'J Bartlett',
'F Lewis', 'T Snider', 'M Prado', 'C Coghlan', 'J Reyes',
'S Victorino', 'N Morgan', 'C Patterson', 'J Pierre', 'T Crowe',
'A Jackson', 'S Podsednik', 'D Span', 'R Theriot', 'B Phillips',
'M Bourn', 'R Weeks', 'A McCutchen ', 'S Schumaker', 'E Aybar',
'C Crisp', 'R Davis', 'E Andrus', 'K Johnson', 'D Fowler',
'R Furcal', 'J Hairston', 'A Torres',

'I Suzuki']

if __name__ == "__main__":
       a = create()
       hbb = open(r"c:\tmp\hbb.csv", "w")
       obp = open(r"c:\tmp\obp2.csv", "w")
       avg2 = open(r"c:\tmp\avg2.csv", "w")
       bb = open(r"c:\tmp\bb.csv", "w")
       rc27 = open(r"c:\tmp\rc27.csv", "w")
       rc272 = open(r"c:\tmp\rc27_2.csv", "w")
       HBBbest(a, hbb)
       BBbest(a, bb)
       OBPbest(a, obp)
       AVG2best(a, avg2)
       RC27best(a, rc27)
       RC27best2(a, rc272)
       hbb.close()
       bb.close()
       obp.close()
       avg2.close()
       rc27.close()
       rc272.close()
categories: statistics
blog comments powered by Disqus
track feed ueblog