본문 바로가기
프로그래머/프로그래밍

bar chart race 만들기 (차트레이스 만들기 ) w Python

by plog 2024. 1. 5.

차트레이스 만들기

흥미로운 bar chart race(바 차트 레이스)를 Python 언어를 사용하여 만드는 방법 공유 하고자 합니다. 

 

준비사항

언어: Python

툴: Jupyter 또는 VSCode

데이터CSV 파일

bar_test.csv
0.01MB

개발

1) bar_chart_race 패키지 설치

pip install bar_chart_race

 

2) FFmpeg 설치

bar_chart_race를 동영상 파일로 저장하기 위해 FFmpeg 설치.

 

 

Download FFmpeg

If you find FFmpeg useful, you are welcome to contribute by donating. More downloading options Git Repositories Since FFmpeg is developed with Git, multiple repositories from developers and groups of developers are available. Release Verification All FFmpe

ffmpeg.org

- 원도우 - Windows builds from gyan.dev 선택

- 안정적인 버전 선택

- 압축을 해제 및 원하시는 위치로 이동

- 환경 변수 셋팅

- 환경변수 버튼 클릭

- 사용자 변수 Path "편집"

- path 편집 확인 

bin 폴더를 설정해주고 확인 하면서 마무리.

- cmd 명령 프롬프트 실행

- ffmpeg를 치면 아래와 같이 출력되면 정상 설치.

3) 필요한 패키지

import pandas as pd
import numpy as np
import bar_chart_race as bcr

 

3) 한글 폰트 설정

한글 깨짐 현상 방지 

from matplotlib import font_manager,rc

# 한글 폰트 설정
font_location = 'C:/Windows/Fonts/MALGUNSL.TTF' #맑은고딕
font_name = font_manager.FontProperties(fname=font_location).get_name()
rc('font',family=font_name)

 

4) 데이터 불러 오기

#필요한 데이터 셋 불러오기
path = "D:\\src\\python\\ChartRace\\bar_test.csv"

baseball = pd.read_csv(path)
df.head()

출력 화면 (jupyter)

5) 데이터 전처리 및 누적 형태로 변경

# 피봇팅
df = baseball.pivot_table(values='win', index = 'season',columns='team')

# NaN값 0으로 바꾸어 주기
df.fillna(0,inplace=True)
df.sort_values(list(df.columns), inplace=True)
df = df.sort_index()

# 누적데이터로 각 축구팀의 데이터 값 바꾸기
df.iloc[:] = df.iloc[:].cumsum()
df.head()

출력 화면

6) 바 차트 레이스 생성

bcr.bar_chart_race(
        df=df,    
    orientation='h', # 그래프 증가 수평 방향(가로그래프) 'h', 수직 방향(세로그래프) 'v'
    period_length=1500, # 업데이트 주기(초)
    n_bars=10, # 보여줄 막대 개수        
    title = 'KBO 팀별 누적 승리 순위 (1982-2023)',#타이틀
    filter_column_colors=True  # 화면에 표시되는 막대에만 색상을 적용
)

 

7) 전체 코드

#필요한 모듈 불러오기
#!pip install bar_chart_race as bcr
import pandas as pd
import numpy as np
import bar_chart_race as bcr

from matplotlib import font_manager,rc

# 한글 폰트 설정
font_location = 'C:/Windows/Fonts/MALGUNSL.TTF' #맑은고딕
font_name = font_manager.FontProperties(fname=font_location).get_name()
rc('font',family=font_name)


#필요한 데이터 셋 불러오기
# 주의할 점: 주소에 \를 //로 바꿔줄 것!
path = "D:\\src\\python\\ChartRace\\bar_test.csv"

baseball = pd.read_csv(path)

#데이터를 알맞은 포맷으로 변형하기 - 피봇팅
df = baseball.pivot_table(values='win', index = 'season',columns='team')

# NaN값 0으로 바꾸어 주기
df.fillna(0,inplace=True)
df.sort_values(list(df.columns), inplace=True)
df = df.sort_index()
# df.head()

# 누적데이터로 각 축구팀의 데이터 값 바꾸기
df.iloc[:] = df.iloc[:].cumsum()

bcr.bar_chart_race(
    df=df,    
    filename='./test.mp4',
    orientation='h', # 그래프 증가 수평 방향(가로그래프) 'h', 수직 방향(세로그래프) 'v'
    period_length=1500, # 업데이트 주기(초)
    n_bars=10, # 보여줄 막대 개수        
    title = 'KBO 팀별 누적 승리 순위 (1982-2023)',
    filter_column_colors=True  # 화면에 표시되는 막대에만 색상을 적용한다.
)

 

공식 문서

 

 

Bar Chart Race

Animated bar chart races in Python with the bar_chart_race package

www.dexplo.org

댓글