
python에서 상관계수는 numpy의 corrcoef() 함수를 이용해 구현할 수 있다.
위의 ex1과 ex2를 각각 코드를 통해 구현해보았다.
예제 1
[In]
# 상관계수
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x = np.array([50, 70, 40, 60, 80]) # 수학 점수
y = np.array([60, 80, 50, 50, 70]) # 영어 점수
# 방법 1 : 직접 구하기(공분산, 표준편차 이용)
x_avg = np.average(x)
y_avg = np.average(y)
x_std = np.std(x)
y_std = np.std(y)
cov_xy = np.average((x - x_avg) * (y - y_avg))
corr_coef_xy = cov_xy / (x_std * y_std)
print("- 상관계수 \n", corr_coef_xy)
print()
# 방법 2 : corrcoef() 함수를 이용해 구하기
corr_coef_xy = np.corrcoef(x, y)
print("- 상관계수 \n", corr_coef_xy)
plt.scatter(x, y)
plt.xlabel('x', size = 14)
plt.ylabel('y', size = 14)
plt.grid()
plt.show()
[Out]
- 상관계수
0.7276068751089989
- 상관계수
[[1. 0.72760688]
[0.72760688 1. ]]

corrcoef() 함수의 결과는 2x2 행렬로 나오게 되는데, 이 때 1x2 요소와 2x1 요소에 각각 상관계수가 존재하게 된다.
상관계수가 1에 가까우므로 x와 y는 양의 상관관계를 나타내는 것을 알 수 있다.
예제 2
[In]
# 상관계수
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
x = np.array([50, 70, 40, 60, 80]) # 수학 점수
z = np.array([60, 40, 60, 40, 30]) # 국어 점수
# 방법 1 : 직접 구하기(공분산, 표준편차 이용)
x_avg = np.average(x)
z_avg = np.average(z)
x_std = np.std(x)
z_std = np.std(z)
cov_xz = np.average((x - x_avg) * (z - z_avg))
corr_coef_xz = cov_xz / (x_std * z_std)
print("- 상관계수 \n", corr_coef_xz)
print()
# 방법 2 : corrcoef() 함수를 이용해 구하기
corr_coef_xz = np.corrcoef(x, z)
print("- 상관계수 \n", corr_coef_xz)
plt.scatter(x, z)
plt.xlabel('x', size = 14)
plt.ylabel('y', size = 14)
plt.grid()
plt.show()
[Out]
- 상관계수
-0.9428090415820634
- 상관계수
[[ 1. -0.94280904]
[-0.94280904 1. ]]

이번에는 상관계수가 -1에 가까으므로, x와 y는 음의 상관관계를 나타내는 것을 알 수 있다.