6. 데이터 시각화(seaborn 패키지)
🔗 'Do it! 쉽게 배우는 파이썬 데이터 분석' 책을 기반으로 JupyterLab 환경에서 학습한 내용입니다 _φ(๑╹╹๑)
📌 산점도
- 산점도: 연속값으로 된 두 변수의 관계를 표현할 때 사용하며, seaborn 패키지의 scatterplot(data = 데이터 프레임명, x = 'x축 변수명', y = 'y축 변수명') 함수 활용
- 파일 불러오기: read_csv('파일경로') 함수 활용
import seaborn as sns
import pandas as pd
mpg = pd.read_csv('mpg.csv')
- 산점도 생성
sns.scatterplot(data = mpg, x = 'displ', y = 'hwy')

- 범위 제한: set(xlim = (시작, 끝), ylim = (시작, 끝)) 함수를 활용하며, set 함수 내에 xlim과 ylim 중에 하나만 작성하는 것도 가능
sns.scatterplot(data = mpg, x = 'displ', y = 'hwy').set(xlim = (3, 6), ylim = (10, 30));
# set(xlim = (3, 6)): x축 범위 3 ~ 6으로 제한
# set(ylim = (10, 30)): y축 범위 10 ~ 30으로 제한
# 함수 뒤에 ;작성시 <Axes: xlabel...> 설명 메시지 숨김 처리 가능

- 종류별 표시 색상 변경: scatterplot(data = 데이터 프레임명, x = 'x축 변수명', y = 'y축 변수명', hue='종류별 색상 다르게 할 변수명')
sns.scatterplot(data = mpg, x = 'displ', y = 'hwy', hue = 'drv')

