84 LAMPIRAN1 PlotWindRoseAnemometer Plotarahangindominan(1Januari2022-24Desember2023) (a)WindroseSB3 (b)WindroseSB4 (c)WindroseSB5 (d)WindroseSB6 Datasetkecepatananginanemometerlengkapdapatdiunduhmelaluitautan berikut:https://s.id/anemo_raw 85 LAMPIRAN2 PlotEstimasiKecepatanAnginBaselineInputArahAngin Dominan PlotestimasikecepatananginmodelbaratananemometerSB4 86 PlotestimasikecepatananginmodelbaratananemometerSB5 87 PlotestimasikecepatananginmodeltimurananemometerSB4 88 PlotestimasikecepatananginmodeltimurananemometerSB5 89 PlotestimasikecepatananginmodelperalihananemometerSB4 90 PlotestimasikecepatananginmodelperalihananemometerSB5 91 LAMPIRAN3 PlotEstimasiKecepatanAnginBaselineInputPembobotan Kuadran PlotestimasikecepatananginanemometerSB4 92 93 94 PlotestimasikecepatananginanemometerSB5 95 96 97 LAMPIRAN4 PlotEstimasiTerkoreksiKecepatanAngin Plotestimasiterkoreksi(baselineinputarahangindominan) 98 Plotestimasiterkoreksi(baselineinputpembobotankuadran) Input:1-3anemometertetangga 99 Plotestimasiterkoreksi(baselineinputpembobotankuadran) Input:datahistoris 100 Plotestimasiterkoreksi(baselineinputpembobotankuadran) Input:kombinasidatahistorisdananemometerterdekat Hasilestimasiterkoreksikecepatananginanemometerlengkapdapatdiunduh melaluitautanberikut:https://s.id/anemo_estimasi 101 LAMPIRAN5 CodingPemrograman Pra-pemrosesandataset #ImportLibrary importpandasaspd importnumpyasnp fromdatetimeimportdatetime,timedelta #DeklarasiRawData t=np.arange(datetime(2022,1,1),datetime(2023,12,25),timedelta(minutes=1)) sb2a=pd.read_excel(r"D:\TesisHaryas\VirtualAutomaticWeatherStation\Data Tesis\LLAWS\sb6_2022.xlsx") sb2b=pd.read_excel(r"D:\TesisHaryas\VirtualAutomaticWeatherStation\Data Tesis\LLAWS\sb6_2023.xlsx") #DataTimestamp w1=pd.to_datetime(sb2a.iloc[0:,0]).dt.tz_localize(None) w2=pd.to_datetime(sb2b.iloc[0:,0]).dt.tz_localize(None) w=pd.concat([w1,w2]) w=w.array #DataWindDirection wd1=sb2a.iloc[0:len(w1)+1,2] wd2=sb2b.iloc[0:len(w2)+1,2] wd=pd.concat([wd1,wd2]) wd=np.array(wd) wd=wd.tolist() #DataWindSpeed ws1=sb2a.iloc[0:len(w1)+1,3] ws2=sb2b.iloc[0:len(w2)+1,3] ws=pd.concat([ws1,ws2]) ws=np.array(ws) wss=ws[~np.isnan(ws)] ws=ws.tolist() #CekGapTimestamp waktu=np.isin(t,w) #InputGapMissingData foriinrange(len(t)): if(waktu[i].all()==False): wd.insert(i,float("nan")) ws.insert(i,float("nan")) 102 #QCWindSpeed QC=np.full((len(ws),1),0) foriinrange(len(ws)-1): if((ws[i]>40)or(ws[i+1]-ws[i]>30)): ws[i]=float("nan") QC[i]=1 t_2022=t[:int(0.5*len(t))] t_2023=t[int(0.5*len(t)):] wd_2022=wd[:int(0.5*len(wd))] wd_2023=wd[int(0.5*len(wd)):] ws_2022=ws[:int(0.5*len(ws))] ws_2023=ws[int(0.5*len(ws)):] #PindahkeFile df1=pd.DataFrame(t_2022.tolist()) df2=pd.DataFrame(wd_2022) df3=pd.DataFrame(ws_2022) df4=pd.DataFrame(t_2023.tolist()) df5=pd.DataFrame(wd_2023) df6=pd.DataFrame(ws_2023) df=pd.concat([df1,df2,df3,df4,df5,df6],axis=1) df.to_excel(excel_writer="C:/Users/Haryas/Desktop/SB6.xlsx") Missingdatatreatmentdataset importpandasaspd importnumpyasnp fromdatetimeimportdatetime,timedelta fromsklearn.experimentalimportenable_iterative_imputer fromsklearn.imputeimportIterativeImputer fromsklearn.linear_modelimportBayesianRidge #DeklarasiRawData t=np.arange(datetime(2022,1,1),datetime(2023,1,25),timedelta(minutes=1)) sb3=pd.read_excel(r"D:\TesisHaryas\VirtualAutomaticWeatherStation\Data Tesis\LLAWS\SB3.xlsx") sb4=pd.read_excel(r"D:\TesisHaryas\VirtualAutomaticWeatherStation\Data Tesis\LLAWS\SB4.xlsx") sb5=pd.read_excel(r"D:\TesisHaryas\VirtualAutomaticWeatherStation\Data Tesis\LLAWS\SB5.xlsx") sb6=pd.read_excel(r"D:\TesisHaryas\VirtualAutomaticWeatherStation\Data Tesis\LLAWS\SB6.xlsx") #DeklarasiArahAngin wd2a=sb3.iloc[0:(365*1440),2] wd2b=sb3.iloc[0:(358*1440),5] wd2=pd.concat([wd2a,wd2b]) 103 wd4a=sb4.iloc[0:(365*1440),2] wd4b=sb4.iloc[0:(358*1440),5] wd4=pd.concat([wd4a,wd4b]) wd5a=sb5.iloc[0:(365*1440),2] wd5b=sb5.iloc[0:(358*1440),5] wd5=pd.concat([wd5a,wd5b]) wd6a=sb6.iloc[0:(365*1440),2] wd6b=sb6.iloc[0:(358*1440),5] wd6=pd.concat([wd6a,wd6b]) wd=pd.concat([wd2,wd4,wd5,wd6]) wd=np.array(wd) wd=np.reshape(wd,(4,int(len(wd)/4))) wdd=wd.T foriinrange(len(wdd)-1440): if((np.isnan(wdd[i+1440,0])==True)and(np.isnan(wdd[i+1440,1])==True)and(np.i snan(wdd[i+1440,2])==True)and(np.isnan(wdd[i+1440,3])==True)): wdd[i+1440,0]=wdd[i,0] wdd[i+1440,1]=wdd[i,1] wdd[i+1440,2]=wdd[i,2] wdd[i+1440,3]=wdd[i,3] #DeklarasiKecepatanAngin ws2a=sb3.iloc[0:(365*1440),3] ws2b=sb3.iloc[0:(358*1440),6] ws2=pd.concat([ws2a,ws2b]) ws4a=sb4.iloc[0:(365*1440),3] ws4b=sb4.iloc[0:(358*1440),6] ws4=pd.concat([ws4a,ws4b]) ws5a=sb5.iloc[0:(365*1440),3] ws5b=sb5.iloc[0:(358*1440),6] ws5=pd.concat([ws5a,ws5b]) ws6a=sb6.iloc[0:(365*1440),3] ws6b=sb6.iloc[0:(358*1440),6] ws6=pd.concat([ws6a,ws6b]) ws=pd.concat([ws2,ws4,ws5,ws6]) ws=np.array(ws) ws=np.reshape(ws,(4,int(len(ws)/4))) wss=ws.T 104 foriinrange(len(wss)-1440): if((np.isnan(wss[i+1440,0])==True)and(np.isnan(wss[i+1440,1])==True)and(np.is nan(wss[i+1440,2])==True)and(np.isnan(wss[i+1440,3])==True)): wss[i+1440,0]=wss[i,0] wss[i+1440,1]=wss[i,1] wss[i+1440,2]=wss[i,2] wss[i+1440,3]=wss[i,3] #MetodeImputasiMICE imputerBR=IterativeImputer(estimator=BayesianRidge(),max_iter=20) imputerBR.fit(wdd) hasil_wdd=imputerBR.transform(wdd) imputerBR=IterativeImputer(estimator=BayesianRidge(),max_iter=20) imputerBR.fit(wss) hasil_wss=imputerBR.transform(wss) #SimpanFile df1=pd.DataFrame(t.tolist()) df2=pd.DataFrame(hasil_wdd) df=pd.concat([df1,df2],axis=1) df.to_excel(excel_writer="C:/Users/Haryas/Desktop/ArahAngin.xlsx") df1=pd.DataFrame(t.tolist()) df2=pd.DataFrame(hasil_wss) df=pd.concat([df1,df2],axis=1) df.to_excel(excel_writer="C:/Users/Haryas/Desktop/KecepatanAngin.xlsx") EstimasimenggunakanTCN(baselineinputpembobotankuadran) #IMPORTLIBRARYPROGRAM PYTHON #pandasuntukpengolahandataframe importpandasaspd #numpyuntukpengolahanvariabelnumerik importnumpyasnp #mathuntukkalkulasimatematika importmath #matplotlibuntukmemplotgrafik importmatplotlib.pyplotasplt #datetimeuntukinisialisasivariabeltanggaldanwaktu fromdatetimeimportdatetime,timedelta #sklearndankerasuntukfungsi-fungsialgoritmaMLP fromsklearn.linear_modelimportLinearRegression fromsklearn.preprocessingimportMinMaxScaler fromkeras.modelsimportSequential fromkeras.layersimportDense 105 #fromkeras.layersimportBidirectional,LSTM,Conv2D,MaxPooling2D, Flatten,Reshape fromtcnimportTCN #INISIALISASI #DeklarasiRawData t=np.arange(datetime(2022,1,1),datetime(2023,12,25),timedelta(minutes=1)) ws=pd.read_excel(r"D:\TesisHaryas\VirtualAutomaticWeatherStation\Data Tesis\LLAWS\KecepatanAngin.xlsx") wd=pd.read_excel(r"D:\TesisHaryas\VirtualAutomaticWeatherStation\Data Tesis\LLAWS\ArahAngin.xlsx") #DeklarasiKecepatanAngin ws2=ws.iloc[0:,2] ws2=np.array(ws2).reshape(-1,1) ws4=ws.iloc[0:,3] ws4=np.array(ws4).reshape(-1,1) ws5=ws.iloc[0:,4] ws5=np.array(ws5).reshape(-1,1) ws6=ws.iloc[0:,5] ws6=np.array(ws6).reshape(-1,1) #DeklarasiArahAngin wd2=wd.iloc[0:,2] wd2=np.array(wd2).reshape(-1,1) wd4=wd.iloc[0:,3] wd4=np.array(wd4).reshape(-1,1) wd5=wd.iloc[0:,4] wd5=np.array(wd5).reshape(-1,1) wd6=wd.iloc[0:,5] wd6=np.array(wd6).reshape(-1,1) #TransformasiArahAnginMenjadiNilaiKuadran foriinrange(len(wd2)): if((wd2[i]>315)or(wd2[i]