본문 바로가기
AI / DL/엘리스 AI 데이터 분석 트랙

[AI 데이터 분석] 머신러닝 시작하기 01. 자료 형태의 이해

by bri9htstar 2022. 10. 6.

자료의 형태

머신러닝은 데이터라는 디지털 자료를 바탕으로 수행하는 분석 방식이다. 자료의 형태를 파악함은 머신러닝을 사용하기 위한 필수 과정으로 아래 물음의 답을 얻을 수 있다.

  • 데이터가 어떻게 구성되어 있을까?
  • 어떤 머신러닝 모델을 사용해야 할까?
  • 데이터 전 처리를 어떻게 해야 할까?

자료 형태 구분

수치형 자료는 양적 자료(Numerical Data)라고도 불린다. 수치로 측정한 가능한 자료다. (키, 몸무게, 시험 점수 등)

범주형 자료는 질적 자료(Qualitative Data)라고도 불린다. 수치로 측정이 불가능한 자료다. (성별, 지역, 혈액형 등)

둘을 구분할 때 자료의 숫자 표현 가능 여부로 구분하면 안 된다. 범주형 자료가 숫자로 표현되는 경우도 있기 때문이다. 남녀 성별 구분 시 남자를 1, 여자를 0으로 표현하는 경우, 숫자로 표현 되었으나 범주형 자료이다. 수치형 자료를 범주형 자료로 변환하는 경우도 있다. 나이 구분 시, 나이 값은 수치형 자료지만 10 ~ 19세, 20 ~ 29세 등 나이 대에 따라 구간화 하면 범주형 자료가 된다.

 

범주형 자료

범주형 자료는 다수의 범주가 반복해서 관측되거나, 관측값의 크기보다 포함되는 범주에 관심이 있으면 범주형 자료의 요약이 필요하다. 먼저 각 범주에 속하는 관측값의 개수를 측정하고, 전체에서 차지하는 각 범주의 비율을 파악하면, 효율적으로 범주 간의 차이점을 비교 가능하다.

 

도수(Frequency)는 각 범주에 속하는 관측값의 개수로, value_counts()로 구할 수 있다.

상대도수(Relative Frequency)는 도수를 자료의 전체 개수로 나눈 비율로, value_counts(normalize=True)로 구할 수 있다.

도수분포표(Frequency Table)은 범주형 자료에서 범주와 그 범주에 대응하는 도수, 상대도수를 나열해 표로 만든 것이다.

import pandas as pd 

# drink 데이터
drink = pd.read_csv("drink.csv")

#도수 계산
drink_freq = drink[drink["Attend"] == 1]["Name"].value_counts()

print("도수분포표")
print(drink_freq)

 

수치형 자료

수치형 자료는 범주형 자료와 달리 수치로 구성되어 있기에 통계값을 사용한 요약이 가능하다. 시각적 자료로는 이론적 근거 제시가 쉽지 않은 단점을 보완한다. 많은 양의 자료를 의미 있는 수치(통계값)로 요약하여 대략적인 분포상태를 파악 가능하다. 범주형 자료에서는 그래프나 도수분포표를 그려야 파악이 가능했었지만, 수치형 자료는 통계값을 통해 쉽게 유추할 수 있다.

 

평균(Mean)은 관측값들을 대표할 수 있는 통계값이다. 수치형 자료의 통계값 중 가장 많이 사용된다. 모든 관측값의 합을 자료의 개수로 나눈 것이다.

평균 구하는 법

관측값의 산술평균으로 사용된다. 통계에서 기초적인 통계 수치로 가장 많이 사용된다. 극단적으로 큰 값이나 작은 값의 영향을 많이 받는데 계산 수식에서 모든 값을 더하기 때문에 평균치가 왜곡되어 나타날 수도 있다.

평균만으로 분포를 파악하기에 부족해서 분산, 표준편차 등을 퍼진 정도의 측도로 사용한다.

 

분산(Variance) 자료가 얼마나 흩어졌는지 숫자로 표현한다. 각 관측값이 자료의 평균으로부터 떨어진 정도를 의미한다.

표준편차는 분산의 양의 제곱근으로 구한다. 분산은 관측값의 단위의 제곱으로 구하기 때문에 관측값의 단위와 불일치하다. 분산의 양의 제곱근은 관측값과 단위가 일치하기 때문에 사용한다.

분산이 커지면 표준편차도 커지고, 작아지면 같이 작아진다.

import numpy as np
import matplotlib.pyplot as plt

# 카페인 데이터
coffee = np.array([202,177,121,148,89,121,137,158])

fig, ax = plt.subplots()

"""
1. 히스토그램을 그리는 코드를 작성해 주세요
"""
plt.hist(coffee)



# 히스토그램을 출력합니다.
plt.show()
fig.savefig("hist_plot.png")

히스토그램으로 다음과 같이 요약이 가능하다. plt.hist(coffee, bins =3) 처럼 bins를 이용해 히스토그램을 구성하는 계급의 개수를 다르게 할 수도 있다.

댓글