항만 대기시간 예측 및 운영시스템 개선을 위한 2차 전처리
🎯 1차 전처리 결과 : 입출항 1건 당 여러 건의 시설사용허가현황 데이터가 존재함
🎯 목표 : 선박별 입출항 1건을 기준으로 중복행 제거
01. 중복 컬럼 확인 : 호출부호, 입항일시 기준
👉 143,915 rows 중에 71,439 rows 중복
duplicate = df.duplicated(subset=['호출부호', '입항일시']).sum()
duplicate
02. 접안대기시간, 출항대기시간 결측치 = 0 처리
df['출항_대기시간_분'].fillna(0, inplace = True)
df['접안_대기시간_분'].fillna(0, inplace = True)
03. groupby + aggregation으로 중복행의 대푯값을 추출
Groupby Column | Aggregation Column | Aggregation Function | Result |
호출부호, 입항일시 | 접안_대기시간_분 | max | • 접안 대기 미발생 시 , 0 (분) • 접안 대기 발생 시, 대기시간(분) |
Service_Time_Start | max | • 접안 대기 미발생 시, 입항일시 • 접안 대기 발생 시, 접안대기 종료 시점 |
|
Service_Time_End | min | • 출항 대기 미발생 시, 출항일시 • 출항 대기 발생 시, 출항대기 종료 시점 |
|
출항일시 | first | • 중복 Record 중 첫번째 값 | |
계선장소_코드 | |||
계선장소_숫자 | |||
계선장소명 | |||
선박용도 |
grouped_df = df.groupby(['호출부호', '입항일시']).agg({
'출항일시': 'first',
'접안_대기시간_분': 'max',
'출항_대기시간_분': 'max',
'Service_Time_Start': 'max',
'Service_Time_End': 'min',
'계선장소_코드': 'first',
'계선장소_숫자': 'first',
'계선장소명': 'first',
'선박용도':'first'
}).reset_index()
new_df = pd.DataFrame(grouped_df, columns=['호출부호', '입항일시', '출항일시', '접안_대기시간_분', '출항_대기시간_분', 'Service_Time_Start', 'Service_Time_End', '계선장소_코드', '계선장소_숫자', '계선장소명','선박용도'])
728x90
'Projects > ⛴️ Ship Waiting Time Prediction' 카테고리의 다른 글
[선박 대기시간 예측] 시계열/선석 기반 EDA (0) | 2023.12.15 |
---|---|
[선박 대기시간 예측] 선박 기반 EDA (0) | 2023.12.15 |
[선박 대기시간 예측] 3차 전처리 : 울산항 모델용 데이터셋 도출(결측치 처리) (1) | 2023.12.15 |
[선박 대기시간 예측] 1차 전처리 : PORT-MIS 항만 데이터 결합 (2) | 2023.12.15 |
[선박 대기시간 예측] 주제 선정 배경 (0) | 2023.12.15 |