데이터 전처리, 피쳐 엔지니어링 시에 자주 사용하는 메소드를 정리합니다.
날짜 요소 추출하기
train['일자'] = pd.to_datetime(train['일자']) # 날짜형변환
train['년'] = train['일자'].dt.strftime('%Y') # 년
train['월'] = train['일자'].dt.strftime('%m') # 월
train['요일'] =train['일자'].dt.dayofweek # 요일
train['일'] = train['일자'].dt.day # 일
train['주'] = train['일자'].dt.weekofyear # 주
공휴일 날짜 리스트 추출 / DATETIME 형변환 / 날짜 계산
from pytimekr import pytimekr
from datetime import timedelta, datetime
# 연도별 추석 날짜 구하기
holiday = []
for i in range(2016, 2022):
holiday.append(pytimekr.hangul(i).strftime("%Y-%m-%d"))
holiday.append(pytimekr.children(i).strftime("%Y-%m-%d"))
holiday.append(pytimekr.independence(i).strftime("%Y-%m-%d"))
holiday.append(pytimekr.memorial(i).strftime("%Y-%m-%d"))
holiday.append(pytimekr.buddha(i).strftime("%Y-%m-%d"))
holiday.append(pytimekr.samiljeol(i).strftime("%Y-%m-%d"))
holiday.append(pytimekr.chuseok(i).strftime("%Y-%m-%d"))
holiday.append(pytimekr.lunar_newyear(i).strftime("%Y-%m-%d"))
# holiday 리스트 str > datetime 형으로 변환
holiday = pd.to_datetime(holiday, format="%Y-%m-%d")
# holiday 앞뒤 날짜
holiday_next = holiday + timedelta(1)
특정 컬럼 형변환
train = train.astype({'month':'int','week':'int', 'weekofday':'int', 'day':'int', 'year':'int'})
컬럼명 변경
# 새로운 컬럼명
en_colnames = ['date','weekofday','total','off','btrip','day','week']
# 새로운 컬럼명으로 변경
train.columns = en_colnames
Null값 대치
train.fillna( method='pad', # 주변값으로 대치
inplace=True)
특정 조건 함수 생성 / 데이터프레임 적용
# 함수 생성
def avg_ln(weekofday):
if weekofday == 0: avg_weekofday = 1146
elif weekofday == 1: avg_weekofday = 926
elif weekofday == 2: avg_weekofday = 905
elif weekofday == 3: avg_weekofday = 824
else : avg_weekofday = 654
return avg_weekofday
# 함수 적용 > 새 컬럼 생성
train['avg_weekofday_ln'] = train['weekofday'].apply(lambda x : avg_ln(x))
튜플 데이터로 구성된 리스트 인덱싱
# dataset 형태
# humanreadable date : machine readable date 가 튜플 형태로 맵핑되어있음
[('9 may 1998', '1998-05-09'),
('10.11.19', '2019-11-10'),
('9/10/70', '1970-09-10'),
('saturday april 28 1990', '1990-04-28'),
('thursday january 26 1995', '1995-01-26'),
...]
# 튜플의 첫번째 요소들만 추출해 리스트를 만든다.
human_readable = []
for i in range(len(dataset)):
human_readable.append(dataset[i][0])
human_readable
리스트 내 최댓값 찾기
hr_length =[]
for i in range(len(human_readable)) :
hr_length.append(len(human_readable[i]))
# 단순히 리스트에 max함수 사용
print(max(hr_length))
'Data Science > Python' 카테고리의 다른 글
[Python] 특정 경로에 있는 데이터 한번에 불러오기 (0) | 2022.04.29 |
---|---|
주피터/코랩 노트북 환경 설정 관련 - 리셋/결과출력형식 (0) | 2021.11.22 |
[Colab] 코랩 사용 팁 정리 - 캐글 데이터 로드, 구글 드라이브 데이터 로드, 런타임 끊김 방지, 한글 깨짐 해결 (0) | 2021.08.15 |