develope_kkyu

[Python] MLB-StatsAPI를 이용한 mlb 기록 사이트 만들기 - 6 본문

Python

[Python] MLB-StatsAPI를 이용한 mlb 기록 사이트 만들기 - 6

developekkyu37 2023. 3. 6. 22:19
728x90

https://developerkkyu37.tistory.com/75

 

[Python] MLB-StatsAPI를 이용한 mlb 기록 사이트 만들기 - 5

https://developerkkyu37.tistory.com/73 [Python] MLB-StatsAPI를 이용한 mlb 기록 사이트 만들기 - 4 https://developerkkyu37.tistory.com/72 [Python] MLB-StatsAPI를 이용한 mlb 기록 사이트 만들기 - 3 https://developerkkyu37.tistory.com/70

developerkkyu37.tistory.com

경기 기록은 다 보여준 것 같고 이제 다른 스포츠 사이트에서 보듯이 그 경기에 대한 개인 기록을 보여주고 싶었다.

네이버 스포츠

streamlit 라이브러리에는 탭이라는 기능이 있어 어웨이 팀, 홈 팀을 탭으로 나누어 주었다.

tab1, tab2 = st.tabs([away_h, home_h])

타자 기록, 투수 기록은 어차피 홈, 어웨이 똑같은 코드이기 때문에 함수로 만들어 주었다.

  • 타자 기록은 타수, 득점, 안타, 타점, 홈런, 볼넷, 삼진, 타율
  • 투수 기록은 이닝, 피안타, 자책, 볼넷, 삼진, 투구수, 평균자책점
def batting_stats(home_away):
            boxscore = statsapi.boxscore_data(game_id)

            batter = boxscore[home_away]['batters']
            batter_list = []
            for i in range(len(batter)):
                batter_list.append(batter[i])

            batting_df = pd.DataFrame(columns=['타자명','타수', '득점', '안타', '타점', '홈런', '볼넷', '삼진', '타율'])
            
            for i in range(len(batter_list)):
                try:
                    name = boxscore[home_away]['players']['ID'+str(batter_list[i])]['person']['fullName']
                    atBats = boxscore[home_away]['players']['ID'+str(batter_list[i])]['stats']['batting']['atBats']
                    runs = boxscore[home_away]['players']['ID'+str(batter_list[i])]['stats']['batting']['runs']
                    hits = boxscore[home_away]['players']['ID'+str(batter_list[i])]['stats']['batting']['hits']
                    rbi = boxscore[home_away]['players']['ID'+str(batter_list[i])]['stats']['batting']['rbi']
                    homeRuns = boxscore[home_away]['players']['ID'+str(batter_list[i])]['stats']['batting']['homeRuns']
                    baseOnBalls = boxscore[home_away]['players']['ID'+str(batter_list[i])]['stats']['batting']['baseOnBalls']
                    strikeOuts = boxscore[home_away]['players']['ID'+str(batter_list[i])]['stats']['batting']['strikeOuts']
                    avg = boxscore[home_away]['players']['ID'+str(batter_list[i])]['seasonStats']['batting']['avg']
                    batting_df.loc[i] = [name, atBats, runs, hits, rbi, homeRuns, baseOnBalls, strikeOuts, avg]
                except:
                    pass    
            batting_df = batting_df.set_index("타자명")
            return batting_df
def pitching_stats(home_away):
            boxscore = statsapi.boxscore_data(game_id)
            pitcher = boxscore[home_away]['pitchers']
            pitcher_list = []
            for i in range(len(pitcher)):
                pitcher_list.append(pitcher[i])

            pitching_df = pd.DataFrame(columns=['투수명', '이닝', '피안타', '자책', '볼넷', '삼진', '투구수', '평균자책'])

            for i in range(len(pitcher_list)):
                try:
                    name = boxscore[home_away]['players']['ID'+str(pitcher_list[i])]['person']['fullName']
                    inningsPitched = boxscore[home_away]['players']['ID'+str(pitcher_list[i])]['stats']['pitching']['inningsPitched']
                    hits = boxscore[home_away]['players']['ID'+str(pitcher_list[i])]['stats']['pitching']['hits']
                    earnedRuns = boxscore[home_away]['players']['ID'+str(pitcher_list[i])]['stats']['pitching']['earnedRuns']
                    baseOnBalls = boxscore[home_away]['players']['ID'+str(pitcher_list[i])]['stats']['pitching']['baseOnBalls']
                    strikeOuts = boxscore[home_away]['players']['ID'+str(pitcher_list[i])]['stats']['pitching']['strikeOuts']
                    numberOfPitches = boxscore[home_away]['players']['ID'+str(pitcher_list[i])]['stats']['pitching']['numberOfPitches']
                    era = boxscore[home_away]['players']['ID'+str(pitcher_list[i])]['seasonStats']['pitching']['era']
                    pitching_df.loc[i] = [name, inningsPitched, hits, earnedRuns, baseOnBalls, strikeOuts, numberOfPitches, era]
                except:
                    pass
            pitching_df = pitching_df.set_index("투수명")
            return pitching_df

출력

tab1, tab2 = st.tabs([away_h, home_h])
        with tab1:
            st.write(batting_stats('away'))
            st.write(pitching_stats('away'))
        
        with tab2:
            st.write(batting_stats('home'))
            st.write(pitching_stats('home'))

 

728x90