[2024.09.30] 필수 온라인 강의 Part2 파이썬 라이브러리 활용 CH04 데이터 시각화 라이브러리(Matplotlib, Seaborn)
Seaborn
- matplotlib 기반의 시각화 라이브러리 : 고급화된 matplotlib
- 유익한 통계 기반 그래픽을 그리기 위한 고급 인터페이스를 제공
- pip install seaborn
- import seaborn as sns
- https://seaborn.pydata.org/에서 다양한 설명 참고
- seaborn 데이터 불러오기
- seaborn 라이브러리에서 여러 데이터를 제공함, 그 중에서 titanic을 가장 많이 씀
- seaborn의 load_dataset() 함수 이용
- seaborn 데이터 셋 : https://github.com/mwaskom/seaborn-data
import seaborn as sns # seaborn 불러와서 sns로 사용
titanic = sns.load_dataset('titanic') # titanic 데이터 불러오기
print(titanic.info()) # .info() :데이터에 대한 전반적인 정보 제공
<class 'pandas.core.frame.DataFrame'> # 데이터프레임으로 이루어져있고
RangeIndex: 891 entries, 0 to 890 # 0부터 890번째까지 행이 있음 : 819줄이 있음
Data columns (total 15 columns): # 컬럼명은 총 15개
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 survived 891 non-null int64
1 pclass 891 non-null int64
2 sex 891 non-null object
3 age 714 non-null float64
4 sibsp 891 non-null int64
5 parch 891 non-null int64
6 fare 891 non-null float64
7 embarked 889 non-null object
8 class 891 non-null category
9 who 891 non-null object
10 adult_male 891 non-null bool
11 deck 203 non-null category
12 embark_town 889 non-null object
13 alive 891 non-null object
14 alone 891 non-null bool
dtypes: bool(2), category(2), float64(2), int64(4), object(5)
memory usage: 80.6+ KB
None
- 선형 회귀선 있는 산점도
- regplot() 함수 : 선형 회귀선이 있는 산점도
- x축 변수, y축 변수, 데이터 셋, axe 객체, fit_reg : 선형회귀선 표시 여부
- 선형 회귀선
- 간단한 선형 데이터 집합에 사용되는 가장 적합한 직선(= 추세선)
- 데이터를 시간 축으로 봤을 때, 데이터의 값이 장기적으로 어떻게 변하는지 직선으로 표현한 것
import matplotlib.pyplot as plt
# 그래프 객체 생성 (figure에 2개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15,5))
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
# x축 변수, y축 변수, 데이터 셋, axe 객체(1번째 그래프)
sns.regplot(x='age', y='fare', data=titanic, ax=ax1) # 산점도에 선형회귀선 표시(fit_reg=True)
# x축 변수, y축 변수, 데이터 셋, axe 객체(2번째 그래프)
sns.regplot(x='age', y='fare', data=titanic, ax=ax2, fit_reg=False) # 산점도에 선형회귀선 미표시(fit_reg=False)
plt.show()
- 히스토그램과 커널 밀도 그래프
- distplot( ) 함수 : 히스토그램과 커널 밀도 그래프 : 분포를 그릴 데이터 변수
- hist : True는 히스토그램 표시, False는 히스토그램 표시 안 함
- kde : True는 커널 밀도 그래프 표시, False는 커널 밀도 그래프 표시 안 함
- axe 객체
- histplot( ) 함수 : 히스토그램(하나의 변수 데이터의 분포를 확인할 때 사용하는 함수)
- kdeplot( ) 함수 : 커널 밀도 그래프(그래프와 x축 사이의 면적이 1이 되도록 그리는 밀도 함수)
# 그래프 객체 생성 (figure에 3개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15, 5))
ax1 = fig.add_subplot(1, 3, 1)
ax2 = fig.add_subplot(1, 3, 2)
ax3 = fig.add_subplot(1, 3, 3)
# distplot
# 분포를 그릴 데이터 변수, axe 객체(1번째 그래프)
sns.distplot(titanic['fare'], ax=ax1) # 히스토그램과 커널 밀도 그래프 표시
# histplot
#sns.histplot(x='fare', data=titanic, ax=ax2)
sns.distplot(titanic['fare'], kde=False, ax=ax2) # 분포를 그릴 데이터 변수, 커널 밀도 그래프 표시 안 함, axe 객체(2번째 그래프)
# kdeplot
#sns.kdeplot(x='fare', data=titanic, ax=ax3)
sns.distplot(titanic['fare'], hist=False, ax=ax3) # 분포를 그릴 데이터 변수, 히스토그램 표시 안 함, axe 객체(3번째 그래프)
# 차트 제목 표시
ax1.set_title('titanic fare - distplot')
ax2.set_title('titanic fare - histplot')
ax3.set_title('titanic fare - kedplot')
plt.show()
- 범주형 데이터의 산점도
- stripplot( ) 함수 : 데이터 포인트가 중복되어 범주별 분포를 시각화
- 파라미터 : x축 변수, y축 변수, 데이터 셋, axe 객체, hue(특정 열 데이터로 색상을 구분하여 출력)
- swarmplot( ) 함수 : 데이터의 분산까지 고려하여 데이터 포인트가 서로 중복되지 않도록 시각화. 즉, 데이터가 퍼져 있는 정도를 입체적으로 파악 가능
- 파라미터 : x축 변수, y축 변수, 데이터 셋, axe 객체, hue(특정 열 데이터로 색상을 구분하여 출력)
# 그래프 객체 생성 (figure에 2개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15, 5))
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)
# 이산형 변수의 분포 - 데이터 분산 미고려
sns.stripplot(x='class', y='age', data=titanic, ax=ax1) # x축 변수, y축 변수, 데이터 셋, axe 객체(1번째 그래프)
# 이산형 변수의 분포 - 데이터 분산 고려 (중복 X)
sns.swarmplot(x='class', y='age', data=titanic, ax=ax2, hue='sex') # x축 변수, y축 변수, 데이터 셋, axe 객체(2번째 그래프), 성별로 색상 구분
# 차트 제목 표시
ax1.set_title('Strip Plot')
ax2.set_title('Swarm Plot')
plt.show()
- strip : 분포가 겹쳐져서 보기 힘든 면이 있음, swarm plot : 겹치지 않게 나옴 - 같은 값이면 펼쳐져서 나옴
- swarm에 더 많은 정보를 담을 수 있음
- 빈도 그래프
countplot( ) 함수 : 각 범주에 속하는 데이터의 개수를 막대 그래프 시각화
파라미터 : x축 변수, palette, 데이터 셋, axe 객체, hue(특정 열 데이터로 색상을 구분하여 출력)
# 그래프 객체 생성 (figure에 3개의 서브 플롯을 생성)
fig = plt.figure(figsize=(15, 5))
ax1 = fig.add_subplot(1, 3, 1)
ax2 = fig.add_subplot(1, 3, 2)
ax3 = fig.add_subplot(1, 3, 3)
# class별 인원 파악
sns.countplot(x='class', palette='Set1', data=titanic, ax=ax1) # x축 변수, 데이터 셋, axe 객체(1번째 그래프)
# hue 옵션에 'who' 추가
sns.countplot(x='class', hue='who', palette='Set2', data=titanic, ax=ax2) # x축 변수, 데이터 셋, axe 객체(2번째 그래프)
# dodge=False 옵션 추가 (축 방향으로 분리하지 않고 누적 그래프 출력)
sns.countplot(x='class', hue='who', palette='Set3', dodge=False, data=titanic, ax=ax3) # x축 변수, hue, 데이터 셋, axe 객체(3번째 그래프)
# 차트 제목 표시
ax1.set_title('titanic class')
ax2.set_title('titanic class - who')
ax3.set_title('titanic class - who(stacked)')
plt.show()
- 조인트 그래프
- jointplot( ) 함수 : 산점도를 기본으로 표시, x-y축에 각 변수에 대한 히스토그램을 동시에 시각화
- 파라미터 : x축 변수, y축 변수, 데이터 셋
- kind = 'reg' : 선형 회귀선 추가
- kind = 'hex' : 육각 산점도 추가
- kind = 'kde' : 커널 밀집 그래프 추가
# 조인트 그래프 - 산점도(기본값)
# x축 변수, y축 변수, 데이터 셋
j1 = sns.jointplot(x='fare', y='age', data = titanic)
j1.fig.suptitle('titanic fare - scatter', size=15)
plt.show()
|
![]() |
# 조인트 그래프 - 회귀선(kind = 'reg')
# x축 변수, y축 변수, 데이터 셋
j2 = sns.jointplot(x='fare', y='age', kind='reg', data=titanic)
j2.fig.suptitle('titanic fare - reg', size=15)
plt.show()
|
![]() |
- 복습시 다른 것을 추가하면서 확인해보기
- 관계 그래프
- pairplot( ) 함수
- 인자로 전달되는 데이터프레임의 열(변수)을 두 개씩 짝 지을 수 있는 모든 조합에 대해서 표현
- 열은 정수/실수형이어야 함
- 3개의 열이라면 3행 x 3열의 크기로 모두 9개의 그리드 생성
- 각 그리드의 두 변수 간의 관계를 나타내는 그래프를 하나씩 그림
- 같은 변수끼리 짝을 이루는 대각선 방향으로는 히스토그램 시각화
- 서로 다른 변수 간에는 산점도 시각화
titanic_pair = titanic[['age', 'pclass', 'fare']] # titanic 데이터셋 중에서 분석 데이터 선택하기
# 3개의 열이라면 3행 x 3열의 크기로 모두 9개의 그리드 생성
# 각 그리드의 두 변수 간의 관계를 나타내는 그래프를 하나씩 그림
# 같은 변수끼리 짝을 이루는 대각선 방향으로는 히스토그램 시각화
# 서로 다른 변수 간에는 산점도 시각화
sns.pairplot(titanic_pair)
- 한번에 많은 정보를 얻을 수 있음.
'Study > Python' 카테고리의 다른 글
파이썬 라이브러리 활용 프로젝트 - 파이썬 환경 세팅하기 (7) | 2024.10.07 |
---|---|
파이썬 라이브러리 - BeautifulSoup (웹 데이터 수집 라이브러리) (1) | 2024.09.30 |
파이썬 라이브러리 - Matplotlib (데이터 시각화) (0) | 2024.09.30 |
파이썬 라이브러리 - Pandas (데이터 자료 처리 라이브러리) (1) | 2024.09.27 |
파이썬 라이브러리- NumPy(수치계산라이브러리) (0) | 2024.09.27 |