1차 전처리 과정
Last updated
Last updated
ATT의 NAN 값을 STT와 동등하게 채우기(ATT가 비어있는 경우, 항상 지연이 아니였기 때문)
결항 처리된 데이터 제거하고 결항 관련 칼럼 모두 없애기
비어있는 등록기호의 경 랜덤으로 채우기
지연, 부정기편, 요일 등의 String 데이터를 Int로 변환하기
모든 시간 데이터, 시/분별로 분할시키기
DRR 지연사유 String 데이터를 int로 변환하기
나머지 모든 String 데이터 Int화시키기
학습에 사용되지 않는 칼럼 삭제하기('STT', 'ATT', 'FLT', 'DRR','ATT_H',"ATT_M","SDT_YY","STT_M")
def proc(filename = 'AFSNT.csv'):
###############파일 불러오기
print("file_load...")
df = pd.read_csv(filename, engine='python')
#############전처리하기
print("pre-processing...")
#널제거
#df = df.fillna("null")
#ATT 빈값 STT로 채우기
guess_df = df['STT'].loc[df['ATT'].isnull()]
df['ATT'].loc[df['ATT'].isnull()] = guess_df
# 결항처리제거하고 결항 칼럼 날리기
df = df.loc[(df['CNR'].isnull()) | ((df['CNR'].notnull()) & (df['DLY'] == 'Y'))]
df = df.drop(['CNR','CNL'], axis = 1)
# 등록기호 랜덤으로 채우기
REG_Range = ['SEw3NTk0', 'SEw3NzAz', 'SEw4MjM2', 'SEw4MDI4', 'SEw3NTE0', 'SEw4MDMx', 'SEw3NzU3', 'SEw3NTYw', 'SEw3NzY', 'SEw3NTA2', 'SEw3NTY4']
REG_Randomset = []
for i in range(229):
REG_Randomset.append(rnd.choice(REG_Range))
df['REG'].loc[df['REG'].isnull()] = REG_Randomset
# 지연, 부정기편, 요일 수치화
df['DLY'].loc[df['DLY'] == 'Y'] = 1
df['DLY'].loc[df['DLY'] == 'N'] = 0
df['IRR'].loc[df['IRR'] == 'Y'] = 1
df['IRR'].loc[df['IRR'] == 'N'] = 0
df['AOD'].loc[df['AOD'] == 'D'] = 1
df['AOD'].loc[df['AOD'] == 'A'] = 0
df['SDT_DY'].loc[df['SDT_DY'] == '월'] = 1
df['SDT_DY'].loc[df['SDT_DY'] == '화'] = 2
df['SDT_DY'].loc[df['SDT_DY'] == '수'] = 3
df['SDT_DY'].loc[df['SDT_DY'] == '목'] = 4
df['SDT_DY'].loc[df['SDT_DY'] == '금'] = 5
df['SDT_DY'].loc[df['SDT_DY'] == '토'] = 6
df['SDT_DY'].loc[df['SDT_DY'] == '일'] = 7
# 시/분 단위로 나누기
STT_Hour = []
STT_Minute = []
ATT_Hour = []
ATT_Minute = []
STT = df['STT']
ATT = df['ATT']
sub = STT.str.split(':', expand = True)
STT_Hour = sub.iloc[0:, 0]
STT_Minute = sub.iloc[0:, 1]
sub2 = ATT.str.split(':', expand = True)
ATT_Hour = sub2.iloc[0:, 0]
ATT_Minute = sub2.iloc[0:, 1]
df['STT_H'] = STT_Hour.astype(int)
df['STT_M'] = STT_Minute.astype(int)
df['ATT_H'] = ATT_Hour.astype(int)
df['ATT_M'] = ATT_Minute.astype(int)
#DRR 지연사유 수치화
df['DRR'].loc[df['DRR'].isnull()] = 0
df['DRR'].loc[(
(df["DRR"] == "C02") |
(df["DRR"] == "C01") |
(df["DRR"] == "D01") |
(df["DRR"] == "C03") |
(df["DRR"] == "C14") |
(df["DRR"] == "B01")
)] = 1
df['DRR'].loc[(df['DRR'] != 0) &
(df['DRR'] != 1)] = 2
## 나머지 수치화시키기
label_encoder = preprocessing.LabelEncoder()
# AOD
df_y = label_encoder.fit_transform(df['AOD'])
df['AOD'] = df_y.reshape(len(df_y), 1)
# REG
df_y = label_encoder.fit_transform(df['REG'])
df['REG'] = df_y.reshape(len(df_y), 1)
# FLO
df_y = label_encoder.fit_transform(df['FLO'])
df['FLO'] = df_y.reshape(len(df_y), 1)
# ARP
df_y = label_encoder.fit_transform(df['ARP'])
df['ARP'] = df_y.reshape(len(df_y), 1)
# ODP
df_y = label_encoder.fit_transform(df['ODP'])
df['ODP'] = df_y.reshape(len(df_y), 1)
#쓸모없는 칼럼 삭제
df = df.drop(['STT', 'ATT',"FLT"], axis = 1)
return df