230501 / BSA09. pandas에서 탐색적 데이터 분석 (EDA)

BSA06_Pandas-EDA.ipynb

 

패키지 불러오기

import pandas as pd
import seaborn as sns

 

데이터 불러오기

팁 = sns.load_dataset('tips')
팁.head()

 

기본적 통계

# 수치자료
팁.describe()

# 범주형 데이터에 대해서도 요약을 보고 싶으면 include = 'all'  추가
팁.describe(include="all")

팁['sex'].value_counts()
팁[['sex','smoker','day','time']].value_counts()
팁[['sex','smoker']].value_counts()

# 상관계수
팁.corr()

 

그룹별 분석

# 그룹별 평균
팁.groupby('sex').mean()

팁.groupby('sex').head()

# df를 groupby()를 통해 부분df로 나눈 후 함수 적용
for 성별, 그룹 in 팁.groupby('sex'):
    print(성별)
    display(그룹.head())

 

적용가능한 통계함수

  • count : 표본크기
  • sum : 합
  • mean : 평균
  • median : 중앙값
  • var, std : 분산, 표준편차
  • min, max : 최솟값, 최댓값
  • unique, nunique : 고유값, 고유값개수
  • prod : 곱
  • first, last : 첫번째 값, 마지막 값

 

팁.groupby('sex').agg(['mean', 'std'])

# agg (aggregate) : 다중 통계 표시
# 특별히 변수를 지정하지 않으면 모든 수치변수에 대해 함수를 적용함
팁.groupby(['sex','time']).agg(['mean', 'std'])

# 컬럼별로 다른 통계 계산
팁.groupby('sex').agg({'total_bill': ['mean','std'], 'tip': 'median', 'size': 'sum' })

# 소수점 자리 수 지정
# 소수점 둘째자리까지 표시 (셋째자리에서 반올림)
팁.groupby('sex').agg({'total_bill': ['mean','std'], 'tip': 'median', 'size': 'sum' }).round(2)

# 사용자 정의 함수는 .agg()에 적용
# CV(변동계수) = 표준편차/평균
# x에 데이터프레임이 들어감
팁.groupby('sex')[['total_bill', 'tip']].agg(lambda x: x.std()/x.mean())

 

타이타닉 데이터 분석

# 데이터 불러오기
타이타닉 = sns.load_dataset('titanic')
타이타닉.head()


# 결측값 확인하기
타이타닉.isna().sum()


# 그룹별 평균으로 결측값 대체
# 성별, 객실등급에 따른 그룹의 평균으로 결측값 대체
# x.fillna(x.mean()) 한 것을 apply하라
# 전체 평균으로 결측값 대체하는 것은 데이터의 특성을 반영하지 못하는 방법임
타이타닉.groupby(['sex','class'],group_keys=False)['age'].apply(lambda x: x.fillna(x.mean()))


## 그룹별로 표준화
# 성별, 시간대에 따라 그룹
팁.groupby(['sex','time'],group_keys=False)['tip'].apply(lambda x: (x-x.mean())/x.std())


# 특정 컬럼을 기준으로 데이터 정렬
# 성별에 따라 오름차순 정렬한 후, 팁에 따라 내림차순 정렬
팁.sort_values(by=["sex","tip"],ascending=[True, False]).head()