1. Seabron Library ?
🍋 시본 Seaborn 라이브러리는 맷플로립을 기반으로 다양한 테마와 통계용 차트 등의 동적인 기능을 추가한 라이브러리
🍋 시본 라이브러리는 맷플로립과 다르게 통계와 관련된 차트를 제공하기 떄문에 데이터프레임으로 다양한 통계 지표를 만들어 낼 수 있으며 데이터 분석에 활발하게 사용되고 있다
🍋 시본 라이브러리로 그리는 그래프들은 크게 관계형, 분포형, 카테고리형의 세가지 범주로 분류
▶️ 실제 분석에는 맷플로립과 시본 라이브러리 두 가지를 함께 사용
🍋 사용할 때 주의할 점은 시본이 맷플로립에 의존적이기 때문에 맷플로립 라이브러리도 반드시 함께 임포트 해야 함
💡 시본 라이브러리의 주요 특징 💡
a. 뛰어난 시각화 효과
b. 간결한 구문 제공
c. 판다스 데이터프레임에 최적화
d. 쉬운 데이터프레임 집계 및 차트 요약
🍋 기본적으로 맷플로립보다 제공하는 색상이 더 많기에 색 표현력이 좋음
🍋 맷플로립으로 그래프를 표현하더라도 시본의 set() 함수를 미리 선언해 주면 자동으로 시본 팔레트에 출력
🍋 시본은 'deep, muted, pastel, bright, dark, colorblind'의 6개 기본 팔레트를 제공
https://seaborn.pydata.org/
2. 데이터 시각화 준비하기
1) 라이브러리 및 데이터 읽어오기
# 2020년 건강검진 일부 데이터 엑셀 파일을 읽어와 동적인 시각화를 표현
import pandas as pd
data = pd.read_excel('../input/health_screenings_2020_1000ea.xlsx')
data.head()
2) 데이터 전처리
# 성별, 음주 여부, 흡연 상태에 대하여 숫자로 저장되어 있는 정보를 데이터 분석의 가독성을 높이기 위해
# 'Male', 'Female', 'Non-drinking', 'Drinking', 'Non-smoking', 'Smoking'의 문자열로
# 변경하여 데이터 전처리
# 필요 컬럼 추출하여 저장
data6 = data[['gender', 'height', 'weight', 'waist', 'drinking', 'smoking']]
data6.head()
# 성별 데이터를 Male과 Female로 변경
data6.loc[data6['gender'] == 1, ['gender']] = 'Male'
data6.loc[data6['gender'] == 2, ['gender']] ='Female'
# 음주 여부 0(비음주)는 Non-drinking, 1(음주)는 Drinking으로 변경
data6.loc[data6['drinking'] == 0, ['drinking']] = 'Non-drinking'
data6.loc[data6['drinking'] == 1, ['drinking']] = 'Drinking'
# 흡연상태 1(비흡연)과 2(흡연 끊음)을 Non-smoking으로 변경하고, 3(흡연)을 Smoking으로 변경
data6.loc[(data6['smoking'] ==1) | (data6['smoking'] ==2), ['smoking']] = 'Non-smoking'
data6.loc[data6['smoking'] == 3, ['smoking']] = 'Smoking'
data6.head()
# 데이터 타입 변경없이 저장
data6.to_pickle('../output/data6.pickle')
3. sns.barplot()
🍋 시본에서 사용하는 막대 그래프는 barplot() 함수로 속성 3개를 지정하여 범주별 그룹을 쉽게 표현
🍋 시본 막대 그래프는 기본적으로 오차 막대가 표시 되는데, 오차 막대를 그리는 범위를 신뢰구간이라고 함
▶️ 오차 막대 신뢰구간을 표준편차로 하고 싶다면 ci 속성을 'sd'(ci='sd')로 지정
# 다음과 같은 인수를 가진다
sns.barplot(x=None, y=None, hue=None, data=None, order=None,
hue_order=None, estimator=<function mean at 0x7f9e05dcf5e0>,
ci=95, n_boot=1000, units=None, seed=None, orient=None,
color=None, palette=None, saturation=0.75, errcolor='.26',
errwidth=None, capsize=None, dodge=True, ax=None, **kwargs)
<x> x축에 사용할 데이터의 열 이름 또는 위치 (정수) | <y> y축에 사용할 데이터의 열 이름 또는 위치 (정수) |
<hue> 범례에 사용할 데이터의 열 이름 또는 위치 (정수) | <data> 그래프를 그릴 데이터프레임 |
<order> 막대 그래프를 그릴 때, x축 값들의 순서 | <hue_order> 범례에 표시될 값들의 순서 |
<estimator> 막대의 높이를 어떻게 계산할 것인지를 지정하는 함수 (기본값: mean) |
<ci> 신뢰 구간을 설정할 때 사용하는 값 (기본값: 95) |
<n_boot> 신뢰 구간 계산에 사용할 부트스트랩 샘플링 수 (기본값: 1000) |
<units> 그래프를 그릴 때 사용할 데이터의 단위 |
<seed> 난수 발생 시드 값 | <orient> 그래프의 방향 ('v' 또는 'h', 기본값: 'v') |
<color> 모든 막대의 색상을 지정하는 단일 값 또는 색상 맵 | <palette> 범주형 변수에 대한 색상 맵 |
<saturation> 색상 맵의 채도 | <errcolor> 오차 막대의 색상 |
<errwidth> 오차 막대의 두께 | <capsize> 오차 막대 끝 부분의 크기 |
<dodge> 막대를 서로 구분하기 위한 여유 공간 여부 (기본값: True) | <ax> 그래프를 그릴 matplotlib의 축 객체 |
1) barplot() 함수 사용 예시
# 모듈 import
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 데이터 프레임 생성
data6 = pd.read_pickle('../output/data6.pickle')
# 음주 여부 및 흡연 상태 데이터 준비하기
# data6에서 성별, 음주 여부의 그룹별 개수(인원)를 구하여 drinking에 저장
drinking = data6.groupby(['gender', 'drinking'])['drinking'].count()
# data6에서 성별, 흡연 상태의 그룹별 개수(인원)를 구하여 smoking에 저장
smoking = data6.groupby(['gender', 'smoking'])['smoking'].count()
# 음주 여부와 흡연 상태에 대한 그룹별 개수(인원)의 시리즈를 데이터프레임으로 변경
drinking = drinking.to_frame(name='count')
smoking = smoking.to_frame(name='count')
📌 series.to_frame() : series ▶️ dataframe 으로 변경하는 함수
# 데이터프레임의 인덱스를 초기화
drinking = drinking.reset_index()
smoking = smoking.reset_index()
drinking
# 컬럼이 1개 -> 3개로 변경됨
📌 reset_index() : 설정 인덱스를 제거하고 기본 인덱스(0,1,2, ... , n)으로 변경
# 성별 음주 여부 및 흡연 상태 시본 막대 그래프
fig = plt.figure(figsize=(17, 6))
# 1행 2열의 서브플롯 생성
area1 = fig.add_subplot(1, 2, 1)
area2 = fig.add_subplot(1, 2, 2)
# barplot() 함수를 이용하여 x축에 성별, y축에 음주여부 개수 (인원), hue에 성별 음주 여부를 할당하여 첫 번째 서브플롯에 할당
ax1 = sns.barplot(data=drinking, x='gender', y='count', hue='drinking', ax=area1)
# barplot() 함수를 이용하여 x축에 성별, y축에 흡연상태 개수 (인원), hue에 성별 흡연상태 그룹별 데이터를 할당하여
# 두 번째 서브플롯에 할당
ax2 = sns.barplot(data=smoking, x='gender', y='count', hue='smoking', ax=area2)
fig.suptitle('2020 Health Screenings Drinking & Smoking Type Seaborn Bar Graph', fontweight='bold')
area1.set_title('Drinking Type')
area2.set_title('Smoking Type')
plt.show()
4. add_subplot() 함수
🍋 add_subplot() 함수의 인자를 통해 서브플롯 개수를 조정
📍 add_subplot(1, 2, 1)은 1 X 2 (행 X 열)의 서브플롯을 생성한다는 의미
➡️ 세 번째 인자 1은 생성된 두 개의 서브플롯 중 첫 번째 서브플롯을 의미
📍 마찬가지로 (1, 2, 2)는 1 X 2 서브플롯에서 두 번째 서브플롯을 의미
# 성별 음주 여부 및 흡연 상태 막대 그래프
# 1) 전체 설정
fig = plt.figure(figsize=(17,6)) # 그래프 크기 지정 및 그림 객체 생성
fig.suptitle('2020 Health Screenings Drinking & Smoking Type Bar Graph', fontweight='bold')
index = np.arange(4) # x축 눈금 개수를 배열로 생성하고 index에 저장
# 2) 첫 번쨰 서브플롯 설정
fig.add_subplot(1, 2, 1) # 1행 2열의 서브플롯 중 첫 번쨰 서브플롯을 생성
# 첫 번째 서브플롯에 그려질 음주 여부 데이터 개수 (인원)을 bar() 함수를 이용하여 저장.
plt.bar(index, drinking['count'])
plt.title('Drinking Type')
plt.ylabel('Count')
# x축 눈금 이름 지정
plt.xticks(index, ['Drinking(Female)', 'Non-drinking(Female)', 'Drinking(Male)', 'Non-drinking(Male)'])
# 3) 두 번째 서브플롯 설정
fig.add_subplot(1, 2, 2) # 1행 2열의 서브플롯 중 두 번쨰 서브플롯을 생성
# 두 번째 서브플롯에 그려질 흡연 상태 데이터 개수 (인원)을 bar()함수를 이용하여 저장
plt.bar(index, smoking['count'])
plt.title('Smoking Type')
plt.ylabel('Count')
# x축 눈금 이름 지정
plt.xticks(index, ['Non-smoking(Female)', 'Smoking(Female)', 'Non-smoking(Male)', 'Smoking(Male)'])
[ 내용 참고 : IT 학원 강의 및 위키독스 ]
'Programming Language > Python' 카테고리의 다른 글
[Python] Seaborn | 산점도 그래프 - Strip plot (0) | 2024.03.15 |
---|---|
[Python] Seaborn | 평균/빈도 막대 그래프 (0) | 2024.03.15 |
[Python] Matplotlib | 한글 폰트 사용, 파이 그래프 (0) | 2024.03.14 |
[Python] Matplotlib | 히스토그램 (Histogram) (0) | 2024.03.14 |
[Python] Matplotlib | 산점도 그래프 (0) | 2024.03.13 |