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