728x90
반응형
SMALL
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
데이터 불러오기 (pd.read_csv)
python 파일 경로에 data3 폴더 만든 후 다음의 ch2_scores_em.csv파일 넣어놓기
df = pd.read_csv('data3/ch2_scores_em.csv',
index_col='student number')
df.head()
# 이해를 위해 10개만 따로 발췌해서 보도록 하자
en_scores = np.array(df['english'])[:10]
ma_scores = np.array(df['mathematics'])[:10]
scores_df = pd.DataFrame({'english':en_scores,
'mathematics':ma_scores},
index=pd.Index(['A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J'],
name='student'))
scores_df
plt.xlabel('english')
plt.ylabel('mathematics')
plt.scatter(scores_df['english'],scores_df['mathematics'],color='magenta') # scatter plot
plt.axhline(scores_df['mathematics'].mean(),color='r',ls='--') # h : 수평
plt.axvline(scores_df['english'].mean(),color='b',ls='--') # v : 수직
plt.show()
공분산
- 두 데이터 사이의 관계를 나타내는 지표 (편차곱의 평균)
- 양의 값: 면적이 양의 값이 되는 데이터가 많다 ( + 끼리, 또는 - 끼리 곱한다)
- 음의 값: 면적이 음의 값이 되는 데이터가 많다
- 0 에 가까우면 무상관
summary_df = scores_df.copy()
summary_df['english_deviation'] =\
summary_df['english'] - summary_df['english'].mean()
summary_df['mathematics_deviation'] =\
summary_df['mathematics'] - summary_df['mathematics'].mean()
summary_df['product of deviations'] =\
summary_df['english_deviation'] * summary_df['mathematics_deviation']
summary_df
eng =summary_df['english']
math =summary_df['mathematics']
eng # series
[OUT] :
student
A 42
B 69
C 56
D 41
E 57
F 48
G 65
H 49
I 65
J 58
Name: english, dtype: int64
math # series
[OUT] :
student
A 65
B 80
C 63
D 63
E 76
F 60
G 81
H 66
I 78
J 82
Name: mathematics, dtype: int64
1. 함수로 만들어서 구하기
def covariance(X, Y):
ax, ay = X.mean(), Y.mean()
data = [round((ax-x)*(ay-y),2) for x, y in zip(X, Y)] # product of deriviations
print('data:',data)
return sum(data) / len(X)
covariance(eng,math)
[OUT] :
data: [83.2, 120.4, -8.4, 117.6, 9.2, 79.8, 96.0, 32.4, 66.0, 31.8]
62.8
covariance(math,eng)
[OUT] :
data: [83.2, 120.4, -8.4, 117.6, 9.2, 79.8, 96.0, 32.4, 66.0, 31.8]
62.8
covariance(math,math)
[OUT] :
data: [40.96, 73.96, 70.56, 70.56, 21.16, 129.96, 92.16, 29.16, 43.56, 112.36]
68.44
covariance(eng,eng)
[OUT] :
data: [169.0, 196.0, 1.0, 196.0, 4.0, 49.0, 100.0, 36.0, 100.0, 9.0]
86.0
2. 넘파이 함수를 이용해서 구하기
# ddof=0 : 모집단에서 추출하므로 n으로 나눔
# ddof=1 :표본집단에서 추출하므로 n-1로 나눔(default)
np.cov(eng,math,ddof=0)
# (영영,영수,
# 수영,수수)
[OUT] :
array([[86. , 62.8 ],
[62.8 , 68.44]])
eng = summary_df['english'].values
eng.var() # 영영 공분산은 영어점수의 분산과 같다(당연)
[OUT] :
86.0
상관계수
- 단위에 의존하지 않는 상관 관계 지표 (공분산을 편차곱으로 나눈다, -1 ~ 1 의 값을 가진다)
- 공분산 수치를 표준화함
np.cov(eng,math,ddof=0)[0,1]
[OUT] :
62.800000000000004
np.cov(eng,math,ddof=0) / (np.std(eng)*np.std(math))
[OUT] :
array([[1.12097061, 0.81856923],
[0.81856923, 0.89208405]])
# 상관관계
np.corrcoef(eng,math)
[OUT] :
array([[1. , 0.81856923],
[0.81856923, 1. ]])
scores_df.corr()
review
- 공분산, 상관계수는 표준화 여부의 차이
728x90
반응형
LIST
'코딩으로 익히는 Python > 통계' 카테고리의 다른 글
[Python] 5. 모집단과 표본 : 모평균 추정, 중심극한정리 (0) | 2021.01.17 |
---|---|
[Python] 4. 회귀 : cost(mse) test, gradient, scipy.stats 예제 (0) | 2021.01.17 |
[Python] 2. 대표값, 산포도, 정규화, 도수 (0) | 2021.01.17 |
[Python] 1. 데이터 종류 : 이산 변수, 연속 변수 (0) | 2021.01.17 |
[Python] 0. SciPy Library(사이파이 라이브러리) 구조 : 확률분포 클래스, 모수 지정, 확률분포 매서드 (0) | 2021.01.17 |