👩‍💻/pandas

데이터 탐색 및 데이터 정제

글로랴 2024. 9. 27. 15:22

1) 다별량 데이터 탐색

df.info()

 

2) 범주형 자료 탐색, 범주별 데이터 개수 확인

df[col].value_counts()

 

3) 연속형 자료 탐색

df.describe()

 

평균(mean)과 중위수(median)의 차이가 크지 않은 지 확인하고, 평균과 중위수가 일치할수록 이상치가 적은 데이터를 의미한다. 

 

df.skew()	# 왜도 : 0일 경우, 정규분포와 일치
df.kurtosis()	# 값이 클수록 중심에 자료가 많이 몰려있다. 0이면 정규분포와 높이가 동일.
df.hist()

 

4) 이변량 데이터 탐색

df.corr(method='pearson')

# pearson 상관계수: 모수 검정, 수치형/연속형 데이터 변수
# spearman 순위 상관계수 : 비모수 검정, 범주형 데이터 중에서 순서적 데이터 변수 "순위 차이"
# kendall 순위 상관계수 : 비모수 검정, 범주형 데이터 중 순서적 데이터 변수 "순서 일관성"

 

5) 이상치 처리

5-1) 이상치 확인

df.boxplot()	#시각화

 

Q1 = df[col].quantile(q=0.25)
Q3 = df[col].quantile(q=0.75)

IQR = Q3 - Q1

lower = Q1 − 1.5 × IQR
upper = Q3 + 1.5 × IQR
  • 이상치 기준 : lower보다 작거나 upper보다 큰 값
  • IQR : 3사분위수에서 1사분위수를 뺀 값

5-2) 이상치 제거

  • 변수 변환
np.log(df[col]) 	# 로그 변환
np.sqrt(df[col])	# 제곱근 변환
  • 대체
  • 단순 제거
  • Winsorizing : 이상치 값을 특정 임계값 내로 제한하는 방법, 이상치 값을 상한 또는 하한으로 변환하여 극단값이 모델에 미치는 영향을 줄이는 방식

7) 결측치 처리

7-1) 결측치 확인

df.isnull()
df.isnull().sum()	# 열 별 결측치 확인
df.isnull().sum(1)	# 행 별 결측치 확인

 

7-2) 결측치 제거

df.dropna(axis=0) 	# 결측값이 있는 행 제거
df.dropna(axis=1)	# 결측값이 있는 열 제거
df[[col]].dropna()	# 결측값이 있는 특정 행/열 제거

 

7-3) 결측값 대체

df.fillna(value)
df.fillna(method='ffill' or 'pad')	# 해당 변수 앞 값으로 대체
df.fillna(method='bfill' or 'backfill')	#해당 변수 다음 값으로 대체

# 집단 평균값으로 대체
df.groupby(col).mean()
df.groupby(col).apply(lambda x: x.fillna(g.mean()))
반응형