데이터 시각화 코드 템플릿

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90
반응형

서론

 

데이터를 시각화하는 것은 데이터를 이해하는 데 있어 매우 중요한 과정입니다. 여러 가지 종류의 그래프를 그리는 방법에 대해 알아보겠습니다. 파이썬에서 데이터 시각화를 위해 주로 사용하는 라이브러리는 matplotlib와 seaborn입니다. 이 두 라이브러리를 함께 사용하면 다양한 그래프를 그릴 수 있습니다. 또한, 싸이킷런(scikit-learn)의 내장 데이터를 사용하여 예제를 제공하겠습니다.

 

1. Scatter Plot (산점도)

 

산점도는 두 변수 간의 관계를 시각화하는 데 사용됩니다. 아래의 코드는 싸이킷런의 '붓꽃' 데이터 세트를 사용하여 피처 'sepal length (cm)'와 'sepal width (cm)' 사이의 관계를 시각화합니다. plt.scatter는 matplotlib 라이브러리의 함수로, 두 변수 간의 관계를 시각화하는데 사용됩니다. x축과 y축에 각각 하나의 변수를 할당하여 두 변수 간의 상관관계를 산점도로 나타냅니다. 이는 두 변수 간의 관계를 직관적으로 파악하기 위해 사용됩니다.

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

iris = load_iris()
data = iris.data
target = iris.target

plt.scatter(data[:, 0], data[:, 1], c=target)
plt.xlabel('sepal length (cm)')
plt.ylabel('sepal width (cm)')
plt.show()

etc-image-0
실행 결과 산점도

 

sns.pairplot은 seaborn 라이브러리의 함수로, 데이터프레임의 모든 변수 쌍에 대한 산점도를 그립니다. 이는 여러 변수 간의 상관관계를 한 눈에 파악하기 위해 사용됩니다. 대각선 위치에는 각 변수의 히스토그램 또는 KDE(커널 밀도 추정) 그래프가 그려집니다.

 

import seaborn as sns
from sklearn.datasets import load_iris
import pandas as pd

# Iris 데이터 로드
iris = load_iris()
data = iris.data
target = iris.target
features = iris.feature_names

# 데이터프레임 생성
df = pd.DataFrame(data, columns=features)
df['target'] = target

# pairplot 그리기
sns.pairplot(df, hue='target', vars=features)
plt.show()

etc-image-1
실행 결과 산점도

2. Histogram (히스토그램)

 

히스토그램은 변수의 분포를 시각화하는 데 사용됩니다. 아래의 코드는 'sepal length (cm)'의 분포를 히스토그램으로 시각화합니다.

 

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

iris = load_iris()
data = iris.data
target = iris.target

plt.hist(data[:, 0], bins=30)
plt.xlabel('sepal length (cm)')
plt.ylabel('frequency')
plt.show()

 

etc-image-2
실행 결과 히스토그램

 

3. Box Plot (상자 그림)

 

상자 그림은 변수의 중앙값, 사분위수, 이상치를 한 눈에 보여주는 그래프입니다. 아래의 코드는 'sepal length (cm)'의 상자 그림을 그립니다.

 

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd

# Iris 데이터 로드
iris = load_iris()
data = iris.data
features = iris.feature_names

# 데이터프레임 생성
df = pd.DataFrame(data, columns=features)

# Box plot 그리기
plt.figure(figsize=(10, 6)) # 그래프 크기 설정
df.boxplot()
plt.title('Box plot of Iris dataset') # 제목 설정
plt.xticks(rotation=45) # x축 레이블 기울기 조절
plt.show()

 

etc-image-3
실행 결과 상자 그림

 

4. Line Plot (선 그래프)

 

선 그래프는 시간에 따른 변수의 변화를 시각화하는 데 주로 사용됩니다. 아래의 코드는 'sepal length (cm)'의 변화를 선 그래프로 시각화합니다.

 

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd

# Iris 데이터 로드
iris = load_iris()
data = iris.data
features = iris.feature_names

# 데이터프레임 생성
df = pd.DataFrame(data, columns=features)

# 선 그래프 그리기
fig, axs = plt.subplots(len(features), figsize=(10, 12)) # subplot 생성

