도수분포표와 히스토그램

데이터의 특징을 돋보이게 하는 도구


데이터 자체로는 아무것도 알 수 없기 때문에 통계를 사용

  • 단순한 숫자의 나열인 데이터 자체를 뚫어져라 본다고 해서 어떤 정보를 알아낼 수가 없다.
  • 80명 학생의 키를 정리한 데이터를 살펴보고 어떤 정보를 이끌어 낼 수 있을까?
    • 이 그룹에 속한 학생들의 키는 모두 같지 않고 제각각의 숫자로 나타난다.
    • 이렇게 다양한 수치로 나타나는 것을 분포한다(distribute)고 표현한다.


학생 80명의 키(cm)

151   154   160   160   163   156   158   156   154   160
154   162   156   162   157   162   162   169   150   162
154   152   161   160   160   153   155   163   160   159
164   158   150   155   157   161   168   162   153   154
158   151   155   155   165   165   154   148   169   158
146   166   161   143   156   156   149   162   159   164
162   167   159   153   146   156   160   151   151   157
151   156   166   159   157   156   159   156   156   161


  • 분포가 생기는 이유?
    • 이 수치가 결정된 이면에는 어떤 '불확실성(uncertainty)'이 움직이고 있기 때문
    • 불확실성의 구조가 제각각인 키의 수치를 발생시킨다고 생각한다.
    • 그러나 이 수치에는 고유한 '특징'이나 '반복되는 것'이 있다. 이를 분포의 특성이라고 한다.
    • 분포의 특성을 도출하기 위해 사용하는 방법통계이다.
  • 축약(summary)
    • 데이터로 나열되어 있는 많은 숫자를 어떤 기준으로 정리정돈해서 의미있는 정보만을 추출하는 것으로 두 가지 방법을 사용한다.
    1. 그래프로 만들어서 그 특징을 파악할 수 있도록 한다.
    2. 숫자 하나로 특징을 대표하도록 한다.
    •  통계량(statistic): 특징을 대표하는 숫자


히스토그램(막대그래프) 만들기

  • 히스토그램을 만들기 위해서는 도수분포표를 만들어야 한다.

도수분포표 만들기

  1. 데이터 중에서 수치가 가장 큰 값(최대값)과 가장 작은 값(최소값)을 찾는다.
  2. 최대값부터 최소값까지 포함되도록 하여 구간을 자르기 좋게 대강의 범위를 만들고, 그 범위 내에서 5~8개 정도의 작은 범위(구간)으로 나눈다. 이렇게 나눈 범위(구간)을 '계급(class)'이라고 한다.
  3. 각 계급을 대표하는 수치를 정한다. 기본적으로 아무 값이나 대표로 정해도 되지만, 일반적으로 가낭 가운데 값을 선택하는 경우가 많다. 이 것을 계급값(class value)이라고 한다.
  4. 각 계급에 들어가 있는 데이터의 총 개수를 센다. 이 것을 도수(frequency)라고 한다.
  5. 각 계급의 도수가 전체에서 차지하는 비율을 계산한다. 이 것을 상대도수(relative frequency)라고 한다. 상대도수는 합하면 1이 된다.
  6. 어느 계급까지의 도수를 모두 합한다. 이 것을 누적도수(cumulative frequency)라고 한다. 최종 누적도수는 데이터의 전체 개수와 같다.

계급

계급값

도수

상대도수

누적도수

 141 ~ 145

143

1

0.0125

1

 146 ~ 150

 148

 6

 0.0750

 7

 151 ~ 155

 153

 19

 0.2375

 26

 156 ~ 160

 158

 30

 0.3750

 56

 161 ~ 165

 163

 18

 0.2250

 74

 166 ~ 170

 168

 6

 0.0750

 80

height.csv



도수분포표의 특징

  • 도수분포표로 잃어버리는 정보가 있다.

    • 데이터에 나타나 있던 수치들 자체
    • 예를 들어, 4번째 계급(156~160)의 도수를 통해 30개의 데이터가 있다는 것을 알 수 있지만, 그 세부적인 데이터가 각각 어떤 수치였는지 알 수 없다.
      • 도수분포표를 만드는 과정에서 발생하는 축약으로 인한 것
  • 도수분포표로 얻을 수 있는 정보가 있다.
    • 도수를 통해 다음과 같은 데이터의 특징을 발견할 수 있다.

      1. 키(데이터)는 균등하게(모두 똑같이) 분포하지 않고, 어느 한 곳(구체적으로 156~160의 계급)에 집중되어 있다.
      2. 집중되어 있는 곳을 기점으로, 작은 편에 속하든지 큰 편에 속하는 추이를 보인다. 즉, 데이터의 분포가 어느 한 곳을 축으로 좌우 대칭성이 있다.

    • 학생들의 키가 정해지게 된 구조 뒤에는 어떤 '불확실성'이 있지만, 여기에는 고유한 특징이 있다.
      1. 어떠한 수치든지 가능한 것은 아니다.
      2. 어느 한 키(158cm) 주변에 집중되어 있다.
      3. 158cm를 기점으로 해서 큰 편과 작은 편은 '수치가 별로 보이지 않는다는 점에서 서로 비슷'하다.
    • 이런 특징은 데이터 자체를 그냥 보았을 때에는 몰랐던 정보다.
  • 데이터의 축약은 데이터의 세부적인 수치를 희생하지만, 이 희생을 통해 데이터의 분포와 그 이면에 있는 특징들이 돋보이게 된다.
    • 데이터의 축약은 요점을 정리하는 작업


import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc

path = "c:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=path).get_name()
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['figure.figsize'] = (10, 8)
plt.style.use('seaborn-darkgrid')

df = pd.read_csv('./height.csv')

sns.set(color_codes=True)

ax = sns.distplot(df['height(cm)'], kde=False)

plt.xlabel('키(cm)', fontproperties=font_name)
plt.ylabel('도수', fontproperties=font_name)
plt.title('학생 80명 키의 막대그래프', fontproperties=font_name)

plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)

major_y_ticks = np.arange(0, 25, 5)
minor_y_ticks = np.arange(0, 25, 1)
ax.set_yticks(major_y_ticks)
ax.set_yticks(minor_y_ticks, minor=True)
ax.grid(which='both')
ax.grid(which='minor', alpha=0.5)
ax.grid(which='major', alpha=1)

plt.show()


ax = sns.distplot(df['height(cm)'], kde=True)

plt.xlabel('키(cm)', fontproperties=font_name)
plt.ylabel('상대도수', fontproperties=font_name)
plt.title('학생 80명 키의 상대도수분포표', fontproperties=font_name)

plt.tight_layout(pad=0.4, w_pad=0.5, h_pad=1.0)

plt.show()



출처: 세상에서 가장 쉬운 통계학 입문

'탐색적 데이터 분석 (Exploratory Data Analysis)' 카테고리의 다른 글

탐색적 데이터 분석의 소개  (0) 2019.08.30
평균의 의미  (0) 2019.07.24
통계학이란?  (0) 2019.07.22
데이터 위치 추정  (0) 2019.04.26
용어 정리  (0) 2019.04.26

+ Recent posts