• Tidak ada hasil yang ditemukan

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);

Dokumen terkait