7.1 Kesimpulan
Dari hasil penelitian ini, dengan menggunakan algoritma Local Outlier Probability untuk melakukan deteksi outlier terhadap data akademik mahasiswa Teknik Informatika Universitas Sanata Dharma yang diterima melalui jalur tes dan prestasi, dapat diambil kesimpulan sebagai berikut : 1. Nilai jangkauan sangat mempengaruhi nilai derajat LoOP suatu obyek
data dan mempengaruji jumlah hasil outlier.
2. Nilai atribut lamda tidak berpengaruh terhadap jumlah outlier yang dihasilkan tetapi mempengaruhi derajat nilai LoOP.
3. Hasil perhitungan manual dan sistem menghasilkan hasil deteksi outlier dengan hasil yang sama.
4. Algoritma Local Outlier Probability hanya memberikan hasil outlier sebagai kandidat data outlier.
7.2 Saran
Berdasarkan hasil analisa dan pengujian pada tugas akhir ini, penulis memberika saran untuk perbaikan dalam pengembangan penelitian dan sistem secara lebih lanjut antara lain :
1. Sistem ini diharapkan dapat dikembangkan agar mampu menerima inputan file yang bertipe .arf, .dat, dan lain-lain.
2. Akan lebih baik jika sistem ini mampu melakukan seleksi baris tabel atau melakukan seleksi menggunakan kueri.
3. Hasil outlier dapat dikembangkan dalam bentuk grafik sehingga lebih interaktif.
4. Pengujian review dan validitas sangat penting dilakukan setelah pengguna melakukan deteksi outlier dengan sistem agar diperoleh hasil
outlier yang benar-benar valid. Pengujian ini dilakukan oleh pengguna yang ahli dan mengerti tentang data tersebut.
DAFTAR PUSTAKA
Amer, Mennatallah. 2011. Comparison of Unsupervised Anomaly Detection Techniques. Media Engineering and Technology German University in Cairo and Multimedia Analysis and Data Mining Competence Center German Research Center for Artificial Intelligence (DFKI GmbH) Kaiserslautern, Germany.
Davies, and Paul Beynon (2004). Database Systems Third Edition, Palgrave Macmillan, New York.
Han, Jiawei & Kamber, Micheline (2006). Data Mining Concepts and Techniques Second Edition. San Fransisco : Elsovier.
Knorr, Edwin M. (2002). Outlier and Data Mining: Finding Exception in Data. The University of British Columbia.
Kriegel, H-P.; Kroger, P.; Schubert, E.; Zimek, A. 2009. “Loop: local outlier probabilities”. Proceedings of the 18th ACM conference on Information and knowledge management, CIKM ’09.
Larose, Daniel T. 2005. Discovering knowledge in Data : An Introduction to Data Mining, John Willey & Sons, Inc.
Maimon, O. dan Last, M. (2000). Knowledge Discovery and Data Mining, The Info-Fuzzy Network (IFN) Methodology. Dordrecht : Kluwer Academic.
O’niel, B.K., Dakin, J., Hardy, K., Schrader, M., and Other. (1997). Oracle Data Warehousing Unleashed. Sams Publishing; 1st edition.
Ponniah, P. (2001). Data Warehouse Fundamentals : A comprehensive Guide for IT Professional, John Willey & Sons. Inc.
Pramudiono, I. (2007). Pengantar Data Mining : Menimbang Permata Pengetahuan di Gunung Data. http://www.ilmukomputer.org/wp-content/uploads/2006/08/iko-datamining.zip diakses pada tanggal 26 Oktober 2013 jam 14:54 WIB.
Rosa, Paulina Heruningsih Prima, Ridowati Gunawan, Sri Hartati Wijono. (2013). The Development of Academic Data Warehouse as a Basis for Decision Making : A Case Study at XYZ University. Proceeding of International Conference on Enterprise Information System and Application. Universitas Islam Indonesia, Yogyakarta, Indonesia 2013.
Santosa, Budi. (2007). “Data Mining Teknik Pemanfaatan Data untuk Keperluan Bisnis”, Graha Ilmu, Yogyakarta.
Sembiring, RK. (2003), Analisis Regresi, edisi kedua, ITB. Bandung.
Soemartini (2007). Pencilan (Outlier). Jurusan Statistika Fakultas MIPA UNPAD, Bandung.
Turban, E., Rainer, R. K., Potter, R. E. and Other, A. N. (2005). Introduction to Information Technology. Hoboken : Wiley.
Vardiansyah, Dani. (2008). Filsafat Ilmu Komunikasi: Suatu Pengantar, Indeks, Jakarta. Hal 3.
Witten, I. H and Frank, E. (2005). Data Mining : Practical Machine Learning Tools and Techniques Second Edition. Morgan Kauffman : San Francisco.
Whitten, J., & Bentley, L., (2005) Systems analysis and design methods (7th ed.). New York: McGraw-Hill/Irwin.
Whitten, J., & Bentley, L., (2007) Systems analysis and design methods (8th ed.). New York: McGraw-Hill/Irwin.
131
L
A
M
P
I
R
A
N
LAMPIRAN 1 Diagram Use Case
Memasukkan data file excel atau database
Mendeteksi outlier
Menyimpan hasil deteksi outlier
<<depends on>>
user
DIAGRAM USE CASE
Seleksi atribut
<<depends on>>
LAMPIRAN 2 Deskripsi Use Case
Nomor Use Case
Nama Use Case Deskripsi Aktor
1
Memasukkan data berupa dokumen excel atau database
Use Case ini menggambarkan proses penginputan data oleh pengguna dari file berformat .xls atau .csv atau data dari database untuk selanjutnya ditampilkan ke dalam Sistem
Pengguna
2
Mendeteksi outlier Use Case ini menggambarkan proses pencarian outlier terhadap data yang telah dimasukkan oleh pengguna
Pengguna
3
Menyimpan hasil deteksi outlier
Use case ini menggambarkan proses penyimpanan hasil pencarian outlier dalam bentuk file berformat .doc atau .txt
Pengguna
4
Seleksi atribut Use case ini menggambarkan proses pemilihan atribut yang akan digunakan untuk proses pencarian outlier
LAMPIRAN 3 Narasi Use Case
1.) Use Case Memasukkan data berupa dokumen excel atau database
Aktor Pengguna
Kondisi awal Pengguna telah masuk ke dalam sistem dan berada pada Halaman Utama (tab Preprocessing)
Kondisi akhir Data yang dipilih tampil pada tabel data di Halaman Utama
– tab Preprocessing
Aktivitas normal Actor Action System Respons Langkah 1
Aktor memilih button ‘pilih file’ untuk memilih file
excel berformat xls atau csv
Langkah 2
Sistem menampilkan dialog box jFileChooser untuk memilih file
Langkah 3
Aktor memilih file yang akan diproses kemudian mengklik button open
Langkah 4
Sistem menampilkan data yang telah dipilih ke dalam Tabel Data pada Halaman Utama – tab Preprocessing beserta dengan jumlah data dan jumlah atribut
Aktor berhasil memasukkan data
Aktivitas Alternatif Langkah 1a
Aktor memilih button ‘Pilih Database’
Langkah 2a
Sistem menampilkan dialog box pilih database
Langkah 3a
Aktor memilih jenis database dan memasukan konfigurasi database, kemudian memilh ok
Langkah 4a
Sistem menampilkan dialog bahwa koneksi database berhasil
Langkah 5a
Aktor memilih button OK
Langkah 6a
Sistem menampilkan dialog box pilih tabel
Langkah 7a
Aktor memilih tabel yang akan digunakan kemudian memilih button ok
Langkah 8a
Sistem menampilkan data ke dalam tabel di halaman utama
2.) Use Case Mendeteksi Outlier
Aktor Pengguna
Kondisi awal - Pengguna telah melakukan seleksi data atribut dan telah menekan tombol submit pada tab Preprocessing - Pengguna berada pada tab Deteksi Outlier
Kondisi akhir Pengguna dapat melihat hasil outlier dalam sebuah tabel Aktivitas normal Actor Action System Respons
Langkah 1
Aktor masukkan nilai parameter k dan kemudian klik button ‘Proses’
Langkah 2
Sistem melakukan proses pencarian outlier menggunakan algoritma local outlier probability dan kemudian menampilkan hasilnya ke dalam sebuah tabel
Langkah 3
Aktor berhasil mendeteksi outlier
3.) Use Case Menyimpan Hasil Outlier
Aktor Pengguna
Kondisi awal Pengguna telah melakukan deteksi outlier dan data hasil outlier telah tampil
Kondisi akhir Hasil deteksi outlier dapat disimpan dalam file sesuai dengan format pilihan pengguna
Aktivitas normal Actor Action System Respons Langkah 1
Aktor memilih button
‘simpan’
Langkah 2
Sistem menampilkan dialog box save file
Langkah 3
Aktor memilih lokasi penyimpanan data
Langkah 4
Aktor memasukkan nama file
Langkah 5
Aktor memilih ekstensi file data
Langkah 6
Aktor memilih button OK
Langkah 7
Sistem menyimpan file hasil deteksi outlier ke dalam komputer
Langkah 5
hasil pencarian outlier Aktivitas Alternatif -
4.) Use Case Seleksi Atribut
Aktor Pengguna
Kondisi awal Pengguna telah menampilkan data ke dalam tabel data pada
tab ‘Preprocessing’ pada Halaman Utama
Kondisi akhir Atribut yang tidak digunakan dihapus dari tabel data Aktivitas normal Actor Action System Respons
Langkah 1
Sistem menampilkan semua nama atribut di tabel seleksi atribut
Langkah 2
Aktor memilih atribut yang tidak digunakan dan kemudian klik button
‘hapus’
Langkah 3
Sistem menghapus atribut yang telah dipilih
Langkah 4
Aktor berhasil menyeleksi atribut
Aktivitas Alternatif Langkah 2a
Aktor memilih button
‘Tandai semua’ untuk
LAMPIRAN 4
Proses Umum Sistem Pendeteksi Outlier menggunakan Algoritma Local Outlier Probability
Start
Data bertipe .xls Data bertipe .csv Data basis data
Pilih seleksi atribut? Proses menyeleksi atribut Input parameter minPts Input parameter lamda Proses mendeteksi outlier Hasil deteksi outlier End Tidak Ya
LAMPIRAN 5 Diagram Aktivitas
6. Diagram Aktivitas Input Data File .xls dan .csv
Menjalankan HalamanUtama
Menampilkan HalamanUtama
Menekan button pilih file Menampilkan dialog box JFileChooser
Sistem Pengguna
Memilih file excel Mengecek kesesuaian file (harus bertipe xls atau csv)
Membaca dan menampilkan data ke dalam tabel data preprocessing beserta
jumlah data, jumlah atribut dan daftar atribut dalam tabel seleksi
sesuai
Tidak sesuai Start
7. Diagram Aktivitas Input Data Tabel Basis Data Menjalankan HalamanUtama - Preprocessing Sistem Pengguna Menampilkan HalamanUtama - Preprocessing
Menekan button Pilih DB
Memilih koneksi DB
Menampilkan Halaman PilihDB
Melakukan login ke basis data dengan mengisi username,
password, dbname
Validasi login basis data
Menampilkan Halaman PilihTabel Memilih tabel dalam basis
data
Menekan button OK
Membaca dan menampilkan data ke tabel data preprocessing beserta jumlah data, jumlah atribut, dan daftar atribut dalam tabel seleksi
Start
End valid
8. Diagram Aktivitas Seleksi Atribut
Sistem Pengguna
Menampilkan daftar atribut dalam tabel seleksi
Memilih atribut yang akan dihapus dengan menandai
baris atribut
Menekan button hapus atribut Menghapus atribut yang ditandai
Mengupdate atribut pada tabel data preprocessing
Start
9. Diagram Aktivitas Deteksi Outlier Menjalankan HalamanUtama – Deteksi Outlier Sistem Pengguna Menampilkan HalamanUtama – Deteksi Outlier Memasukkan parameter minpts dan lamda
Menekan button proses
Mengecek kesesuaian data inputan (tidak boleh mengandung
karakter dan bilangan negatif)
Memproses perhitungan menggunakan algoritma
LoOP
Menampilkan hasil deteksi outlier dalam tabel deteksi beserta jumlah
data dan lama deteksi
Start
End valid
10. Diagram Aktivitas Simpan Hasil Outlier
Sistem Pengguna
Menampilkan hasil deteksi pada tabel hasil outlier
Menekan button simpan
Memilih lokasi file penyimpanan, mengisi nama
file, memilih ekstensi file (doc, xls atau txt) Menampilkan dialog JFileChooser untuk menyimpan file Menyimpan file Start End
LAMPIRAN 6 Diagram Kelas Analisis
HalamanAwal HalamanPilihFile
Halaman Utama HalamanPilihDB
KoneksiDataBase HalamanPilihDatabase DatabaseController Graph Verteks DataLoop LoopTableModel CheckBoxTableModel SeleksiAtribut HalamanTentang HalamanBantuan Pengguna
LAMPIRAN 7 Diagram Sequence
1. Diagram Sequence Input Data Excel (.xls atau .csv) <<boundary>> Halaman Utama <<entity>> CheckBoxTableModel <<entity>> Seleksi Atribut
1. Tekan button Pilih File
2. Tampil jFileChooser
3. Memilih file .xls atau .csv
5. new CheckBoxTableModel
6. setAtribut(), getAtribut(), setPilih(), getPilih()
7. setPilih(false)
8. add(column, seleksiAtribut) 4. pilihFile()
9. Menampilkan data ke tabel tabel_DataPreprocess
2. Diagram Sequence Pilih Database <<boundary>> HalamanUtama <<controller>> DBControl <<entity>> koneksiDB
1. Tekan button Pilih File 2. db.setVisible(true) 3. Menampilkan halaman pilih db 6. selectTable(getConnection, table) 7.isConnectedSQL(), isConnectedOrcl() 8.isConnected(true) 9.showTable() 10.tampil HalamanPilihTable <<boundary>> HalamanPilihDB <<boundary>> HalamanPilihTabel
4.Memilih koneksi db, isi username, password, dbname, dan url
5.pilihDB() <<entity>> CheckBoxTableModel <<entity>> SeleksiAtribut 11. memilih tabel 12. selectTable() 13. menampilkan data tabel_DataPreprocess 14. new CheckBoxTableModel() 15. setAtribut(columnName) 16. setPilih(false) 17. add(column, seleksiAtribut) 18. tampil data pada
tabel_DataPreprocess
3. Diagram Sequence Deteksi Outlier <<boundary>> HalamanUtama <<entity>> Vertex <<entity>> LoopTabelModel 1. memasukkan parameter
minpts dan lamda 2. klok button proses
5. new Vertex() <<controller>> Graph <<boundary>> HalamanPilihTabel 3. inputData(jTable) 4. newGraph() <<entity>> DataLoop 6. setMinPts(minPts) 7. setLamda(lamda) 8. setDataLoop() 9. setLabe()l, setLoop() 10. setValueAt(), getValueAt() 12. tampil outlier 11. TableModel
4. Diagram Sequence Simpan Outlier
<<boundary>> Halaman Utama
1. Tekan button simpan
2. tampil save dialog
3. memilih lokasi penyimpanan
4. mengisi nama file 5. memilih tipe ekstensi
file (xls, doc, txt)
6. menekan button save
7. simpanLOOP()
8. konfirmasi file berhasil disimpan
5. Diagram Sequence Seleksi Atribut <<boundary>> Halaman Utama
1. Tandai atribut yang akan dihapus
3. hapusAtribut()
4. removeRow()
6. menampilkan data pada tabel_dataPreprocess yang telah diseleksi atributnya
<<entity>> CheckBoxTableModel
<<entity>> SeleksiAtribut
2. klik button hapus atribut
LAMPIRAN 8 Diagram Kelas Desain
<<boundary>> HalamanAwal <<boundary>> HalamanUtama <<boundary>> HalamanPilihFile <<boundary>> HalamanPilihDB <<boundary>> HalamanPilihTable <<controller>> DBControl <<entity>> KoneksiDB <<entity>> CheckBoxTableModel <<entity>> SeleksiAtribut <<controller>> Graph <<entity>> Vertex <<entity>> LoopTableModel <<entity>> DataLoop <<boundary>> HalamanBantuan <<boundary>> HalamanTentang 1 1 1 1 1 1 1…* 1 1 1 1 1 1 1…* 1 1 1…* 1 1 1 1…* memanggil memanggil memanggil memanggil memanggil memanggil memanggil memanggil memanggil memanggil memanggil memiliki memanggil memanggil
LAMPIRAN 9 Diagram Kelas
Berikut ini merupakan rincian atribut dan method masing-masing kelas <<entity>> koneksiDB - jdbcURL : String - user : String - password : String - conn : Connection
koneksiSQL( String, String, String) : Connection
isConnectedSQL (String, String, String) : Boolean
koneksiOrcl (String, String, String) : Connection
isConnectedOracle (String, String, String) : Boolean
isConnected( ) : Boolean getClosed( ) : Boolean setConn(Connection) : void getConn( ) : Connection setJdbcURL(String) : void getJdbcURL( ) : String setPassword(String) : void getPassword( ) : String setUser(String) : void getUser( ) : String
<<controller>> DBControl
displayTableOracle(Connection) : ResultSet
displayTableMySql(Connection) : ResultSet
selectTable(Connection, String) : ResultSet
<<entity>> Vertex - label : String - nilai : List<Double> - flagKunjungan : boolean - kDistance : Double - neighborhood : List<String> - pDist : Double - pLOF : Double - nPLOF : Double - LOOP : Double - anggotaNeighborhood : Double
Vertex(String, List<Double>) : constructor
setLabel(String) : void setNilai(List<Double>) : void setFlagKunjungan(Boolean) : void setKDistance(Double) : void setNeighborhood(List<String>) : void setpDist(Double) : void setPLOF(Double) : void
setNPLOF (Double) : void
setLOOP(Double) : void
getLabel( ) : String getNilai( ) : List<Double> getFlagKunjungan( ) : Boolean getKDistance( ) : Double getNeighborhood( ) : List<String> getPDist( ) : Double getPLOF( ) : Double getNPLOF( ) : Double getLOOP( ) : Double getAnggotaNeighborhood( ) : Double <<controller>> Graph - vertexList : Vertex[ ] - matriks : Double[ ] - jumlahVertex : int - k : int - dist : int[ ] - arStdev : Double[ ] - nPdist : Double[ ] - arPLOF ; Double[ ] - arLOOP1 : Double[ ] - neighborhood : int[ ][ ] - max : int - lamda : int Graph(int) : constructor setk(int) : void setMatriks(Double[ ][ ]) : void setVertexList(Vertex[ ]) : void setLamda(int) : void
getk( ) : int
getLamda( ) : int
getMatriks( ) : Double[ ][ ]
getVertexList( ) : Vertex[ ]
addVertex(String, List<Double>) : void
addEdge(int, int, Double) : void
cariJarak(int, int) : Double
tampilJarak( ) : void
search(String) : int
search2(Double, int) : void
Kdistance(int, int) : Double
setKdistance(String, int) : void
cariNeighborhood(Double, int) : List<String>
setNeighborhood(String) : void
setAnggotaNeighborhood(String, Double) : void
cariAnggotaNeighborhood(int, Double) : Double
tampilNeighbor( ) : void setJumlahAnggota( ) : void setPdist( ) : void caristdev( ) : void caripdist( ) : void cariLOOP( ) : void erf(Double) : Double inputData(JTable) : void setDataLoop(String) : LoOPTabelModel
<<entity>> seleksiAtribut - atribut : String
- pilih : Boolean
seleksiAtribut(String, Boolean) : constructor
setAtribut(String) : void setPilih(Boolean) : void getAtribut( ) : String) getPilih( ) : boolean <<controller>> CheckBoxTableModel - column : String[ ] - seleksi : seleksiAtribut - list : List<seleksiAtribut> CheckBoxTableModel( ) : constructor getRowCount( ) : int getColumnCount( ) : int getColumnName(int) : String
getValueAt(int, int) : Object
getColumnClass(int) : Class
setValueAt(Object, int, int) : void
isCellEditable(int, int) : Boolean
add(int, seleksiAtribut) : void
<<entity>> DataLoop - label : String - LoOP : Double - Ranking : int setLabel(String) : void setLoOP(Double) : void setRanking(int) : void getLabel( ) : String getLoOP( ) : Double getRanking( ) : int <<entity>> LoOPTabelModel - dlo : List<DataLoOP>
LoOPTabelModel(List<DataLoop>, String) : constructor
setValueAt(Object, int, int) : void
isCellEditable(int, int) : boolean
getValueAt(int, int) : Object
getRowCount( ) : int
getColumnCount( ) : int
LAMPIRAN 10 Listing Program
1. Implementasi Kelas koneksiDB.java
Berikut ini merupakan implementasi dari atribut dan method pada kelas koneksiDB.java yang digunakan untuk melakukan koneksi pada basis data.
package Model; import java.sql.*;
public class koneksiDB {
private static String jdbcURL; private static String user; private static String password; static Connection conn = null;
public koneksiDB(){}
public Connection koneksiSQL(String url, String user, String passw) { try {
Class.forName("org.gjt.mm.mysql.Driver");
setConn(DriverManager.getConnection(url, user, passw)); System.out.println("koneksi berhasil");
} catch (Exception ex) {
System.out.println("message: " + ex.getMessage()); }
return getConn(); }
public boolean isConnectedSQL(String url, String user, String passw) { if (koneksiSQL(url, user, passw) != null) {
return true; } else { return false; }
}
public Connection koneksiOrcl(String url, String user, String passw) { try {
Class.forName("oracle.jdbc.driver.OracleDriver");
setConn(DriverManager.getConnection(url, user, passw)); System.out.println("koneksi berhasil");
} catch (Exception ex) {
System.out.println("message: " + ex.getMessage()); }
return getConn(); }
public boolean isConnectedOracle(String url, String user, String passw) {
if (koneksiOrcl(url, user, passw) != null) { return true;
} else { return false; }
}
public boolean isConnected() { if (conn != null) { return true; } else { return false; } }
public boolean getClosed() { if (isConnected()) { try {
conn.close(); conn = null;
} catch (SQLException ex) { ex.printStackTrace(); } return true; } else { return false; } }
public static Connection getConn() { return conn;
}
public static void setConn(Connection conn) { koneksiDB.conn = conn;
}
public static String getJdbcURL() { return jdbcURL;
}
public static void setJdbcURL(String jdbcURL) { koneksiDB.jdbcURL = jdbcURL;
}
public static String getPassword() { return password;
}
public static void setPassword(String password) { koneksiDB.password = password;
}
public static String getUser() { return user;
}
public static void setUser(String user) { koneksiDB.user = user; } }
2. Implementasi Kelas Graph.java
Di dalam kelas ini atribut dan method dibuat sesuai perancangan. Kelas ini merupakan kelas yang memuat perancangan struktur data yang berkaitan dengan algoritma seperti implementasi matriks dua dimensi dan graf. Selain itu pada method ini memuat proses perhitungan menggunakan algoritma Local Outlier Probability.
package Controller; import Model.*; import java.util.*;
import javax.swing.JTable; public class Graph {
private Vertex vertexList[]; private Double matriks[][]; private int jumlahVertex = 0; private int k;
private int dist[];
private Double arStdev[]; private Double nPdist[]; private Double arPLOF[]; private Double arLOOP1[]; private int neighborhood[][]; private int max;
private int lamda;
public Graph(int maxVertex) {
vertexList = new Vertex[maxVertex];
matriks = new Double[maxVertex][maxVertex]; neighborhood = new int[maxVertex][maxVertex]; max = maxVertex + 1;
arStdev = new Double[maxVertex]; nPdist = new Double[maxVertex]; arPLOF = new Double[maxVertex]; arLOOP1 = new Double[maxVertex];
for (int i = 0; i < maxVertex; i++) { for (int j = 0; j < maxVertex; j++) { if (i == j) { matriks[i][j] = 0.0; } else { matriks[i][j] = -1.0; } } } }
public void setk(int k) { this.k = k;
}
public void setMatriks(Double[][] matriks) { this.matriks = matriks;
}
public void setvertexList(Vertex[] vertexList) { this.vertexList = vertexList;
}
public int getk() { return k; }
public int getLamda() { return lamda;
}
this.lamda = lamda; }
public Double[][] getMatriks() { return matriks;
}
public Vertex[] getvertexList() { return vertexList;
}
public void addVertex(String label, List<Double> nilai) { vertexList[jumlahVertex++] = new Vertex(label, nilai); }
public void addEdge(int awal, int akhir, Double nilai) { matriks[awal][akhir] = matriks[akhir][awal] = nilai; }
public Double cariJarak(int indexAwal, int indexTujuan) { List<Double> a = new ArrayList<Double>();
List<Double> b = new ArrayList<Double>(); a = vertexList[indexAwal].getNilai();
b = vertexList[indexTujuan].getNilai(); Double total = 0.0;
for (int i = 0; i < a.size(); i++) {
total = total + Math.pow((a.get(i) - b.get(i)), 2); }
return Math.sqrt(total); }
public void tampilJarak() { System.out.print("\t");
for (int i = 0; i < vertexList.length; i++) {
System.out.print("" + vertexList[i].getLabel() + "\t"); }
for (int i = 0; i < matriks.length; i++) {
System.out.print("" + vertexList[i].getLabel() + "\t");
for (int j = 0; j < vertexList.length; j++) { System.out.print("" + matriks[i][j] + "\t"); }
} }
public int Search(String label) {
for (int i = 0; i < vertexList.length; i++) { if (label.equals(vertexList[i].getLabel())) { return i; } } return -1; }
public void Search2(Double jarak, int indeks) { for (int i = 0; i < vertexList.length; i++) { if (matriks[indeks][i].equals(jarak)) { vertexList[i].setFlagKunjungan(true); }
} }
public Double Kdistance(int indeks, int jangkaun) { for (int i = 0; i < vertexList.length; i++) {
vertexList[i].setFlagKunjungan(false); }
Double[] a;
a = new Double[jangkaun]; Double kDistance = 0.0;
if (indeks == -1) {
System.out.println("Data tidak ada"); } else {
for (int t = 0; t < a.length; t++) {
for (int i = 0; i < vertexList.length; i++) {
if (matriks[indeks][i] != -1 && matriks[indeks][i] != 0 && vertexList[i].isFlagKunjungan() == false) { if (matriks[indeks][i] < temp1) { temp1 = matriks[indeks][i]; } } } a[t] = temp1; Search2(temp1, indeks); temp1 = Double.MAX_VALUE; } }
for (int i = 0; i < a.length; i++) { if (kDistance < a[i]) { kDistance = a[i]; } } return kDistance; }
public void setKdistance(String label, int jangkauan) { int index = Search(label);
vertexList[index].setkDistance(Kdistance(index, jangkauan)); }
public List<String> cariNeighborhood(Double k, int indeks) { List<String> a = new ArrayList<String>();
System.out.println("Tidak ada data"); } else {
for (int i = 0; i < vertexList.length; i++) {
if (matriks[indeks][i] != -1 && matriks[indeks][i] != 0) { if (matriks[indeks][i] < Kdistance(i, (getk() + 1))) { a.add(vertexList[i].getLabel()); } } } } return a; }
public void setNeighborhood(String label) { int indeks = Search(label);
vertexList[indeks].setNeighborhood(cariNeighborhood(vertexList[indeks ].getAnggotaNeighborhood(), indeks));
}
public void setAnggotaNeighborhood(String label, Double k) { int indeks = Search(label);
vertexList[indeks].setAnggotaNeighborhood(cariAnggotaNeighborhood(i ndeks, k));
}
public Double cariAnggotaNeighborhood(int indeks, Double k) { for (int i = 0; i < vertexList.length; i++) {
vertexList[i].setFlagKunjungan(false); }
Double AnggotaNeighbor = 0.0;
Double temp1 = Double.MAX_VALUE; int anggotaNeighbor = 0;
if (indeks == -1) {
System.out.println("Tidak ada kota dalam peta"); } else {
for (int i = 0; i < vertexList.length; i++) {
if (matriks[indeks][i] != -1 && vertexList[i].isFlagKunjungan() == false) {
if (matriks[indeks][i] < Kdistance(i, (getk() + 1))) { temp1 = matriks[indeks][i];
anggotaNeighbor = anggotaNeighbor + dist[i]; } } } AnggotaNeighbor = temp1; Search2(temp1, indeks); temp1 = Double.MAX_VALUE; } return AnggotaNeighbor; }
public void tampilNeighbor() { int n = 0;
for (int i = 0; i < vertexList.length; i++) {
System.out.println(" " + vertexList[i].getLabel() + "\t"); for (int j = 0; j < vertexList.length; j++) {
if (matriks[i][j] != 0 && matriks[i][j] != -1) { if (matriks[i][j] < Kdistance(i, (getk() + 1))) { n = n + 1; System.out.println("anggota neighborhood[" + j + "]" + matriks[i][j] + "\t"); } } }
System.out.println("nk(o) [" + i + "] = " + n); System.out.println("");
n = 0; }
}
public void setJumlahAnggota() { int x = 0;
Double stdev = 0.0;
for (int i = 0; i < vertexList.length; i++) { for (int j = 0; j < vertexList.length; j++) { if (matriks[i][j] !=0 && matriks[i][j] != -1){ if (matriks[i][j] < Kdistance(i, (getk() + 1))) { x = x + 1; neighborhood[i][j] = j; } else { neighborhood[i][j] = max; } } } dist[i] = x; x = 0; } }
public void setPdist(){ double stdev=0.0; double pdist = 0.0;
Double temp1 = Double.MAX_VALUE; for (int i= 0; i < matriks.length; i++) { for (int j= 0; j < vertexList.length; j++) { if (matriks[i][j] != 0 && matriks[i][j] != -1){ temp1 = matriks[i][j];
if (matriks[i][j] < Kdistance(i, (getk() +1))){ stdev = stdev + Math.pow(matriks[i][j], 2); }
} }
stdev = Math.sqrt((stdev / getk())); arStdev[i]=stdev;
pdist = arStdev[i] * getLamda() ; nPdist[i] = pdist;
stdev = 0; }
}
public void caristdev(){ Double stdev=0.0;
Double temp1=Double.MAX_VALUE; for (int i= 0; i < matriks.length; i++) { for (int j= 0; j < vertexList.length; j++) { if (matriks[i][j] !=0 && matriks[i][j] != -1){ temp1 = matriks[i][j];
if(matriks[i][j] < Kdistance(i, (getk() +1))){ stdev = stdev + Math.pow(matriks[i][j], 2); }
} }
stdev = Math.sqrt((stdev / getk())); arStdev[i]=stdev; System.out.println("stdev [" + i + "] : " + stdev + "\t"); System.out.println(""); stdev = 0.0; } }
public void caripdist(){ Double pdist=0.0;
Double temp1=Double.MAX_VALUE; for (int i= 0; i < matriks.length; i++) { pdist = arStdev[i] * getLamda();
System.out.println("pdist [" + i + "] : " + pdist + "\t"); }
System.out.println(""); pdist = 0.0;
}
public void cariJumlahPdist() { Double sum = 0.0; Double jumlahPdist = 0.0; Double plof=0.0; Double plof2 = 0.0; Double jmlPLOF2=0.0; Double nplof = 0.0; Double loop1=0.0; Double loopx=0.0;
for (int i = 0; i <matriks.length; i++) { setPdist();
for (int j= 0; j < neighborhood.length; j++) { if (matriks[i][j] != 0 && matriks[i][j] != -1){ if (matriks[i][j] < Kdistance(i, (getk() + 1))){ jumlahPdist = jumlahPdist + nPdist[j]; }
} }
sum = sum + jumlahPdist;
plof = (((nPdist[i] * getk()) / jumlahPdist) - 1); arPLOF[i] = plof;
System.out.println("PLOF [" + i + "] : " + plof); System.out.print("\t");
plof2 = Math.pow(plof, 2);
jmlPLOF2 = jmlPLOF2 +plof2; System.out.print("\t");
jumlahPdist = 0.0; plof=0.0;
plof2=0.0; }
int jmlMahasiswa = vertexList.length;
nplof = lamda *(Math.sqrt(jmlPLOF2/jmlMahasiswa)); System.out.println("nplof = " +nplof);
for (int i = 0; i <matriks.length; i++) { loopx = nplof * Math.sqrt(2); loop1 = (arPLOF[i] / loopx); arLOOP1[i] = loop1;
System.out.println("hasil loop1 [" + i + "] : " + loop1); Double hasil_LOOP = erf(arLOOP1[i]);
System.out.println("ERF [" + i + "] : " + hasil_LOOP); if(erf(arLOOP1[i])>0){ System.out.println("OUTLIER"); }else{ System.out.println("BUKAN OUTLIER"); } vertexList[i].setLOOP(hasil_LOOP); } }
public static Double erf(Double z) {
double t = 1.0 / (1.0 + 0.5 * Math.abs(z)); // use Horner's method
double ans = 1 - t * Math.exp( -z*z - 1.26551223 + t * ( 1.00002368 + t * ( 0.37409196 + t * ( 0.09678418 + t * (-0.18628806 + t * ( 0.27886807 + t * (-1.13520398 + t * ( 1.48851587 + t * (-0.82215223 + t * ( 0.17087277)))))))))); if (z >= 0) return ans;
else return -ans; }
public void inputData(JTable jTableData) {
for (int i = 0; i < jTableData.getRowCount(); i++) { String label = "";
List<Double> listNilai = new ArrayList<Double>(); for (int j = 0; j < jTableData.getColumnCount(); j++) { if (j == 0) {
if (jTableData.getValueAt(i, j).toString().equals("")) { label = "null";
} else {
label = jTableData.getValueAt(i, j).toString(); listNilai.add(Double.parseDouble(jTableData.getValueAt(i, j).toString().replace(",", "."))); } } else { if (jTableData.getValueAt(i, j).toString().equals("")) { listNilai.add(0.0); } else if (jTableData.getValueAt(i,
j).toString().matches("[^0-9]*")) { listNilai.add(0.0); } else { listNilai.add(Double.parseDouble(jTableData.getValueAt(i, j).toString().replace(",", "."))); } } } addVertex(label, listNilai); }
for (int i = 0; i < jTableData.getRowCount(); i++) { for (int j = i + 1; j < jTableData.getRowCount(); j++) { if (i != j) { addEdge(i, j, cariJarak(i, j)); } } } }
public LoOPTabelModel setDataLoop(String label) { List<DataLoop> dlc = new ArrayList<DataLoop>(); DataLoop dl;
for (int i = 0; i < vertexList.length; i++) { if (vertexList[i].getLOOP()>0) { dl = new DataLoop(); dl.setLabel(vertexList[i].getLabel()); dl.setLoOP(vertexList[i].getLOOP()); dlc.add(dl);