matplotlib - 08 Histogram

Page content

강의 홍보

공지

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

I. Matplotlib & Seaborn

(1) 기본 개요

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

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

(2) matplotlib & Seabon 설치

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

II. Histogram

Histogramcontinuous 변수의 분포를 확인하고자 할 때 사용됩니다. 이 그래프는 통계 분석에 매우 유명한 그래프이기 때문에 꼭 실습하는 것을 권합니다.

(1) 데이터 생성

  • 직업경력 연수에 관한 데이터를 생성하도록 한다.
# dataset 
import numpy as np
import matplotlib.pyplot as plt

yearsOfExperience = np.array([10, 16, 14, 5, 10, 11, 16, 14, 3, 14, 13, 19, 2, 5, 7, 3, 20,
       11, 11, 14, 2, 20, 15, 11, 1, 15, 15, 15, 2, 9, 18, 1, 17, 18,
       13, 9, 20, 13, 17, 13, 15, 17, 10, 2, 11, 8, 5, 19, 2, 4, 9,
       17, 16, 13, 18, 5, 7, 18, 15, 20, 2, 7, 0, 4, 14, 1, 14, 18,
       8, 11, 12, 2, 9, 7, 11, 2, 6, 15, 2, 14, 13, 4, 6, 15, 3,
       6, 10, 2, 11, 0, 18, 0, 13, 16, 18, 5, 14, 7, 14, 18])

(2) 히스토그램 - count 기준

  • 이제 히스토그램을 만드는데, 아래와 같이 작성하도록 해보자.
nbins = 20
n, bins, patches = plt.hist(yearsOfExperience, bins=nbins)
plt.xlabel('Years of Job')
plt.ylabel('Frequency')
plt.title('Distribution of of Jobs')
plt.axvline(x = yearsOfExperience.mean(), linewidth=3, color='g')
plt.show()

png

  • axvline()은 그래프의 수직선을 그려주는 함수입니다.
    • 각각의 인수에 대한 설명은 공식홈페이지에서 확인하시기를 바랍니다.
  • 반대로, axhline()은 그래프의 그려주는 함수입니다.
  • 평균적으로 약 10년간의 근속연수를 확인 활 수 있습니다.

(3) 히스토그램 - 비율 기준

  • 빈도 기준으로 그래프를 작성하게 되면 하나의 단점은 전체 데이터에서의 비율을 확인하는데 조금 어려움이 있다.
  • 따라서, 이번에는 비율을 기준으로 그래프를 작성하고, 추가적으로 밀도 그래프를 추가하도록 한다.
plt.figure(figsize = (10, 6))
nbins = 20
n, bins, patches = plt.hist(yearsOfExperience, bins = nbins, density = 1)
plt.xlabel('Years of Job')
plt.ylabel('Frequency')
plt.title('Distribution of of Jobs')
plt.axvline(x = yearsOfExperience.mean(), linewidth=3, color = 'g')
<matplotlib.lines.Line2D at 0x7f63238d4588>

png

  • 평균과 표준편차를 구하도록 한다.
mu = yearsOfExperience.mean()
sigma = yearsOfExperience.std()

print("the result of mu is", mu)
print("the result of mu is", sigma)
the result of mu is 10.45
the result of mu is 5.8997881317891405
  • 정규분포를 추가하기 위해 아래와 같은 코드를 작성한다.
y = ((1/(np.sqrt(2 * np.pi) * sigma)) * np.exp(-0.5*(1/sigma * (bins-mu)) ** 2))
print(y)
[0.01408678 0.01874815 0.02424531 0.03046634 0.03719938 0.04413408
 0.05087863 0.05699276 0.06203359 0.06560806 0.06742335 0.06732657
 0.06532593 0.06158964 0.05642255 0.05022509 0.04344219 0.03651116
 0.0298169  0.02366041 0.01824337]
plt.figure(figsize = (10, 6))
nbins = 20
n, bins, patches = plt.hist(yearsOfExperience, bins = nbins, density = 1)
plt.xlabel('Years of Job')
plt.ylabel('Frequency')
plt.title('Distribution of of Jobs')
plt.axvline(x = yearsOfExperience.mean(), linewidth=3, color = 'g')
plt.plot(bins, y, '--')
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.