UpdateDataStrting: Boolean Relasi_Kontroler.Java

64 7 siapkan objek yang akan disimpan di dalam file tempRes5,tmp dan tempDokter5.tmp dengan cara membuat variabel objek bertipekan TempResModel dengan nama “tempR” dan Array dari DokterModel dengan nama “dokterAll” 8 berikan nilai untuk atribut dalam objek tempR TempResModel tempR = new TempResModel; tempR.setStatustrue; tempR.setTanggalfebruari_2013; tempR.setCentroidrKontrol.centroid; tempR.setGenericrKontrol.getGeneric; 9 Berikan nilai untuk dokterAll Dokter_Model [] dokterAll=rKontrol.listAllDokter; 10 Simpan Objek dalam file outObjectStream2.writeObjecttempR; outObjectStream.writeObjectdokterAll;

2. UpdateDataStrting: Boolean

a. Method ini akan mengakses file yang dimaksud dalam url dengan nama myFile bertipekan InputStream b. Buat variabel local bertipe InputStream dengan nama inputStreamDokter yang berisikan file dokter yang akan dicluster c. Buat InputStream inputStreamCentroid bernama myCentroid berisikan centroid awal R.raw.centroid . d. Buat Objek Dari Kelas Relasi_Kontroler bernama rKontrol kemudian isi parameter konsuktor. Seperti listing berikut : Relasi_Kontroler rKontrol = new Relasi_KontrolermyFile, myCentroid; 65 e. buat variabel bertipekan FIleOutputStream berinama fosDokter dan fosCentroid f. deklarasikan variabel tersebut dengan mengisi parameter openFIleOutput untuk masing masing variabel. Perhatikan listing program berikut. FileInputStream fisDokter = openFileInputFILE_TemDokter; FileInputStream fisCentroid = openFileInputFILE_NAME; g. buat objek bertipekan ObjectInputStream dengan nama inObjectStream dan inObjectStream2 deklarasikan parameter dengan fosDokter dan fosCentroid. Perhatikan listing program berikut. ObjectInputStream inInputStream = new ObjectInputStream fssDokter; ObjectOutputStream inObjectStream2 = new ObjectOutputStreamfosCentroid; h. siapkan objek yang akan disimpan di dalam file tempRes5,tmp dan tempDokter5.tmp dengan cara membuat variabel objek bertipekan TempResModel dengan nama “tempR” dan Array dari DokterModel dengan nama “dokterAll” i. berikan nilai untuk atribut dalam objek tempR TempResModel tempR = new TempResModel; tempR.setStatustrue; tempR.setTanggalfebruari_2013; tempR.setCentroidrKontrol.centroid; tempR.setGenericrKontrol.getGeneric; 66 j. Berikan nilai untuk dokterAll Dokter_Model [] dokterAll=rKontrol.listAllDokter; k. Simpan Objek dalam file inObjectStream2.writeObjecttempR; inObjectStream.writeObjectdokterAll; l. Selesai. 67

3. Relasi_Kontroler.Java

