matplotlib 02 bar chart

Page content

강의 홍보

공지

제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.

도움이 되었다면 GithubStar를 눌러주세요.

I. Matplotlib 기본 그래프

Matplotlib는 파이썬 표준 시각화 도구라고 불리워지며 파이썬 그래프의 기본 토대가 된다고 해도 무방하다. 객체지향 프로그래밍을 지원하므로 세세하게 꾸밀 수 있다.

II. matplotlib 설치

설치방법은 윈도우 명령 프롬프트, MacOS, Linux 터미널에서 pip install matplotlib입력하면 되지만, 간혹 여러 환경에 따라 달라질 수 있으니 관련 싸이트에서 확인하기를 바란다.

III. 막대 그래프(Bar Chart)

시계열 데이터와 같이 연속적인 값의 변화와 패턴을 파악하는데 적합하다. 그래프를 그리기 위해 2020년 전세계를 강타했던 코로나 데이터셋을 위주로 그래프를 그려보도록 한다.

(1) 데이터 수집

엑셀파일 데이터를 불러와서 실제 잘 들어왔는지 확인해봅니다.

# 모듈 불러오기
import pandas as pd
import matplotlib.pyplot as plt
import calendar
import numpy as np

# Excel 데이터 데이터프레임으로 변환
covid_19 = pd.read_excel("/content/20200406-COVID-19-geographic-disbtribution-worldwide.xlsx")
print(covid_19.head())
     dateRep  day  month  ...  geoId  countryterritoryCode  popData2018
0 2020-04-05    5      4  ...     AF                   AFG   37172386.0
1 2020-04-04    4      4  ...     AF                   AFG   37172386.0
2 2020-04-03    3      4  ...     AF                   AFG   37172386.0
3 2020-04-02    2      4  ...     AF                   AFG   37172386.0
4 2020-04-01    1      4  ...     AF                   AFG   37172386.0

[5 rows x 10 columns]

(2) 데이터 필터링

우선 KOR 기준으로 데이터를 Filter링을 해줍니다.

# KOR 데이터만 추출, val. countryterritoryCode
covid_kor = covid_19[covid_19['countryterritoryCode'] == 'KOR']
covid_kor.set_index('dateRep', inplace=True)

# 월 생성
months = covid_kor['month'].unique().tolist()

# cases 생성
case_quantity = covid_kor.groupby("month").sum()['cases'].tolist()

(3) 그래프 레이아웃 구성

그래프의 크기 등을 구성합니다.

figure, axis = plt.subplots()

png

(4) x축 설정

X축에는 12월~4월까지 구성이 될 것입니다.

plt.xticks(months, rotation=30)
([<matplotlib.axis.XTick at 0x7f574b40fd68>,
  <matplotlib.axis.XTick at 0x7f574b40fd30>,
  <matplotlib.axis.XTick at 0x7f574b40f978>,
  <matplotlib.axis.XTick at 0x7f574b42e160>,
  <matplotlib.axis.XTick at 0x7f574b42e5c0>],
 <a list of 5 Text major ticklabel objects>)

png

(5) 막대 그래프 출력 (세로)

이제 막대 그래프를 그려본다. 이 때, 단순히 그래프가 작성하는 것이 아니라 text도 같이 입력하도록 한다.

figure, axis = plt.subplots()
plt.xticks(months, rotation=30)

plot = axis.bar(months, case_quantity)

for rectangle in plot:
  height = rectangle.get_height()
  axis.text(rectangle.get_x() + rectangle.get_width()/2., 1.002 * height, '%d'%int(height), ha='center', va='bottom')

plt.show()

png

여기에서 for-loop를 작성하는 이유는 각 그래프마다 데이터의 값이 달라지기 때문이며, 데이터의 값을 기준으로 높이를 설정하는 것이기 때문에 그렇습니다.

(6) 막대 그래프 출력 (가로)

이번에는 동일한 코드이지만, 막대 그래프를 가로로 표시될 수 있도록 소스코드를 구현합니다.

이 때 주의해야 하는 것은 plt.yticks로 수정해야 한다는 점입니다. 또한, height에 해당하는 부분은 모두 width로 바꿔준 후, 적정한 값을 입력하여 출력합니다.

figure, axis = plt.subplots()
plt.yticks(months, rotation=30)

plot = axis.barh(months, case_quantity)

for rectangle in plot:
  width = rectangle.get_width()
  axis.text(width + 300, rectangle.get_y() + 0.1, '%d'%int(width), ha='center', va='bottom')

plt.show()

png

VI. 실습파일

  • 구글코랩에서 빠르게 실습도 할 수 있습니다. 실습

V. Reference

Mukhiya, Uuresh Kumar. Ahmed Usman. Hands-on Exploratory Data Analysis With Python: Perform EDA Techniques to understand, Summarize, and Investigate Your Data. Packt publishing limited, 2020.