matplotlib 05 pie plot

Page content

강의 홍보

공지

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

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

I. Matplotlib & Seaborn

(1) 기본 개요

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

Seaborn 그래는 파이썬 시각화 도구의 고급 버전이다. Matplotlib에 비해 비교적 단순한 인터페이스를 제공하기 때문에 초보자도 어렵지 않게 배울 수 있다.

(2) matplotlib & Seabon 설치

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

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()

png

이렇게 완성이 되었다. 위 그래프는 사실 기본 그래프이고, 조금 더 응용해서 작업할 수도 있다.

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()

png

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.