a. Relasi_KontrolerInputStream, InputStream : void 1 Method ini hanya bekerja sebagai pengatur langkah program 2 Method ini akan mengisikan variabel listDokter dengan hasil dari method setDataDokter, seperti pada listring berikut : listDokter = setDataDokterinputStreamDokter ; 3 Kemudian listDokter memiliki nilai dari getDataNormalitaion dimana listDokter dan method getGeneric menjadi parameter dari method ini. listDokter = getDataNormalitationlistDokter, getGeneric; 4 Setelah listDokter bernilai getDataNormalitation maka baru akan dilakukan proses clustering dengan memanggil method Information_retrival_kontroler. Information_retrival_kontroler listDokter, getCentroidAwalinputStreamCentroid; b. getCentroidAwalInputStream: double[][] 1 buat variabel bertipe double [][] bernama centroid, deklarasikan sebagai berikut: double centroid[][] = new double[4][61]; 2 buat variabel String bernama “data”, variabel ini berfungsi sebagai tempat penyimpanan semua data dari inputStream 3 Masukan data dalam InputStream kedalam variabel data , seperti pada listing program berikut : 68 int c; int i = 0; while c = inputStream.read = -1 { data = data + char c; i++; } inputStream.close; 4 Pisahkan data berdasarkan enter “\n” StringTokenizer dataToken = new StringTokenizerdata, \n; 5 Buat variabel String[] bernama “dataArr” String dataArr[] = new String[dataToken.countTokens]; 6 Setiap index dataArr akan memuat 1 centroid Perhatikan listing program berikut : int index = 0; while dataToken.hasMoreTokens { dataArr[index] = dataToken.nextToken; index++; } 7 Centroid yang ada di setiap Index dataArr harus dipisahkan berdasarkan “\t” sehingga satu centroid terdiri dari beberapa index data untuk setiap centroid simpan dalam variabel yang berbeda StringTokenizer ar0, ar1, ar2 , ar3. Perhartikan listing program berikut : StringTokenizer ar0 = new StringTokenizerdataArr[0], \t; StringTokenizer ar1 = new StringTokenizerdataArr[1], \t; StringTokenizer ar2 = new StringTokenizerdataArr[2], \t; StringTokenizer ar3 = new StringTokenizerdataArr[3], \t; 69 8 Data centroid sudah tersimpan di StringTokenizer ar0 , StringTokenizer ar1 , StringTokenizer ar2, StringTokenizer ar3, lakukanlah copy data dari variabel-variabel tersebut kedalam array double centroid [][]. Perhatikan listing program berikut : int index0 = 0; while ar0.hasMoreTokens {; double nilai = Double.parseDoublear0.nextToken; centroid[0][index0] = nilai; index0++; } c. setDataDokterInputStream: void 1 input berupa inputStream yang merupakan file bertipe .xls 2 buat variabel yang berisi konten-konten yang akan disimpan terpisah untuk setiap barisnya misalnya kelas dokter_model yang akan di isi merek_obat , generic , bobot obat , dokter dan spesialis . Perhatrikan deklarasi variabel berikut listDokter = new Dokter_Model[sheet.getColumns - 2]; String[] merek_obat = new String[sheet.getRows - 2]; String[] generic = new String[sheet.getRows - 2]; double[] bobotObat = new double[sheet.getRows - 2]; String[] dokter = new String[sheet.getColumns - 2]; String[] Spesialis = new String[sheet.getColumns - 2]; 3 Deklarasikan index objek dari kelas Dokter_model , perhatikan listing program berikut : for int i = 0; i listDokter.length; i++ { listDokter[i] = new Dokter_Model; } 70 4 Buatlah variabel Integer Index_dokter =0 , i=0 5 Selama sheet.getColoumns I jika tidak maka ke langkah 14 6 Jika i==0 a Maka integer index=0 , integer j=1 b Selama sheet.getRows j jika tidak maka selesai c Cell cell = sheet.getCelli, j; d Jika cell.getContents =”” i. Maka merek_obat[index] = cell.getContents.toString; poses ini menyimpan merek obat dalam string [] ii. Index ++ e j++ , kembali ke b 7 tidak jika i=1 a Maka integer index=0 , integer j=1 b Selama sheet.getRows j jika tidak maka selesai c Cell cell = sheet.getCelli, j; d Jika cell.getContents =”” e Maka generic[index] = cell.getContents.toString; poses ini menyimpan Generic obat dalam string [] iii. Index ++ 71 f j++ , kembali ke b 8 untuk kondisi lain else a Maka int indexObat = 0; , int j=0 b Selama j sheet.getRows; jika tidak maka selesai c Cell cell = sheet.getCelli, j; d Jika j==0 iv. Maka seting nama dokter listDokter[indexDokter]. setNamacell.getContents.toString; e Jika j==0 v. Maka listDokter[indexDokter]. setSpesialiscell.getContents.toString; indexDokter++; f Kondisi lain else vi. Jika cell.getContents == Maka seting nilai menjadi 0.0 bobotObat[indexObat] = 0.0; indexObat++; vii. Jika cell.getContents =”” bobotObat[indexObat] = Double.parseDoublecell.getContents; indexObat++; g j++ kembali ke b 72 9 Buatlah variabel bantu untuk menampung nilai bobot obat setelah looping index j selesai seperti berikut : double [] arrtemp = new double[bobotObat.length]; 10 Salinlah data menggunakan loop for int j = 0; j arrtemp.length; j++ { arrtemp[j] = bobotObat[j]; } 11 Setelah data bobot obat telah masuk kedalam arrtemp maka setinglah seluruh atribut dari objek Rekomendasi_obat_Model seperti berikut: Rekomendasi_obat_Model rek = new Rekomendasi_obat_Model; rek.setBobotobatarrtemp; rek.setGenericgeneric; rek.setObatmerek_obat; 12 Seting listDokter dengan menambahkan rekomendasi obat listDokter[indexDokter - 1].setReekomendasi_obatrek; 13 i++ kembali ke langkah 5 14 kembalikan nilat listDokter 73 d. getGeneric: String[] 1 Buatlah variabel String generic = “” dan TempString =”” , jum = 2 lakukan perulangan untuk membaca generic milik salahsatu dokter 3 integer I =0 4 selama listDokter [0].getReekomendasi_obat.getGeneric.length I jika kondisi tidak terpenuhi maka lakukan langkah 8 5 jika listDokter[0].getReekomendasi_obat.getGeneric[i].equalstem pString serupa dengan TempString maka {do nothing} 6 jika tidak a. tempString = listDokter[0].getReekomendasi_obat.getGeneric[i]; b. tambahkan nilai generic dengan nilai tempString c. generic += tempString + \n; d. Jum ++ 74 7 I ++ 8 Setelah melakukan proses filtering dan memasukan generic kedalam array, lakukanlah pemotonga string berdasarkan enter “\n” 9 StringTokenizer tokenizer = new StringTokenizergeneric, \n; 10 Buatlah variabel baru seperti berikut String[] arrGeneric = new String[tokenizer.countTokens]; 11 Kemudian salinlah data dari tokenizer kedalam arrGeneric sesuai index 12 Kembalikan nilai arrGeneric e. getDataNormalitationDokter_Model[],String[] : Dokter_Model[] 1 buat variabel bertipekan double arrBobotGeneric [jumlah_dokter][jumlah_generic] 2 hitung nilai bobot atau jumlah total dari obat yang direkomendasikan setiap dokter. Bila dokter tersebut memiliki generic yang sama maka dijumlahkan. Perhatikan listing program berikut: for int i = 0; i listDokter.length; i++ { for int j = 0; j arrGeneric.length; j++ { double tempBobot = 0.0; for int k = 0; k listDokter[i].getReekomendasi_obat. getGeneric.length; k++ { iflistDokter[i].getReekomendasi_obat.getGeneric[k].equalsar rGeneric[j] { tempBobot = tempBobot + listDokter[i].getReekomendasi_obat. getBobotobat[k]; 75 3 setelah mendapatkan bobot total generic dari setiap dokter. Lakukanlah pengesetan nilai dimana untuk setiap dokter[i] = arrBobotGeneric[i][j] perhatikan listing berikut : for int i = 0; i listDokter.length; i++ { double[] arrBobot = new double[arrGeneric.length]; for int j = 0; j arrBobot.length; j++ { arrBobot[j] = arrBobotGeneric[i][j]; } Olahan_data_Model olahandata = new Olahan_data_Model; olahandata.setGenericarrGeneric; olahandata.setBobotgenericarrBobot; listDokter[i].getReekomendasi_obat.setOlahanDataolahandata; } 4 kemudian carilah nilai maksimal setiap generic yang ada dari seluruh dokter kemudian simpan dalam double ArrMaxBobotGeneric[] 5 nilai setiap generic pada dokter harus dinormalkan dengan cara dibagi oleh nilai maksimum dari generic tersebut. Misalnya dokter.Generic[i] ArrMaxBobotGeneric[i] dapat dilihat pada listing program berikut for int i = 0; i arrGeneric.length; i++ { for int j = 0; j listDokter.length; j++ { for int k = 0; k listDokter[j].getReekomendasi_obat. getOlahanData.getGeneric.length; k++ { if arrGeneric[i].equalslistDokter[j]. getReekomendasi_obat.getOlahanData. getGeneric[k] { listDokter[j].getReekomendasi_obat. getOlahanData.getBobotgeneric[k] = listDokter[j].getReekomendasi_obat.getOlahanData. 76 getBobotgeneric[k] ArrMaxBobotGeneric[k]; } } } } 6 retrunkan listDokter f. Information_Retrival_kontrolerDokter_Model[], double[]: void 1 Method ini merupakan method kontroler untuk memanggil method- method untuk memproses data kluster dengan memulai iterasi pertama. 2 Lakukan seting value untuk variabel public centroid dan listAllDokter dengan nilai dari variabel parameter , seperti pada listing berikut : this.listAllDokter = dokterList; this.centroid = centroidParameter; 3 Buat variabel lokal Dokter_Model[] dengan nama dkterTemp untuk menyimpan hasil dari iterasi pertama dengan centtroid pertama. Perhatikan listing program berikut: Dokter_Model[] dkterTemp = createtIterationcentroid; 4 Lakukan proses clustering dengan memanggil method ClusterHelper dengan parameter dokterTemp , dan nilai centroid dari dokterTemp . dimana dokterTemp adalah dokter dengan nilai iterasi pertama. Perhatikan listing program berikut: ClusterHelperdkterTemp, getCentroiddkterTemp; 77 5 selesai g. ClusterHelperDokter_Model[], double[][]: void 1 Method ini aka mengetur jalanya iterasi yang lebih dari satu 2 Buat variabel boolean statusEndIteration = false 3 Buat variabel temporary untuk menyimpan data dokter dalam parameter perhatikan listing program berikut: Dokter_Model[] nextIteration = createtIterationcentroid_parameter; 4 i=0 5 selama jumlah i listdokter.length 6 jika nilai cluster dalam listdokter[i] tidak sama dengan listdokter dalam iterasi berikutnya i. Maka statusEndIteration = true; ii. Break iii. Lanjut langkah h Perhatikan langkah berikut : for int i = 0; i listdokter.length; i++ { if listdokter[i].getCluster = nextIteration[i].getCluster { statusEndIteration = true; break; } 78 7 i++ , kembali ke langkah e 8 jika statusEndIteration == true iv. ulangi langkah b dengan parameter adalah listDokter dari iterasi n yang merupakan hasil dari iterasi dengan centroid = centroid parameter dan beri nilai parameter centroid dengan nilai centroid dari listdokter dengan iterasi ke n perhatikan langkah berikut : ClusterHelpercreatetIterationcentroid_parameter, getCentroidcreatetIterationcentroid_parameter; 9 jika jika statusEndIteration = true seting semua atribut yang diperlukan dengan hasil perhitungan. Perhatikan langkah berikut: this.centroid = centroid_parameter; this.listAllDokter = listdokter; getCentroidnextIteration; System.out.printlnselesai; 10 selesai h. createIterationdouble[][]: DokterModel[] 1 deklarasikan variabel bertipe dokter_model[] dengan nama listDokterTemp. Perhatikan langkah berikut: Dokter_Model[] lstDokterTemp = new Dokter_Model[listAllDokter.length]; 79 2 lakukan copy array dari seluruh index listAllDokter ke listDokterTemp 3 buatlah variabel Total_resultC1 , Total_resultC2 , Total_resultC3 , Total_resultC4 untuk menyimpan jarak euclidean dengan masing- masing centroid . perhatikan listing program berikut untuk mengukur jarak euclidean setiap dokter: double resultC1 = 0; double resultC2 = 0; double resultC3 = 0; double resultC4 = 0 for int k = 0; k ListDokterTemp[i].getReekomendasi_obat. getOlahanData.getGeneric.length; k++ { resultC1 = resultC1 + Math.powListDokterTemp[i].getReekomendasi_obat.get OlahanData.getBobotgeneric[k] - centroid[0][k], 2; resultC2 = resultC2 + Math.powListDokterTemp[i].getReekomendasi_obat.get OlahanData.getBobotgeneric[k] - centroid[1][k], 2; resultC3 = resultC3 + Math.powListDokterTemp[i].getReekomendasi_obat.get OlahanData.getBobotgeneric[k] - centroid[2][k], 2; resultC4 = resultC4 + Math.powListDokterTemp[i].getReekomendasi_obat.get OlahanData. getBobotgeneric[k] - centroid[3][k], 2; 80 } double Total_resultC1 = Math.sqrtresultC1; double Total_resultC2 = Math.sqrtresultC2; double Total_resultC3 = Math.sqrtresultC3; double Total_resultC4 = Math.sqrtresultC4; 4 hitunglah jarak euclidean dari setiap dokter dengan masing-masing centroid kemudian simpan di variabel untk setiap dokter. Perhatikan listing program berikut: i. cari nilai terkecil dari jarak euclidean yang terkecil dari dokter tersebut ii. tambahkan nilai 1 untk array cluster yang terkecil. iii. Untuk langkah i dan ii perhatikan listing program berikut if Total_resultC1 Total_resultC2 Total_resultC1 Total_resultC3 Total_resultC1 Total_resultC4 { Cluster = 1; countAnggotaCluster[0]++; }else if.....else if.... 81 5 Kembalikan nilai dari listDokterTemp 6 Selesai

4. Similarity controller_avtivity.java