반응형
4. 변수 변환
4-1. log 변환
import numpy as np
data['log_salary'] = np.log(data['salary'])
data['log_sales'] = np.log(data['sales'])
data['log_roe'] = np.log(data['roe'])
data.head()
data.hist(bins=50, figsize=(20, 15))
data.corr()
4-2. 제곱근 변환
data['sqrt_salary'] = np.sqrt(data['salary'])
data['sqrt_sales'] = np.sqrt(data['sales'])
data['sqrt_roe'] = np.sqrt(data['roe'])
data.head()
data.hist(bins=50, figsize=(20, 15))
data.corr()
5. 결측치 처리
import pandas as pd
data = pd.read_csv('Ex_Missing.csv')
data
5-1. 결측치 확인
가. 전체 및 변수별 결측 확인
# isnull() : 결측이면 True, 결측이 아니면 False 값 반환
pd.isnull(data)
data.isnull()
# notnull() : 결측이면 False, 결측이 아니면 True 값 반환
pd.notnull(data)
data.notnull()
# 변수(컬럼)별로 결측값 개수 확인 : df.isnull().sum()
data.isnull().sum()
salary 2
sales 2
roe 1
industry 0
dtype: int64
# 특정 변수(컬럼)의 결측값 개수 확인: df.isnull().sum()
data['salary'].isnull().sum()
2
# 변수(컬럼)별로 결측 아닌 값의 개수 확인: df.notnull().sum()
data.notnull().sum()
salary 8
sales 8
roe 9
industry 10
dtype: int64
# 특정 변수(컬럼)의 결측 아닌 값의 개수 확인: df.notnull().sum()
data['salary'].notnull().sum()
8
나. 행별 결측 확인 및 저장
# 행(row) 단위로 결측값 개수 구하기: df.isnull().sum(1)
data.isnull().sum(1)
0 0
1 1
2 1
3 0
4 1
5 1
6 0
7 0
8 0
9 1
dtype: int64
# 행(row) 단위로 결측값 개수 구해서 새변수 생성하기
data['missing'] = data.isnull().sum(1)
data
# 행(row) 단위로 실측값 개수 구하기: df.notnull().sum(1)
del data['missing']
data['valid'] = data.notnull().sum(1)
data
5-2. 결측값 제거: dropna()
- 결측값이 있는 행 제거: delete row with missing values
- 결측값이 있는 열 제거 : delete column with missing values
- 결측값이 있는 특정 행 또는 열 제거 : delete specific row or column with missing values
가. 결측값 있는 행(row/case) 제거
data_del_row = data.dropna(axis=0)
data_del_row
나. 결측값 있는 열(column/variable) 제거
data_del_col = data.dropna(axis=1)
data_del_col
다. 결측값 있는 특정 행/열 제거
data[['salary']].dropna()
data[['salary', 'sales', 'roe', 'industry']].dropna()
data[['salary', 'sales', 'roe', 'industry']].dropna(axis=0)
data[['salary', 'sales', 'roe', 'industry']].dropna(axis=1)
5-3. 결측값 대체
- 결측값을 특정 값으로 대체: replace missing values with scalar value
- 결측값을 변수별 평균으로 대체: filling missing values with mean value per columns
- 결측값을 다른 변수의 값으로 대체: filling missing values with another columns' values
- 결측값을 그룹 평균값으로 대체: fill missing values by Group means
import pandas as pd
data = pd.read_csv('Ex_Missing.csv')
data
가. 특정값으로 대체: df.fillna(value/string)
# 결측값을 0으로 대체
data_0 = data.fillna(0)
data_0
# 결측값을 'missing' 문자로 대체
data_missing = data.fillna('missing')
data_missing
# 결측값을 앞 방향으로 채우기: df.fillna(method='ffill' or 'pad')
data_ffill = data.fillna(method='ffill')
data_ffill
# 결측값을 앞 방향으로 채우기: df.fillna(method='ffill' or 'pad')
data_pad = data.fillna(method='pad')
data_pad
# 결측값을 뒷 방향으로 채우기: df.fillna(method='bfill' or 'backfill')
data_bfill = data.fillna(method='bfill')
data_bfill
# 결측값을 뒷 방향으로 채우기: df.fillna(method='bfill' or 'backfill')
data_backfill = data.fillna(method='backfill')
data_backfill
나. 평균 대체:
- df.fillna(df.mean())
- df.where(pd.notnull(df), df.mean(), axis='columns')
# 평균으로 대체
data_mean = data.fillna(data.mean())
data_mean
# 중위수로 대체
data_median = data.fillna(data.median())
data_median
# 최대/최소로 대체
data_max = data.fillna(data.max())
data_max
# 다른 변수 평균으로 대체
# salary 변수의 평균값으로 모든 결측값 대체
data_other_mean = data.fillna(data.mean()['salary'])
data_other_mean
다. 다른 변수 값으로 대체
# sales의 결측값을 salary 값으로 대체
import numpy as np
data2 = data.copy()
data2['sales_new'] = np.where(pd.notnull(data2['sales']) == True, data2['sales'], data2['salary'])
data2
라. 집단 평균값으로 대체
# 산업(industry)별 평균 확인
data.groupby('industry').mean()
# lamda 함수
fill_mean_func = lambda g: g.fillna(g.mean())
# lamda 함수의 apply() 적용
data_group_mean = data.groupby('industry').apply(fill_mean_func)
data_group_mean
- 집단별 특정 값으로 대체
# 집단별로 변경할 값 설정
fill_values = {1: 1000, 2: 2000}
# lamda 함수 적용
fill_func = lambda d: d.fillna(fill_values[d.name])
# 집단별 apply
data_group_value = data.groupby('industry').apply(fill_func)
data_group_value
- 변수별 다른 대체방법을 한번에 적용
missing_fill_val = {'salary': data.salary.interpolate(),
'sales': data.sales.mean(),
'roe': 'missing'}
print(missing_fill_val)
data_multi = data.fillna(missing_fill_val)
data_multi
반응형
'빅데이터분석기사 > 코드' 카테고리의 다른 글
[빅데이터분석기사] 데이터셋 분할과 모델검증 (0) | 2022.06.12 |
---|---|
[빅데이터분석기사] 범주변수의 변환(one-hot-encoding) (0) | 2022.06.11 |
[빅데이터분석기사] 데이터탐색과 데이터정제 실습 (1) (0) | 2022.06.06 |
[빅데이터분석기사] 파이썬 데이터 정제 실습 (0) | 2022.06.03 |
[빅데이터분석기사] 파이썬(Python) 기초 - 자료형 if문 반복문 (0) | 2022.05.31 |