👩💻/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()))
반응형