# 1. machine learning
# 명시적으로 프로그래밍을 하지 않고도 컴퓨터가 학습할 수 있는 능력을 갖게 하는 것
# 머신 러닝은 명시적인 프로그래밍을 통해서가 아닌 데이터로부터 시스템을 학습할 수 있는 AI의 한 형태
# 알고리즘을 통해 학습 데이터를 수집한 후 해당 데이터를 기반으로 더 정확한 모델을 생성할 수 있음
# 머신 러닝 모델은 데이터를 이용하여 머신 러닝 알고리즘을 트레이닝시킬 때 생성되는 출력
# 학습을 마친 후 모델에 입력 내용을 제공하면 결과물을 받게 됨
# 예를 들면, 예측 알고리즘에서는 예측 모델이 생성됨
# 그런 다음 예측 모델에 데이터를 제공하면 해당 모델을 학습한 데이터를 기반으로 예측 정보를 받게 됨

# 분산
# 자료가 얼마나 흩어졌는지 숫자로 표현
# 각 관측값이 자료의 평균으로부터 떨어진 정도
from statistics import variance
variance()

# 표준편차
# 분산의 단위 = 관측값의 단위의 제곱
# 분산의 양의 제곱근은 관측값과 단위가 일치
from statistics import stdev
stdev()

# 히스토그램
# 수치형 자료를 일정한 범위를 갖는 범주로 나누고 막대그래프와 같은 방식으로 그림

# 특징
# 자료의 분포를 알 수 있음
# 계급구간과 막대의 높이로 그림
# 도수, 상대도수를 막대 높이로 사용
plt.hist()


# 범주형 자료 살펴보기
# 범주형 데이터는 몇 개의 범주로 나누어진 자료

# 범주의 크기가 의미 없다면 명목형 자료
# - 수치 맵핑 방식
# - 더미(Dummy) 기법
# 크기가 의미 있다면 순서형 자료
# - 수치 맵핑 방식


# 수치형 자료 살펴보기
# 크기를 갖는 수치형 값으로 이루어진 데이터
# 머신러닝의 입력으로 바로 사용할 수 있으나, 모델의 성능을 높이기 위해서 데이터 변환이 필요
# 대표적인 수치형 자료 변환 방식
# 1) 스케일링(Scaling) - 정규화(Normalization), 표준화(Standardization)
# 2) 범주화

# 수치형 자료 변환하기 – 정규화 방식
# 스케일링(Scaling)
# • 변수 값의 범위 및 크기를 변환하는 방식
# • 변수(feature) 간의 범위가 차이가 나면 사용
# 1) 정규화(Normalization)
#    변수 𝑋 를 정규화한 값 𝑋′

# 수치형 자료 변환하기 – 표준화 방식
# 스케일링(Scaling)
# • 변수 값의 범위 및 크기를 변환하는 방식
# • 변수(feature) 간의 범위가 차이가 나면 사용
# 2) 표준화(Standardization)
#    변수 𝑋 를 표준화한 값 𝑋′

# 수치형 자료 변환하기 - 범주화
# 범주화
# • 변수의 값보다 범주가 중요한 경우 사용


# 결측값(Missing data) 처리하기
# 일반적인 머신러닝 모델의 입력 값으로 결측값을 사용할 수 없음. 따라서 Null, None, NaN 등의 결측값을 처리 해야함
# 대표적인 결측값 처리 방식
# 1) 결측값이 존재하는 샘플 삭제
# 2) 결측값이 많이 존재하는 변수 삭제
# 3) 결측값을 다른 값으로 대체

# 이상치(Outlier) 처리하기
# 이상치가 있으면, 모델의 성능을 저하할 수 있음. 이상치는 일반적으로 전 처리 과정에서 제거하며, 어떤 값이 이상치 인지 판단하는 기준이 중요함
# 이상치 판단 기준 방법
# 1) 통계 지표(카이제곱 검정, IQR 지표 등)를 사용하여 판단
# 2) 데이터 분포를 보고 직접 판단
# 3) 머신러닝 기법을 사용하여 이상치 분류