- 그래프 설정 변경
import matplotlib.pyplot as plt
# 그래프 설정 변경
plt.rcParams.update({'figure.dpi': '150',
'figure.figsize': [8, 6],
'font.size': '15',
'font.family': 'Malgun Gothic'})
# figure.dpi: 해상도 (기본값 72)
# figure.figsize: 가로 세로 크기 (기본값 [6, 4])
# font.size: 글자 크기 (기본값 10)
# font.family: 폰트 (기본값 sans-serif), 맑은 고딕 설정시 그래프에 한글이 깨져보이는 것을 방지
# 그래프 설정 원래대로 복구
plt.rcParams.update(plt.rcParamsDefault)
- 그래프 이미지 저장: 이미지 클릭 → shift + 마우스 오른쪽 → 이미지를 다른 이름으로 저장
📌 막대 그래프
- 막대 그래프: 집단 간 차이를 표현할 때 사용
- 평균 막대 그래프 생성
- 평균 데이터 프레임 생성 후, 막대 그래프를 평균 크기 순서대로 나타내기 위한 정렬 실행
- seaborn 패키지의 barplot(data = 데이터 프레임명, x = 'x축 변수명', y = 'y축 변수명') 함수를 활용하여 막대 그래프 생성
# drv별 hwy 평균을 나타내는 데이터 프레임 생성한 후, mean_hwy 기준 내림차순 정렬
# groupby 함수 as_index = False 설정 필수: 그래프를 만들기 위해서는 변수명이 필요
hwy_avg = mpg.groupby('drv', as_index = False)\
.agg(mean_hwy = ('hwy', 'mean'))\
.sort_values('mean_hwy', ascending = False)
# 막대 그래프 생성
sns.barplot(data = hwy_avg, x = 'drv', y = 'mean_hwy')
- 빈도 막대 그래프 생성
- 방법1
- 빈도 데이터 프레임 생성 후, 빈도 크기 순서대로 나타내기 위한 정렬 실행
- barplot(data = 데이터 프레임명, x = 'x축 변수명', y = 'y축 변수명') 함수 활용
- 방법2
- seaborn 패키지의 countplot(data = 데이터 프레임명, x = 'x축 변수명', order = 데이터 프레임명['졍렬할 변수명'].value_counts().index) 함수 활용
- order을 설정하지 않을시, 데이터 프레임명['순서를 확인할 변수명'].unique()로 출력되는 순서대로 그래프 생성
- seaborn 패키지의 countplot(data = 데이터 프레임명, x = 'x축 변수명', order = 데이터 프레임명['졍렬할 변수명'].value_counts().index) 함수 활용
- 방법1
df_mpg = mpg.groupby('drv', as_index = False)\
.agg(n = ('drv', 'count')
# 방법 1
sns.barplot(data = df_mpg, x = 'drv', y = 'n')

# 방법2
sns.countplot(data = df_mpg, x = 'drv', order = df_mpg['drv'].value_counts().index)
# value_counts().index: 크기 순서대로
# order = ['4', 'f', 'r']로 지정도 가능

📌 선 그래프
- 선 그래프: 시간에 따라 달라지는 데이터를 표현할 때 사용
- 시계열 데이터: 일정 시간 간격을 두고 나열된 데이터
- 시계열 그래프: 시계열 데이터를 선으로 표현한 그래프
- 시계열 그래프 생성
- 날짜 변수열의 데이터 타입을 확인하고 pandas 패키지의 to_datetime(데이터 프레임명['타입 바꿀 변수명']) 함수로 datetime 타입으로 변경
- x축으로 보고자 하는 변수(연도, 월, 일 등)를 데이터프레임의 dt.year, dt.month, dt.day 등을 활용하여 추출한 후, 데이터 프레임에 추가
- seaborn 패키지의 lineplot(data = 데이터 프레임명, x = '변수명', y = '변수명', ci = None) 함수 활용
- ci(신뢰구간): 데이터의 조사 오차(표본 오차)를 기반하여, 모평균이 표본 평균으로부터 95% 확률(100% 확률로 한다면 신뢰구간이 너무 커지고, 90% 확률로 한다면 틀릴 확률이 높아져)로 존재할 영역을 계산한 구간을 의미(https://angeloyeo.github.io/2021/01/05/confidence_interval.html)
신뢰 구간의 의미 - 공돌이의 수학정리노트 (Angelo's Math Notes)
angeloyeo.github.io
economics = pd.read_csv('economics.csv')
economics.info() # 'date' 변수의 type 확인 결과: 문자열(object)

# datetime 타입으로 변경한 'date' 변수의 값들을 'date2' 변수에 할당
economics['date2'] = pd.to_datetime(economics['date'])
economics.info()

economics['year'] = economics['date2'].dt.year # 'date2' 변수의 값들에서 연도 추출 후 할당
economics.head()

# 연도별 실업자수 그래프
sns.lineplot(data = economics, x = 'year', y = 'unemploy', ci = None)


📌 상자 그림
- 상자 그림: 데이터의 분포를 상자 모양으로 표현한 그래프
- 상자 밖 가로선: 극단치 경계로 1.5IQR(IQR = Q3 - Q1의 값)에 해당
- 상자 아래 세로선(아랫수염): 극단치 경계 범위 내의 하위 0~25%에 해당하는 값
- 상자 밑면: 하위 25% 위치의 값
- 상자 안 가로선: 50% 위치의 값(중앙값)
- 상자 윗면: 하위 75% 위치의 값
- 상자 위 세로선(윗수염): 극단치 경계 범위 내의 하위 75~100%에 해당하는 값
- 상자 밖 표식: 1.5IQR을 벗어난 값
- 상자 그림 생성: boxplot(data = 데이터 프레임명, x = 'x축 변수명', y = 'y축 변수명')
sns.boxplot(data = mpg, x = 'drv', y = 'hwy')
- 상자 그림 해석
- f: 26~29 사이의 좁은 범위에 자동차가 모여있고, 극단치가 존재
- 4: 중앙값이 상자 아래쪽에 있는 형태로 낮은 값 쪽으로 치우친 형태의 분포
- r: 세로선이 짧고 극단치가 없는 형태로, 자동차들이 사분위 범위(1~3사분위 내) 중심으로 분포

'데이터 분석 > Python' 카테고리의 다른 글
| 7-2. 한국복지패널 데이터 분석(2) (1) | 2026.07.24 |
|---|---|
| 7-1. 한국복지패널 데이터 분석(1) (0) | 2026.07.23 |
| 5. 데이터 정제(결측치, 이상치) (0) | 2026.07.17 |
| 4. 데이터 가공(전처리) (0) | 2026.07.16 |
| 3. 데이터 파악 및 수정 (0) | 2026.07.15 |