# 공분산 / 상관계수
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rc('font', family = 'malgun gothic')
df = pd.read_csv('../testdata/drinking_water.csv')
print(df.head(3))
# 표준편차
print(np.std(df['친밀도']))
print(np.std(df['적절성']))
print(np.std(df['만족도']))
# 공분산
print('공분산---') # numpy 이용(2개씩밖에 못 넣음)
print(np.cov(df['친밀도'], df['적절성']))
print(np.cov(df['친밀도'], df['만족도']))
print()
print(df.cov()) # pandas 이용
print('상관계수---') # numpy 이용(2개씩밖에 못 넣음)
print(np.corrcoef(df['친밀도'], df['적절성']))
print(np.corrcoef(df['친밀도'], df['만족도']))
print()
print(df.corr()) # pandas 이용
print(df.corr(method='pearson')) # 등간, 비율 척도. 정규성을 따름
print(df.corr(method='spearman')) # 서열 척도. 정규성을 따르지 않음.
print(df.corr(method='kendall')) # spearman과 유사
# 만족도에 대한 다른 특성 사이의 상관관계 출력
co_re = df.corr()
print(co_re['만족도'].sort_values(ascending = False)) # 만족도만 따로 호출
print()
# 시각화
df.plot(kind = 'scatter', x = '만족도', y = '적절성')
plt.show()
from pandas.plotting import scatter_matrix
attr = ['친밀도', '적절성', '만족도']
scatter_matrix(df[attr], figsize = (10, 6))
plt.show()
# 상관관계 시각화 : heatmap
import seaborn as sns
sns.heatmap(df.corr())
plt.show()
print()
# heatmap에 텍스트 표시 추가사항 적용해 보기
corr = df.corr()
# Generate a mask for the upper triangle
mask = np.zeros_like(corr, dtype=np.bool) # 상관계수값 표시
mask[np.triu_indices_from(mask)] = True
# Draw the heatmap with the mask and correct aspect ratio
vmax = np.abs(corr.values[~mask]).max()
fig, ax = plt.subplots() # Set up the matplotlib figure
sns.heatmap(corr, mask=mask, vmin=-vmax, vmax=vmax, square=True, linecolor="lightgray", linewidths=1, ax=ax)
for i in range(len(corr)):
ax.text(i + 0.5, len(corr) - (i + 0.5), corr.columns[i], ha="center", va="center", rotation=45)
for j in range(i + 1, len(corr)):
s = "{:.3f}".format(corr.values[i, j])
ax.text(j + 0.5, len(corr) - (i + 0.5), s, ha="center", va="center")
ax.axis("off")
plt.show()
<console>
친밀도 적절성 만족도
0 3 4 3
1 3 3 2
2 4 4 4
0.968505126935272
0.8580277077642035
0.8271724742228969
공분산---
[[0.94156873 0.41642182]
[0.41642182 0.73901083]]
[[0.94156873 0.37566252]
[0.37566252 0.68681588]]
친밀도 적절성 만족도
친밀도 0.941569 0.416422 0.375663
적절성 0.416422 0.739011 0.546333
만족도 0.375663 0.546333 0.686816
상관계수---
[[1. 0.49920861]
[0.49920861 1. ]]
[[1. 0.46714498]
[0.46714498 1. ]]
친밀도 적절성 만족도
친밀도 1.000000 0.499209 0.467145
적절성 0.499209 1.000000 0.766853
만족도 0.467145 0.766853 1.000000
친밀도 적절성 만족도
친밀도 1.000000 0.499209 0.467145
적절성 0.499209 1.000000 0.766853
만족도 0.467145 0.766853 1.000000
친밀도 적절성 만족도
친밀도 1.000000 0.511078 0.501201
적절성 0.511078 1.000000 0.748510
만족도 0.501201 0.748510 1.000000
친밀도 적절성 만족도
친밀도 1.000000 0.466729 0.459353
적절성 0.466729 1.000000 0.703214
만족도 0.459353 0.703214 1.000000
만족도 1.000000
적절성 0.766853
친밀도 0.467145
Name: 만족도, dtype: float64
만족도와 적절성의 시각화
친밀도, 적절성, 만족도의 시각화
상관관계 시각화(heatmap 사용)
상관관계 시각화(heatmap 사용) 숫자 표시