(파이썬-Matplotlib) 시각화 튜토리얼 - 히스토그램
Page content
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
히스토그램
히스토그램 그래프는 연속형 변수의 분포를 그리는 데 사용된다. 연속형 변수 값은 필요한 빈(=bin) 수로 분활되어 x축에 표시되며, 각 빈에 포함되는 값의 카운트는 y
축에 표시된다. y축
에는 카운트 대신 총량의 백분율을 표시할 수 있으며, 이 경우 확률 분포를 나타내며, 이러한 그래프는 통계 분석에 사용된다.
(1) 라이브러리 불러오기
필요한 모듈을 불러온다.
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
import pandas.util.testing as tm
(2) 데이터 생성
이번에는 seaborn
패키지 내 tips
데이터를 활용한다.
titanic = sns.load_dataset('titanic')
위 데이터에서 age
을 추출하여 객체로 저장한다.
age = titanic['age']
(3) 그래프 구현
연령대를 히스토그램으로 기본 그래프를 시각화 한다.
nbins = 21
plt.hist(age, bins = nbins)
plt.show()
/usr/local/lib/python3.6/dist-packages/numpy/lib/histograms.py:839: RuntimeWarning: invalid value encountered in greater_equal
keep = (tmp_a >= first_edge)
/usr/local/lib/python3.6/dist-packages/numpy/lib/histograms.py:840: RuntimeWarning: invalid value encountered in less_equal
keep &= (tmp_a <= last_edge)
연령대를 히스토그램으로 기본 그래프를 시각화 한다. 축의 라벨과 제목을 추가한다.
nbins = 21
plt.hist(age, bins = nbins)
plt.xlabel("Age")
plt.ylabel("Frequency")
plt.title("Distribution of Aae in Titanic")
plt.show()
/usr/local/lib/python3.6/dist-packages/numpy/lib/histograms.py:839: RuntimeWarning: invalid value encountered in greater_equal
keep = (tmp_a >= first_edge)
/usr/local/lib/python3.6/dist-packages/numpy/lib/histograms.py:840: RuntimeWarning: invalid value encountered in less_equal
keep &= (tmp_a <= last_edge)
이번에는 평균을 추가하는 그래프를 작성한다.
nbins = 21
plt.hist(age, bins = nbins)
plt.xlabel("Age")
plt.ylabel("Frequency")
plt.title("Distribution of Aae in Titanic")
plt.axvline(x = age.mean(), linewidth = 2, color = 'r')
plt.show()
/usr/local/lib/python3.6/dist-packages/numpy/lib/histograms.py:839: RuntimeWarning: invalid value encountered in greater_equal
keep = (tmp_a >= first_edge)
/usr/local/lib/python3.6/dist-packages/numpy/lib/histograms.py:840: RuntimeWarning: invalid value encountered in less_equal
keep &= (tmp_a <= last_edge)
(4) 히스토그램과 최적의 정규분포
y
축에서는 빈도를 표시하는 대신 밀도=1을plt.hist()
로 지정하여 각각의빈(=bins)
로 지정하여 각각의 빈에age
목록의 모든 항목 합계의 백분율을 표시할 수 있다. 또한 이 데이터의 평균 및 표준 편차를 사용하여 근사 정규 분포를 그래프로 표시하여 이 분포가 정규 분포를 얼마나 잘 다르는지 확인할 수 있다.
mu = age.mean()
sigma = age.std()
nbins = 21
n, bins, patches = plt.hist(age, bins = nbins, density = 1)
plt.xlabel("Age")
plt.ylabel("Frequency")
plt.title("Distribution of Aae in Titanic")
y = ((1 / (np.sqrt(2 * np.pi) * sigma)) * np.exp(-0.5 * (1 / sigma * (bins - mu))**2))
plt.plot(bins, y, '--')
plt.show()
/usr/local/lib/python3.6/dist-packages/numpy/lib/histograms.py:839: RuntimeWarning: invalid value encountered in greater_equal
keep = (tmp_a >= first_edge)
/usr/local/lib/python3.6/dist-packages/numpy/lib/histograms.py:840: RuntimeWarning: invalid value encountered in less_equal
keep &= (tmp_a <= last_edge)
- 30세 이전의 히스토그램은 최적의 선과 일치하지 않는 것을 확인할 수 있지만, 30세 이후에는 제법 잘 맞는 것처럼 확인되고 있는 확인할 수 있다.