develope_kkyu

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

Python

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

developekkyu37 2023. 3. 4. 00:58
728x90

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 [Python] MLB-StatsAPI를 이용한 mlb 기록 사이트 만들기 - 2 https://developerkkyu37.tistory.com/69

developerkkyu37.tistory.com

라인스코어도 만들었고 이제 각 팀의 기록 몇개를 시각화해서 비교할 수 있는 그래프를 만들고 싶었다. 네이버 스포츠 야구 기록을 보면 밑에 사진처럼 되있는데 이렇게 만들어보고 싶었다.

matplotlib를 사용했다.

import matplotlib.pyplot as plt
statsapi.boxscore_data를 사용해 그래프에 쓸만한 데이터를 찾아보니 안타, 홈런, 도루, 삼진, 잔루가 있었다.
        boxscore = statsapi.boxscore_data(game_id)
    
        away_hits = boxscore['away']['teamStats']['batting']['hits']
        away_hrs = boxscore['away']['teamStats']['batting']['homeRuns']
        away_stolen = boxscore['away']['teamStats']['batting']['stolenBases']
        away_so = boxscore['away']['teamStats']['batting']['strikeOuts']
        away_lob = boxscore['away']['teamStats']['batting']['leftOnBase']

        home_hits = boxscore['home']['teamStats']['batting']['hits']
        home_hrs = boxscore['home']['teamStats']['batting']['homeRuns']
        home_stolen = boxscore['home']['teamStats']['batting']['stolenBases']
        home_so = boxscore['home']['teamStats']['batting']['strikeOuts']
        home_lob = boxscore['home']['teamStats']['batting']['leftOnBase']

        a = ['안타', '홈런', '도루', '삼진', '잔루']
        b = np.array([away_hits, away_hrs, away_stolen, away_so, away_lob])
        c = np.array([home_hits, home_hrs, home_stolen, home_so, home_lob])

subplots로 2개의 그래프의 y값을 하나만 보여주고 한쪽 그래프를 대칭시켜서 표현했다.

        y = np.arange(c.size)
        

        fig, axes = plt.subplots(ncols=2, sharey=True)
        
        axes[0].barh(y, b, align='center', color='navy', zorder=10)
        axes[0].set(title=away_h)
        axes[1].barh(y, c, align='center', color='navy', zorder=10)
        axes[1].set(title=home_h)

        
        axes[0].invert_yaxis()
        axes[0].set(yticks=y, yticklabels=a)
        axes[0].yaxis.tick_right()
        axes[0].set_xlim([0,25])
        axes[1].set_xlim([0,25])
        axes[0].invert_xaxis()
        

        axes[0].spines['top'].set_visible(False)
        axes[0].spines['right'].set_visible(False)
        axes[0].spines['left'].set_visible(False)
        axes[0].spines['bottom'].set_visible(False)
        axes[1].spines['top'].set_visible(False)
        axes[1].spines['right'].set_visible(False)
        axes[1].spines['left'].set_visible(False)
        axes[1].spines['bottom'].set_visible(False)
        fig.set_figheight(2)
        fig.tight_layout()
        fig.subplots_adjust(wspace=0.165)
        st.pyplot(fig)

matplotlib는 한글이 깨져나오는 현상이 있어서 폰트를 정해주어야한다.

# 한글 폰트 사용을 위해서 세팅
from matplotlib import font_manager, rc
font_path = "C:/Windows/Fonts/MALGUN.TTF"
font = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font)

잘 나온다.

728x90