for i, feature in enumerate(features):
    axs[i].plot(df[feature]) # 각 feature의 선 그래프 그리기
    axs[i].set_title(feature) # 각 subplot의 제목 설정

plt.tight_layout() # 그래프 간격 조절
plt.show()

etc-image-4
실행 결과 선그래프

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd

# Iris 데이터 로드
iris = load_iris()
data = iris.data
features = iris.feature_names

# 데이터프레임 생성
df = pd.DataFrame(data, columns=features)

# 선 그래프 그리기
plt.figure(figsize=(10, 6)) # 그래프 크기 설정
for feature in features:
    plt.plot(df[feature], label=feature) # 각 feature의 선 그래프 그리기

plt.title('Line plot of Iris dataset') # 제목 설정
plt.legend() # 범례 표시
plt.show()

etc-image-5
실행결과 선그래프(합쳐서)

 

5. heatmap(상관계수 분석)

 

이 코드는 Iris 데이터의 각 feature 간의 상관계수를 계산하고, 이를 히트맵으로 그립니다. annot=True는 각 셀에 숫자를 표시하라는 의미이며, cmap='coolwarm'은 색상 팔레트를 설정하는 부분입니다. 이를 통해 각 feature 간의 상관관계를 쉽게 파악할 수 있습니다.

상관계수는 -1에서 1까지의 값을 가지며, 1에 가까울수록 강한 양의 상관관계, -1에 가까울수록 강한 음의 상관관계를 가집니다. 0에 가까우면 두 변수 간의 상관관계가 약하다는 것을 의미합니다.

 

import seaborn as sns
from sklearn.datasets import load_iris
import pandas as pd

# Iris 데이터 로드
iris = load_iris()
data = iris.data
features = iris.feature_names

# 데이터프레임 생성
df = pd.DataFrame(data, columns=features)

# 상관계수 행렬 계산
corr_matrix = df.corr()

# 히트맵 그리기
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

 

etc-image-6
실행 결과 상관관계

 

6. 파이차트

 

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np

# Iris 데이터 로드
iris = load_iris()
data = iris.data
target = iris.target

# 데이터프레임 생성
df = pd.DataFrame(data)
df['target'] = target

# 'target' 변수의 각 클래스별 비율 계산
class_ratio = df['target'].value_counts(normalize=True)

# 파이 차트 그리기
plt.pie(class_ratio, labels=iris.target_names, autopct='%1.1f%%')
plt.title('Pie chart of Iris dataset')
plt.show()

 

etc-image-7
실행 결과 파이 차트

 

마치며

 

데이터를 분석하고 이해하는 과정인 탐색적 데이터 분석(EDA)에서는 데이터의 특성에 따라 적합한 그래프를 선택하는 것이 중요합니다. 아래는 상황에 따른 그래프 선택을 돕는 모식도입니다.

 

1. 변수의 수

 

- 단일 변수 : 히스토그램, 박스 플롯

- 두 변수 : 산점도, 선 그래프

- 세 변수 이상 : 산점도 행렬, 히트맵

 

2. 변수의 유형

 

- 숫자형 변수 : 히스토그램, 박스 플롯, 산점도, 선 그래프

- 범주형 변수 : 막대 그래프, 파이차트

 

3. 변수 간의 관계

 

- 상관관계 : 산점도, 산점도 행렬, 히트맵

- 시간에 따른 변화 : 선 그래프 4. 데이터의 분포 파악

- 전체 분포 : 히스토그램, 박스 플롯

- 그룹별 분포 : 산점도(색상을 이용한 그룹 구분), 박스 플롯(그룹별)

 

데이터의 특성과 분석 목적에 따라 적합한 그래프를 선택하면 데이터를 더 효과적으로 이해하고, 인사이트를 발견할 수 있습니다. 이 모식도를 참고하여 EDA를 진행해 보세요. 이처럼 matplotlib와 seaborn을 활용하면 다양한 그래프를 그릴 수 있습니다. 여기서 제공된 코드는 템플릿으로 사용할 수 있으며, 필요에 따라 적절히 수정하여 사용하면 됩니다. 이러한 그래프들은 데이터의 특성을 이해하는 데 매우 유용하며, 머신러닝 모델의 성능 개선에 도움이 될 수 있습니다.

반응형