matplotlib 05 pie plot
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
공지
제 수업을 듣는 사람들이 계속적으로 실습할 수 있도록 강의 파일을 만들었습니다. 늘 도움이 되기를 바라며. 참고했던 교재 및 Reference는 꼭 확인하셔서 교재 구매 또는 관련 Reference를 확인하시기를 바랍니다.
도움이 되었다면 Github
에 Star
를 눌러주세요.
I. Matplotlib & Seaborn
(1) 기본 개요
Matplotlib
는 파이썬 표준 시각화 도구라고 불리워지며 파이썬 그래프의 기본 토대가 된다고 해도 무방하다. 객체지향 프로그래밍을 지원하므로 세세하게 꾸밀 수 있다.
Seaborn
그래는 파이썬 시각화 도구의 고급 버전이다. Matplotlib
에 비해 비교적 단순한 인터페이스를 제공하기 때문에 초보자도 어렵지 않게 배울 수 있다.
(2) matplotlib & Seabon 설치
설치방법은 윈도우 명령 프롬프트, MacOS, Linux 터미널에서 pip install matplotlib
입력하면 되지만, 간혹 여러 환경에 따라 달라질 수 있으니 관련 싸이트에서 확인하기를 바란다.
- matplotlib 설치 방법: https://matplotlib.org/users/installing.html
- seaborn 설치 방법: https://seaborn.pydata.org/installing.html
II. Pie Plot
Pie Chart는 빈도수와 연관이 있는데, 사실 이 그래프는 약간의 호불호가 존재한다. Ian Spence는 No Humble Pie: The Origins and Usage of a Statistical Chart 라는 페이퍼를 작성했는데, 요지는 이 그래프가 대부분의 전문가들에게 어필하는데 실패했다는 것이다.
구체적인 이유는 위 논문에서 영어공부도 할겸 찾아보시기를 바란다.
그럼에도 불구하고, 여전히 사람들은 Pie Chart
가 원에서 비율을 직관적으로 확인할 수 있다는 것에 만족해 하는 것 같다. 특히, 상사나 클라이언트의 연령대가 높으면 높을수록 이러한 그래프를 좋아할 가능성은 경험적으로 조금 높았다.
빠르게 그래프를 작성하기 위해 데이터부터 가져온다.
import pandas as pd
from tabulate import tabulate
url = 'https://raw.githubusercontent.com/hmcuesta/PDA_Book/master/Chapter3/pokemonByType.csv'
pokemonByType = pd.read_csv(url, index_col='type')
print(tabulate(pokemonByType.head(5), tablefmt = 'pipe', headers='keys'))
| type | amount |
|:---------|---------:|
| Bug | 45 |
| Dark | 16 |
| Dragon | 12 |
| Electric | 7 |
| Fighting | 3 |
샘플 데이터는 매우 중요하다. 처음에는 그 중요성을 잘 몰랐으나, 샘플 데이터의 뜻은 기본적으로 앞단에서 데이터를 전처리하여, 샘플 데이터화 처럼 만들어 달라는 뜻이기도 하다.
샘플 데이터를 다시 확인해보면, 첫번째 열은 문자로 구성이 되어 있고, 두번째 열은 숫자로 구성이 되어 있는 것을 확인하고 있다.
즉, 데이터의 빈도수를 말하는 것이다. 이걸 그래프로 그리면 어떻게 될까?
import matplotlib.pyplot as plt
plt.pie(pokemonByType['amount'], labels=pokemonByType.index,
shadow=False, startangle=90, autopct='%1.1f%%')
plt.axis('equal')
plt.show()
이렇게 완성이 되었다. 위 그래프는 사실 기본 그래프이고, 조금 더 응용해서 작업할 수도 있다.
import matplotlib.pyplot as plt
import numpy as np
def func(pct, allvals):
absolute = int(pct/100.*np.sum(allvals))
return "{:.1f}%\n({:d} cnt)".format(pct, absolute)
plt.figure(figsize=(10,9))
plt.pie(pokemonByType['amount'], labels=pokemonByType.index,
shadow=False, startangle=90, autopct=lambda pct: func(pct, pokemonByType),
textprops=dict(color="w"))
plt.legend(pokemonByType.index,
title="PokemonByType Count",
loc="center left",
bbox_to_anchor=(1, 0, 0.5, 1))
plt.axis('equal')
plt.show()
III. 실습파일
- 구글코랩에서 빠르게 실습도 할 수 있습니다. 실습
IV. 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.