Python을 사용한 데이터 분석에서 상관관계 및 히트맵 이해하기
목차
- 소개
- 상관관계란 무엇인가?
- Python에서 상관관계 계산
- 히트맵 소개
- Seaborn 히트맵으로 상관관계 시각화
- 히트맵 해석하기
- 실용적 응용: 아이리스 데이터셋 예제
- 코드 분석
- 결론
- 참고문헌 및 추가 읽을거리
소개
데이터 시각화는 효과적인 데이터 분석의 초석입니다. 다양한 시각화 기법 중에서 히트맵은 복잡한 데이터 매트릭스를 직관적이고 쉽게 해석할 수 있는 방식으로 표현하는 능력으로 돋보입니다. 상관관계 매트릭스와 결합될 때, 히트맵은 여러 변수 간의 복잡한 관계를 동시에 드러낼 수 있습니다.
이 글에서는 Python을 사용하여 상관관계 분석을 수행하고 히트맵을 사용하여 결과를 시각화하는 방법을 탐구합니다. 기계 학습과 통계에서 고전적인 데이터셋인 아이리스 데이터셋을 활용하여, 상관관계를 계산하고 통찰력 있는 시각화를 생성하는 과정을 단계별로 살펴보겠습니다.
상관관계란 무엇인가?
정의
상관관계는 두 변수 간의 관련 정도를 정량화합니다. 상관계수는 -1에서 +1까지의 값을 가지며, 다음을 나타냅니다:
- +1은 완벽한 양의 상관관계를 나타냅니다: 한 변수가 증가함에 따라 다른 변수도 비례하여 증가합니다.
- -1은 완벽한 음의 상관관계를 나타냅니다: 한 변수가 증가함에 따라 다른 변수는 비례하여 감소합니다.
- 0은 상관관계가 없음을 나타냅니다: 두 변수 간에 분명한 선형 관계가 존재하지 않습니다.
상관관계의 유형
- 양의 상관관계: 두 변수가 동일한 방향으로 움직입니다.
- 음의 상관관계: 두 변수가 반대 방향으로 움직입니다.
- 상관관계 없음: 두 변수 간에 예측 가능한 패턴이 존재하지 않습니다.
이러한 관계를 이해하는 것은 특징 선택, 예측 모델에서 다중공선성 식별, 데이터 구조에 대한 통찰력을 얻는 데 중요합니다.
Python에서 상관관계 계산하기
Python은 상관관계를 쉽게 계산할 수 있는 Pandas와 NumPy와 같은 강력한 라이브러리를 제공합니다. Pandas의 DataFrame.corr()
메소드는 NA/null 값을 제외하고 열 간의 쌍별 상관관계를 계산합니다.
예제:
1 2 3 4 5 6 7 8 9 |
import pandas as pd # Load the Iris dataset names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'] iris = pd.read_csv('iris.data', names=names) # Calculate correlation matrix correlation_matrix = iris.corr() print(correlation_matrix) |
출력:
sepal_length | sepal_width | petal_length | petal_width | |
---|---|---|---|---|
sepal_length | 1.000000 | -0.109369 | 0.871754 | 0.817954 |
sepal_width | -0.109369 | 1.000000 | -0.420516 | -0.356544 |
petal_length | 0.871754 | -0.420516 | 1.000000 | 0.962757 |
petal_width | 0.817954 | -0.356544 | 0.962757 | 1.000000 |
히트맵 소개
히트맵이란?
히트맵은 개별 값을 색상으로 표시하는 데이터의 그래픽 표현입니다. 상관관계 매트릭스의 맥락에서, 히트맵은 변수 간의 관계를 시각적으로 개관하여 패턴, 상관관계의 강도 및 방향을 식별하기 쉽게 만듭니다.
왜 히트맵을 사용할까?
- 명확성: 복잡한 데이터 매트릭스를 쉽게 해석할 수 있는 형식으로 단순화합니다.
- 효율성: 강한 상관관계와 약한 상관관계를 신속하게 강조합니다.
- 시각화: 색상 그라데이션을 통해 데이터 관계에 대한 이해를 향상시킵니다.
Seaborn 히트맵으로 상관관계 시각화
Seaborn은 Matplotlib을 기반으로 구축된 Python 데이터 시각화 라이브러리로, 매력적이고 유익한 통계 그래픽을 그리기 위한 고수준의 인터페이스를 제공합니다. Seaborn의 heatmap()
함수는 상관관계 매트릭스를 효과적으로 시각화하도록 특별히 설계되었습니다.
예제:
1 2 3 4 5 6 7 8 9 10 11 |
import seaborn as sns import matplotlib.pyplot as plt # Set the style for the heatmap sns.set() # Create the heatmap sns.heatmap(correlation_matrix, annot=True, fmt='.2f') # Display the heatmap plt.show() |
매개변수:
correlation_matrix
: 시각화할 데이터입니다.annot=True
: 각 셀에 상관계수를 주석으로 표시합니다.fmt='.2f'
: 주석 텍스트를 소수점 두 자리로 포맷합니다.
히트맵 해석하기
히트맵이 생성된 후에는 그 요소들을 이해하는 것이 중요합니다:
- 색상 강도: 상관관계의 강도를 나타냅니다.
- 어두운 색상: 더 강한 양의 상관관계를 표시합니다.
- 밝은 색상: 더 강한 음의 상관관계를 표시합니다.
- 주석 값: 정밀한 해석을 위해 정확한 상관계수를 제공합니다.
- 대각선 선: 변수 자체와의 완벽한 상관관계를 나타내므로 항상 1.00의 상관관계를 보여줍니다.
주요 통찰:
- 높은 양의 상관관계 (예: 꽃받침 길이와 꽃잎 너비): 꽃받침 길이가 증가함에 따라 꽃잎 너비도 증가하는 경향이 있음을 시사합니다.
- 높은 음의 상관관계 (예: 꽃받침 너비와 꽃받침 길이): 한 변수가 증가함에 따라 다른 변수가 감소하는 경향이 있음을 나타냅니다.
- 낮거나 거의 없는 상관관계: 변수 간에 무시할 만하거나 선형적인 관계가 없음을 의미합니다.
실용적 응용: 아이리스 데이터셋 예제
아이리스 데이터셋은 분류 알고리즘을 시연하는 데 있어 그 단순성과 명확성으로 데이터 과학에서 필수적인 자료입니다. 이 데이터셋은 세 종의 아이리스 꽃으로부터 150개의 샘플로 구성되며, 각 샘플마다 네 가지 특성이 측정됩니다:
- 꽃받침 길이
- 꽃받침 너비
- 꽃잎 길이
- 꽃잎 너비
이러한 특성 간의 상관관계를 분석함으로써 데이터셋의 구조에 대한 귀중한 통찰을 얻고, 머신러닝 모델의 특징 선택에 정보를 제공할 수 있습니다.
코드 분석
아래는 아이리스 데이터셋을 사용하여 상관관계 분석과 히트맵 시각화를 구현하는 단계별 가이드입니다.
1. 필요한 라이브러리 가져오기
1 2 3 4 5 6 7 8 |
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # Configure seaborn sns.set() %matplotlib inline |
2. 아이리스 데이터셋 불러오기
1 2 3 4 5 6 7 8 |
# Define column names names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'] # Load dataset iris = pd.read_csv('iris.data', names=names) # Display the first few rows print(iris.head()) |
샘플 출력:
sepal_length | sepal_width | petal_length | petal_width | class |
---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
3. 상관관계 매트릭스 계산하기
1 2 3 4 5 |
# Compute correlation matrix correlation_matrix = iris.corr() # Display the correlation matrix print(correlation_matrix) |
출력:
sepal_length | sepal_width | petal_length | petal_width | |
---|---|---|---|---|
sepal_length | 1.000000 | -0.109369 | 0.871754 | 0.817954 |
sepal_width | -0.109369 | 1.000000 | -0.420516 | -0.356544 |
petal_length | 0.871754 | -0.420516 | 1.000000 | 0.962757 |
petal_width | 0.817954 | -0.356544 | 0.962757 | 1.000000 |
4. 히트맵 생성하기
1 2 3 4 5 |
# Create heatmap sns.heatmap(correlation_matrix, annot=True, fmt='.2f') # Display the heatmap plt.show() |
결과:
참고: 실제 히트맵 이미지는 Python 환경에서 코드를 실행할 때 표시됩니다.
5. 히트맵 해석하기
- 대각선 값 (1.00): 예상대로, 각 특성은 자기 자신과 완벽하게 상관관계가 있습니다.
- 높은 양의 상관관계:
petal_length
와petal_width
(0.96)sepal_length
와sepal_width
(-0.11)
- 보통의 음의 상관관계:
sepal_length
와sepal_width
(-0.11)petal_length
와sepal_width
(-0.42)
이러한 통찰은 꽃잎의 치수가 밀접하게 상호 관련되어 있음을 시사하며, 이는 머신러닝 모델에서 특징 선택과 같은 작업에 중요합니다.
결론
상관관계 분석과 히트맵은 데이터 과학에서 필수적인 도구로, 변수 간의 관계에 대한 깊은 통찰을 제공합니다. 이러한 상관관계를 시각화함으로써 분석가는 특징 선택에 대한 정보에 입각한 결정을 내리고, 잠재적인 다중공선성 문제를 식별하며, 머신러닝 모델의 해석 가능성을 향상시킬 수 있습니다.
Python의 Pandas 및 Seaborn 라이브러리를 사용하면 상관관계 매트릭스를 손쉽게 계산하고 시각화할 수 있어 복잡한 데이터셋을 직관적인 시각적 표현으로 전환할 수 있습니다. 아이리스 데이터셋은 이러한 개념을 보여주는 훌륭한 예제로, 이러한 분석 기법의 강력함과 단순성을 강조합니다.
참고문헌 및 추가 읽을거리
- Pandas 문서: 상관관계 및 공분산
- Seaborn 문서: 히트맵
- 아이리스 데이터셋 개요
- 상관계수 이해하기
- Python을 이용한 데이터 시각화: 종합 가이드
- 머신러닝 전처리 기법
적절한 도구와 지식을 갖추고 데이터 분석 여정을 시작하면 분석가는 숨겨진 패턴을 발견하고 데이터 기반의 결정을 내릴 수 있습니다. 상관관계 분석과 히트맵 시각화의 숙달은 데이터 과학과 머신러닝에서 숙련도를 달성하는 중요한 단계입니다.