이번 포스팅은 Python에서 시각화 라이브러리를 활용한 단변량 분석을 정리했다. 대표적인 시각화 라이브러리로는 matplotlib와 seaborn이 있으며, 그림으로 변수에 대한 특성을 파악할 수 있다. 수치형 변수와 범주형 변수 모두 단변량 분석을 진행할 수 있는데, 먼저 수치형 변수에 대해 알아보자.
수치형 변수
단변량 분석은 하나의 변수에 대한 특성을 파악하는 것이다. 수치형 변수의 경우 대푯값과 분포 특성을 파악하는 것이 중요하다. Python의 Pandas와 Seaborn을 활용해서, 특성을 알아보자.
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 예제 데이터 생성
data = pd.DataFrame({'age': [25, 30, 35, 40, 45, 50, 55, 60, 65, 70]})
대푯값 수치화
1. 산술평균(mean) : 데이터의 전체 값을 모두 더한 후 개수로 나눈 값
mean_age = data['age'].mean()
print(f"평균 연령: {mean_age}")
2. 중앙값(median) : 데이터를 크기 순으로 정렬했을 때 가운데 위치하는 값
median_age = data['age'].median()
print(f"중앙값 연령: {median_age}")
3.최빈값(mode) : 데이터에서 가장 많이 관측된 값
mode_age = data['age'].mode()
print(f"최빈값 연령: {mode_age.values}")
4. 사분위수(quantile) : 데이터를 크기 순으로 정렬했을 때 일정 구간을 나누는 값
q1_age = data['age'].quantile(0.25) # 제 1사분위수
q3_age = data['age'].quantile(0.75) # 제 3사분위수
print(f"제 1사분위수 연령: {q1_age}")
print(f"제 3사분위수 연령: {q3_age}")
기초통계량
describe() 메소드를 사용하면 한 번에 주요 기초통계량을 확인할 수 있다.
print(data['age'].describe())
시각화
1. 히스토그램

- 데이터의 분포를 막대 그래프로 시각화
- 각 막대의 높이: 특정 범위에 속하는 데이터 개수
- x축: 데이터 값 범위
- y축: 데이터 개수
- Seaborn은 기본 옵션으로 색상 테마, 범례 설정 등 더 다양한 기능 제공
- kde = True 옵션을 사용하면 히스토그램과 KDE를 하나의 그림으로 확인할 수 있음
import matplotlib.pyplot as plt
plt.hist(data)
plt.xlabel("데이터 값")
plt.ylabel("데이터 개수")
plt.show()
import seaborn as sns
sns.histplot(data, bins = 20, kde = True)
장점
- 데이터 분포 직관적으로 파악 가능
- 간단하고 빠르게 시각화 가능
단점
- 데이터 값 범위에 따라 해상도가 달라짐
- 이상치 영향을 크게 받음
- 구간(bin)의 너비를 어떻게 잡는지에 따라 전혀 다른 모양이 될 수 있음
2. kdeplot (Kernel Density Estimation)

- 히스토그램의 연속적 표현
- 데이터 밀도를 곡선으로 시각화
- 밀도함수 그래프 아래의 면적은 1
import seaborn as sns
sns.kdeplot(data)
plt.show()
sns.kdeplot(data, fill=True) # 면적 채우기 옵션
plt.show()
장점
- 데이터 분포를 더 매끄럽게 표현
- 이상치 영향 감소
단점
- 히스토그램보다 해석하기 어려울 수 있음
3. boxplot

- 데이터의 분포, 중앙값, 사분위수, 이상치 시각화
- 상자: 25% ~ 75% 사분위수 범위
- 중앙선: 중앙값
- 수염: 최대값/최소값 (IQR 범위 밖의 값)
- Seaborn은 다양한 옵션 제공 (색상, 범례, 이상치 표시 등)
- 값에 NaN이 있으면 그래프가 그려지지 않음
import matplotlib.pyplot as plt
plt.boxplot(data)
plt.xlabel("데이터")
plt.show()
import seaborn as sns
sns.boxplot(data)
plt.show()
장점
- 데이터 분포, 중앙값, 이상치 한눈에 파악 가능
- 비교 분석 용이
단점
- 데이터 개수가 적으면 정확도가 떨어짐
히스토그램, kdeplot, boxplot은 각각 장단점이 존재하며, 상황에 따라 적절한 방법을 선택해야한다. 또한, Matplotlib와 Seaborn 중 어떤 라이브러리를 사용할지는 시각화의 목적과 복잡성을 고려해서 결정하면 된다.
범주형 변수
범주형 변수는 각 범주의 빈도와 비율을 파악하는 것이 중요하다.
수치화
import pandas as pd
import matplotlib.pyplot as plt
# 예제 데이터 생성
titanic = pd.read_csv(path)
print(titanic['Pclass'].value_counts())
print(titanic['Pclass'].value_counts(normalize=True))
- value_counts() 메소드로 각 범주의 빈도수를 계산할 수 있음
- value_counts(normalize = True) 는 각 범주의 상대 빈도(비율)을 계산
시각화
1. bar chart

titanic['Pclass'].value_counts().plot(kind='bar')
plt.title("성별 분포")
plt.xlabel("성별")
plt.ylabel("빈도")
plt.show()
sns.countplot(x='Pclass', data=titanic)
plt.grid()
plt.show()
- plt.bar혹은 .plot(kind=bar)를 이용하려면 먼저 집계한 후 결과를 가지고 그래프를 그려야 한다,
- countplot은 집계 + bar plot을 한번에 실행한다.
2. pie chart

data['gender'].value_counts().plot(kind='pie', autopct='%.1f%%')
plt.title("성별 분포")
plt.show()
temp = titanic['Pclass'].value_counts()
plt.pie(temp.values, labels = temp.index, autopct = '%.2f%%',
startangle=90, counterclock=False,
explode = [0.05, 0.05, 0.05], shadow=True)
plt.show()
- bar chart와 동일하게 먼저 집계를 진행해야 시각화가 가능
- 다양한 파라미터로 chart를 꾸밀 수 있음
- autopct : 그래프에 표시할 값 비율 값에 대한 설정. ex) .2f% : 소수점 두 자리 퍼센트로 표기 한다는 의미
- startangle : 시작 각도
- counterclock : 시계 방향 여부
- explode : 중심으로부터 개별 요소를 얼마나 띄울지
- shadow : 그림자 추가
'Aivle > Python' 카테고리의 다른 글
| [에이블스쿨] 가설 검정 및 이변량 분석 (0) | 2024.03.17 |
|---|---|
| [에이블스쿨] Pandas (0) | 2024.03.08 |
| [에이블스쿨] 제어문과 함수 (2) | 2024.03.04 |
| [에이블스쿨] 컨테이너 자료형 (0) | 2024.03.02 |
| [에이블스쿨] 자료형 (0) | 2024.02.29 |