Kesimpulan dari tugas akhir ini adalah :
1. Algoritma ID3 berhasil diimplementasikan dengan 375 dataquery pencarian situs website dengan menggunakan 4 kategori yang ada.
2. Dari hasil 10 kali pengujian dengan 500 data didapat hasil akurasi yang paling tinggi yaitu sebesar 24%. Nilai maksimum didapat niliai sebesar 24% dan nilai minimum didapat nilai sebesar 16%. Rata – rata nilai akurasi yang didapat adalah sebesar 19%.
6.2Saran
Saran yang diperlukan untuk perbaikan dan pengembangan program lebih lanjut adalah :
1. Program dapat menerima masukan file berupa csv tidak hanya yang bertipe .xls.
2. Data untuk pengujian diperbesar agar didapat nilai akurasi yang lebih tinggi.
Daftar Pustaka
Hermawati Fajar Astuti, 2003, Data Mining, Yogyakarta,
Iko Pramudiono, 2003, Pengantar Data Mining, Kuliah Umum IlmuKomputer.Com
Sarwono Jonathan, 2013, 12 Jurus Ampuh SPSS untuk Riset Skripsi, Jakarta,
Taufiq Luthfi, Emha, Kusrini, 2009, Algoritma Data Mining, Yogyakarta,
Yudho Giri Sucahyo, 2003, Penerapan Data Mining, Artikel Populer IlmuKomputer.Com
LAMPIRAN 1
Dibawah ini adalah implementasi program yang digunakan untuk membuat sistem.
Package Form
1. a. Nama kelas : FormLogin
b. Nama method
:TombolLoginActionPerformed(java.awt.event.ActionEvent evt)
c. Fungsi method : d. Listing program :
Private void TombolLoginActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here String username = jTextField1.getText(); String pswd = jPasswordField1.getText(); CekLogin cek = new CekLogin();
boolean hasil = cek.cekLogin(username, pswd); if(hasil==true){
HalamanUtama form = new HalamanUtama(); form.setVisible(hasil);
this.dispose(); }
}
private void passwordFieldKeyPressed(java.awt.event.KeyEvent evt) { // TODO add your handling code here:
String pswd = jPasswordField1.getText(); CekLogin cek = new CekLogin();
boolean hasil = cek.cekLogin(username, pswd); if(hasil==true){
HalamanUtama form = new HalamanUtama(); form.setVisible(hasil);
this.dispose(); }
}
2. a. Nama kelas : HalamanUtama b. Nama method :TestingFold()
c. Fungsi method : untuk pengujian data d. Listing program :
private void TestingFold() { int fold = 3;
String[][] data = this.getData();
String[][][] dataDibagi = new String[fold][][];
for (int i = 0; i < fold; i++) { // membagi data sesuai jumlah fold dataDibagi[i] = getDataByFold(data, fold, i);
System.out.println(dataDibagi[i].length); }
int bener = 0; int total = 0;
for (int i = 0; i < fold; i++) { String[][] dataJoin = null; for (int j = 0; j < fold; j++) {
if(j != i) { // data lain jadi trainning *digabungkan
joinData(dataJoin, dataDibagi[j]); }
}
Tree tree = new Tree();
tree.buildTree(dataJoin); // membuat tree dari data trainning fold ke-i
for (int j = 0; j < dataDibagi[i][0].length; j++) { // untuk mengetest per row data dalam tree
String hasil = tree.testing(transformData(dataDibagi[i], j)); // proses testing
prediksiTextArea.setText(prediksiTextArea.getText() +
"Hasil = " + hasil + "=?=" + dataDibagi[i][0][j] + "\n");
if(hasil.equals(dataDibagi[i][0][j])) { // mencocokan hasil test dengan interest data asli
bener++; // menghitung jumlah yang benar }
total++; // menghitung jumlah total data testing }
}
prediksiTextArea.setText(prediksiTextArea.getText() +
"Persentase = " + ((float) bener * 100 / total) + "%");// menghitung presentase
System.out.println("Persentase = " + ((float) bener * 100 / total) + "%");
}
3. a. Nama kelas : HalamanUtama
c. Fungsi method : untuk mengubah data baris menjadi kolom dan data kolom menjaddi baris.
d. Listing program :
private String[ ] transformData(String[ ][ ] data, int idx) { // mengubah data row -> colom |colom -> row
String[ ] newData = new String[data.length - 1]; for (int i = 0; i < newData.length; i++) {
newData[i] = data[i + 1][idx]; }
return newData; }
4. a. Nama kelas : HalamanUtama
b. Nama method :String[][] joinData(String[][] data1, String[][] data2)
c. Fungsi method : untuk menggabungkan 2 set data. d. Listing program :
private String[ ][ ] joinData(String[ ][ ] data1, String[ ][ ] data2) { // menggabungakan 2 set data
String[ ][ ] data = new String[data1.length][data1[0].length + data2[0].length];
for (int i = 0; i < data1.length; i++) { for (int j = 0; j < data1[i].length; j++) {
data[i][j] = data1[i][j]; // copy data pertama }
}
for (int j = 0; j < data2[i].length; j++) {
data[i][j + data1[0].length] = data2[i][j]; //copy data kedua }
} return data; }
5. a. Nama kelas : HalamanUtama
b. Nama method :String[][] getDataByFold(String[][] data,int fold, int foldID)
c. Fungsi method : untuk mengambil data sesuai dengan foldnya. d. Listing program :
private String[ ][ ] getDataByFold(String[ ][ ] data,int fold, int foldID) { // mengambil data sesuai dengan foldnya
int sisa = data[0].length % fold; int jum = data[0].length / 3; jum += foldID < sisa ? 1 : 0;
String[ ][ ] newData = new String[data.length][jum]; int idx = 0;
for (int i = foldID; i < data[0].length; i+=fold) {//dimulai dari fold id, dengan increment fold
for (int j = 0; j < newData.length; j++) { newData[j][idx] = data[j][i]; } idx++; } return newData; }
6. a. Nama kelas : HalamanUtama b. Nama method :String[][] getData()
c. Fungsi method : untuk mengambil data dari tabel. d. Listing program :
private String[ ][ ] getData() { // mengambil data dari tabel
DefaultTabelModel model = (DefaultTabelModel)
tabel1.getModel();
String[ ][ ]data = new
String[model.getColumnCount()][model.getRowCount()]; for (int i = 0; i < data.length; i++) { // utk setiap kolom for (int j = 0; j < data[i].length; j++) { // untuk setiap baris data[i][j] = model.getValueAt(j, i).toString();
} }
return data; }
Package Kelas
1. a. Nama kelas : BacaFile
b. Nama method :String bacaFile(File file)
c. Fungsi method : untuk membaca file yang dimasukkan. d. Listing program :
public String bacaFile(File file) { String hasil = null;
if (file.isFile()) { try {
BufferedReader read = new BufferedReader(new FileReader(file)); //menyimpan file ke dalam buffer buat dibaca int i;
try {
while ((i = read.read()) != -1) { if (hasil != null) {
hasil = hasil + (char) i + read.readLine() + "\n"; } else {
hasil = (char) i + read.readLine() + "\n"; }
}
} catch (IOException ex) { ex.getMessage(); }
} catch (FileNotFoundException ex) { ex.getMessage();
} }
return hasil; }
2. a. Nama kelas : CekLogin
b. Nama method :cekLogin(String username, String pswd) c. Fungsi method : untuk
d. Listing program :
public boolean cekLogin(String username, String pswd) { boolean hasil = false;
if (!username.equals("") && !pswd.equals("")) { Login login = new Login();
hasil = login.login(username, pswd); if (hasil == true) {
JOptionPane.showMessageDialog(null, "Anda berhasil
Login"); } else {
JOptionPane.showMessageDialog(null, "Login gagal"); }
} else {
JOptionPane.showMessageDialog(null, "Isi data username dan password terlebih dahulu");
}
return hasil; }
3. a. Nama kelas : Login
b. Nama method :login(String username, String password) c. Fungsi method : untuk mencocokkan username dan password. d. Listing program :
public boolean login(String username, String password) { boolean hasil = false;
Koneksi connection = new Koneksi();
String sql = "select password from login where username = '" + username + "' and password= '" + password + "';";
Statement statement; try {
statement = (Statement)
connection.bukaKoneksi().createStatement();
while(result.next()){ System.out.println("ada"); hasil=true; } statement.close(); connection.tutupKoneksi(); } catch (SQLException ex) {
Logger.getLogger(Login.class.getName()).log(Level.SEVERE, null, ex);
}
return hasil; }
4. a. Nama kelas : PerhitunganData b. Nama method :entropy(int[][] data) c. Fungsi method : untuk setiap nilai entropy. d. Listing program :
public double[] entropy(int[][] data) {//menghitung nilai entropy double[] hasil = new double[data.length];
for (int i = 0; i < data.length; i++) { int[] tempData = data[i]; int tot = 0;
for (int j = 0; j < tempData.length; j++) {
tot += tempData[j]; // mencari jumlah mmasing2 interest }
hasil[i] = 0;
for (int j = 0; j < tempData.length; j++) { // loop untuk setiap partisi atribut
double temp = ((double) tempData[j] / tot) * log2(((double) tempData[j] / tot)); // menghitung peluang partisi dalam interest hasil[i] += Double.isInfinite(temp) || Double.isNaN(temp) ? 0 : temp; // menghindari nilai tidak terdefinisi.
}
hasil[i] = -hasil[i]; }
return hasil; }
5. Nama kelas : PerhitunganData
b. Nama method :gain(double[] entropy, int[][] data) c. Fungsi method : untuk setiap nilai gain.
d. Listing program :
public double gain(double[] entropy, int[][] data) {//menghitung nilai gain
if (entropy == null) { // entropynya harus ada entropy = this.entropy(data);
}
int jum = 0;
int tot[] = new int[data.length];
for (int i = 0; i < data.length; i++) { // menghitung jumlah setiap partisi atribut
int[] tempData = data[i]; tot[i] = 0;
for (int j = 0; j < tempData.length; j++) { tot[i] += tempData[j];
jum += tot[i]; }
double gain = 0;
for (int i = 0; i < tot.length; i++) { // menghitung semua (peluang * entropy) masing2 atribute
gain += (double) tot[i] / jum * entropy[i]; }
int[][] interest = new int[1][data[0].length];
for (int i = 0; i < data.length; i++) { // menghitung jumlah interest dalam masibg2 atribute
for (int j = 0; j < data[i].length; j++) { interest[0][j] += data[i][j]; }
}
double entropySemua = this.entropy(interest)[0]; // menghitung entrpy semua
Helper.textAreaActive.setText(
Helper.textAreaActive.getText() + "Entropy semua " + entropySemua + "\n");
// System.out.println("Entropy semua " + entropySemua); gain = entropySemua - gain; // rumus gain = entropysemua - jumlah (peluang * entropy)
return gain; }
6. a. Nama kelas : PerhitunganData
c. Fungsi method : untuk mengubah data mentah(tabel) menjadi data informasi jumlah partisi atribute per interest
d. Listing program :
public int[ ][ ][ ] transfromData(String[ ][ ] data) { // mengubah data mentah(tabel) menjadi data informasi jumlah partisi atribute per interest
int hasil[ ] [ ][ ] = new int[data.length - 1][ ][ ];
Map<String, Integer> dicInterest = new HashMap<String, Integer>();
for (int i = 0; i < data[0].length; i++) { //membuat daftar interest yang ada
String val = data[0][i];
if (!dicInterest.containsKey(val)) { dicInterest.put(val, dicInterest.size()); }
}
for (int i = 0; i < hasil.length; i++) { // loop masing2 atribute Map<String, Integer> dic = new HashMap<String, Integer>(); for (int j = 0; j < data[i + 1].length; j++) { // mebuat daftar partisi atribute
String val = data[i + 1][j]; if (!dic.containsKey(val)) { dic.put(val, dic.size()); }
}
int[][] tabelAttribute = new
int[dic.keySet().size()][dicInterest.keySet().size()];
partisi atribute per iterest tabelAttribute[dic.get(data[i + 1][j])][dicInterest.get(data[0][j])]++; } } hasil[i] = tabelAttribute; } return hasil; }
7. a. Nama kelas : PerhitunganData
b. Nama method :buildTree(String[][] tabel)
c. Fungsi method : untuk membuat pohon keputusan (tree). d. Listing program :
public Node buildTree(String[][] tabel) {// membuat tree
if (tabel.length < 2) { // merupakan attribute terakhir tidak dapat diproses
return new Node(); }
int[][][] data = transfromData(tabel);
double[] gain = new double[data.length]; int maxGainIndex = 0;
double[][] entro = new double[data.length][];
for (int i = 0; i < data.length; i++) { // mencari gain atribut yang maximal
int[][] tempData = data[i];
gain[i] = gain(entro[i] = entropy(tempData), tempData); maxGainIndex = gain[i] > gain[maxGainIndex] ? i :
maxGainIndex; Helper.textAreaActive.setText( Helper.textAreaActive.getText() + gain[i] + "\n"); // System.out.println(gain[i]); } Helper.textAreaActive.setText( Helper.textAreaActive.getText() + "---" + "\n"); // System.out.println("---");
String[] unik = unique(tabel[maxGainIndex + 1]); // mencari partisi variable
Node currNode = new Node();
currNode.setChilds(new Node[unik.length]); currNode.setIdxSyarat(maxGainIndex); Helper.textAreaActive.setText(
Helper.textAreaActive.getText() + "UNIK" + "\n"); // System.out.println("UNIK");
for (int i = 0; i < unik.length; i++) { Helper.textAreaActive.setText(
Helper.textAreaActive.getText() + unik[i] + "\n"); // System.out.println(unik[i]);
}
for (int i = 0; i < unik.length; i++) {
if (entro[maxGainIndex][i] == 0) { // jika entropy = 0, maka akan menjadi node terakhir(leaf)
Node nod = new Node();
nod.setHasil(getLeaf(tabel, maxGainIndex + 1, unik[i], data[maxGainIndex][i].length)); // untuk menentukan interest nod.setValueSyaratParent(unik[i]);
} else { // jika entory !0 maka akan dipecah jadi child int jum = 0;
for (int j = 0; j < data[maxGainIndex][i].length; j++) { jum += data[maxGainIndex][i][j]; } Helper.textAreaActive.setText( Helper.textAreaActive.getText() + maxGainIndex+"-"+unik[i] +"-"+ jum + "\n"); // System.out.println(maxGainIndex+"-"+unik[i] +"-"+ jum); String[][] newTabel = removeUnik(tabel, maxGainIndex + 1, unik[i], jum); // menghilangkan data yang bukan merupakan partisi varible yg sedang diproses
for (int j = 0; j < newTabel.length; j++) { String[] strings = newTabel[j]; for (int k = 0; k < strings.length; k++) { Helper.textAreaActive.setText( Helper.textAreaActive.getText() + strings[k]); // System.out.print(strings[k]+" "); } Helper.textAreaActive.setText( Helper.textAreaActive.getText() + "" +""+""+ "\n"); // System.out.println("");System.out.println("");System.out.println(""); }
if (newTabel.length < 2) { // merupakan varibale terakhir dipakasa mencari leaf
Node nod = new Node();
nod.setHasil(getLeaf(tabel, maxGainIndex + 1, unik[i], data[maxGainIndex][i].length)); // dicari leaf dengan jumlah paling banyak atau pertama terbanyak
nod.setValueSyaratParent(unik[i]); currNode.getChilds()[i] = nod;
} else { // masih bisa dipecah childnya
Node child = buildTree(newTabel); // rekursive mengulang proses yang sama utk data yg sudah dipotong
child.setValueSyaratParent(unik[i]); currNode.getChilds()[i] = child; } } } Helper.textAreaActive.setText( Helper.textAreaActive.getText() + "---" + "\n"); // System.out.println("---"); return currNode; }
8. a. Nama kelas : PerhitunganData
b. Nama method :getLeaf(String[][] data, int idx, String unik, int jumInterest)
c. Fungsi method : untuk mencari leaf (hasil node terakhir pada pohon keputusan).
d. Listing program :
private String getLeaf(String[][] data, int idx, String unik, int jumInterest) { // mencari leaf
Map<String, Integer> interest = new HashMap<String, Integer>(); String maxVal = "";
for (int i = 0; i < data[idx].length; i++) { // loop setiap data ut mencari yang terbanyak atau pertama terbanyak
if (data[idx][i].equals(unik)) { String val = data[0][i];
if (interest.containsKey(val)) { // membuat daftar partisi dengan jumlahnya
interest.put(val, interest.get(val).intValue() + 1); // jika sudah ada ditambah 1
} else {
interest.put(val, 1); // jika belum ada diintisial 1 }
if (interest.containsKey(maxVal)) { // inisialisasi maxVal jika sudah akan dibandingkan
if (interest.get(val).intValue() >
interest.get(maxVal).intValue()) { // pengecekan data terbanyak maxVal = val;
}
} else { // jika belum maka akan dianggap max maxVal = val; } } } return maxVal; }
9. a. Nama kelas : PerhitunganData
b. Nama method :removeUnik(String[][] data, int idx, String unik, int jum)
c. Fungsi method : untuk menghilangkan atribut partisi unik dan bukan unik.
public String[][] removeUnik(String[][] data, int idx, String unik, int jum) { // menghilangkan "attribute partisi unik", dan "partisi yang bukan unik"
String[][] newData = new String[data.length - 1][jum]; int id = 0;
for (int i = 0; i < data[idx].length; i++) { // baris
if (data[idx][i].equals(unik)) { // ini filter yang unik (selain partisi unik bisa di copy)
int tempJ = 0; // kolom
for (int j = 0; j < data.length; j++) {
if (idx != j) { // ini filter atribut unik (selain atribut unik bisa di copy) newData[tempJ][id]= data[j][i]; tempJ++; } } id++; } } return newData; }
10.a. Nama kelas : PerhitunganData b. Nama method :unique(String[] data)
c. Fungsi method : untuk membuat daftar partisi variable yang unik
d. Listing program :
rivate String[ ] unique(String[ ] data) { // membuat daftar partisi variable yang unik
ArrayList<String> dic = new ArrayList<String>(); for (int i = 0; i < data.length; i++) {
String val = data[i];
if (!dic.contains(val)) { // jika belum ada, dimasukan dalam list dianggap unik
dic.add(val); }
}
String[] unik = new String[dic.size()];
for (int i = 0; i < unik.length; i++) { // mengubah dari arrayylist ke arrayString unik[i] = dic.get(i); } return unik; } }
11.a. Nama kelas : Tree b. Nama method :printTree()
c. Fungsi method : untuk menampilkan tree (pohon keputusan) d. Listing program :
public void printTree() { //menampilkan tree Node curr = root; // mulai dari root Stack<Node> st = new Stack<Node>(); st.push(curr);
while (!st.empty()) { //selama stacknya masih ada, berarti masih ada node yang bisa d tampilkan
curr = st.pop();
terakhir maka yg ditampikan adalah value dari attribute (smartphone di tipe) Helper.textAreaActive.setText( Helper.textAreaActive.getText() + curr.getValueSyaratParent() + "-" + curr.getHasil() + "\n"); // System.out.println(curr.getValueSyaratParent() + "-" + curr.getHasil());
} else { // jika punya child maka yg ditampilkan childnya...
String s = curr.getIdxSyarat() + "-" +
curr.getValueSyaratParent() + " = ";
for (int i = 0; i < curr.getChilds().length; i++) { // mendapatkan setiap child
st.push(curr.getChilds()[i]); // memasukan tiap child dalam stack Helper.textAreaActive.setText( Helper.textAreaActive.getText() + curr.getChilds()[i].getValueSyaratParent() + "," + "\n"); // s += curr.getChilds()[i].getValueSyaratParent() + ","; // nampilin } Helper.textAreaActive.setText( Helper.textAreaActive.getText() + s + "\n"); // System.out.println(s); } } }
12.a. Nama kelas : Tree
c. Fungsi method : untuk menghilangkan attribute dalam index tertentu
d. Listing program :
String[] removeAtt(String[] dat, int idx) { // untuk mengilangkan attribute dalam index tertentu
String[] datTemp = new String[dat.length - 1]; int id = 0;
for (int i = 0; i < dat.length; i++) { // loop untuk maisng2 attribute if (i != idx) { // mengopy data attribute selain yang mau dihapus datTemp[id] = dat[i]; id++; } } return datTemp; }
13.a. Nama kelas : Tree
b. Nama method :testing(String[] data)
c. Fungsi method : untuk pengecekkan data terhadap tree d. Listing program :
public String testing(String[] data) { String hasil = "";
Node curr = root; int syart = -1; int countDeep = 0;
while (curr.getChilds() != null) { // mencari node terakhir(tidak ada child)
boolean ada = false;
for (int i = 0; i < curr.getChilds().length; i++) { // mencari setiap child Helper.textAreaActive.setText( Helper.textAreaActive.getText() + data[curr.getIdxSyarat()] +"===="+curr.getChilds()[i].getValueSyaratParent() + "\n"); // System.out.println(data[curr.getIdxSyarat()] +"===="+curr.getChilds()[i].getValueSyaratParent()); if (data[curr.getIdxSyarat()].equals(curr.getChilds()[i].getValueSyara tParent())) { //membandingkan value dengan syarat dalam tree data = removeAtt(data, curr.getIdxSyarat());
curr = curr.getChilds()[i]; ada = true;
break; } }
if(!ada) { // jika tidakk ada syarat yang cocok return "unidentified"; } } hasil = curr.getHasil(); return hasil; }
14.a. Nama kelas : Tree b. Nama method :saveTree ( )
d. Listing program :
public void saveTree() { try {
File file = new File("save.obj");
FileOutputStream fileOutput = new FileOutputStream(file);
ObjectOutputStream objectOutput = new
ObjectOutputStream(fileOutput); objectOutput.writeObject(root); objectOutput.close(); fileOutput.close();
} catch (Exception ex) {
Logger.getLogger(Tree.class.getName()).log(Level.SEVERE, null,
ex);
} }
15.a. Nama kelas : Tree b. Nama method :loadTree ( )
c. Fungsi method : untuk membaca pola dari tree d. Listing program :
public boolean loadTree() { try {
File file = new File("save.obj");
FileInputStream fileInput = new FileInputStream(file);
ObjectInputStream objectInput = new
ObjectInputStream(fileInput);
root = (Node) objectInput.readObject(); objectInput.close();
return true;
} catch (Exception ex) {
Logger.getLogger(Tree.class.getName()).log(Level.SEVERE, null,
ex); }
return false; }
LAMPIRAN 2
Di bawah ini adalah hasil pohon keputusan (tree) dengan menggunakan data sebanyak 375 data. siang, pagi, malam, 2-null = Jakarta, Surabaya, San Mateo, Bandung, Medan, Singapore, Sidoarjo, Purwokerto, Depok, Batam, Pontianak, Mountain View, Boardman, Kudus, Tangerang, 1-malam = Tangerang-Motorbike Kudus-Motorbike Boardman-Motorbike Mountain View-Motorbike Pontianak-Motorbike Batam-Motorbike Depok-Motorbike Purwokerto-Smartphone Sidoarjo-Smartphone
Singapore-Smartphone akhir, awal, 1-Medan = awal-Motorbike akhir-Smartphone Bandung-Smartphone tengah, awal, akhir, 1-San Mateo = akhir-Motorbike Smartphone, 0-awal = , 0-Smartphone = -Smartphone Smartphone, 0-tengah = , 0-Smartphone = -Motorbike tengah, awal, 1-Surabaya = Smartphone, Personal computer, 0-awal = Personal computer-Motorbike , 0-Smartphone = -Motorbike Smartphone, Personal computer, 0-tengah =
, 0-Personal computer = -Smartphone , 0-Smartphone = -Motorbike awal, tengah, akhir, 1-Jakarta = akhir-Motorbike Smartphone, Personal computer, 0-tengah = , 0-Personal computer = -Motorbike , 0-Smartphone = -Motorbike Personal computer, Smartphone, 0-awal = , 0-Smartphone = -Motorbike , 0-Personal computer = -Smartphone Jakarta, Surabaya, Bandung, Boardman, Palembang, Singapore,
San Mateo, Madiun, Beijing, Bogor, Tangerang, Yogyakarta, Surakarta, Mojokerto, Saratoga, Tokyo, Bekasi, Providence, Pontianak, 1-pagi = Pontianak-Talisman Providence-Talisman Bekasi-Motorbike Tokyo-Motorbike Saratoga-Motorbike Mojokerto-Motorbike Surakarta-Smartphone Yogyakarta-Smartphone Tangerang-Smartphone Bogor-Smartphone Beijing-Smartphone Madiun-Smartphone San Mateo-Smartphone Singapore-Smartphone Palembang-Smartphone Personal computer, 0-Boardman = tengah, 0-Personal computer = , 0-tengah =
-Fashion Bandung-Fashion Surabaya-Fashion tengah, awal, akhir, 1-Jakarta = akhir-Smartphone Smartphone, 0-awal = , 0-Smartphone = -Smartphone Smartphone, Personal computer, Tabelt, 0-tengah = Tabelt-Talisman Personal computer-Fashion Smartphone-Fashion Surabaya, Jakarta, Denpasar, Mountain View, Bandung, Tejgaon, Yogyakarta, London, Samarinda, Sleman, Palembang, Singapore, Bogor, San Mateo, Boardman,
Pekanbaru, Kudus, Sidoarjo, Bantul, Medan, Makassar, Beijing, Depok, Dki Jakarta, Mega, 1-siang = Mega-Talisman Dki Jakarta-Talisman Depok-Smartphone tengah, akhir, 1-Beijing = akhir-Talisman tengah-Smartphone Makassar-Smartphone Smartphone, Personal computer, 0-Medan = Personal computer-Talisman Smartphone-Smartphone Bantul-Smartphone Personal computer, Smartphone, 0-Sidoarjo = Smartphone-Talisman Personal computer-Smartphone Personal computer, Smartphone, 0-Kudus = Smartphone-Talisman
Personal computer-Smartphone Personal computer, 0-Pekanbaru = tengah, 0-Personal computer = , 0-tengah = -Smartphone Boardman-Fashion Smartphone, 0-San Mateo = tengah, 0-Smartphone = , 0-tengah = -Fashion Bogor-Fashion awal, akhir, 1-Singapore = akhir-Smartphone Personal computer, 0-awal = , 0-Personal computer = -Fashion Personal computer, Tabelt, 0-Palembang = Tabelt-Talisman Personal computer-Fashion Sleman-Fashion Samarinda-Fashion London-Fashion Yogyakarta-Fashion
Tejgaon-Fashion tengah, akhir, awal, 1-Bandung = Personal computer, Smartphone, 0-awal = Smartphone-Talisman , 0-Personal computer = -Talisman Personal computer, 0-akhir = , 0-Personal computer = -Smartphone Smartphone, 0-tengah = , 0-Smartphone = -Talisman tengah, awal, akhir, 1-Mountain View = akhir-Fashion awal-Fashion Smartphone, 0-tengah = , 0-Smartphone = -Fashion Denpasar-Fashion Smartphone,
Personal computer, Tabelt, 0-Jakarta = Tabelt-Smartphone tengah, akhir, awal, 0-Personal computer = , 0-awal = -Fashion , 0-akhir = -Fashion , 0-tengah = -Fashion awal, tengah, akhir, 0-Smartphone = , 0-akhir = -Fashion , 0-tengah = -Talisman , 0-awal = -Fashion awal, akhir, tengah, 1-Surabaya = Smartphone,
Personal computer, 0-tengah = Personal computer-Smartphone , 0-Smartphone = -Talisman Personal computer, Smartphone, 0-akhir = Smartphone-Talisman , 0-Personal computer = -Fashion Personal computer, Smartphone, 0-awal = Smartphone-Smartphone Personal computer-Fashion
LAMPIRAN 3
Rule untuk interestFashion
Rule 1 : Interest Fashion = if waktu = pagi^bulan = tengah^type = Personal Computer^city = Boardman
Rule 2 : Interest Fashion = if waktu = pagi^bulan = tengah^type = Personal Computer^city = Jakarta
Rule 3 : Interest Fashion = if waktu = pagi^bulan = tengah^type = Smartphone Rule 4 : Interest Fashion = if waktu = siang^city = Boardman
Rule 5 : Interest Fashion = if waktu = siang^city = Bogor Rule 6 : Interest Fashion = if waktu = siang^city = Denpasar
Rule 7 : Interest Fashion = if waktu = siang^city = Jakarta^type = Personal Computer^bulan = akhir
Rule 8 : Interest Fashion = if waktu = siang^city = Jakarta^type = Personal Computer^bulan = awal
Rule 9 : Interest Fashion = if waktu = siang^city = Jakarta^type = Personal Computer^bulan = tengah
Rule 10 : Interest Fashion = if waktu = siang^city = Jakarta^type = Smartphone^bulan = akhir
Rule 11 : Interest Fashion = if waktu = siang^city = Jakarta^type = Smartphone^bulan = awal
Rule 13 : Interest Fashion = if waktu = siang^city = Mountain View^bulan = akhir Rule 14 : Interest Fashion = if waktu = siang^city = Mountain View^bulan = awal Rule 15 : Interest Fashion = if waktu = siang^city = Mountain View^bulan = tengah^type = Smartphone
Rule 16 : Interest Fashion = if waktu = siang^city = Palembang^type = Personal Computer
Rule 17 : Interest Fashion = if waktu = siang^city = Samarinda
Rule 18 : Interest Fashion = if waktu = siang^city = San Mateo^type = Smartphone^bulan = tengah
Rule 19 : Interest Fashion = if waktu = siang^city = Singapore^bulan = awal^type = Personal Computer
Rule 20 : Interest Fashion = if waktu = siang^city = Sleman
Rule 21 : Interest Fashion = if waktu = siang^city = Surabaya^type = Personal Computer^bulan = akhir
Rule 22 : Interest Fashion = if waktu = siang^city = Surabaya^type = Personal Computer^bulan = awal
Rule 23 : Interest Fashion = if wakktu = siang^city = Tejgaon Rule 24 : Interest Fashion = if wakktu = siang^city = Yogyakarta
Rule untuk interestSmartphone
Rule 1 : Interest Smartphone = if waktu = malam^city = Bandung
Rule 2 : Interest Smartphone = if waktu = malam^city = Jakarta^bulan = awal^type = Personal Computer
Rule 3 : Interest Smartphone = if waktu = malam^city = Medan^bulan =akhir Rule 4 : Interest Smartphone = if waktu = malam^city = Purwokerto
Rule 5 : Interest Smartphone = if waktu = malam^city = San Mateo^bulan = awal^type = Smartphone
Rule 6 : Interest Smartphone = if waktu = malam^city = Sidoarjo Rule 7 : Interest Smartphone = if waktu = malam^city = Singapore
Rule 8 : Interest Smartphone = if waktu = malam^city = Surabaya^type = Personal Computer^bulan = tengah
Rule 9 : Interest Smartphone = if waktu = pagi^bulan = akhir^city = Beijing Rule 10 : Interest Smartphone = if waktu = pagi^bulan = akhir^city = Bogor Rule 11 : Interest Smartphone = if waktu = pagi^bulan = akhir^city = Jakarta Rule 12 : Interest Smartphone = if waktu = pagi^bulan = akhir^city = Madiun Rule 13 : Interest Smartphone = if waktu = pagi^bulan = akhir^city = Palembang Rule 14 : Interest Smartphone = if waktu = pagi^bulan = akhir^city = San Mateo Rule 15 : Interest Smartphone = if waktu = pagi^bulan = akhir^city = Singapore Rule 16 : Interest Smartphone = if waktu = pagi^bulan = akhir^city = Tangerang Rule 17 : Interest Smartphone = if waktu = pagi^bulan = awal^city = Jakarta^type = Smartphone
Rule 18 : Interest Smartphone = if waktu = pagi^bulan = awal^city = Singapore Rule 19 : Interest Smartphone = if waktu = pagi^bulan = awal^city = Yogyakarta Rule 20 : Interest Smartphone = if waktu = pagi^bulan = tengah^type = Tabelt^city = Surakarta
Rule 21 : Interest Smartphone = if waktu = siang^city = Bandung^type = Personal Computer^bulan = akhir
Rule 22 : Interest Smartphone = if waktu = siang^city = Depok
Rule 23 : Interest Smartphone = if waktu = siang^city = Jakarta^type = Tabelt
Rule 24 : Interest Smartphone = if waktu = siang^city = Kudus^type = Personal Computer
Rule 25 : Interest Smartphone = if waktu = siang^city = Makasar
Rule 26 : Interest Smartphone = if waktu = siang^city = Medan^type = Smartphone Rule 27 : Interest Smartphone = if waktu = siang^city = Pekanbaru^type = Personal Computer^bulan = tengah
Rule 28 : Interest Smartphone = if waktu = siang^city = Sidoarjo^type = Personal Computer
Rule 29 : Interest Smartphone = if waktu = siang^city = Singapore^bulan = akhir Rule 30 : Interest Smartphone = if waktu = siang^city = Surabaya^type = Personal Computer^bulan = tengah
Rule 31 : Interest Smartphone = if waktu = siang^city = Surabaya^type = Smartphone^bulan = awal
Rule untuk interestMotorbike
Rule 1 : Interest Motorbike = if waktu = malam^city = Batam Rule 2 : Interest Motorbike = if waktu = malam^city = Boardman Rule 3 : Interest Motorbike = if waktu = malam^city = Depok
Rule 5 : Interest Motorbike = if waktu = malam^city = Jakarta^bulan = awal^type = Smartphone
Rule 6 : Interest Motorbike = if waktu = malam^city = Jakarta^bulan = tengah^type = Personal Computer
Rule 7 : Interest Motorbike = if waktu = malam^city = Jakarta^bulan = tengah^type = Smartphone
Rule 8 : Interest Motorbike = if waktu = malam^city = Kudus
Rule 9 : Interest Motorbike = if waktu = malam^city = Medan^bulan = awal Rule 10 : Interest Motorbike = if waktu = malam^city = Mountain View
Rule 11 : Interest Motorbike = if waktu = malam^city = Pontianak
Rule 12 : Interest Motorbike = if waktu = malam^city = San Mateo^bulan = akhir Rule 13 : Interest Motorbike = if waktu = malam^city = San Mateo^bulan = tengah^type = Smartphone
Rule 14 : Interest Motorbike = if waktu = malam^city = Surabaya^type = Personal Computer^bulan = awal
Rule 15 : Interest Motorbike = if waktu = malam^city = Surabaya^type = Smartphone^bulan = awal
Rule 16 : Interest Motorbike = if waktu = malam^city = Surabaya^type = Smaartphone^bulan = tengah
Rule 17 : Interest Motorbike = if waktu = malam^city = Tangerang
Rule 18 : Interest Motorbike = if waktu = pagi^bulan = akhir^city = Bekasi Rule 19 : Interest Motorbike = if waktu = pagi^bulan = awal^city = Mojokerto
Rule 20 : Interest Motorbike = if waktu = pagi^bulan = awal^city = Saragota