def hit_location_data( self, df, pos_of=FIELD_POSITIONS_OF, pos_if=FIELD_POSITIONS_IF, pos_bt=FIELD_POSITIONS_BATTERY ): """ Hit Location Data from RETROSHEET :param df: event file dataframe by RETROSHEET :param pos_of: Out Fielder Position{'number': 'name'} :param pos_if: In Fielder Position{'number': 'name'} :param pos_bt: BATTERY Position{'number': 'name'} :return: Hit Location Data(dict) """ hit_charts = { 'of': self._initialize_hit_location_data(pos_of), 'if': self._initialize_hit_location_data(pos_if), 'battery': self._initialize_hit_location_data(pos_bt) } for i, row in df.iterrows(): row_dict = row.to_dict() at_bat = RetroSheetUtil.get_atbat( row_dict['event_tx'], row_dict['event_cd'], row_dict['battedball_cd'], ) batted_ball_event = AnalyzeBatter._batted_ball_event(at_bat['event']) batted_ball_pos = AnalyzeBatter._batted_ball_position(at_bat['position']) for k, pos in {'of': pos_of, 'if': pos_if, 'battery': pos_bt}.items(): if batted_ball_pos in pos.keys(): hit_charts[k][pos[batted_ball_pos]][AnalyzeBatter.HITS_DICT[batted_ball_event]] += 1 return hit_charts
def test_get_atbat(self): # single self.assertEqual( RetroSheetUtil.get_atbat('S9/G.1-3', '20', 'G'), {'event': 'S', 'position': '9', 'battedball': 'G'} ) # duble self.assertEqual( RetroSheetUtil.get_atbat('D57/G', 21, 'G'), {'event': 'D', 'position': '57', 'battedball': 'G'} ) # ground rule duble self.assertEqual( RetroSheetUtil.get_atbat('DGR/9/F', '21', 'F'), {'event': 'DGR', 'position': '9', 'battedball': 'F'} ) # ground rule duble(fan ) self.assertEqual( RetroSheetUtil.get_atbat('DGR/FINT/7/L-.1-3', '21', 'L'), {'event': 'DGR', 'position': '7', 'battedball': 'L'} ) # triple self.assertEqual( RetroSheetUtil.get_atbat('T9/L', '22', 'L'), {'event': 'T', 'position': '9', 'battedball': 'L'} ) # home run self.assertEqual( RetroSheetUtil.get_atbat('HR/89/F.1-H', '23', 'F'), {'event': 'HR', 'position': '89', 'battedball': 'F'} ) # home run(illegal position) self.assertEqual( RetroSheetUtil.get_atbat('HR/F8XD', '23', 'F'), {'event': 'HR', 'position': '8', 'battedball': 'F'} )
def hit_location_data(self, df, pos_of=FIELD_POSITIONS_OF, pos_if=FIELD_POSITIONS_IF, pos_bt=FIELD_POSITIONS_BATTERY): """ Hit Location Data from RETROSHEET :param df: event file dataframe by RETROSHEET :param pos_of: Out Fielder Position{'number': 'name'} :param pos_if: In Fielder Position{'number': 'name'} :param pos_bt: BATTERY Position{'number': 'name'} :return: Hit Location Data(dict) """ hit_charts = { 'of': self._initialize_hit_location_data(pos_of), 'if': self._initialize_hit_location_data(pos_if), 'battery': self._initialize_hit_location_data(pos_bt) } for i, row in df.iterrows(): row_dict = row.to_dict() at_bat = RetroSheetUtil.get_atbat( row_dict['event_tx'], row_dict['event_cd'], row_dict['battedball_cd'], ) batted_ball_event = AnalyzeBatter._batted_ball_event( at_bat['event']) batted_ball_pos = AnalyzeBatter._batted_ball_position( at_bat['position']) for k, pos in { 'of': pos_of, 'if': pos_if, 'battery': pos_bt }.items(): if batted_ball_pos in pos.keys(): hit_charts[k][pos[batted_ball_pos]][ AnalyzeBatter.HITS_DICT[batted_ball_event]] += 1 return hit_charts
def test_get_atbat(self): # single self.assertEqual( RetroSheetUtil.get_atbat("S9/G.1-3", "20", "G"), {"event": "S", "position": "9", "battedball": "G"} ) # duble self.assertEqual( RetroSheetUtil.get_atbat("D57/G", 21, "G"), {"event": "D", "position": "57", "battedball": "G"} ) # ground rule duble self.assertEqual( RetroSheetUtil.get_atbat("DGR/9/F", "21", "F"), {"event": "DGR", "position": "9", "battedball": "F"} ) # ground rule duble(fan ) self.assertEqual( RetroSheetUtil.get_atbat("DGR/FINT/7/L-.1-3", "21", "L"), {"event": "DGR", "position": "7", "battedball": "L"}, ) # triple self.assertEqual( RetroSheetUtil.get_atbat("T9/L", "22", "L"), {"event": "T", "position": "9", "battedball": "L"} ) # home run self.assertEqual( RetroSheetUtil.get_atbat("HR/89/F.1-H", "23", "F"), {"event": "HR", "position": "89", "battedball": "F"} ) # home run(illegal position) self.assertEqual( RetroSheetUtil.get_atbat("HR/F8XD", "23", "F"), {"event": "HR", "position": "8", "battedball": "F"} )