🌊 Seaborn 소개
- Seaborn
- Python 데이터 시각화 라이브러리
- 다양한 그래프 제공
🌊 확률 밀도 함수(PDF)
- 확률 밀도 함수(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 추측 수준 설정
- 파라미터:
bw
- bw 값이 작을수록 굴곡이 많아진다
- 히스토그램의 구간 수와 유사
sns.kdeplot(body_df['Height'], bw=0.5)

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

🌊 KDE 활용 예시
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축 방향 선 사이의 거리
- 연관성과 분포 모두 확인
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 - 데이터 사이언스 입문