import pandas as pd import numpy as np import csv from hamsu import view_nan, split_x, plot_feature_importances from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score from sklearn.preprocessing import StandardScaler,MinMaxScaler, RobustScaler data = pd.read_csv('./Data/Seoul2/merge_data.csv') print(data) data = data.interpolate() view_nan(data) data = data.fillna(method='bfill') data = data.round(1) # data.to_csv('./Data/Seoul2/merge_data.csv',index=False)
from sklearn.model_selection import train_test_split from sklearn.metrics import r2_score from xgboost import XGBRegressor import math from sklearn.preprocessing import StandardScaler,MinMaxScaler, RobustScaler # 1. 데이터가 내가 원하는 형식으로 되어있지 않아서 제외 # cloud_data = pd.read_csv('./data/csv/Seoul/Seoul_cloud_2010-2020_by_month.csv',encoding='CP949') 형식이 이상해서 이렇게 하면 에러가남 밑에 줄 처럼 해야함 # cloud_data = pd.read_csv('./data/csv/Seoul/Seoul_cloud_2010-2020_by_month.csv',encoding='CP949',header=None,sep=',',error_bad_lines=False) # 2. 월별 서울 온도 데이터 로드 temp_data_month = pd.read_csv('./data/Seoul/Seoul_temp_2010-2020_by_month.csv',encoding='CP949',header=6,sep=',',error_bad_lines=False,index_col=0) temp_data_month = temp_data_month.drop('지점',axis=1) # print(temp_data_month) # 결측지 발견 20년6월의 평균온도 -> 일별데이터에서 현재까지의 평균을 이용하여 결측치를 채워보기 view_nan(temp_data_month,0) index = temp_data_month.loc[pd.isna(temp_data_month[temp_data_month.columns[-1]]), :].index # print(index) # 3. 일별 서울 온도 데이터 로드 temp_data_day = pd.read_csv('./data/Seoul/Seoul_temp_2010-2020_by_day.csv',encoding='CP949',header=6,sep=',',error_bad_lines=False,index_col=0) temp_data_day = temp_data_day.drop('지점',axis=1) # print(temp_data_day) # 일별 온도데이터의 nan값을 찾고 그 행을 출력 view_nan(temp_data_day,0) # 최고 기온에 결측치 존재 # print(temp_data_day.columns[-1]) index = temp_data_day.loc[pd.isna(temp_data_day[temp_data_day.columns[-1]]), :].index # print(index) # 2017-10-12 의 최고 기온 -> 보간법으로 채우자 # 일단 원하는건 현재까지의 6월의 월별 평균기온을 구하기위한 일별 평균기온 want = temp_data_day.loc['2020-06-01':,'평균기온(℃)'].values # print(round(want.mean(),1))
dust = dust.drop('지점번호', axis=1) dust = dust.drop('지점명', axis=1) dust.columns = ['date', 'dust'] print(dust) rain = pd.read_csv('./data/Seoul/Seoul_rain_2010-2020_by_day.csv', encoding='CP949', header=6, sep=',', error_bad_lines=False) rain = rain.drop('지점', axis=1) rain.columns = ['date', 'rain'] print(rain) # print("온도의 결측 확인") view_nan(temperature) index = temperature.loc[pd.isna(temperature[temperature.columns[-1]]), :].index # print(temperature.iloc[index,:]) temperature = temperature.interpolate() view_nan(temperature) # print("온도의 결측 확인\n") # print("미세먼지 결측치 확인") view_nan(dust) index = dust.loc[pd.isna(dust[dust.columns[-1]]), :].index # print(dust.iloc[index,:]) dust = dust.interpolate() view_nan(dust) # print("미세먼지 결측치 확인") # print('강수량 결측치 확인')
# cloud_data = pd.read_csv('./data/csv/Seoul/Seoul_cloud_2010-2020_by_month.csv',encoding='CP949') 형식이 이상해서 이렇게 하면 에러가남 밑에 줄 처럼 해야함 # cloud_data = pd.read_csv('./data/csv/Seoul/Seoul_cloud_2010-2020_by_month.csv',encoding='CP949',header=None,sep=',',error_bad_lines=False) # 1-2. 월별 서울 온도 데이터 로드 temp_data_month = pd.read_csv('./data/Seoul/Seoul_temp_2010-2020_by_month.csv', encoding='CP949', header=6, sep=',', error_bad_lines=False) #,index_col=0) temp_data_month = temp_data_month.drop('지점', axis=1) # print(temp_data_month) temp_data_month.columns = ['시간', '평균기온', '최저기온', '최고기온'] # print(temp_data_month) # 결측지 발견 20년6월의 평균온도 -> 일별데이터에서 현재까지의 평균을 이용하여 결측치를 채워보기 view_nan(temp_data_month, 0) index = temp_data_month.loc[ pd.isna(temp_data_month[temp_data_month.columns[-1]]), :].index # print(index) # 1-3. 일별 서울 온도 데이터 로드 temp_data_day = pd.read_csv('./data/Seoul/Seoul_temp_2010-2020_by_day.csv', encoding='CP949', header=6, sep=',', error_bad_lines=False) #,index_col=0) temp_data_day = temp_data_day.drop('지점', axis=1) # print(temp_data_day) temp_data_day.columns = ['시간', '평균기온', '최저기온', '최고기온'] # print(temp_data_day)
test_fu_r = np.array(test_fu_r) test_fu_j = np.array(test_fu_j) test_fu_r = pd.DataFrame(test_fu_r,columns=list(np.arange(60)),index=idx) test_fu_j = pd.DataFrame(test_fu_j,columns=list(np.arange(60)),index=idx) ### train = pd.merge(train_rho,train_src,on='id',how='outer') train = train.dropna() train = pd.merge(train,train_dst,on='id',how='outer') train = train.dropna() train = pd.merge(train,train_fu_r,on='id') train = pd.merge(train,train_fu_j,on='id') train = pd.merge(train,train_y,on='id',how='outer') train = train.dropna() test = pd.merge(test_rho,test_src,on='id') test = pd.merge(test,test_dst,on='id') test = pd.merge(test,test_fu_r,on='id') test = pd.merge(test,test_fu_j,on='id') print(train) print(test) view_nan(train) view_nan(test) ### train.to_csv('./data/dacon/comp1/train_new.csv') test.to_csv('./data/dacon/comp1/test_new.csv')
train = pd.read_csv('./data/dacon/comp1/train.csv', index_col=0, header=0) test = pd.read_csv('./data/dacon/comp1/test.csv', index_col=0, header=0) train_dst = train.filter(regex='_dst$', axis=1) #.replace(0, np.NaN) test_dst = test.filter(regex='_dst$', axis=1) #.replace(0, np.NaN) train_dst = train_dst.interpolate(axis=1) test_dst = test_dst.interpolate(axis=1) # train_dst = train_dst.replace(0, np.NaN) # test_dst = test_dst.replace(0, np.NaN) # train_dst = train_dst.interpolate(axis=1) # test_dst = test_dst.interpolate(axis=1) view_nan(train_dst) # view_nan(test_dst) train_dst.fillna(0, inplace=True) test_dst.fillna(0, inplace=True) train_src = train.filter(regex='_src$', axis=1) test_src = test.filter(regex='_src$', axis=1) train_rho = train.filter(regex='rho$', axis=1) test_rho = test.filter(regex='rho$', axis=1) train_1 = train.filter(regex='hhb$', axis=1) train_2 = train.filter(regex='hbo2$', axis=1) train_3 = train.filter(regex='ca$', axis=1) train_4 = train.filter(regex='na$', axis=1)
# index = x.loc[pd.isna(x[x.columns[0]]), :].index # print(x.iloc[index,:]) y = train.loc[:, 'hhb':'na'] x = x.fillna(method='bfill') x = x.fillna(method='ffill') # x = x.fillna(0) # view_nan(test) test = test.fillna(method='bfill') test = test.fillna(method='ffill') # test = test.fillna(0) view_nan(x) print() view_nan(test) # 회기 모델 x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.8, random_state=0) scaler = RobustScaler() x_train = scaler.fit_transform(x_train) x_test = scaler.transform(x_test) # n_estimators = 450 # learning_rate = 0.1