-
데이터 사이언스: Seaborn 데이터 시각화 공부하기!(kde, violin, cat, distplot... )데이터 사이언스 2020. 7. 28. 13:01
Seaborn이란?
Seaborn library에 대한 설명을 보면 Statistical Data Visualization 이라는 말이 나옵니다.
이는 통계를 기반으로 데이터를 시각화한다는 것을 의미합니다.
원래는 파이썬에서 그래프를 그릴 때 사용하는 라이브러리는 matplot인데
세세하기 만들어줘야 할 것들이 많아서 사용하는게 조금 어렵다고 합니다.
하지만 이 seaborn 라이브러리를 사용하면 이쁘고 간단하게 원하는 데이터를 시각화할 수 있죠
우선 주피터 노트북에 seaborn을 설치해 줍시다.
1. seaborn 설치하기
pip install seaborn==0.9.0
Requirement already satisfied: seaborn==0.9.0 in c:\users\seungju\anaconda3\lib\site-packages (0.9.0) Requirement already satisfied: pandas>=0.15.2 in c:\users\seungju\anaconda3\lib\site-packages (from seaborn==0.9.0) (1.0.1) Requirement already satisfied: matplotlib>=1.4.3 in c:\users\seungju\anaconda3\lib\site-packages (from seaborn==0.9.0) (3.1.3) Requirement already satisfied: numpy>=1.9.3 in c:\users\seungju\anaconda3\lib\site-packages (from seaborn==0.9.0) (1.18.1) Requirement already satisfied: scipy>=0.14.0 in c:\users\seungju\anaconda3\lib\site-packages (from seaborn==0.9.0) (1.4.1) Requirement already satisfied: python-dateutil>=2.6.1 in c:\users\seungju\anaconda3\lib\site-packages (from pandas>=0.15.2->seaborn==0.9.0) (2.8.1) Requirement already satisfied: pytz>=2017.2 in c:\users\seungju\anaconda3\lib\site-packages (from pandas>=0.15.2->seaborn==0.9.0) (2019.3) Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in c:\users\seungju\anaconda3\lib\site-packages (from matplotlib>=1.4.3->seaborn==0.9.0) (2.4.6) Requirement already satisfied: cycler>=0.10 in c:\users\seungju\anaconda3\lib\site-packages (from matplotlib>=1.4.3->seaborn==0.9.0) (0.10.0) Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\seungju\anaconda3\lib\site-packages (from matplotlib>=1.4.3->seaborn==0.9.0) (1.1.0) Requirement already satisfied: six>=1.5 in c:\users\seungju\anaconda3\lib\site-packages (from python-dateutil>=2.6.1->pandas>=0.15.2->seaborn==0.9.0) (1.14.0) Requirement already satisfied: setuptools in c:\users\seungju\anaconda3\lib\site-packages (from kiwisolver>=1.0.1->matplotlib>=1.4.3->seaborn==0.9.0) (45.2.0.post20200210) Note: you may need to restart the kernel to use updated packages.
그리고 1000명의 키, 몸무게 데이터가 있습니다.
import pandas as pd import seaborn as sns
body_df = pd.read_csv("Downloads/body.csv",index_col = 0) body_df
2. KDEplot 시각화
kde는 Kernal Density Estimation을 의미합니다.
샘플안에 없는 데이터를 추정하여 존재할 구간안에 그 값이 존재할 확률을 나타냅니다.
확률밀도함수라고 생각하시면 됩니다.
kdeplot은 어떤 구간안의 확률을 나타내기 때문에
전체구간에 대해서 적분을 해버리면 1이 나와버리죠
sns.kdeplot(body_df["Height"])
조금더 세분화해서 보고 싶다면 bw를 조정하면서 조절할 수 있습니다.
sns.kdeplot(body_df["Height"], bw = 0.5)
3. distplot 데이터시각화
histogram과 kdeplot을 동시에 나타냄으로써 값을 비교할 수 있습니다.
(kdeplot은 측정값뿐만 아니라 예측값들도 섞여 있기 때문에)
sns.distplot(body_df["Height"], bins = 15)
4. violin plot 데이터 시각화
바이올린 플롯은 kde를 옆으로 두개 붙여 놓은 모양입니다. 가오리 같다고 해서 가오리 그래프라고도 한다네요
바이올린 플롯은 여러 그룹들의 분포를 시각화하기 좋고
밀도를 쉽게 비교할 수 있다는 장점이 있습니다.
sns.violinplot(y = body_df["Height"])
5. kde plot 등고선 데이터 시각화
1000명의 키와 몸무게의 상관관계를 알아보겠습니다.
body_df.plot(kind = "scatter", x = "Height", y = "Weight")
대체로 키가 크면 몸무게가 큽니다. 그리고 자세히 보면 가운데에 유난히 몰려있는 것 같습니다.
다른 데이터 시각화 방법으로 봅시다.
kdeplot의 두개의 파라미터를 넣어주면 다음과 같이
등고선의 형태로 특이한 데이터가 나옵니다.
이는 등고선과 원리가 같은데요
선과 선사이의 거리가 멀면 값변화가 완만하고
가깝다면 값변화가 급격합니다.
sns.kdeplot(body_df["Height"], body_df["Weight"])
키와 몸무게에 대해서 좀 더 자세히 뜯어 봅시다.
sns.kdeplot(body_df["Height"])
키 데이터는 경사가 급격한 반면에
sns.kdeplot(body_df["Weight"])
몸무게 데이터는 경사가 완만한 구간이 있네요
6. 회귀선 추가하기
회귀선을 추가할 수도 있습니다.
회귀선을 추가함으로써 데이터에는 없는 값들도 예상할 수 있죠
sns.lmplot(data = body_df, x = "Height", y = "Weight")
7. 데이터 시각화 연습
한번 노트북에 관한 데이터를 받아 seaborn 데이터 시각화를 해보죠
laptops_df = pd.read_csv("Downloads/laptops.csv") laptops_df
바이올린 플롯으로 비교해봅시다.
# 모두 출력형태 같습니다. sns.violinplot(x = laptops_df["os"], y = "price") sns.violinplot(data = laptops_df, x = "os", y = "price") sns.catplot(data = laptops_df, x = "os", y = "price", kind = "violin") # catlplot은 카테고리 별로 나눈다는 의미입니다.
os에 따른 가격 분포입니다.
맥의 가격 분포가 리눅스와 윈도우보다 많이 크네요
리눅스 노트북은 대체로 맥이나 윈도우보다 저렴하네요
sns.catplot(data = laptops_df, x = "os", y = "price", kind = "box")
바이올린 플롯과 유사하게 나옵니다. 하지만 바이올린 플롯으로는 알 수 없었던 이상점까지 확인할 수 있네요.
sns.catplot(data = laptops_df, x = "os", y = "price", kind = "strip")
이번에는 노트북 os 별 가격대 데이터 갯수를 알 수 있네요.
그리고 맥의 가격대 분포가 가장 넓지만 데이터의 갯수가 가장 적은 걸로 보아 정확한 데이터같지 않네요
프로세서 브랜드 비율도 확인해보겠습니다.
laptops_df["processor_brand"].unique()
array(['intel', 'amd'], dtype=object)
이렇게 hue를 파라미터로 받으면 프로세서 브랜드를 색깔별로 비교를 할 수 있습니다.
sns.catplot(data = laptops_df, x = "Height", y = "Weight", kind = "strip", hue = "processor_brand")
값이 너무 많으면 중첩돼서 잘 안 보이는데 이때 "swarm"을 파라미터로 받으면 겹치지 않게 값의 분포를 확인할 수 있습니다
sns.catplot(data = laptops_df, x = "Heihgt", y = "Weight", kind = "swarm", hue = "processor_brand")
반응형'데이터 사이언스' 카테고리의 다른 글