Advertisement
lugnut92

NHL B-T Power Rankings

Oct 21st, 2013
1,935
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 11.68 KB | None | 0 0
  1. import math
  2. import csv
  3.  
  4. teams = ['CHI',
  5.          'COL',
  6.          'DAL',
  7.          'MIN',
  8.          'NSH',
  9.          'STL',
  10.          'WPG',
  11.          'ANA',
  12.          'CGY',
  13.          'EDM',
  14.          'LAK',
  15.          'PHX',
  16.          'SJS',
  17.          'VAN',
  18.          'BOS',
  19.          'BUF',
  20.          'DET',
  21.          'FLA',
  22.          'MTL',
  23.          'OTT',
  24.          'TBL',
  25.          'TOR',
  26.          'CAR',
  27.          'CBJ',
  28.          'NJD',
  29.          'NYR',
  30.          'NYI',
  31.          'PHI',
  32.          'PIT',
  33.          'WSH']
  34.  
  35. krach = [100,
  36.          100,
  37.          100,
  38.          100,
  39.          100,
  40.          100,
  41.          100,
  42.          100,
  43.          100,
  44.          100,
  45.          100,
  46.          100,
  47.          100,
  48.          100,
  49.          100,
  50.          100,
  51.          100,
  52.          100,
  53.          100,
  54.          100,
  55.          100,
  56.          100,
  57.          100,
  58.          100,
  59.          100,
  60.          100,
  61.          100,
  62.          100,
  63.          100,
  64.          100]
  65.  
  66. new_krach = [100,
  67.              100,
  68.              100,
  69.              100,
  70.              100,
  71.              100,
  72.              100,
  73.              100,
  74.              100,
  75.              100,
  76.              100,
  77.              100,
  78.              100,
  79.              100,
  80.              100,
  81.              100,
  82.              100,
  83.              100,
  84.              100,
  85.              100,
  86.              100,
  87.              100,
  88.              100,
  89.              100,
  90.              100,
  91.              100,
  92.              100,
  93.              100,
  94.              100,
  95.              100]
  96.  
  97. wins = [0,
  98.         0,
  99.         0,
  100.         0,
  101.         0,
  102.         0,
  103.         0,
  104.         0,
  105.         0,
  106.         0,
  107.         0,
  108.         0,
  109.         0,
  110.         0,
  111.         0,
  112.         0,
  113.         0,
  114.         0,
  115.         0,
  116.         0,
  117.         0,
  118.         0,
  119.         0,
  120.         0,
  121.         0,
  122.         0,
  123.         0,
  124.         0,
  125.         0,
  126.         0]
  127.  
  128. RRWP = [0,
  129.         0,
  130.         0,
  131.         0,
  132.         0,
  133.         0,
  134.         0,
  135.         0,
  136.         0,
  137.         0,
  138.         0,
  139.         0,
  140.         0,
  141.         0,
  142.         0,
  143.         0,
  144.         0,
  145.         0,
  146.         0,
  147.         0,
  148.         0,
  149.         0,
  150.         0,
  151.         0,
  152.         0,
  153.         0,
  154.         0,
  155.         0,
  156.         0,
  157.         0]
  158.  
  159. SOS = [0,
  160.        0,
  161.        0,
  162.        0,
  163.        0,
  164.        0,
  165.        0,
  166.        0,
  167.        0,
  168.        0,
  169.        0,
  170.        0,
  171.        0,
  172.        0,
  173.        0,
  174.        0,
  175.        0,
  176.        0,
  177.        0,
  178.        0,
  179.        0,
  180.        0,
  181.        0,
  182.        0,
  183.        0,
  184.        0,
  185.        0,
  186.        0,
  187.        0,
  188.        0]
  189.  
  190. GP = [0,
  191.       0,
  192.       0,
  193.       0,
  194.       0,
  195.       0,
  196.       0,
  197.       0,
  198.       0,
  199.       0,
  200.       0,
  201.       0,
  202.       0,
  203.       0,
  204.       0,
  205.       0,
  206.       0,
  207.       0,
  208.       0,
  209.       0,
  210.       0,
  211.       0,
  212.       0,
  213.       0,
  214.       0,
  215.       0,
  216.       0,
  217.       0,
  218.       0,
  219.       0]
  220.  
  221. games = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  222.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  223.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  224.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  225.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  226.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  227.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  228.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  229.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  230.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  231.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  232.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  233.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  234.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  235.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  236.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  237.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  238.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  239.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  240.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  241.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  242.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  243.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  244.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  245.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  246.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  247.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  248.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  249.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
  250.          [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
  251.  
  252. with open([put your game results csv filepath here], newline='') as results:
  253.     game_result = csv.reader(results, delimiter=',')
  254.     for row in game_result:
  255.         if row[1] == 'Chicago Blackhawks':
  256.             away = 0
  257.         elif row[1] == 'Colorado Avalanche':
  258.             away = 1
  259.         elif row[1] == 'Dallas Stars':
  260.             away = 2
  261.         elif row[1] == 'Minnesota Wild':
  262.             away = 3
  263.         elif row[1] == 'Nashville Predators':
  264.             away = 4
  265.         elif row[1] == 'St. Louis Blues':
  266.             away = 5
  267.         elif row[1] == 'Winnipeg Jets':
  268.             away = 6
  269.         elif row[1] == 'Anaheim Ducks':
  270.             away = 7
  271.         elif row[1] == 'Calgary Flames':
  272.             away = 8
  273.         elif row[1] == 'Edmonton Oilers':
  274.             away = 9
  275.         elif row[1] == 'Los Angeles Kings':
  276.             away = 10
  277.         elif row[1] == 'Phoenix Coyotes':
  278.             away = 11
  279.         elif row[1] == 'San Jose Sharks':
  280.             away = 12
  281.         elif row[1] == 'Vancouver Canucks':
  282.             away = 13
  283.         elif row[1] == 'Boston Bruins':
  284.             away = 14
  285.         elif row[1] == 'Buffalo Sabres':
  286.             away = 15
  287.         elif row[1] == 'Detroit Red Wings':
  288.             away = 16
  289.         elif row[1] == 'Florida Panthers':
  290.             away = 17
  291.         elif row[1] == 'Montreal Canadiens':
  292.             away = 18
  293.         elif row[1] == 'Ottawa Senators':
  294.             away = 19
  295.         elif row[1] == 'Tampa Bay Lightning':
  296.             away = 20
  297.         elif row[1] == 'Toronto Maple Leafs':
  298.             away = 21
  299.         elif row[1] == 'Carolina Hurricanes':
  300.             away = 22
  301.         elif row[1] == 'Columbus Blue Jackets':
  302.             away = 23
  303.         elif row[1] == 'New Jersey Devils':
  304.             away = 24
  305.         elif row[1] == 'New York Rangers':
  306.             away = 25
  307.         elif row[1] == 'New York Islanders':
  308.             away = 26
  309.         elif row[1] == 'Philadelphia Flyers':
  310.             away = 27
  311.         elif row[1] == 'Pittsburgh Penguins':
  312.             away = 28
  313.         else:
  314.             away = 29
  315.  
  316.         if row[3] == 'Chicago Blackhawks':
  317.             home = 0
  318.         elif row[3] == 'Colorado Avalanche':
  319.             home = 1
  320.         elif row[3] == 'Dallas Stars':
  321.             home = 2
  322.         elif row[3] == 'Minnesota Wild':
  323.             home = 3
  324.         elif row[3] == 'Nashville Predators':
  325.             home = 4
  326.         elif row[3] == 'St. Louis Blues':
  327.             home = 5
  328.         elif row[3] == 'Winnipeg Jets':
  329.             home = 6
  330.         elif row[3] == 'Anaheim Ducks':
  331.             home = 7
  332.         elif row[3] == 'Calgary Flames':
  333.             home = 8
  334.         elif row[3] == 'Edmonton Oilers':
  335.             home = 9
  336.         elif row[3] == 'Los Angeles Kings':
  337.             home = 10
  338.         elif row[3] == 'Phoenix Coyotes':
  339.             home = 11
  340.         elif row[3] == 'San Jose Sharks':
  341.             home = 12
  342.         elif row[3] == 'Vancouver Canucks':
  343.             home = 13
  344.         elif row[3] == 'Boston Bruins':
  345.             home = 14
  346.         elif row[3] == 'Buffalo Sabres':
  347.             home = 15
  348.         elif row[3] == 'Detroit Red Wings':
  349.             home = 16
  350.         elif row[3] == 'Florida Panthers':
  351.             home = 17
  352.         elif row[3] == 'Montreal Canadiens':
  353.             home = 18
  354.         elif row[3] == 'Ottawa Senators':
  355.             home = 19
  356.         elif row[3] == 'Tampa Bay Lightning':
  357.             home = 20
  358.         elif row[3] == 'Toronto Maple Leafs':
  359.             home = 21
  360.         elif row[3] == 'Carolina Hurricanes':
  361.             home = 22
  362.         elif row[3] == 'Columbus Blue Jackets':
  363.             home = 23
  364.         elif row[3] == 'New Jersey Devils':
  365.             home = 24
  366.         elif row[3] == 'New York Rangers':
  367.             home = 25
  368.         elif row[3] == 'New York Islanders':
  369.             home = 26
  370.         elif row[3] == 'Philadelphia Flyers':
  371.             home = 27
  372.         elif row[3] == 'Pittsburgh Penguins':
  373.             home = 28
  374.         else:
  375.             home = 29
  376.    
  377.         if row[2] == row [4]:
  378.             yep = 0
  379.         else:
  380.             games[home][away] = games[home][away] + 1
  381.             games[away][home] = games[away][home] + 1
  382.             GP[home] = GP[home] + 1
  383.             GP[away] = GP[away] + 1
  384.            
  385.             if row[5] == 'SO':
  386.                 wins[away] = wins[away] + 0.5
  387.                 wins[home] = wins[home] + 0.5
  388.             elif row[2] > row[4]:
  389.                 wins[away] = wins[away] + 1
  390.             else:
  391.                 wins[home] = wins[home] + 1
  392.  
  393. good = 0
  394.  
  395. while good != 1:
  396.     for team in range(30):
  397.         sum = 0
  398.         for opp in range(30):
  399.             sum = sum + (krach[team]*games[team][opp])/(krach[team]+krach[opp])
  400.         new_krach[team] = (wins[team]/sum)*krach[team]
  401.         ratio = new_krach[team]/krach[team]
  402.         abs_difference = math.fabs(1-ratio)
  403.         if abs_difference <= 0.00001:
  404.             good = 1
  405.         else:
  406.             good = 0
  407.         krach[team] = new_krach[team]
  408.  
  409. for int in range(10):
  410.     scale_wins = 0
  411.     for team in range(30):
  412.         scale_wins = scale_wins + 100/(100 + krach[team])
  413.     scale = scale_wins/15
  414.    
  415.     for team in range(30):
  416.         krach[team] = krach[team] * scale
  417.  
  418. for team in range(30):
  419.     RRW = 0
  420.     for opp in range(30):
  421.         if team == opp:
  422.             RRW = RRW
  423.         else:
  424.             RRW = RRW + krach[team]/(krach[team]+krach[opp])
  425.     RRWP[team] = RRW/29
  426.     SOS[team] = krach[team] * (GP[team] - wins[team])/wins[team]
  427.  
  428. for row in range(30):
  429.     print(teams[row],
  430.           str(round(krach[row],2)).rjust(7),
  431.           str(round(RRWP[row],4)).rjust(6),
  432.           str(round(SOS[row],2)).rjust(7))
  433.  
  434. output = open('[put your output filepath here]', 'w')
  435.  
  436. for row in range(30):
  437.     output.write(str(krach[row]))
  438.     output.write('\n')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement