示例#1
0
def calculate_war():
    player_q = """SELECT
    year,
    player_name,
    team_abb,
    ab, h, 2b, 3b, hr, bb, so, hbp, ibb, sh, sf, sb, cs
    FROM zips_offense
    """
    player_qry = player_q
    player_data = db.query(player_qry)

    entries = []
    for row in player_data:
        entry = {}
        year, player_name, team_abb, ab, h, _2, _3, hr, bb, so, hbp, ibb, sh, sf, sb, cs = row

        pa = ab + bb + hbp + ibb + sh + sf
        bb2 = bb + ibb
        _1 = h - _2 - _3 - hr

        team_abb = team_abb.upper()
        pf = float(helper.get_park_factors(team_abb, year - 1)) / float(100)

        babip = float((h - hr)) / float((ab + sh + sf - so - hr))

        ops, wOBA, park_wOBA, OPS_plus, wrc, wrc27, wRC_plus, raa, oWAR = helper.get_zips_offensive_metrics(
            year - 1, pf, pa, ab, bb2, hbp, _1, _2, _3, hr, sb, cs)

        entry['year'] = year
        entry['player_name'] = player_name
        entry['team_abb'] = team_abb
        entry['pf'] = pf
        entry['pa'] = pa
        entry['babip'] = babip
        entry['OPS_plus'] = OPS_plus
        entry['park_wOBA'] = park_wOBA
        entry['wRC_plus'] = wRC_plus

        entries.append(entry)

    table = 'zips_WAR_hitters_comp'
    if entries != []:
        for i in range(0, len(entries), 1000):
            db.insertRowDict(entries[i:i + 1000],
                             table,
                             insertMany=True,
                             replace=True,
                             rid=0,
                             debug=1)
            db.conn.commit()
示例#2
0
def offensive_war(year):
    player_q = """SELECT
    player_name,
    team_abb,
    position,
    age,
    pa,
    ab,
    (h-2b-3b-hr) as 1b, 2b, 3b, hr, r, rbi, bb, k, hbp, sb, cs, ops, babip
    FROM register_batting_primary
    JOIN register_batting_secondary USING (year, player_name, team_abb, position, age)
    JOIN register_batting_analytical USING (year, player_name, team_abb, position, age)
    WHERE year = %s;
    """
    player_qry = player_q % (year)
    player_data = db.query(player_qry)

    entries = []
    for row in player_data:
        entry = {}
        entry['year'] = year
        player_name, team_abb, position, age, pa, ab, _1b, _2b, _3b, hr, r, rbi, bb, k, hbp, sb, cs, ops, babip = row
        entry['player_name'] = player_name
        entry['team_abb'] = team_abb
        entry['position'] = position
        # if player_name[len(player_name)-1:] == "*":
        #     bats = 'l'
        # elif player_name[len(player_name)-1:] == "#":
        #     bats = 's'
        # else:
        #     bats = 'r'
        # entry['bats'] = bats

        entry['age'] = age

        entry['pa'] = pa

        team_abb = team_abb.upper()
        pf = float(helper.get_park_factors(team_abb, year)) / float(100)
        entry['pf'] = pf
        entry['ops'] = ops
        entry['babip'] = babip

        foo, wOBA, park_wOBA, OPS_plus, wrc, wrc27, wRC_plus, raa, oWAR = helper.get_offensive_metrics(
            year, pf, pa, ab, bb, hbp, _1b, _2b, _3b, hr, sb, cs)

        entry['wOBA'] = wOBA
        entry['park_wOBA'] = park_wOBA
        entry['OPS_plus'] = OPS_plus
        entry['wrc'] = wrc
        entry['wRC_27'] = wrc27
        entry['wRC_plus'] = wRC_plus
        entry['raa'] = raa
        entry['oWAR'] = oWAR

        entries.append(entry)

    table = 'processed_compWAR_offensive'
    if entries != []:
        db.insertRowDict(entries, table, replace=True, insertMany=True, rid=0)
    db.conn.commit()
示例#3
0
def pitchers(year):
    player_q = """SELECT a.year
    , IFNULL(CONCAT(nm.right_fname, ' ', nm.right_lname), a.Player) AS player
    , a.team_abb
    , a.age
    , T as hand
    , ERA
    , a.G
    , a.GS
    , IP
    , H
    , ER
    , HR
    , BB
    , SO
    , k_9
    , bb_9
    , hr_9
    , bb_pct
    , k_pct
    , BABIP
    , ERA_Plus
    , ERA_minus
    , COALESCE(a.FIP, c.FIP) AS FIP
    , c.WAR
    , cv.yr1_WAR
    , cv.yr1_value
    , cv.yr2_WAR
    , cv.yr2_value
    , cv.yr3_WAR
    , cv.yr3_value
    , cv.yr4_WAR
    , cv.yr4_value
    , cv.yr5_WAR
    , cv.yr5_value
    , cv.yr6_WAR
    , cv.yr6_value
    , cv.yr7_WAR
    , cv.yr7_value
    , cv.yr8_WAR
    , cv.yr8_value
    FROM zips_fangraphs_pitchers_counting a
    JOIN(
        SELECT year
        , Player
        , MAX(post_date) AS post_date
        FROM zips_fangraphs_pitchers_counting
        WHERE 1
            AND year = %s
        GROUP BY year, Player
    ) b USING (year,Player,post_date)
    LEFT JOIN zips_fangraphs_pitchers_rate c USING (year, Player, team_abb)
    LEFT JOIN name_mapper nm ON (1
        AND a.Player = nm.wrong_name
        AND (nm.start_year IS NULL OR nm.start_year <= a.year)
        AND (nm.end_year IS NULL OR nm.end_year >= a.year)
        # AND (nm.position = '' OR nm.position = a.PO)
        AND (nm.rl_team = '' OR nm.rl_team = a.team_abb)
        # AND (nm.nsbl_team = '' OR nm.nsbl_team = rbp.team_abb)
    )
    LEFT JOIN name_mapper nm2 ON (nm.right_fname = nm2.right_fname
        AND nm.right_lname = nm2.right_lname
        AND (nm.start_year IS NULL OR nm2.start_year = nm2.start_year)
        AND (nm.end_year IS NULL OR nm2.end_year = nm2.end_year)
        AND (nm.position = '' OR nm2.position = nm2.position)
        AND (nm.rl_team = '' OR nm2.rl_team = nm2.rl_team)
    )
    JOIN zips_FA_contract_value_pitchers cv ON (a.year = cv.year 
        AND a.team_abb = cv.team_abb
        AND IFNULL(nm2.wrong_name, a.Player) = cv.Player
    )
    ;"""

    player_qry = player_q % (year)
    # raw_input(player_qry)
    player_data = db.query(player_qry)

    entries = []
    for row in player_data:
        entry = {}
        year, player_name, team_abb, age, hand, era, g, gs, ip, h, er, hr, bb, k, k_9, bb_9, hr_9, bb_pct, k_pct, babip, zera_plus, zera_minus, zfip, zwar, yr1_WAR, yr1_value, yr2_WAR, yr2_value, yr3_WAR, yr3_value, yr4_WAR, yr4_value, yr5_WAR, yr5_value, yr6_WAR, yr6_value, yr7_WAR, yr7_value, yr8_WAR, yr8_value = row

        r = er
        if (gs >= 20 or float(gs) / float(g) > 0.8):
            pos = 'SP'
        else:
            pos = 'RP'

        team_abb = team_abb.upper()

        pf = float(helper.get_park_factors(team_abb, year - 1)) / float(100)

        if float(bb) == 0:
            if float(k) > 0:
                k_bb = 99.0
            else:
                k_bb = 0.0
        else:
            k_bb = (float(k) / float(bb))

        fip_const = float(
            helper.get_zips_average_pitchers(year - 1, 'fip_const'))
        FIP = ((((13 * float(hr)) + (3 * float(bb)) -
                 (2 * float(k))) / float(ip)) + fip_const)
        park_FIP, FIP_min, FIP_WAR = helper.get_zips_pitching_metrics(
            FIP, ip, year - 1, pf, g, gs, 'fip')

        ERA = float(era)
        park_ERA, ERA_min, ERA_WAR = helper.get_zips_pitching_metrics(
            ERA, ip, year - 1, pf, g, gs, 'era')

        if pos == 'SP':
            FIP_WAR = 32 * (float(FIP_WAR) / float(gs))
            ERA_WAR = 32 * (float(ERA_WAR) / float(gs))
        elif pos == 'RP':
            FIP_WAR = float(FIP_WAR)
            ERA_WAR = float(ERA_WAR)

        if k_pct is not None and bb_pct is not None:
            k_minus_bb_pct = float(k_pct) - float(bb_pct)
        else:
            k_minus_bb_pct = None

        entry['year'] = year
        entry['player_name'] = player_name
        entry['team_abb'] = team_abb
        entry['age'] = age
        entry['hand'] = hand
        entry['pos'] = pos
        entry['pf'] = pf
        entry['g'] = g
        entry['gs'] = gs
        entry['ip'] = ip
        entry['babip'] = babip
        entry['k_9'] = k_9
        entry['bb_9'] = bb_9
        entry['k_bb'] = k_bb
        entry['hr_9'] = hr_9
        entry['k_pct'] = k_pct
        entry['bb_pct'] = bb_pct
        entry['k_minus_bb_pct'] = k_minus_bb_pct
        entry['zERA_plus'] = zera_plus
        entry['zERA_minus'] = zera_minus
        entry['zFIP'] = zfip
        entry['zWAR'] = zwar
        entry['FIP'] = FIP
        entry['park_FIP'] = park_FIP
        entry['FIP_minus'] = FIP_min
        entry['FIP_WAR'] = FIP_WAR
        entry['ERA'] = era
        entry['park_ERA'] = park_ERA
        entry['ERA_minus'] = ERA_min
        entry['ERA_WAR'] = ERA_WAR
        entry['yr1_WAR'] = yr1_WAR
        entry['yr1_value'] = yr1_value
        entry['yr2_WAR'] = yr2_WAR
        entry['yr2_value'] = yr2_value
        entry['yr3_WAR'] = yr3_WAR
        entry['yr3_value'] = yr3_value
        entry['yr4_WAR'] = yr4_WAR
        entry['yr4_value'] = yr4_value
        entry['yr5_WAR'] = yr5_WAR
        entry['yr5_value'] = yr5_value
        entry['yr6_WAR'] = yr6_WAR
        entry['yr6_value'] = yr6_value
        entry['yr7_WAR'] = yr7_WAR
        entry['yr7_value'] = yr7_value
        entry['yr8_WAR'] = yr8_WAR
        entry['yr8_value'] = yr8_value

        entries.append(entry)

    table = 'zips_fangraphs_prep_FA_pitchers'
    print table
    if entries != []:
        for i in range(0, len(entries), 1000):
            db.insertRowDict(entries[i:i + 1000],
                             table,
                             insertMany=True,
                             replace=True,
                             rid=0,
                             debug=1)
            db.conn.commit()
示例#4
0
def batters(year):

    player_q = """SELECT a.year
    , IFNULL(CONCAT(nm.right_fname, ' ', nm.right_lname), a.Player) AS player
    , a.team_abb
    , a.age
    , a.B as hand
    , a.PO
    , COALESCE(a.PA, c.PA) AS pa
    , a.ab
    , a.h
    , a.2b
    , a.3b
    , a.hr
    , a.bb
    , a.so
    , a.sb
    , a.cs
    , BA
    , OBP
    , SLG
    , BABIP
    , OPS_Plus
    , DEF
    , c.WAR
    , cv.yr1_WAR
    , cv.yr1_value
    , cv.yr2_WAR
    , cv.yr2_value
    , cv.yr3_WAR
    , cv.yr3_value
    , cv.yr4_WAR
    , cv.yr4_value
    , cv.yr5_WAR
    , cv.yr5_value
    , cv.yr6_WAR
    , cv.yr6_value
    , cv.yr7_WAR
    , cv.yr7_value
    , cv.yr8_WAR
    , cv.yr8_value
    FROM zips_fangraphs_batters_counting a
    JOIN(
        SELECT year
        , Player
        , MAX(post_date) AS post_date
        FROM zips_fangraphs_batters_counting
        WHERE 1
            AND year = %s
        GROUP BY year, Player
    ) b USING (year,Player,post_date)
    LEFT JOIN zips_fangraphs_batters_rate c USING (year, Player, team_abb)
    LEFT JOIN name_mapper nm ON (1
        AND a.Player = nm.wrong_name
        AND (nm.start_year IS NULL OR nm.start_year <= a.year)
        AND (nm.end_year IS NULL OR nm.end_year >= a.year)
        AND (nm.position = '' OR nm.position = a.PO)
        AND (nm.rl_team = '' OR nm.rl_team = a.team_abb)
        # AND (nm.nsbl_team = '' OR nm.nsbl_team = rbp.team_abb)
    )
    LEFT JOIN name_mapper nm2 ON (nm.right_fname = nm2.right_fname
        AND nm.right_lname = nm2.right_lname
        AND (nm.start_year IS NULL OR nm.start_year = nm2.start_year)
        AND (nm.end_year IS NULL OR nm.end_year = nm2.end_year)
        AND (nm.position = '' OR nm.position = nm2.position)
        AND (nm.rl_team = '' OR nm.rl_team = nm2.rl_team)
    )
    JOIN zips_FA_contract_value_batters cv ON (a.year = cv.year 
        AND a.team_abb = cv.team_abb
        AND IFNULL(nm2.wrong_name, a.Player) = cv.Player
    ) 
    ;"""
    player_qry = player_q % (year)
    # raw_input(player_qry)
    player_data = db.query(player_qry)

    entries = []
    for row in player_data:
        entry = {}
        year, player_name, team_abb, age, hand, po, pa, ab, h, _2, _3, hr, bb, so, sb, cs, ba, obp, slg, babip, zOPS_Plus, DEF, WAR, yr1_WAR, yr1_value, yr2_WAR, yr2_value, yr3_WAR, yr3_value, yr4_WAR, yr4_value, yr5_WAR, yr5_value, yr6_WAR, yr6_value, yr7_WAR, yr7_value, yr8_WAR, yr8_value = row

        if pa is None:
            pa = ab + bb
        bb2 = bb
        hbp = 0
        _1 = h - _2 - _3 - hr

        team_abb = team_abb.upper()

        pf = float(helper.get_park_factors(team_abb, year - 1)) / float(100)

        if po.lower() != 'c':
            scaledWAR = 600 * (float(WAR) / float(pa))
        else:
            scaledWAR = 450 * (float(WAR) / float(pa))

        ops, wOBA, park_wOBA, OPS_plus, wrc, wrc27, wRC_plus, raa, oWAR = helper.get_zips_offensive_metrics(
            year - 1, pf, pa, ab, bb2, hbp, _1, _2, _3, hr, sb, cs)

        entry['year'] = year
        entry['player_name'] = player_name
        entry['team_abb'] = team_abb
        entry['age'] = age
        entry['hand'] = hand
        entry['pos'] = po
        entry['pf'] = pf
        entry['pa'] = pa
        entry['ba'] = ba
        entry['obp'] = obp
        entry['slg'] = slg
        entry['zOPS_Plus'] = zOPS_Plus
        entry['DEF'] = DEF
        entry['zWAR'] = WAR
        entry['babip'] = babip
        entry['OPS_plus'] = OPS_plus
        entry['park_wOBA'] = park_wOBA
        entry['wRC_plus'] = wRC_plus
        entry['scaledWAR'] = scaledWAR
        entry['yr1_WAR'] = yr1_WAR
        entry['yr1_value'] = yr1_value
        entry['yr2_WAR'] = yr2_WAR
        entry['yr2_value'] = yr2_value
        entry['yr3_WAR'] = yr3_WAR
        entry['yr3_value'] = yr3_value
        entry['yr4_WAR'] = yr4_WAR
        entry['yr4_value'] = yr4_value
        entry['yr5_WAR'] = yr5_WAR
        entry['yr5_value'] = yr5_value
        entry['yr6_WAR'] = yr6_WAR
        entry['yr6_value'] = yr6_value
        entry['yr7_WAR'] = yr7_WAR
        entry['yr7_value'] = yr7_value
        entry['yr8_WAR'] = yr8_WAR
        entry['yr8_value'] = yr8_value

        entries.append(entry)

    table = 'zips_fangraphs_prep_FA_batters'
    print table
    if entries != []:
        for i in range(0, len(entries), 1000):
            db.insertRowDict(entries[i:i + 1000],
                             table,
                             insertMany=True,
                             replace=True,
                             rid=0,
                             debug=1)
            db.conn.commit()
示例#5
0
def calculate_war():
    player_q = """SELECT
    year,
    player_name,
    team_abb,
    age,
    g, 
    gs,
    era,
    ip,
    h, r, er, bb, so, hr
    FROM zips_pitching
    """
    player_qry = player_q
    player_data = db.query(player_qry)

    entries = []
    for row in player_data:
        entry = {}
        year, player_name, team_abb, age, g, gs, era, ip, h, r, er, bb, k, hr = row
        print year, player_name

        team_abb = team_abb.upper()
        pf = float(helper.get_park_factors(team_abb, year - 1)) / float(100)

        if ip == 0:
            k_9 = 0.0
            if bb > 0:
                bb_9 = 99.0
                k_bb = 99.0
            else:
                bb_9 = 0.0
                k_bb = 0.0
            if hr > 0:
                hr_9 = 99.0
            else:
                hr_9 = 0.0
        else:
            k_9 = (float(k) / float(ip)) * 9
            bb_9 = (float(bb) / float(ip)) * 9
            hr_9 = (float(hr) / float(ip)) * 9
            if bb == 0:
                if k > 0:
                    k_bb = 99.0
                else:
                    k_bb = 0.0
            else:
                k_bb = (float(k) / float(bb))

        fip_const = float(
            helper.get_zips_average_pitchers(year - 1, 'fip_const'))
        FIP = ((((13 * float(hr)) + (3 * float(bb)) -
                 (2 * float(k))) / float(ip)) + fip_const)
        park_FIP, FIP_min, FIP_WAR = helper.get_zips_pitching_metrics(
            FIP, ip, year - 1, pf, g, gs, 'fip')

        ERA = float(era)
        park_ERA, ERA_min, ERA_WAR = helper.get_zips_pitching_metrics(
            ERA, ip, year - 1, pf, g, gs, 'era')

        entry['year'] = year
        entry['player_name'] = player_name
        entry['team_abb'] = team_abb
        entry['age'] = age
        entry['pf'] = pf
        entry['ip'] = ip
        entry['k_9'] = k_9
        entry['bb_9'] = bb_9
        entry['k_bb'] = k_bb
        entry['hr_9'] = hr_9
        entry['FIP'] = FIP
        entry['park_FIP'] = park_FIP
        entry['FIP_minus'] = FIP_min
        entry['FIP_WAR'] = FIP_WAR
        entry['ERA'] = era
        entry['park_ERA'] = park_ERA
        entry['ERA_minus'] = ERA_min
        entry['ERA_WAR'] = ERA_WAR

        entries.append(entry)

    table = 'zips_WAR_pitchers'
    if entries != []:
        for i in range(0, len(entries), 1000):
            db.insertRowDict(entries[i:i + 1000],
                             table,
                             insertMany=True,
                             replace=True,
                             rid=0,
                             debug=1)
            db.conn.commit()
示例#6
0
def pitching_war(year):
    player_q = """SELECT
    player_name,
    team_abb,
    position,
    age, 
    g, 
    gs,
    era,
    ROUND(ip) + (10 * (ip - ROUND(ip)) / 3) as ip,
    h, r, er, bb, k, hr
    FROM register_pitching_primary
    WHERE year = %s;
    """

    player_qry = player_q % (year)
    player_data = db.query(player_qry)

    entries = []
    for row in player_data:
        entry = {}
        player_name, team_abb, position, age, g, gs, era, ip, h, r, er, bb, k, hr = row
        entry['year'] = year
        entry['player_name'] = player_name
        entry['team_abb'] = team_abb
        entry['position'] = position
        throws = None
        entry['throws'] = throws
        entry['age'] = age
        entry['ip'] = ip

        team_abb = team_abb.upper()
        pf = float(helper.get_park_factors(team_abb, year)) / float(100)
        entry['pf'] = pf

        if ip == 0:
            k_9 = 0.0
            if bb > 0:
                bb_9 = 99.0
                k_bb = 99.0
            else:
                bb_9 = 0.0
                k_bb = 0.0
            if hr > 0:
                hr_9 = 99.0
            else:
                hr_9 = 0.0
        else:
            k_9 = (float(k) / float(ip)) * 9
            bb_9 = (float(bb) / float(ip)) * 9
            hr_9 = (float(hr) / float(ip)) * 9
            if bb == 0:
                if k > 0:
                    k_bb = 99.0
                else:
                    k_bb = 0.0
            else:
                k_bb = (float(k) / float(bb))

        entry['k_9'] = k_9
        entry['bb_9'] = bb_9
        entry['k_bb'] = k_bb
        entry['hr_9'] = hr_9

        fip_const = float(helper.get_league_average_pitchers(
            year, 'fip_const'))
        if ip == 0:
            FIP = 99.99
        else:
            FIP = ((((13 * float(hr)) + (3 * float(bb)) -
                     (2 * float(k))) / float(ip)) + fip_const)
        entry['FIP'] = FIP

        park_FIP, FIP_min, FIP_WAR = helper.get_pitching_metrics(
            FIP, ip, year, pf, g, gs, 'fip')

        entry['park_FIP'] = park_FIP
        entry['FIP_minus'] = FIP_min
        entry['FIP_WAR'] = FIP_WAR

        ERA = float(era)
        entry['ERA'] = ERA

        park_ERA, ERA_min, ERA_WAR = helper.get_pitching_metrics(
            ERA, ip, year, pf, g, gs, 'era')

        entry['park_ERA'] = park_ERA
        entry['ERA_minus'] = ERA_min
        entry['ERA_WAR'] = ERA_WAR

        entries.append(entry)

    table = 'processed_WAR_pitchers'
    if entries != []:
        db.insertRowDict(entries, table, replace=True, insertMany=True, rid=0)
    db.conn.commit()