728x90
반응형
SMALL
얼마 전에 데이콘에서 열렸던 현대 AI Challenge의 선박 대기시간 예측 데이터를 일부 활용하여 분석
ship data Loading
import pandas as pd
import datetime
# 선박 대기시간 예측 데이터 - 일부만 발췌
ship = pd.read_csv('ship.csv')
ship.ATA = pd.to_datetime(ship['ATA'])
ship.head()
<주제>
Datetime column인 ATA column을 datetime 형식으로 변환하고 여러 feature 생성하기
1. 연도 : year, 짝수 해, 윤년
ship['year'] = ship.ATA.dt.year # 연도 column 생성
ship['year_2'] = ship.year.apply(lambda x : 2 if x % 2 == 0 else 1) # 짝수 해인지 판정
ship['is_leap'] = ship.year.apply(lambda x: 1 if (x % 4 == 0 and x % 100 != 0) or (x % 400 == 0) else 0) # 윤년 여부 판정
2. 월 : month, 짝수 월, 계절, 분기, 반기
ship['month'] = pd.to_datetime(ship['datetime']).dt.month # 월 column 생성
ship['month_2'] = ship.month.apply(lambda x : 2 if x % 2 == 0 else 1) # 짝수 월인지 판정
ship['season'] = ship.month.apply(lambda x : 'spring'
if x in [3,4,5] else "summer"
if x in [6,7,8] else "fall"
if x in [9,10,11] else "winter") # 계절 column 생성
ship['quarter'] = ship.month.apply(lambda x : 'first_quarter'
if x in [1,2,3] else "second_quarter"
if x in [6,7,8] else "third_quarter"
if x in [9,10,11] else "fourth_quarter") # 분기 column 생성
ship['half'] = ship.month.apply(lambda x : 'first_half' if x in [1,2,3,4,5,6] else "second_half") # 상/하반기 column 생성
3. 일 : day, 짝수 일, 월말, 월초
ship['day'] = pd.to_datetime(ship['ATA']).dt.day # 일 column 생성
ship['day_2'] = ship.day.apply(lambda x : 2 if x % 2 == 0 else 1) # 짝수 일인지 판정
ship['day_early'] = ship.day.apply(lambda x : 1 if x < 5 else 0) # 월초인지 판정
ship['day_late'] = ship.day.apply(lambda x : 1 if x > 26 else 0) # 월말인지 판정
4. 시간 : hour, 짝수 시간, 시간대(time zone)
ship['hour'] = pd.to_datetime(ship['ATA']).dt.hour # 시간 column 생성
ship['hour_2'] = ship.hour.apply(lambda x : 2 if x % 2 == 0 else 1) # 짝수 시간인지 판정
ship['time_zone'] = ship.hour.apply(lambda x : 'morning'
if x in [6,7,8,9] else "lunch"
if x in [10,11,12,13,14] else "dinner"
if x in [15,16,17,18,19,20] else "night") # 시간대 column 생성
5. 분, : minute, 짝수 분, 정각이나 30분 근처, second, 짝수 초
ship['minute'] = pd.to_datetime(ship['ATA']).dt.minute # 분 column 생성
ship['minute_2'] = ship.minute.apply(lambda x : 2 if x % 2 == 0 else 1) # 짝수 분인지 판정
ship['exact_or_close30'] = ship['minute'].apply(lambda x: 1 if x % 30 == 0 or x == 0 else 0) # 정각 / 30분인지 판정
ship['second'] = pd.to_datetime(ship['ATA']).dt.second # 초 column 생성
ship['second_2'] = ship.second.apply(lambda x : 2 if x % 2 == 0 else 1) # 짝수 초인지 판정
6. 요일 : weekday, 주말 여부
ship['weekday'] = pd.to_datetime(ship['ATA']).dt.weekday # 요일을 숫자로 생성
ship['weekend'] = ship.weekday.apply(lambda x : '주말' if x in [5,6] else "평일") # 주말여부 column 생성
7. 추가 : date, day_of_year(1~365) / week_of_year(1~52)
ship['date'] = pd.to_datetime(ship['ATA']).dt.date.apply(lambda x :
str(x).split('-')[1] + str(x).split('-')[2]).astype('int64') # date column 생성
ship['day_of_year'] = pd.to_datetime(ship['ATA']).dt.day_of_year # day_of_year column 생성
ship['week_of_year'] = pd.to_datetime(ship['ATA']).dt.isocalendar().week # week_of_year column 생성
date : 1월 7일 > 107 / 10월 7일 > 1007
day_of_year : 날짜를 365일에 맞춰서 mapping
week_of_year : 날짜를 52주에 맞춰서 mapping
728x90
반응형
LIST
'코딩이야기' 카테고리의 다른 글
하루하루 코딩이야기 4 : XGBoost 실습 - 위스콘신 유방암 예측 (0) | 2023.12.01 |
---|---|
하루하루 코딩이야기 2 : 타이타닉 생존자 예측 (0) | 2023.11.17 |
하루하루 코딩 이야기 1 : Iris 붓꽃 품종 예측하기 (1) | 2023.11.14 |