본문 바로가기
Project/Ship Waiting Time Prediction

PORT MIS 대기시간 예측 - 2. 입출항 기준 데이터셋 재구성(2차 전처리)

by skwkiix 2023. 11. 23.
728x90

항만 대기시간 예측 및 운영시스템 개선 을 위한 두번째 전처리 단계인, 입출항 1건당 전처리에 관한 내용을 담고 있다.

 

 

지난 포스팅에서는 PORT MIS 입출항 + 시설하용허가 데이터를 서비스시간, 대기시간을 산출하기 위해 1차 전처리한 후, 항구별 대기율을 산출한 과정을 담고 있으며, 해당 결과를 바탕으로 타겟항구가 울산항으로 선정되었다.

 

https://datapilots.tistory.com/59

 

PORT MIS 대기시간 예측 1. 항구별 대기율 산정

항만 대기시간 예측 및 운영시스템 개선 을 위한 첫번째 전처리 단계인, 항구별 대기율 산정에 관한 내용을 담고 있다. 1. 사용 데이터 데이터명 사용 목적 merge 기준 컬럼 PORT MIS 입출항 현황 입

datapilots.tistory.com


1. 개요

1차 전처리가 완료된  데이터 프레임에는 시설사용허가현황이 입출항 1건당 여러 행으로 구성되어있다.

(입출항 1건당 시설사용허가현황(접안대기, 양적하, 수리, 출항대기)  개별 row)

 

1차 전처리 : 시설사용허가현황 기준 -> 입출항 1건당 중복 행 발생

2차 전처리 : 입출항 1건 기준으로 재구성

 


2.  전처리

2.1.컬럼 정리

  • 호출부호 입항일시 중복 컬럼 확인
duplicate = df.duplicated(subset=['호출부호', '입항일시']).sum()
duplicate

 

   143,915 rows 중에 71,439 rows 중복 

 

  • 접안대기시간, 출항대기시간 없는 경우 0 처리
df['출항_대기시간_분'].fillna(0, inplace = True)
df['접안_대기시간_분'].fillna(0, inplace = True)

2.2. 코드 설계 및 구현

호출부호','입항일시'가 중복된 행들의 대푯값만 new 데이터프레임으로 추출

주요 컬럼 : 호출부호,입항일시,출항일시, 접안_대기시간_분,service_Time_분

  • 호출부호,입항일시,출항일시 등 중복행들은 중복행 중에 첫번째 값만 입력
  • '호출부호','입항일시'가 중복된 행중에 '접안_대기시간_분' 값중 가장 큰 값을 new 의 '접안_대기시간_분'값에 입력
  • '호출부호','입항일시'가 중복된 행중에 'Service_Time_Start' 값이 제일 큰 값을 new 'Service_Time_Start'값에 입력
  • '호출부호','입항일시'가 중복된 행중에 'Service_Time_End' 값이 제일 작은 값을 new 'Service_Time_End'값에 입력

 

*접안대기, 출항대기가 발생한 입출항 건에는 동일하게 접안대기, 접안대기시간, 출항대기, 출항대기 시간이 적용되어야 한다.

따라서 각각 접안대기가 발생한 경우, 출항대기가 발생한 경우를 포괄하고록 groupby, agg(min, max)를 이용해서 추출했다.

 

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