Seaborn 시각화

타키탸키·2021년 7월 30일
0

데이터 사이언스

목록 보기
10/26
post-thumbnail

🌊 Seaborn 소개

  • Seaborn
    • Python 데이터 시각화 라이브러리
    • 다양한 그래프 제공
      • 더 많은 인사이트

🌊 확률 밀도 함수(PDF)

  • Seaborn
    • 통계 기반 데이터 시각화 라이브러리
  • 확률 밀도 함수(PDF, Probability Density Function)
    • 데이터셋의 분포를 나타내는 함수
    • 히스토그램과 유사
      • 값들의 분포를 나타내는 그래프
      • 히스토그램의 막대 수를 무한으로 늘린 것
    • 특정 구간의 확률
      • 해당 구간에 둘러싸인 공간의 넓이 계산
    • 예:) 어떤 학생의 키가 170 이하일 확률
      • 170 왼쪽 부분의 공간의 넓이 계산(0.2494 >> 약 25%)
    • 모든 공간의 넓이: 1(100%)
  • 확률 밀도 함수에서 특정 값이 일어날 확률은 0%
    • 주사위 숫자, 동전 면, 개수
      • 가능한 경우의 수가 딱딱 떨어진다
      • 직관적으로 확률을 계산할 수 있다
    • 키, 몸무게
      • 가능한 경우의 수 무한대
      • 특정 값에 대한 확률 계산 무의미
      • 특정 범위의 확률을 구하는 것이 더 적합

🌊 KDE Plot

  • 그래프의 굴곡
    • 실제 데이터를 시각화하면 굴곡이 많다
      • 무수히 많은 경우의 수
      • 무한 개의 데이터
      • 수집된 데이터 수는 실제 데이터 수의 일부에 불과
  • KDE(Kernel Density Estimation)
    • 추측을 통해 수집된 데이터를 실제 분포와 가까워지도록 그래프 생성
    • 굴곡이 사라지고 부드러운 곡선 생성
  • Seaborn 설치하고 사용하기
    • 0.9.0 버전
    • seaborn의 약어: sns
!pip install seaborn==0.9.0
import pandas as pd
import seaborn as sns
  • 필요한 데이터셋 준비
body_df=pd.read_csv('Downloads/body.csv', index_col=0)
body_df.head()

body_df['Height'] # 키만 추출(pandas series)

body_df['Height'].value_counts() # 각 키에 따른 학생 수

  • 키 순으로 정렬하기
    • .sort_index()
      • pandas series 메소드
      • 인덱스 순으로 정렬
body_df['Height'].value_counts().sort_index()

  • 선 그래프
    • 굴곡이 많다
body_df['Height'].value_counts().sort_index().plot()

  • Seaborn을 통해 KDE 사용하기
    • kdeplot
      • 파라미터: 대상 데이터(pandas series)
sns.kdeplot(body_df['Height'])

  • KDE 결과
    • 실제와는 다른 결과
    • 추측 값 포함
  • KDE 추측 수준 설정
    • 파라미터: bw
    • bw 값이 작을수록 굴곡이 많아진다
    • 히스토그램의 구간 수와 유사
sns.kdeplot(body_df['Height'], bw=0.5)

sns.kdeplot(body_df['Height'], bw=0.05)


🌊 KDE 활용 예시

  • 히스토그램 위에 KDE 얹기
    • distplot 메서드
body_df.plot(kind='his', y='Height', bins=15)

sns.distplot(body_df['Height'], bins=15)

  • 박스 플롯을 기반으로 KDE 그리기
    • violinplot 메서드
    • 방향을 돌리면 위와 같은 분포
    • 박스 플롯: 통계 요약본 vs. KDE: 데이터 분포
body_df.plot(kind='box', y='Height')

sns.violinplot(y=body_df['Height'])

  • KDE Plot으로 산점도 표현하기
    • kdeplot 파라미터
      • 산점도의 x축, y축에 해당하는 데이터
    • 등고선과 유사
      • 선이 가까울수록 가파르고 멀수록 평평하다
      • 위에서 내려다본 모양
      • x축 방향, y축 방향 선 사이의 거리
    • 연관성과 분포 모두 확인
body_df.plot(kind='scatter', x='Height', y='Weight')

sns.kdeplot(body_df['Height'], body_df['Weight'])

sns.kdeplot(body_df['Height'])

sns.kdeplot(body_df['Weight'])


🌊 LM Plot

  • LM Plot
    • 특정 데이터 결과 예측 가능
    • 파라미터
      • data: 데이터 프레임
      • x: x축에 놓고 싶은 column
      • y: y축에 놓고 싶은 column
sns.lmplot(data=body_df, x='Height', y='Weight')

  • 회귀선(Regression line)
    • 흩어져 있는 점들을 하나의 선으로 표현
    • 회귀선을 통해 예측
      • 선 위의 점을 특정 데이터에 대한 결과값으로 예측
      • 예:) 175cm >> 약 72kg
    • 산점도의 밀도가 높을수록 회귀선의 정확도 향상

🌊 카테고리별 시각화

  • 다양한 카테고리
import pandas as pd
import seaborn as sns

laptops_df=pd.read_csv('Downloads/laptops.csv')
laptops_df.head()

laptops_df['os'].unique() # os 목록
array(['linux', 'mac', 'windows'], dtype=object)
  • 카테고리별 시각화
    • Seaborn의 catplot 함수
      • data: 데이터 프레임
      • x축: 보고 싶은 카테고리에 해당하는 column
      • y축: 카테고리별 알고 싶은 특성에 해당하는 column
      • kind: 원하는 plot / default는 strip plot
sns.catplot(data=laptops_df, x='os', y='price', kind='box')

sns.catplot(data=laptops_df, x='os', y='price', kind='violin')

  • 스트립 플롯(strip plot)
    • 데이터를 하나하나 볼 수 있는 그래프
    • 윈도우 데이터가 가장 많다
      • 특정 가격대에 몰려 있다
    • 맥은 데이터가 가장 적다
      • 여러 가격대에 분산되어 있다
sns.catplot(data=laptops_df, x='os', y='price', kind='strip')

  • hue 파라미터
    • 특정 column에 따라 다른 색 표현
    • 여러 데이터 비교 가능
      • 인텔 노트북이 더 많고 amd 노트북이 더 저렴하다
sns.catplot(data=laptops_df, x='os', y='price', kind='strip', hue='processor_brand')

  • swarm plot
    • strip plot의 특정 구간에 몰려있는 점들 나열
sns.catplot(data=laptops_df, x='os', y='price', kind='swarm', hue='processor_brand')

* 출처: CODEIT - 데이터 사이언스 입문
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글