Showing

seaborn pairplot를 사용하여 그래프 그려보고 분석하기 본문

컴퓨터 공학, 전산학/인공지능,딥러닝

seaborn pairplot를 사용하여 그래프 그려보고 분석하기

RabbitCode 2024. 9. 26. 19:38
pip install seaborn

 

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline

 

Seaborn 데이터셋 불러오기

df = sns.load_dataset('tips')
sns.pairplot(df)

 

 

 

1. total_bill의 히스토그램

  • 알 수 있는 점: total_bill(계산 금액)의 분포는 오른쪽으로 꼬리가 길게 늘어진 right-skewed 분포. 대부분의 계산 금액은 10에서 20 사이에 집중되어 있지만, 50에 가까운 큰 금액도 몇 건 존재
  • 연구자가 주목할 부분: 이상치가 있는지 확인하고, 평균보다 큰 금액의 빈도수에 대한 분석이 필요

2. tip과 total_bill 간의 산점도

  • 알 수 있는 점: 계산 금액(total_bill)이 증가할수록 팁(tip)도 증가하는 경향을 보인다. 이 관계는 양의 상관관계
  • 연구자가 주목할 부분: 두 변수 간의 상관계수를 구해 정량적으로 분석할 수 있으며, 특정 구간에서 상관관계가 더 강하게 나타나는지 확인해볼 필요

3. size와 total_bill 간의 산점도

  • 알 수 있는 점: 사람 수(size)와 계산 금액 간에는 크게 눈에 띄는 패턴이 보이지 않지만, 대체로 더 많은 사람이 있으면 총 금액이 증가할 가능성이 있음을 암시
  • 연구자가 주목할 부분: 그룹 크기가 클수록 계산 금액이 반드시 높지 않다는 점을 고려해 분석이 필요합니다. 사람 수가 많지만 계산 금액이 작은 경우에 주목할 수 있다.

4. total_bill과 tip 간의 산점도

  • 알 수 있는 점: 다시 한번 계산 금액과 팁 간의 양의 상관관계를 확인할 수 있다. 높은 계산 금액일수록 팁 금액도 비례하여 증가하는 패턴이 나타난다.
  • 연구자가 주목할 부분: 상관계수가 매우 높은 이 관계를 바탕으로 예측 모델을 만들 때 중요한 변수가 될 수 있다.

5. tip의 히스토그램

  • 알 수 있는 점: 팁 금액은 약 2~4달러 사이에 집중되어 있으며, 그 이상의 금액은 상대적으로 적습니다. right-skewed 분포
  • 연구자가 주목할 부분: 평균보다 높은 팁 금액을 주는 경우의 빈도를 파악하고, 이 금액 분포에서 평균과의 차이를 분석할 필요

6. size와 tip 간의 산점도

  • 알 수 있는 점: 사람 수와 팁 간에는 명확한 상관관계가 보이지 않으며, 더 많은 사람이 있어도 팁 금액이 증가하지는 않는 것으로 보인다.
  • 연구자가 주목할 부분: 그룹 크기와 팁 금액 간의 패턴이 약하기 때문에, 팁 금액이 인원수에 따라 달라지지 않는 경우를 주의 깊게 살펴봐야 한다.

7. size와 total_bill 간의 산점도

  • 알 수 있는 점: 계산 금액과 사람 수 간에는 어느 정도의 패턴이 보이지만, 상관관계는 약합니다. 작은 그룹에서도 큰 금액을 지불하는 경우가 있고, 큰 그룹에서도 적은 금액을 지불하는 경우가 있다.
  • 연구자가 주목할 부분: 그룹 크기가 무조건 계산 금액에 영향을 미치지 않는 경우를 분석하고, 다른 요인(시간, 요일, 흡연 여부 등)도 고려하여 다변량 분석을 할 수 있다.

8. size의 히스토그램

  • 알 수 있는 점: 대부분의 테이블은 24명의 사람으로 구성되어 있습니다. 큰 그룹(56명)은 비교적 드물다.
  • 연구자가 주목할 부분: 데이터에서 그룹 크기가 작은 경우가 더 많다는 점을 고려해 분석할 필요가 있다.

이렇게 각 그래프에서 알 수 있는 정보는 변수 간의 상관관계, 데이터의 분포, 이상치 확인 등에 도움이 된다.

연구자는 특정 변수 간의 관계를 더 깊게 분석하고, 이 관계들을 바탕으로 가설을 세우고 검증하는 데 초점을 맞춰야 한다.

 

 

total_bill과 tip 사이의 관계를 나타낸 것이라면, 이는 계산 금액이 높을수록 팁도 증가하는 경향. 그러나 일부 이상치(outliers)도 보인다. 예를 들어, 오른쪽 위에 있는 몇몇 포인트들은 다른 데이터와 상당히 떨어져 있는 값들로, 매우 높은 계산 금액에 해당하는 경우일 수 있다.

연구자가 주목해야 할 점:

  1. 상관관계: 전반적으로 양의 상관관계가 있음을 확인할 수 있지만, 점들이 완벽하게 선형으로 증가하는 것은 아닙니다. 이는 계산 금액과 팁 사이의 관계가 완전히 선형적이지 않을 수 있음을 시사한다.
  2. 밀집 영역: 좌측 하단의 밀집된 영역은 다수의 데이터 포인트가 같은 범위 내에 집중되어 있음을 보여준다. 즉, 대부분의 사람들이 비교적 적은 금액을 지불하고 그에 맞는 팁을 준다는 것을 알 수 있다.
  3. 이상치: 우상단의 몇몇 점은 나머지 데이터와 다르게 많이 떨어져 있는 이상치로, 연구자는 이러한 포인트가 왜 발생했는지 탐구할 필요가 있습니다. 예를 들어, 계산 금액이 매우 높거나 팁 금액이 평균과 크게 벗어난 경우일 수 있다.

 

문제는 

sns.pairplot(df) 인데 왜 sex 0 smoker 0 day 0 time 0 는 사라졌다는 점이다.
 

sns.pairplot(df)을 사용했을 때, sex, smoker, day, time 같은 범주형(categorical) 변수들이 사라진 이유는 pairplot 함수가 기본적으로 숫자형(numeric) 데이터에 대해서만 작동하기 때문이다.

pairplot은 산점도와 히스토그램을 통해 숫자형 변수들 간의 관계를 시각화하는 도구인데, 범주형 변수는 수치적 관계를 나타내지 않으므로 기본적으로 출력되지 않는다.

해결 방법:

만약 범주형 변수를 포함한 분석을 하고 싶다면, 이를 숫자형으로 변환하거나 범주형 변수의 데이터를 잘 처리할 수 있는 다른 그래프를 사용하는 것이 좋습니다.

  1. 범주형 변수를 숫자로 변환하기: 범주형 변수를 숫자형으로 변환하면 pairplot에서 시각화가 가능합니다. 예를 들어, LabelEncoder나 pd.get_dummies()를 사용할 수 있다.
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()

dfi = df.copy()
dfi['sex'] = label_encoder.fit_transform(dfi['sex'])
print(label_encoder.classes_)
dfi['smoker'] = label_encoder.fit_transform(dfi['smoker'])
print(label_encoder.classes_)
dfi['day'] = label_encoder.fit_transform(dfi['day'])
print(label_encoder.classes_)
dfi['time'] = label_encoder.fit_transform(dfi['time'])
print(label_encoder.classes_)
sns.pairplot(dfi)

pandas의 get_dummies를 사용하여 데이터를 숫자로 변환하려면 다음과 같이 할 수도 있다고 한다.

df_encoded = pd.get_dummies(df)