본문 바로가기
개념정리/Python

▷ Python 1차원 데이터 정리(PART 2) - 편차, 분산, 표준편차, 표준화, 편찻값

by 화영쌤 2023. 3. 18.
728x90

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from plot_util import plot_var_interact, plot_std_interact

# Jupyter Notebok 의 출력을 소수점 이하 3자리로 제한
%precision 3
%matplotlib inline

# DataFrame의 출력을 소수점 이하 3자리로 제한
pd.set_option('display.float_format','{:.3f}'.format)
# 데이터 불러오기
df = pd.read_csv('data/ch2_scores_em.csv',index_col = 'student number')

# DataFrame 작성하기

# 학번 순서대로 10명의 영어 점수를 array 데이터 구조 scores에 저장
scores = np.array(df['english'])[:10]
# DataFrame scores_df 작성
scores_df = pd.DataFrame({'score':scores}, 
                         index=pd.Index(['A','B','C','D','E','F','G','H','I','J'],
                                         name = 'student'))

▷ 편차

  • 각 데이터가 평균으로부터 떨어져 있는 정도
  • 편차의 평균은 0
mean = np.mean(scores)
deviation = scores-mean
deviation


# 복사본 만들기 - 깊은 복사 
# 얕은 복사: 원본 데이터가 변하면 똑같이 변함 & 깊은 복사: 복사 당시의 데이터프레임 상태만 복사
summary_df = scores_df.copy()
summary_df['deviation'] = deviation
summary_df


summary_df.mean()


▷ 분산

  • 편차 제곱의 평균값
  • 변량들이 퍼져있는 정도를 의미
# 여기서 deviation 은 편차를 뜻함.
np.mean(deviation ** 2)

# numpy의 var 함수 이용
np.var(scores)

scores_df.var(ddof=0)


# DataFrame 작성하기
summary_df['square of deviation']=np.square(deviation)


summary_df.mean()


plot_var_interact(scores[:4])

  • 여기서 분산은 중앙 정사각형의 면적
  • 중앙의 가로선& 세로선 : 4명의 평균점수
  • A,B,C,D : 각각은 시험점수, 각 회색의 정사각형: 편차 제곱, 정사각형의 평균: 중앙의 정사각형

▷ 표준편차

  • 분산에 제곱근을 취한 것
# 여기서 sqrt는 제곱근, ddof 는 자유도를 뜻함.
np.sqrt(np.var(scores,ddof=0))

# std는 표준편차함수
np.std(scores,ddof=0)

# 표준편차 출력하기
scores_df.std(ddof=0)


plot_std_interact(scores)


▷ 표준화

  • 상대적 결과가 다르므로 통일된 지표로 변환하는 정규화
  • 데이터에서 평균을 빼고 표준편차로 나눔.
  • 표준화된 데이터는 표준화 변량 혹은 Z로 나타냄.
z=(scores-np.mean(scores))/np.std(scores)
# z의 평균값과 표준편차 구하기
np.round(np.mean(z),3),np.round(np.std(z,ddof=0))


▷ 편찻값

  • 평균이 50, 표준편차가 10이 되도록 정규화한 값
z = 50+10*(scores-np.mean(scores))/np.std(scores)
# z의 평균값과 표준편차 구하기
np.mean(z), np.std(z)


# 점수와 편찻값의 관계 : 어떤 학생이 평균 성적을 얻었고, 어떤 학생이 우수한 성적을 얻었는지 알 수 있음.
scores_df['deviation value'] = z
scores_df