항만 대기시간 예측 및 운영시스템 개선 을 위한 두번째 전처리 단계인, 입출항 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', '계선장소_코드', '계선장소_숫자', '계선장소명','선박용도'])
'Project > Ship Waiting Time Prediction' 카테고리의 다른 글
PORTMIS 대기시간 예측 - 예측 결과 활용(대기비용, 온실가스배출량) (3) | 2023.12.05 |
---|---|
PORT MIS 대기시간 예측 - 3. 결측치 처리(시계열 데이터, 중앙값) (0) | 2023.11.30 |
PORT MIS 대기시간 예측 1. 항구별 대기율 산정(1차 전처리) (1) | 2023.11.13 |