반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

<데이터 분석 관련 글>

 

2021.07.21 - [파이썬 패키지/데이터분석] - [코딩유치원] 비전공자도 쉽게 이해하는 데이터 분석 프로세스 (ft. 수집, EDA, 전처리, 모델링)

2021.04.12 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 1편. 데이터는 금이다 (feat.데이터 관련 직업 소개)

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

2021.04.14 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 3편. 데이터 분석 필수 패키지, 판다스! (feat. 10 minutes to pandas)

2021.04.15 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 4편. 데이터 분석을 위한 데이터 다운로드 받기 (feat.공공데이터포털)

2021.04.16 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 5편. Jupyter Notebook으로 데이터 파일 불러오기 (꿀팁. Tap과 Tap+Shift 사용법은 꼭 알아두세요!!)

2021.04.17 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 6편. 데이터 분석에서 결측치란? (feat. 주피터 노트북 Pandas 관련 함수)

2021.04.18 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 7편. 원하는 이름의 열 & 특정 문자열을 포함한 데이터 인덱싱하기

2021.07.24 - [분류 전체보기] - [파이썬 데이터 분석] 9편. 데이터 시각화 맛보기(ft. 15~20년 전국 민간아파트 분양가 데이터)

2021.07.25 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index)

 

 


 

이번 시간에는 아주 흥미로운 데이터 시각화를 해보겠습니다.

 

오늘 소개 드릴 패키지는 bar-chart-race라는 이름의 패키지로 말그대로 막대 차트가 경주를 하듯 움직이는 것입니다. 아래의 그림을 보시면 바로 이해가 되실거예요!

 

출처. https://www.dexplo.org/bar_chart_race/

 

우선 공식 문서는 아래에 링크를 달아두었습니다.

 

https://www.dexplo.org/bar_chart_race/

 

오늘은 간단히 어떤 식으로 사용하는지 예제를 통해서 설명드리고, 다음 시간에 bar-chart-race의 자세한 사용법에 대해서 알려드리겠습니다.

 

원래는 항상 VScode 위에서 Jupyter Notebook을 실행해왔으나, 해당 패키지가 순수한 Jupyter Notebook에서만 그래프를 출력해서 오늘은 순정 주피터 노트북에서 코딩을 하였습니다.

 

2021.04.13 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 2편. 데이터 분석을 위한 준비 (Jupyter Notebook 설치 및 사용법)

 

 

bar-chart-race 설치

 

가장 먼저 할 일은 패키지를 설치하는 것이겠죠? 설치 방법은 두 가지이며, 무난하게 pip install을 이용해서 설치하시는 것을 추천드립니다. 참고로 conda를 이용하여 설치하시면 패키지가 최신버전이 나왔을 때마다 자동 업그레이드 된답니다.

 

# 공식 파이썬 설치, 아나콘다 패키지 설치 모두 관계없이 가능
pip install bar_chart_race

# 아나콘다 패키지 설치한 경우만 가능
conda install -c conda-forge bar_chart_race

 

관련 패키지 불러오기

 

그럼 오늘 사용할 패키지들을 import 해주도록 하겠습니다.

 

import pandas as pd

import numpy as np

import bar_chart_race as bcr

 

데이터 셋 가져오기

 

오늘 사용할 데이터 셋은 2012-2020년 프리미어리그 클럽별 점수 데이터입니다. 데이터 셋은 아래의 사이트에서 다운로드 받았으며, 여러분들의 번거로움을 줄이기 위해서 csv 파일을 별도로 업로드 해두었습니다.

 

<데이터 다운로드 링크>

https://www.kaggle.com/lynuhs/premier-league-19922017?select=premierLeague_tables_1992-2017.csv 

 

<오늘 사용할 데이터 셋 csv>

 

premierLeague_tables_1992-2017.csv
0.05MB

 

만약 데이터(csv 파일)를 받으셨다면 아래의 코드로 데이터를 불러와주세요.

 

# csv 파일을 pandas 패키지를 이용해서 불러옴
df = pd.read_csv('premierLeague_tables_1992-2017.csv')

# 데이터 구성 파악
df.head()

 

코드를 실행하시면 아래와 같이 데이터들이 쭉 나옵니다. 

 

 

데이터 전처리

 

우리는 오늘 복잡한 데이터 모두 무시하고, season, team, points 3가지만 다루어 보겠습니다.

 

# 3가지 컬럼만 남기고 모두 제거
df = df[['season', 'team', 'points']]

# 확인
df.head()

 

데이터 프레임이 간결해졌네요! 

 

다음으로는 bar-chart-race에서 요구하는 데이터 프레임의 형태로 해당 데이터 프레임을 변형시켜보겠습니다. 이 때 사용할 함수는 지난시간에 배웠던 pivot-table입니다.

 

2021.07.25 - [파이썬 패키지/데이터분석] - [파이썬 데이터 분석] 10편. 데이터 프레임 배치를 내맘대로! (ft. pivot-table, groupby, multi-index)

 

참고로, bar-chart-race는 행(row)이 시간으로 되어있는 시계열 데이터만을 입력받아서 처리할 수 있습니다.

 

# 행은 'season', 열은 'team', 데이터는 points로 데이터 프레임 변경
df = df.pivot_table(values = 'points', index = 'season', columns = 'team')

# 확인
df.head()

 

데이터가 생김새가 확 달라졌습니다. 그런데 값이 NaN으로 표시된 것들이 많이 보이네요. 아마도 해당 시즌에 본선에 진출하지 못한 경우에는 값이 없으므로 이렇게 나오는 듯합니다.

 

 

NaN 값을 0으로 모두 변경해주도록 하겠습니다.

# NaN 값을 0으로 채워주기
df = df.fillna(0)

# 확인
df.head()

 

 

지금 데이터는 시즌별 점수가 중첩이 되지 않는 상태입니다. 시즌이 진행됨에 따라서 그 값이 더해지는 것을 원하므로 아래의 코드로 값을 계속 더해주도록 하겠습니다.

 

df.iloc[:] = df.iloc[:].cumsum()

 

 

데이터 시각화

 

이제 오늘의 주제인 bar-chart-race로 그래프를 그려보겠습니다. 설정 가능한 옵션은 정말 다양하며, 다음 시간에 자세히 다루겠습니다.

 

bcr.bar_chart_race(df = df, 
                   n_bars = 10,
                   figsize=(6, 4),
                   sort='desc',
                   title='Premier League Clubs Points Since 1992')

 

 

오늘 준비한 내용은 여기까지입니다.

 

감사합니다.


<참고자료>

 

Python으로 막대 차트 레이스 애니메이션 만들기

 

https://ichi.pro/ko/python-eulo-magdae-chateu-leiseu-aenimeisyeon-mandeulgi-226156087609166

 

반응형

+ Recent posts