[Python.Seaborn] Seaborn 필수 그래프 정리 1 - Line plot과 Scatter plot (feat. fmri & tips dataset)

2021. 1. 18. 05:00Python과 머신러닝/MatPlotLib 데이터 시각화

1. Seaborn 이란

  • Seaborn이란 MatPlotLib을 조금 더 쉽게 사용하는 Wrapper 모듈이다.
  • 기본 MatPlotLib에 기본 설정을 더 추가하여서, 복잡한 그래프도 간단하게 만들 수 있는 껍데기(Wrapper)이다. 
  • 간단한 코드로 생각보다 괜찮은 데이터 시각화를 처리해주는 모듈인데, 사실 속에는 MatPlotLib을 사용하고 있다는 정도로 이해하면 될 것 같다.

 

2. Line Plot 그리기 기본

In [1]:import numpy as np 
       import pandas as pd
       import matplotlib.pyplot as plt
       import seaborn as sns

In [2]:fmri=sns.load_dataset('fmri')
       fmri
Out[2]:

Out[2]

  • 우선 fmri data set을 seaborn에서 읽어온다. 이 데이터는 Seaborn에서 제공하는 테스트 데이터이다.
  • 환자별 (subject) 시가점마다의 fmri signal 값을 담고 있는 데이터이다.
  • 위와 같이 dataframe 자체를 보면서도 읽을 수 있겠지만, seaborn을 통해 시각화하면 한눈에 누구나 이해할 수 있는 시각화가 가능하다.
In [3]:sns.set(style='darkgrid')
       sns.lineplot(x='timepoint', y='signal', data=fmri) #line plot과 구간 평균/분포로 계산됨

Out[3]:

Out[3]

  • In[3]는 우선 배경 style을 dark grid로 설정했다 (각 style이 어떤지 말로 설명하기보다는 그림으로 보고 이해하는 것이 쉽다).
  • 그런 뒤 lineplot으로 쭉 그리면 좁고 진한 선과, 위 아래로 조금 더 넓고 옅은 선이 존재한다.
  • 중앙에 있는 선은 각 timepoint 별 signal의 평균값을 표현하고 있고, 넓은 영역은 각 timepoint별 signal의 분포를 표현하고 있다. 
  • 대략 3.5초까지는 환자별로 거의 동일한 fmri signal을 보여주지만, 이후부터 7.5초까지는 꽤 큰 분포가 있는 것을 확인할 수 있다. 
  • 유의미한 차이를 찾기 위해서는 이 부분에 1차적으로 집중해서 분석하는 것이 좋을 듯하다.
In [4]:sns.set_style('whitegrid')
       sns.lineplot(x='timepoint', y='signal', data=fmri)
Out[4]:

Out[4]

  • 데이터는 동일하고 'whitegrid' style을 보면 darkgrid와의 차이를 알 수 있다.
In [5]:sns.set_style('ticks')
       sns.lineplot(x='timepoint', y='signal', data=fmri)
Out[5]:

Out[5]

  • 'ticks' style은 위와 같은 그림으로 표현된다.

 

3. Line Plot 그리기 - hue별 구분

In [6]:sns.lineplot(x='timepoint', y='signal', hue='event', data=fmri) 
       #hue를 지정해서 분류별로 볼 수 있음
Out[6]:

Out[6]

  • Hue란, 분류라고 이해하면 가장 쉽다.
  • 예를 들어 gender라는 Hue 에는 Male과 Female이 존재한다.
  • 이렇듯, 데이터를 분석할 때 분류별로 그래프를 따로 그리고 싶다면, In[6]과 같이 hue='category'를 지정해주면 된다.
  • Out[6]는 stim event와 cue event별 signal의 그래프를 보여주고 있다.

 

4. Random Sampling

In [7]:fmri.sample(n=10, random_state=1) #random sampling
Out[7]:

Out[7]

  • 데이터를 그릴 때나 분석을 할 때에 random sampling이 필요하면 위와 같이 .sample 함수를 사용하여 원하는 sample의 개수를 지정할 수 있다.

 

5. Scatter Plot 그리기 - 기본

In [8]:tips=sns.load_dataset('tips')
       sns.scatterplot(x='total_bill', y='tip', data=tips)
Out[8]:

Out[8]

  • tips dataset은 해외의 식당에서 팁을 준다할 때 그 팁에 관한 데이터이다.
  • In[8]에서는 total_bill (총비용)과 tip 금액을 시각화하기 위해서 scatterplot을 사용해봤다.
  • tips라는 데이터에서 total_bill을 x축, tip을 y축으로 지정하여 scatter를 그리라는 명령어이다.
  • Out[8]을 보면 뚜렷한 양의 상관관계가 있고, 이 또한 대부분의 사람들이 예상한 대로이다.
  • Tip에 큰 영향을 미치는 것이 총비용뿐일까? 점심과 저녁에 따라 달라지지는 않을까?

 

6. Scatter Plot 그리기 - hue별 구분

In [9]:sns.scatterplot(x='total_bill', y='tip', hue='time', data=tips)
Out[9]:

Out[9]

  • hue를 time이라는 categorical 변수로 지정하면, 색깔로 구분해서 분포도를 그려준다.
  • MatPlotLib이 모두 제공하는 기능들이지만, 직접 만들자니 귀찮았을 것을 Seaborn이 쉽게 기본 설정하여 제공한다.
  • 이렇게 보면 점심이나 저녁은 추세가 비슷하지만, 역시나 점심은 가격이 더 저렴해서 그런지 팁도 적을 수밖에 없는 듯하다.
  • 결론은, 해외에서 알바를 구한다면 저녁 알바가 더 많은 tip을 받을 확률이 생기니 저녁 알바가 나을 듯하다.

 

7. 관련 포스트

 

반응형