import pandas as pd
study_data = {
"공부시간": [2, 4, 6, 8, 10],
"시험점수": [65, 70, 85, 90, 98],
"수면시간": [8, 7, 6, 5, 4]
}
df = pd.DataFrame(study_data)
# 모든 변수 간의 상관계수 계산 (-1 ~ 1 사이의 값)
correlation = df.()
print("--- 변수 간 상관계수 ---")
print(correlation)
힌트: "상관관계"를 뜻하는 영어 단어 correlation의 약자인 corr() 함수를 사용합니다.
공부시간 시험점수 수면시간 공부시간 1.000000 0.985611 -1.000000 시험점수 0.985611 1.000000 -0.985611 수면시간 -1.000000 -0.985611 1.000000
corr()로 상관관계 분석하기
corr()는 데이터프레임의 모든 숫자 열 사이의 상관계수를 계산합니다.
상관계수란?
두 변수가 함께 변하는 정도를 -1에서 1 사이의 숫자로 나타낸 것입니다.
| 상관계수 | 의미 | 예시 |
|---|---|---|
| +1에 가까움 | 강한 양의 상관 | 하나가 ↑ 다른 것도 ↑ |
| 0에 가까움 | 상관 없음 | 서로 무관 |
| -1에 가까움 | 강한 음의 상관 | 하나가 ↑ 다른 것은 ↓ |
결과 해석
공부시간 시험점수 수면시간
공부시간 1.000 0.986 -1.000
시험점수 0.986 1.000 -0.986
수면시간 -1.000 -0.986 1.000
| 관계 | 상관계수 | 해석 |
|---|---|---|
| 공부시간 ↔ 시험점수 | +0.986 | 공부할수록 점수 올라감 (강한 양의 상관) |
| 공부시간 ↔ 수면시간 | -1.000 | 공부할수록 수면 줄어듦 (완벽한 음의 상관) |
| 시험점수 ↔ 수면시간 | -0.986 | 수면이 줄수록 점수 올라감 (강한 음의 상관) |
대각선은 항상 1.0
자기 자신과의 상관계수는 항상 1.0입니다 (완벽한 양의 상관).
공부시간 시험점수 수면시간
공부시간 [1.0] ... ...
시험점수 ... [1.0] ...
수면시간 ... ... [1.0]
↑ 대각선은 항상 1.0
상관계수 강도 기준
| 절대값 범위 | 강도 |
|---|---|
| 0.0 ~ 0.3 | 약한 상관 |
| 0.3 ~ 0.7 | 보통 상관 |
| 0.7 ~ 1.0 | 강한 상관 |
주의: 상관관계 ≠ 인과관계
아이스크림 판매량 ↑ → 익사 사고 ↑ (상관계수 높음!)
하지만 아이스크림이 익사를 일으키는 것이 아닙니다. 기온이라는 제3의 변수가 둘 다에 영향을 줄 뿐입니다.
💡 핵심: 상관관계는 "함께 변하는 경향"일 뿐, "원인과 결과"를 의미하지는 않습니다.