PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI DETEKSI OUTLIER MENGGUNAKAN ALGORITMA BLOCK-BASED NESTED-LOOP STUDI KASUS : DATA AKADEMIK MAHASISWA PROGRAM STUDI TEKNIK INFORMATIKA UNIVERSITAS SANATA DHARMA SKRIPSI Diajukan untuk Memenuhi salah Satu Syarat Memperoleh Gelar Sarjana Komputer Program Studi Teknik Informatika Disusun Oleh : Fiona Endah Kwa NIM : 095314041 PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS SANATA DHARMA YOGYAKARTA 2013 i PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI OUTLIER DETECTION USING BLOCK-BASED NESTED-LOOP ALGORITHM CASE STUDY : STUDENT ACADEMIC DATA OF INFORMATICS ENGINEERING STUDY PROGRAM, SANATA DHARMA UNIVERSITY A THESIS Presented as Partial Fulfillment of the Requirements To Obtain the Sarjana Komputer Degree In Informatics Engineering Study Program By : Fiona Endah Kwa NIM : 095314041 INFORMATICS ENGINEERING STUDY PROGRAM DEPARTMENT OF INFORMATICS ENGINEERING FACULTY OF SCIENCE AND TECHNOLOGY SANATA DHARMA UNIVERSITY YOGYAKARTA 2013 ii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI iii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI iv PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI HALAMAN PERSEMBAHAN “I can do all things through Christ who strengthens me.” (Philippians 4:13) ~ IF IT’S EASY, IT WON’T BE AMAZING~ Karya saya ini saya persembahkan teristimewa untuk : Keluarga, Dosen & Sahabat Terima kasih untuk kasih sayang, doa, motivasi, semangat serta bantuan yang kalian berikan baik di saat susah maupun senang. v PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI vi PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI ABSTRAK Penambangan data adalah proses mengekstrak informasi atau pengetahuan dari data dalam jumlah yang besar. Secara umum, penambangan data dapat diklasifikasikan dalam empat kategori yaitu deteksi dependensi, identifikasi kelas, deskripsi kelas dan deteksi outlier. Tiga kategori pertama berkaitan dengan pola yang dimiliki oleh banyak objek, atau pada objek dengan persentase yang besar dalam dataset. Sebaliknya, kategori keempat berfokus pada objek dengan persentase yang kecil, yang umumnya sering diabaikan atau dihilangkan karena dianggap noise (Knorr & Ng, 1998). Pada tugas akhir ini algoritma Block-based Nested-Loop digunakan untuk deteksi outlier pada data numerik. Data yang digunakan adalah data akademik mahasiswa Universitas Sanata Dharma Prodi Teknik Informatika Angkatan 2007 dan 2008. Data tersebut terdiri dari data nilai tes masuk mahasiswa yang diterima melalui jalur tes tertulis maupun jalur prestasi dan nilai indeks prestasi dari semester satu sampai empat. Hasil penelitian ini yaitu sebuah perangkat lunak yang dapat digunakan sebagai alat bantu untuk mendeteksi outlier menggunakan algoritma Block-based Nested-Loop. Pengujian terhadap sistem ini terdiri dari pengujian blackbox, pengujian review dan validitas oleh pengguna, pengujian efek perubahan nilai atribut penambangan data dan pengujian waktu deteksi outlier berdasarkan jumlah blok. Berdasarkan hasil pengujian blackbox yang dilakukan, disimpulkan bahwa sistem pendeteksi outlier ini dapat menghasilkan keluaran yang sesuai dengan yang diharapkan pengguna dan mampu menangani error terhadap fungsi – fungsi yang tidak berjalan sesuai aturan. Berdasarkan hasil pengujian review dan validitas oleh pengguna disimpulkan bahwa sistem dapat menghasilkan data yang dinyatakan sebagai outlier. Berdasarkan hasil pengujian efek perubahan nilai atribut penambangan data disimpulkan bahwa pemilihan nilai atribut M dan D mempengaruhi hasil deteksi outlier. Dari hasil pengujian waktu deteksi outlier berdasarkan jumlah blok disimpulkan bahwa penggunaan blok-blok data dapat mempercepat proses deteksi outlier. Kata kunci : Penambangan data, Block-based Nested-Loop, deteksi outlier vii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI ABSTRACT Data mining is the process of extracting information or knowledge from large amounts of data. In general, data mining can be classified into four categories: dependency detection, identification of classes, class descriptions and outlier detection. The first three categories correspond to the pattern that applied to many objects, or to a large percentage of objects in the dataset. The fourth category, in contrast focuses on a very small percentage of data objects, which are often ignored or discarded as noise (Knorr & Ng, 1998). In this thesis, the Block-based Nested-Loop algorithm was used to perform outlier detections on numerical data. The data used in this thesis are academic data of students batch 2007 and 2008 of Informatics Engineering Study Program of Sanata Dharma University. The data consists of student admission data from regular admission track as well as students from outstanding track, and student academic data (Grade Point Average) of those students from first semester until fourth semester. The results of this research is a software that can be used as a tool to detect outliers using Block-based Nested-Loop algorithm. The testing of this system consists of blackbox testing, validation testing by users, investigation of the effects of attribute changes of M and D, and investigation of time needed to detect outliers based on the number of blocks. M is the maximum number of objects within the D-neighbourhood of an outlier, whereas D is the maximum distance between any pair of objects that define as a neighbor. Based on blackbox testing, it can be concluded that the outlier detection‟s system could produce output as expected and handle any incorrect functions. Based on user‟s validation, it can be concluded that the results of the system are confirmed as outliers. Based on the investigation of the effects of attribute changes, it can be concluded that the value of M dan D influence the number of generated outliers. Based on investigation of time needed to detect outliers, it can be concluded that data blocks usage could speed up the process of outlier detection. Keywords : data mining, Block-based Nested-Loop, outlier detection viii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI ix PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI KATA PENGANTAR Puji syukur kepada Tuhan Yesus Kristus, atas segala berkat dan karunia sehingga penulis dapat menyelesaikan skripsi ini dengan judul “Deteksi Outlier Menggunakan Algoritma Block-based Nested-Loop Studi Kasus : Data Akademik Mahasiswa Program Studi Teknik Informatika Universitas Sanata Dharma”. Penelitian ini berjalan dengan baik dari awal hingga akhir karena adanya dukungan doa, semangat dan motivasi yang diberikan oleh banyak pihak. Untuk itu, penulis ingin mengucapkan terima kasih kepada: 1. Ibu Paulina Heruningsih Prima Rosa, S.Si., M.Sc. selaku Dekan Fakultas Sains dan Teknologi. 2. Ibu Ridowati Gunawan, S.Kom., M.T., selaku Ketua Program Studi Teknik Informatika. 3. Ibu Paulina Heruningsih Prima Rosa, S.Si., M.Sc. selaku Dosen Pembimbing yang telah dengan sabar membimbing dan memberikan motivasi. 4. Ibu Ridowati Gunawan, S.Kom., M.T. dan Ibu Sri Hartati Wijono, S.Si., M.Kom. selaku dosen penguji atas kritik dan saran yang telah diberikan. 5. Bapak Iwan Binanto, M.Cs. selaku Dosen Pembimbing Akademik. 6. Seluruh Dosen yang telah mendidik dan memberikan ilmu pengetahuan selama penulis menjalani studi di Universitas Sanata Dharma Yogyakarta. 7. Pihak sekretariat dan laboran yang turut membantu penulis menyelesaikan skripsi ini. x PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 8. Kedua orang tua terkasih, Papa Alex Kwa, BE, SE dan Mama Selvina Yarangga untuk setiap doa, kasih sayang, perhatian serta dukungan yang selalu diberikan kepada penulis. 9. Semua saudara tersayang, Kak Victor, Kak Sherli, Kak Febby, Kak Vani dan Kak Jenie. Terima kasih sudah memberikan motivasi dan berbagai masukan yang sangat membantu penulis dalam menyelesaikan skripsi ini. 10. Para sahabat tersayang, Nidya, Friska, Margaretha, Cristy, Phebe, Mayanti dan Rico. Terima kasih untuk persahabatan yang indah dan doa serta dukungan kalian bagi penulis. 11. Kedua rekan kerja skripsi ini, Setyo dan Tomy. Terima kasih telah saling berbagi ilmu serta suka dan duka dari awal hingga akhir penyelesaian skripsi ini. 12. Seluruh teman-teman kuliah TI 2009, terima kasih untuk kebersamaan kita selama menjalani masa perkuliahan. 13. Teman-teman Tim Usher GKI Gejayan, terima kasih karena selalu mendukung perjuangan penulis lewat doa setiap minggunya. 14. Pihak-pihak lain yang turut membantu penulis dalam menyelesaikan tugas akhir ini, yang tidak dapat disebutkan satu per satu. Penelitian skripsi ini masih memiliki banyak kekurangan. Untuk itu, penulis sangat membutuhkan saran dan kritik untuk perbaikan di masa yang akan datang. Semoga penelitian skripsi ini dapat membawa manfaat bagi semua pihak. Yogyakarta, 23 Agustus 2013 Fiona Endah Kwa xi PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI DAFTAR ISI HALAMAN JUDUL……………………………………………………………...i HALAMAN JUDUL (INGGRIS)………………………………………………...ii HALAMAN PERSETUJUAN…………………………………………………..iii HALAMAN PENGESAHAN……………………………………………………iv HALAMAN PERSEMBAHAN…………………………………………………..v PERNYATAAN KEASLIAN KARYA…………………………………………vi ABSTRAK…………………………………………………………………..…..vii ABSTRACT……………………………………………………………….……viii LEMBAR PERNYATAAN PERSETUJUAN…………………………………..ix KATA PENGANTAR……………………………………………………………x DAFTAR ISI…………………………………………………………………….xii DAFTAR TABEL……………………………………………………………...xvii DAFTAR GAMBAR…………………………………………………………...xix Bab 1……………………………………………………………………………...1 PENDAHULUAN………………………………………………………………...1 1.1 Latar Belakang ......................................................................................... 1 1.2 Rumusan Masalah .................................................................................... 4 1.3 Tujuan Penelitian ..................................................................................... 4 1.4 Batasan Masalah ...................................................................................... 5 1.5 Manfaat Penelitian ................................................................................... 5 1.6 Sistematika Penulisan .............................................................................. 6 1.6.1 Bab 1 Pendahuluan ........................................................................... 6 1.6.2 Bab 2 Landasan Teori ....................................................................... 6 1.6.3 Bab 3 Metode Penelitian .................................................................. 6 1.6.4 Bab 4 Analisis dan Perancangan Sistem .......................................... 7 1.6.5 Bab 5 Implementasi Sistem .............................................................. 7 1.6.6 Bab 6 Pengujian dan Analisis Hasil Pengujian ................................ 7 1.6.7 Bab 7 Kesimpulan dan Saran ........................................................... 8 1.6.8 Daftar Pustaka .................................................................................. 8 Bab 2……………………………………………………………………………...9 LANDASAN TEORI……………………………………………………………..9 2.1 Knowledge Discovery in Databases (KDD) ............................................ 9 xii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 2.2 Outlier Detection ................................................................................... 11 2.2.1 Pengertian Outlier .......................................................................... 11 2.2.2 Penyebab Outlier ............................................................................ 12 2.2.3 Manfaat Deteksi Outlier ................................................................. 12 3.2.4 Metode Deteksi Outlier .................................................................. 13 2.2.5 Distance-Based Outlier Detection ................................................ 14 2.2.5.1 Algoritma Block-based Nested-Loop ............................................ 16 Bab 3…………………………………………………………………………….19 METODE PENELITIAN……………………………………………………….19 3.1 Data ........................................................................................................ 19 3.2 Pengolahan Data .................................................................................... 20 3.2.1 Pemrosesan Awal Data ................................................................... 20 3.2.2 Seleksi Data .................................................................................... 20 3.2.3 Transformasi Data .......................................................................... 21 3.2.4 Penambangan Data ......................................................................... 22 3.2.5 Evaluasi Pola yang Ditemukan ....................................................... 23 3.2.6 Presentasi Pengetahuan .................................................................. 24 3.3 Contoh Implementasi Algoritma Block-based Nested-Loop ................. 24 Bab 4…………………………………………………………………………….34 ANALISIS DAN PERANCANGAN SISTEM…………………………………34 4.1 Identifikasi Sistem ................................................................................. 34 4.2 Input Sistem, Proses Sistem dan Output Sistem .................................... 35 4.2.1 Input Sistem .................................................................................... 35 4.2.2 Proses Sistem .................................................................................. 37 4.2.3 Output Sistem ................................................................................. 39 4.3 Perancangan Struktur Data .................................................................... 40 4.4 Diagram Use Case ................................................................................. 45 4.5 Perancangan Sistem ............................................................................... 46 4.5.1 Diagram Konteks ............................................................................ 46 4.5.2 Diagram Aktivitas .......................................................................... 46 4.5.3 Diagram Kelas Analisis .................................................................. 47 4.5.4 Diagram Sequence .......................................................................... 48 4.5.3 Diagram Kelas Desain .................................................................... 49 4.5.4 Detail Algoritma Tiap Method Pada Tiap Kelas ............................ 56 xiii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.5.6.1 Detail Algoritma Pada Method di Kelas HalamanUtama ............. 56 4.5.6.2 Detail Algoritma Pada Method di Kelas HalamanPilihDB ........... 67 4.5.6.3 Detail Algoritma Pada Method di Kelas HalamanPilihTabel ....... 68 4.5.6.4 Detail Algoritma Pada Method di Kelas DistribusiAtribut ........... 69 4.5.6.5 Detail Algoritma Pada Method di Kelas Graph ............................ 71 4.5.6.6 Detail Algoritma Pada Method di Kelas DatabaseConnection ..... 78 4.5.6.7 Detail Algoritma Pada Method di Kelas Database ........................ 80 4.5.6.8 Detail Algoritma Pada Method di Kelas CheckBoxTableModel .. 81 4.6 Perancangan Antarmuka ........................................................................ 82 4.6.1 Halaman Awal ................................................................................ 83 4.6.2 Halaman Utama (Preprocess) ........................................................ 83 4.6.3 Halaman Utama (Deteksi Outlier).................................................. 85 4.6.4 Halaman Distribusi Atribut ............................................................ 86 4.6.5 Halaman Pilih DB........................................................................... 87 4.6.6 Halaman Pilih Tabel ....................................................................... 88 4.6.7 Halaman Bantuan ........................................................................... 88 4.6.8 Halaman Konfirmasi Keluar.......................................................... .89 BAB 5……………………………………………………………………….…...90 IMPLEMENTASI SISTEM…………………………………………………..…90 5.1 Implementasi Antarmuka ....................................................................... 91 5.1.1 Implementasi Halaman Awal ......................................................... 91 5.1.2 Implementasi Halaman Utama ....................................................... 92 5.1.3 Implementasi Halaman Pilih DB .................................................... 96 5.1.4 Implementasi Halaman Pilih Tabel ................................................ 97 5.1.5 Implementasi Halaman Distribusi Atribut...................................... 99 5.1.6 Implementasi Halaman Bantuan................................................... 100 5.1.7 Implementasi Halaman Konfirmasi Keluar .................................. 100 5.1.8 Implementasi Pengecekan Masukan............................................. 101 5.1.9 Implementasi Halaman Open File ................................................ 104 5.2 Implementasi Struktur Data ................................................................. 105 5.2.1 Implementasi Kelas Vertex .......................................................... 105 5.2.2 Implementasi Kelas Graph ........................................................... 107 5.2.3 Implementasi Kelas Block ............................................................ 109 xiv PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 5.3 Implementasi Kelas.............................................................................. 110 5.3.1 Implementasi Kelas HalamanUtama ............................................ 110 5.3.2 Implementasi Kelas HalamanPilihDB ......................................... 123 5.3.3 Implementasi Kelas HalamanPilihTabel ...................................... 124 5.3.4 Implementasi Kelas HalamanDistribusiAtribut ........................... 126 5.3.5 Implementasi Kelas SeleksiAtribut .............................................. 127 5.3.6 Implementasi Kelas DatabaseConnection .................................... 128 5.3.7 Implementasi Kelas Database....................................................... 130 5.3.8 Implementasi Kelas CheckBoxTableModel ................................. 132 5.3.9 Implementasi Kelas BarChart....................................................... 134 5.3.10 Implementasi Kelas GraphController ........................................... 135 BAB 6…………………………………………………………………………..136 PENGUJIAN DAN ANALISIS HASIL PENGUJIAN………………………..136 6.1 Fase Implementasi Pengujian .............................................................. 136 6.1.1 Rencana Pengujian ............................................................................. 136 6.1.1.1 Pengujian Blackbox ..................................................................... 137 6.1.1.1.1 Pengujian DatabaseConnection ............................................ 137 6.1.1.1.2 Pengujian HalamanUtama .................................................... 138 6.1.1.1.3 Pengujian HalamanDistribusiAtribut .................................... 141 6.1.1.1.5 Pengujian HalamanPilihTabel .............................................. 142 6.1.1.1.6 Kesimpulan Hasil Pengujian Blackbox ................................. 142 6.1.1.2 Pengujian Review dan Validitas oleh Pengguna .......................... 143 6.1.1.2.1 Perbandingan Perhitungan Manual dan Sistem .................... 143 6.1.1.2.2 Hasil Deteksi dari Sistem untuk Pengujian Review dan Validitas oleh Pengguna ...................................................................... 144 6.1.1.2.3 Kesimpulan Pengujian Review dan Validitas oleh ............... 147 Pengguna .............................................................................................. 147 6.1.1.3 Pengujian Efek Perubahan Nilai Atribut Penambangan Data ..... 150 6.1.1.3.1 Kesimpulan Pengujian Efek Perubahan Nilai Atribut Penambangan Data .............................................................................. 154 6.1.1.4 Pengujian Perbandingan Waktu Deteksi Outlier Berdasarkan Jumlah Blok ............................................................................................. 155 xv PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 6.1.1.4.1 Kesimpulan Pengujian Perbandingan Waktu Deteksi Outlier Berdasarkan Jumlah Blok .................................................................... 157 6.2 Kelebihan dan Kekurangan Sistem ...................................................... 158 6.2.1 Kelebihan Sistem .......................................................................... 158 6.2.2 Kekurangan Sistem ....................................................................... 158 BAB 7…………………………………………………………………………..159 KESIMPULAN DAN SARAN………………………………………………...159 7.1 Kesimpulan .......................................................................................... 159 7.2 Saran .................................................................................................... 159 DAFTAR PUSTAKA………………………………………………………….161 LAMPIRAN……………………………………………………………………162 Lampiran 1 : Tabel Ringkasan Use Case ........................................................ 162 Lampiran 2 : Skenario Use Case..................................................................... 162 Lampiran 3 : Diagram Aktivitas ..................................................................... 166 Lampiran 4 : Tabel Diagram Kelas Analisis ................................................. 169 Lampiran 5 : Diagram Sequence .................................................................... 171 Lampiran 6 : Listing program ......................................................................... 176 xvi PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI DAFTAR TABEL Tabel 3.1 Data Mentah dibagi ke dalam 4 Blok……………………………... 26 Tabel 4.1 Tabel Nama Atribut pada Data Akademik Mahasiswa…………… 37 Tabel 4.2 Tabel Kelas HalamanUtama………………………………………. 56 Tabel 4.3 Tabel Kelas HalamanPilihDB……………………………………... 67 Tabel 4.4 Tabel Kelas HalamanPilihTabel…………………………………... 68 Tabel 4.5 Tabel Kelas DistribusiAtribut……………………………………... 69 Tabel 4.6 Tabel Kelas Graph………………………………………………… 71 Tabel 4.7 Tabel Kelas DatabaseConnection…………………………………. 78 Tabel 4.8 Tabel Kelas Database………………………………………………80 Tabel 4.9 Tabel Kelas CheckBoxTableModel……………………………….. 81 Tabel 4.10 Tabel Kelas BarChart……………………………………………..82 Tabel 5.1 Tabel Nama Kelas yang Diimplementasikan dalam Sistem………. 90 Tabel 6.1 Tabel Rencana Pengujian…………………………………………..137 Tabel 6.2 Tabel Pengujian Kelas DatabaseConnection……………………... 138 Tabel 6.3 Tabel Pengujian Kelas HalamanUtama…………………………… 138 Tabel 6.4 Tabel Pengujian Kelas HalamanDistribusiAtribut………………... 141 Tabel 6.5 Tabel Pengujian Kelas HalamanPilihDB………………………….. 141 Tabel 6.6 Tabel Pengujian Kelas HalamanPilihTabel……………………….. 142 Tabel 6.7 Tabel Perbandingan Hasil Deteksi Outlier Mahasiswa Angkatan 2007 Jalur Tes Tertulis………………………………………………….143 xvii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Tabel 6.8 Tabel Nilai per Atribut Hasil Outlier Mahasiswa Angkatan 2007 Jalur Tes Tertulis………………………………………………………. 144 Tabel 6.9 Tabel Jumlah Outlier Berdasarkan Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai M dan D yang Berubah-ubah (54 Mahasiswa)…….. 151 Tabel 6.10 Tabel Jumlah Outlier Berdasarkan Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai M dan D yang Berubah-ubah (72 mahasiswa)……………….152 Tabel 6.11 Tabel Jumlah Outlier Berdasarkan Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes dan Jalur Prestasi dengan Nilai M dan D yang Berubah-ubah (126 Mahasiswa)…… 153 Tabel 6.12 Tabel Perbadingan Lama Deteksi Outlier Berdasarkan Jumlah Blok pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes dan Jalur Prestasi…………………………………………………………… 156 xviii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI DAFTAR GAMBAR Gambar 2.1 Langkah-langkah dalam KDD (Fayyad et al., 1996 )…………... 10 Gambar 3.1 Gudang data „data_mahasiswa‟………………………………… 20 Gambar 3.2 Data mentah untuk implementasi algoritma Block-based NestedLoop…………………………………………………………… 25 Gambar 3.3 Pengecekan tetangga pada first array antara blok 1 dan blok 1... 27 Gambar 3.4 Hasil akhir pengecekan blok 1 dan blok 1 dalam first array…… 28 Gambar 3.5 Pencarian tetangga dari data first array pada second array……..28 Gambar 3.6 Hasil akhir pengecekan blok 1 (first array) dan blok 2 (second array)………………………………………………………….. 29 Gambar 3.7 Pencarian tetangga dari data first array pada second array……..30 Gambar 3.8 Hasil akhir pengecekan blok 1 (first array) dan blok 3 (second array)………………………………………………………….. 31 Gambar 3.9 Hasil akhir pengecekan blok 1 (first array) dan blok 4 (second array)………………………………………………………….. 32 Gambar 4.1 Proses Umum Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop…………...………………………… 39 Gambar 4.2 Diagram Use Case………………………………………………. 45 Gambar 4.3 Diagram Konteks……………………………………………….. 46 Gambar 4.4 Diagram Kelas Analisis………………………………………… 47 Gambar 4.5 Diagram Kelas Desain………………………………………….. 49 Gambar 4.6 Tampilan Antarmuka Halaman Awal…………………………... 83 Gambar 4.7 Tampilan Antarmuka Halaman Utama (Tab Preprocess)……… 84 xix PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Gambar 4.8 Tampilan Antarmuka Halaman Utama (Tab Deteksi Outlier)…..85 Gambar 4.9 Tampilan Antarmuka Halaman Distribusi Atribut………………86 Gambar 4.10 Tampilan Antarmuka Halaman Pilih DB……………………… 87 Gambar 4.11 Tampilan Antarmuka Halaman Pilih Tabel…………………… 88 Gambar 4.12 Tampilan Antarmuka Halaman Bantuan……………………….89 Gambar 4.13 Tampilan Antarmuka Halaman Konfirmasi Keluar…………… 89 Gambar 5.1 Antarmuka Halaman Awal………………………………………91 Gambar 5.2 Antarmuka Halaman Utama, tab Preprocess…………………… 92 Gambar 5.3 Antarmuka Halaman Utama, tab Preprocess(File .xls atau .csv)..93 Gambar 5.4 Antarmuka Halaman Utama, tab Preprocess (Seleksi atribut)…. 94 Gambar 5.5 Antarmuka Halaman Utama, tab Deteksi Outlier......................... 95 Gambar 5.6 Antarmuka Halaman Utama, tab Deteksi Outlier (hasil deteksi outlier)………………………………………………………… 95 Gambar 5.7 Dialog Untuk Menyimpan Hasil Deteksi Outlier………………. 96 Gambar 5.8 Pesan Sukses Menyimpan File Hasil Deteksi Outlier………….. 96 Gambar 5.9 Antarmuka Halaman Pilih DB………………………………….. 97 Gambar 5.10 Pesan Sukses Melakukan Koneksi Ke Basis data……………... 97 Gambar 5.11 Antarmuka Halaman Pilih Tabel……………………………….98 Gambar 5.12 Antarmuka Halaman Utama, tab Preprocess (input tabel dari basis data)…………………………………………………………… 98 Gambar 5.13 Antarmuka Halaman Distribusi Atribut……………………….. 99 Gambar 5.14 Antarmuka Grafik Distribusi Atribut………………………….. 99 Gambar 5.15 Antarmuka Halaman Bantuan…………………………………. 100 xx PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Gambar 5.16 Antarmuka Halaman Konfirmasi Keluar……………………… 101 Gambar 5.17 Pesan Kesalahan (1)…………………………………………… 101 Gambar 5.18 Pesan Kesalahan (2)…………………………………………… 102 Gambar 5.19 Pesan Kesalahan (3)…………………………………………... 102 Gambar 5.20 Pesan Kesalahan (4)…………………………………………… 102 Gambar 5.21 Pesan Kesalahan (5)…………………………………………… 103 Gambar 5.22 Pesan Kesalahan (6)…………………………………………… 103 Gambar 5.23 Pesan Kesalahan (7)…………………………………………… 103 Gambar 5.24 Pesan Kesalahan (8)…………………………………………… 104 Gambar 5.25 Antarmuka Open File………………………………………….. 105 Gambar 6.1a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai M=4 dan D Berubah-ubah…………………………………………………. 151 Gambar 6.1b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai M=5 dan D Berubah-ubah…………………………………………………. 151 Gambar 6.2a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai D=1 dan M Berubah-ubah…………………………………………………. 151 Gambar 6.2b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai D=2 dan M Berubah-ubah…………………………………………………. 151 Gambar 6.3a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai M=4 dan D Berubah-ubah…………………………………………………. 152 xxi PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Gambar 6.3b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai M=5 dan D Berubah-ubah…………………………………………………. 152 Gambar 6.4a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai D=1 dan M Berubah-ubah…………………………………………………. 152 Gambar 6.4b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai D=2 dan M Berubah-ubah…………………………………………………. 152 Gambar 6.5a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Semester 1 dengan Nilai M=4 dan D Berubah-ubah. 153 Gambar 6.5b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Semester 1 dengan Nilai M=5 dan D Berubah-ubah.. 153 Gambar 6.6a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Semester 1 dengan Nilai D=1 dan M Berubah-ubah.. 153 Gambar 6.6b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Semester 1 dengan Nilai D=2 dan M Berubah-ubah.. 153 xxii PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Bab 1 PENDAHULUAN 1.1 Latar Belakang Penelitian dalam bidang pendidikan menggunakan teknik penambangan data telah banyak dilakukan saat ini. Penambangan data dalam bidang pendidikan (educational data mining) berfokus pada pengembangan metode-metode untuk mengekstrak knowledge dari data-data pendidikan. Data pendidikan dapat berupa data pribadi atau akademik. Selain itu data pendidikan juga dapat berasal dari elearning system yang memiliki data dalam jumlah besar yang digunakan oleh banyak institusi (Tair & El-Halees, 2012). Knowledge Discovery in Databases (KDD) adalah proses mengekstrak informasi dari data berdasarkan pada analisis dan interpretasi tertentu. KDD terdiri dari empat proses utama yaitu preprocessing, data mining, pattern evaluation, dan knowledge presentation (Han & Kamber, 2006). Dari keempat tahap tersebut, penambangan data (data mining) merupakan tahapan yang menjadi fokus dalam pengolahan data mentah (training dataset) menjadi bentuk yang dapat dievaluasi. Ada dua jenis pendekatan dalam melakukan penambangan data yaitu supervised dan unsupervised. Pendekatan supervised artinya penambangan dilakukan pada data yang telah diketahui label kelasnya. Pendekatan unsupervised merupakan kebalikan dari pendekatan supervised. Beberapa metode yang menggunakan pendekatan supervised antara lain klasifikasi, prediksi dan asosiasi. Sedangkan metode yang menggunakan 1 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 2 pendekatan unsupervised antara lain clustering, binning, dan histogram analysis. Data yang telah ditambang menggunakan salah satu dari metode-metode di atas selanjutnya akan dievaluasi untuk menghasilkan sebuah informasi (knowledge). Salah satu metode penambangan data yaitu analisis klaster. Klaster merupakan kumpulan objek atau data dalam sebuah kelompok yang serupa satu sama lain tetapi berbeda atau tidak mirip dengan objek atau data pada klaster lain. Data diklaster atau dikelompokkan dengan prinsip memaksimalkan kemiripan intraclass dan meminimalkan kemiripan interclass. Artinya, data-data yang berada dalam sebuah klaster memiliki tingkat kemiripan yang tinggi satu sama lain, tetapi memiliki tingkat kemiripan yang rendah dengan data pada klaster lainnya. Klastering sering disebut sebagai segmentasi data karena klastering membagi sejumlah besar data ke dalam grup berdasarkan kemiripannya. Algoritma Block-based Nested-Loop merupakan contoh algoritma yang memiliki kemampuan untuk mendeteksi outlier dalam sekumpulan data. Tidak seperti klastering, deteksi outlier dilakukan untuk menemukan data yang tidak konsisten dengan data lainnya. Data dianggap tidak konsisten (outlier) apabila data tersebut tidak memiliki tingkat kemiripan yang sesuai dengan data lainnya (Han & Kamber, 2006). Dengan adanya deteksi outlier, kita dapat mengenali adanya kesalahan dalam memasukkan data, kecurangan dalam menggunakan data (fraud detection) atau adanya sebuah kejadian langka yang memiliki makna tertentu dan perlu dianalisis lebih lanjut (rare events analysis). Algoritma ini juga memiliki unjuk kerja yang baik saat diimplementasikan pada kumpulan data PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 3 dengan jumlah atribut yang banyak atau high dimensional datasets (Ghoting et al., 2006). Algoritma Block-based Nested-Loop dapat diimplementasikan pada sekumpulan data numerik untuk mendeteksi adanya outlier. Salah satu contoh data numerik yaitu data akademik mahasiswa yang berupa hasil tes masuk universitas dan indeks prestasi semester (IPS). Sejumlah mahasiswa yang memiliki data akademik yang serupa satu sama lain berarti masuk ke dalam kelompok bukan outlier. Mahasiswa yang tidak memiliki kemiripan data akademik dengan mahasiswa manapun berarti memiliki data akademik yang unik dibandingkan mahasiswa lainnya. Mahasiswa ini akan dianggap sebagai outlier. Berdasarkan hasil deteksi outlier, pihak universitas dapat memperoleh informasi mengenai mahasiswa dengan data akademik yang berbeda atau unik dibandingkan mahasiswa lainnya. Data akademik yang unik dapat dihasilkan dari nilai IPS mahasiswa yang sangat tinggi atau sangat rendah pada setiap semester. Selain itu, data akademik yang unik juga berasal dari tinggi rendahnya nilai tes masuk mahasiswa. Sebagai contoh, sejumlah mahasiswa dengan nilai IPS dan nilai tes masuk yang tinggi akan tergabung dalam sebuah kelompok yang sama. Kemudian sejumlah mahasiswa yang memiliki nilai IPS dan nilai tes masuk yang rendah juga akan tergabung dalam sebuah kelompok yang sama. Pihak universitas dapat menganalisis data diri mahasiswa tersebut untuk menemukan faktor tertentu yang berpengaruh pada keunikan data akademik mahasiswa tersebut di kampus. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 1.2 4 Rumusan Masalah Pada penelitian ini, deteksi outlier akan dilakukan berdasarkan nilai tes masuk dan IPS. Mahasiswa dengan data akademik yang unik atau tidak memiliki kemiripan dengan mahasiswa lainnya akan masuk ke dalam kelompok outlier. Pada penelitian ini juga dilakukan analisis mengenai penggunaan blok-blok data terhadap lama deteksi outlier. Jadi, rumusan masalah dalam penelitian ini adalah : 1. Mahasiswa manakah yang memiliki data akademik yang unik atau berbeda pada tiap semester berdasarkan nilai tes masuk dan IPS? 2. Bagaimanakah pengaruh penggunaan blok-blok data terhadap waktu deteksi outlier? 1.3 Tujuan Penelitian Tujuan penelitian ini yaitu : 1. Melakukan deteksi outlier pada data akademik mahasiswa Prodi Teknik Informatika Universitas Sanata Dharma berupa hasil tes masuk dan IPS semester satu sampai semester empat menggunakan algoritma Blockbased Nested-Loop. 2. Menganalisis hasil deteksi outlier yang dihasilkan oleh algoritma Blockbased Nested-Loop. 3. Menganalisis waktu yang diperlukan untuk melakukan deteksi outlier berdasarkan jumlah blok data yang digunakan oleh algoritma Block-based Nested-Loop. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 1.4 5 Batasan Masalah Batasan masalah pada penelitian ini yaitu : 1. Algoritma deteksi outlier yang digunakan yaitu algoritma Block-based Nested-Loop. 2. Data yang digunakan dalam penelitian ini merupakan data akademik mahasiswa Prodi Teknik Informatika angkatan 2007 dan 2008 di Universitas Sanata Dharma berupa hasil tes penerimaan mahasiswa baru (nilai penalaran mekanik, nilai penalaran verbal, nilai hubungan ruang, nilai Bahasa Inggris, nilai kemampuan numerik), nilai final dan nilai indeks prestasi semester dari semester satu sampai semester empat. 3. Hasil penelitian ini berupa kelompok mahasiswa outlier, jika ada. 1.5 Manfaat Penelitian Manfaat penelitian ini, antara lain: 1. Memperkenalkan salah satu algoritma penambangan data khususnya untuk mendeteksi outlier yaitu algoritma Block-based Nested-Loop serta keunggulannya dalam mendeteksi outlier. 2. Membantu pihak Universitas Sanata Dharma dalam mendeteksi kejadian langka berkaitan dengan keunikan data akademik mahasiswa. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 1.6 6 Sistematika Penulisan 1.6.1 Bab 1 Pendahuluan Bab ini berisi latar belakang, rumusan masalah, tujuan penelitian, batasan masalah, manfaat penelitian dan sistematika penulisan 1.6.2 Bab 2 Landasan Teori Bab ini berisi teori yang digunakan dalam penulisan tugas akhir ini. Teori pertama yang digunakan yaitu Knowledge Discovery in Databases (KDD). Teori kedua yang digunakan yaitu Outlier Detection. Outlier Detection terdiri dari pengertian outlier, penyebab outlier, manfaat deteksi outlier, metode deteksi outlier, Distance-Based Outlier Detection dan Algoritma Block-based NestedLoop 1.6.3 Bab 3 Metode Penelitian Bab ini berisi penjelasan mengenai langkah atau metode yang dilakukan untuk menyelesaikan masalah dalam penelitian ini. Hal pertama yang dibahas yaitu mengenai data. Kedua yaitu mengenai pengolahan data yang terdiri dari pemrosesan awal data, seleksi data, penambangan data, evaluasi pola yang ditemukan dan presentasi pengetahuan. Ketiga yaitu mengenai contoh implementasi algoritma Block-based Nested-Loop. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 1.6.4 7 Bab 4 Analisis dan Perancangan Sistem Bab ini berisi pembahasan tentang beberapa komponen. Komponen pertama yaitu identifikasi sistem. Komponen kedua yaitu input sistem, proses sistem dan output sistem. Komponen ketiga yaitu perancangan struktur data. Komponen keempat yaitu diagram use case. Komponen kelima yaitu perancangan sistem yang terdiri dari diagram konteks, diagram aktivitas, diagram kelas analisis, diagram sequence, diagram kelas desain dan detail algoritma tiap method pada tiap kelas. Komponen keenam yaitu perancangan antarmuka. 1.6.5 Bab 5 Implementasi Sistem Bab ini berisi tentang implementasi antarmuka, implementasi pengecekan masukan, implementasi struktur data dan implementasi kelas serta analisis dari masing-masing tampilan program. 1.6.6 Bab 6 Pengujian dan Analisis Hasil Pengujian Bab ini berisi pengujian serta analisis terhadap pengujian yang dilakukan serta kelebihan dan kekurangan sistem. Pengujian terbagi menjadi tiga jenis yaitu pengujian blackbox serta kesimpulannya, pengujian review dan validitas oleh pengguna serta kesimpulannya, pengujian efek perubahan nilai atribut penambangan data serta kesimpulannya dan pengujian perbandingan waktu deteksi outlier berdasarkan jumlah blok. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 1.6.7 8 Bab 7 Kesimpulan dan Saran Kesimpulan dan saran berisi tentang kesimpulan dan saran dari penulis tugas akhir mengenai penelitian yang dilakukan. 1.6.8 Daftar Pustaka Daftar pustaka berisi tentang referensi yang digunakan dalam penyusunan tugas akhir. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Bab 2 LANDASAN TEORI Bab ini berisi penjelasan mengenai teori atau konsep yang terkait dengan rumusan masalah dalam penelitian ini. Konsep yang dijelaskan yaitu Knowledge Discovery in Databases (KDD) dan Outlier Detection. Setiap konsep atau teori akan berisi penjelasan mengenai definisi, bagian-bagian serta peran masingmasing bagian tersebut dalam penelitian ini. Hal-hal tersebut akan diuraikan dalam dua sub bab di bawah ini. 2.1 Knowledge Discovery in Databases (KDD) Knowledge Discovery in Databases (KDD) adalah proses mengambil informasi penting yang tersembunyi dalam sekumpulan data. KDD membantu seseorang dalam mengambil keputusan berdasarkan informasi yang ditemukan tersebut (Baradwaj & Pal, 2011). KDD terbagi menjadi lima tahap yaitu selection, preprocessing, transformation, data mining, dan evaluation (Fayyad et al., 1996). Setiap tahap dalam KDD memiliki peranan penting dan saling berkaitan satu sama lain untuk mengekstrak knowledge dari data. 9 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 10 Gambar 2.1 Langkah-langkah dalam KDD (Fayyad et al., 1996 ) Selection merupakan proses seleksi data yang relevan untuk dianalisis dari sebuah basis data. Data yang relevan artinya data tersebut sesuai untuk digunakan dalam mencapai tujuan analisis data. Data yang telah diseleksi melalui proses ini disebut sebagai target data. Target data selanjutnya masuk ke tahapan berikutnya yaitu preprocessing. Preprocessing merupakan proses menyiapkan data agar siap untuk ditambang. Langkah-langkah dalam preprocessing yaitu data cleaning, data integration, data transformation, data reduction dan data discretization. Kelima langkah tersebut dilakukan secara berurutan. Langkah tertentu boleh dilewati saat kondisi data telah memenuhi syarat yang ditentukan masing-masing langkah tersebut. Saat telah melewati tahap preprocessing, data siap untuk ditambang. Data mining atau penambangan data adalah proses mengekstrak informasi atau pengetahuan dari data dalam jumlah yang besar. Secara umum, penambangan data dapat diklasifikasikan dalam empat kategori yaitu deteksi dependensi, identifikasi kelas, deskripsi kelas dan deteksi outlier. Tiga kategori PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 11 pertama berkaitan dengan pola yang dimiliki oleh banyak obyek atau pada obyek dengan persentase yang besar dalam dataset. Berbagai penelitian penambangan data mengenai aturan asosiasi, klasifikasi, klastering dan generalisasi konsep termasuk dalam tiga kategori tersebut. Sebaliknya, kategori keempat berfokus pada obyek dengan persentase yang kecil, yang umumnya sering diabaikan atau dihilangkan karena dianggap noise (Knorr & Ng, 1998). Evaluation merupakan tahap pembuatan pola atau pemetaan berdasarkan hasil penambangan data. Tujuan dilakukannya tahap ini untuk membantu pihakpihak yang berkepentingan terhadap data yang dianalisis untuk memperoleh gambaran tentang data tersebut. Pembuatan diagram atau pohon keputusan merupakan contoh visualisasi hasil penambangan data. Visualisasi dapat memberikan gambaran yang lebih mudah dipahami dibandingkan hasil sebuah penambangan data. Setelah tahap visualisasi selesai maka akan diperoleh hasil akhir analisis data yaitu knowledge. 2.2 Outlier Detection 2.2.1 Pengertian Outlier Outlier dalam sekumpulan data merupakan data yang dianggap tidak mirip atau tidak konsisten dengan data lainnya. Outlier merupakan hasil observasi (data pengukuran) dalam suatu kumpulan data yang nilainya sangat berbeda jika dibandingkan dengan sekumpulan data dari pengukuran lain (Hawkins, 1980). Outlier juga merupakan data yang tidak mengikuti pola umum atau model dari data lainnya yang berada dalam kumpulan yang sama. Outlier PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 12 terlihat berbeda jauh dan tidak konsisten dengan data lain (Han & Kamber, 2006). 2.2.2 Penyebab Outlier Pertama, munculnya outlier dapat disebabkan oleh data pengukuran yang salah. Sebagai contoh, munculnya data umur seseorang yaitu 999 tahun dapat disebabkan oleh pengaturan otomatis (default) program. Pengaturan otomatis ini diberlakukan pada data umur yang tidak direkam (missing values) (Han & Kamber, 2006). Kedua, kemunculan outlier juga dapat dikarenakan data pengukuran berasal dari populasi lain. Contohnya yaitu gaji seorang pimpinan perusahaan dapat dianggap sebagai outlier di antara gaji para karyawan di perusahaan tersebut (Han & Kamber, 2006). Hal ini disebabkan adanya perbedaan yang sangat mencolok antara gaji seorang pimpinan dan gaji karyawan di sebuah perusahaan. Ketiga, outlier berasal dari data pengukuran yang benar tetapi mewakili peristiwa atau keadaan unik yang jarang terjadi. Sebagai contoh, terdapat sebuah sekolah yang selalu menghasilkan lulusan dengan nilai yang sangat rendah setiap tahun. Ketika terdapat seorang siswa yang lulus dari sekolah tersebut dengan nilai yang sangat tinggi, maka siswa itu akan dianggap sebagai outlier. 2.2.3 Manfaat Deteksi Outlier Sebagian besar algoritma penambangan data berfokus untuk meminimalkan pengaruh outlier atau mengeliminasi outlier tersebut. Hal ini PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 13 dapat mengakibatkan hilangnya informasi penting yang tersembunyi dibalik outlier tersebut. Outlier sebenarnya dapat menjadi hal yang menarik untuk dianalisis lebih lanjut. Deteksi outlier (outlier detection) adalah deteksi yang dilakukan pada sekumpulan obyek untuk menemukan obyek yang memiliki tingkat kemiripan yang sangat rendah dibandingkan dengan obyek lainnya. Deteksi outlier umumya digunakan untuk menemukan kejanggalan dalam data, deteksi kecurangan data atau untuk mengetahui adanya pola khusus dalam sekumpulan data. Deteksi outlier sering dimanfaatkan untuk mendeteksi kecurangan penggunaan kredit atau layanan telekomunikasi. Deteksi outlier juga berguna dalam bidang pemasaran, yaitu untuk mengidentifikasi perilaku belanja konsumen dengan tingkat pendapatan yang tinggi atau rendah. Dalam dunia kesehatan, deteksi outlier digunakan untuk menemukan respon yang tidak biasanya atau berbeda terhadap berbagai perawatan kesehatan (Han & Kamber, 2006). Di bidang pendidikan, deteksi outlier dapat digunakan untuk mengetahui prestasi akademik mahasiswa yang berbeda secara signifikan dari mahasiswa lainnya dalam universitas yang sama (Tair & El-Halees, 2012). 3.2.4 Metode Deteksi Outlier Algoritma klastering umumnya menghilangkan outlier dari data karena dianggap noise, tetapi algoritma deteksi outlier justru menjadikan outlier menjadi hasil dari eksekusinya. Ada beberapa metode yang dapat digunakan untuk mendeteksi outlier. Metode-metode tersebut dibagi menjadi empat pendekatan PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 14 yaitu: pendekatan statistical distribution-based, pendekatan distance-based, pendekatan density-based local outlier dan pendekatan deviation-based (Han & Kamber, 2006). Pendekatan statistical distribution-based mengasumsikan sebuah model distribusi atau probabilitas dari sejumlah data yang diidentifikasi outliernya menggunakan discordancy test. Pendekatan distance-based menentukan outlier berdasarkan jarak antar obyek serta jumlah obyek menggunakan parameter pct dan dmin. Pendekatan density-based local outlier, berfokus pada menemukan outlier pada sejumlah data berdasarkan kedekatan atau kepadatan antara satu obyek dengan obyek lainnya. Pendekatan density-based hampir sama dengan distance-based tetapi mampu membedakan antara local outlier dan global outlier. Pendekatan deviation-based tidak menggunakan perhitungan secara statistik maupun jarak untuk mengidentifikasi obyek yang diduga sebagai outlier. Pendekatan ini mengidentifikasi adanya outlier dengan menguji karakteristik utama dari obyek dalam sebuah kelompok. Setiap outlier yang ditemukan menggunakan pendekatan-pendekatan tersebut selanjutnya perlu diperiksa kembali untuk diyakini kebenarannya. Pada penelitian ini, penulis menggunakan pendekatan distance-based untuk melakukan deteksi outlier. 2.2.5 Distance-Based Outlier Detection Menurut pendekatan distance-based, sebuah obyek O dalam dataset T merupakan DB (p,D)-outlier jika setidaknya ada p obyek dalam T terletak pada jarak yang lebih dari D terhadap O. Diasumsikan N adalah jumlah obyek dalam dataset T, dan F merupakan fungsi jarak yang digunakan untuk menghitung jarak PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 15 antar obyek dalam T. Untuk sebuah obyek O, D-neighbourhood dari O memuat sekumpulan obyek 𝑄 ∈ 𝑇 yang terletak pada jarak kurang dari D terhadap O sehingga { Q ∈ T | F (O, Q) ≤ D}. Nilai fraction p merupakan persentase jumlah obyek minimum dalam T yang harus ada di luar D-neighbourhood dari sebuah outlier. Diasumsikan M merupakan jumlah obyek maksimum dalam Dneighbourhood dari sebuah outlier sehingga M = N(1 - p) (Knorr & Ng, 1998). Sebagai contoh, terdapat sebuah dataset T dengan jumlah obyek N sebanyak 100 dan persentase jumlah outlier dalam data sekitar 10%. Berdasarkan data tersebut maka persentase data bukan outlier p adalah 100 – 10% yaitu 90% atau 0.9. Untuk memperoleh nilai M maka menggunakan perhitungan N(1 – p) sehingga M = 100(1-0.9) yaitu 10. Artinya, pada dataset T jumlah obyek maksimum dalam D-neighbourhood sebuah outlier adalah 10 obyek. Apabila sebuah obyek A dalam dataset T dapat menemukan lebih dari 10 obyek yang jaraknya kurang dari D terhadap dirinya maka A akan menjadi data bukan outlier sebaliknya A akan menjadi outlier. Nilai M adalah jumlah obyek maksimum dalam Dneighbourhood sebuah outlier sehingga dapat dikurangi menjadi 9, 8, 7 atau bahkan 1 sampai diperoleh hasil outlier yang dianggap paling tepat. Pada pendekatan distance-based terdapat beberapa algoritma yang dapat digunakan antara lain Index-Based, Block-based Nested-Loop dan Cell-Based (Han & Kamber, 2006). Jarak antar dua obyek dalam sebuah kumpulan data memiliki arti yang penting dalam deteksi outlier menggunakan pendekatan distance-based. Jarak antar dua obyek menjadi nilai yang akan dibandingkan dengan nilai parameter D. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 16 Untuk menghitung jarak antar obyek harus disesuaikan dengan tipe variabel yang dimiliki. Tipe variabel yang berupa nilai numerik dan sifatnya multidimensi, dapat dihitung jaraknya menggunakan pengukuran Euclidean distance (Han & Kamber, 2006). Euclidean distance didefinisikan sebagai berikut 𝑑(𝑖, 𝑗) = (𝑥𝑖1 − 𝑥𝑗 1 )2 + (𝑥𝑖2 − 𝑥𝑗 2 )2 + … . +(𝑥𝑖𝑛 − 𝑥𝑗𝑛 )2 (2.1) di mana i = obyek pertama, j = obyek kedua, xi = nilai obyek pertama, xj = nilai obyek kedua dan n = dimensi obyek. Pendekatan distance-based melibatkan penggunaan dua buah parameter sebagai input. Penentuan nilai parameter p dan D dapat melibatkan beberapa kali percobaan (trial and error) hingga mendapatkan nilai yang paling tepat. Pemilihan nilai parameter p dan D dapat mempengaruhi hasil deteksi outlier. 2.2.5.1 Algoritma Block-based Nested-Loop Algoritma Block-based Nested-Loop merupakan pengembangan dari algoritma deteksi outlier lain yaitu Index-Based. Algoritma ini menghindari penggunaan memori dalam membentuk indeks untuk menemukan seluruh DB(p,D)-outliers. Algoritma ini menggunakan prinsip block-oriented, nestedloop design. Diasumsikan total free memory dari komputer yang digunakan sebanyak B bytes. Algoritma ini selanjutnya membagi free memory komputer PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 17 dalam dua bagian yang disebut first array sebanyak ½B dan second array sebanyak ½B. Data kemudian dibagi ke dalam blok-blok tertentu. Algoritma Block-based Nested-Loop akan mengatur proses masuk keluarnya blok ke dalam memori. Setiap data yang ada dalam blok tertentu akan secara langsung dihitung jaraknya dengan data lainnya. Untuk setiap data t dalam first array, jumlah tetangganya akan dihitung. Dua data dikatakan saling bertetangga apabila jarak keduanya kurang dari atau sama dengan D. Perhitungan jumlah tetangga untuk setiap obyek akan berhenti saat nilainya telah melebihi M (Knorr & Ng, 1998). M merupakan jumlah tetangga maksimum dalam D-neighbourhood sebuah outlier. Jika jumlah tetangga sebuah data telah melebihi M artinya data tersebut tidak termasuk outlier. Pseudocode algoritma Block-based Nested-Loop adalah sebagai berikut (Knorr & Ng, 1998): 1. Isi first array (½B) dengan sebuah blok dari T 2. Untuk setiap obyek ti, pada first array, do : a. counti 0 b. Untuk setiap obyek tj dalam first array, jika dist(ti ,tj) ≤ D; Tambahkan nilai counti dengan 1. Jika counti > M, tandai ti sebagai non-outlier dan proses dilanjutkan ke ti berikutnya. 3. Selama masih ada blok yang tersisa untuk dibandingkan dengan first array, do: a. Isi second array dengan blok lainnya (tetapi pastikan blok yang PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 18 belum pernah dimasukkan ke dalam first array berada pada urutan terakhir) b. Untuk setiap obyek ti dalam first array yang belum ditandai (unmarked) do: Untuk setiap obyek tj dalam second array, jika dist(ti ,tj) ≤ D: Tambahkan nilai counti dengan 1. Jika counti > M, tandai ti sebagai non-outlier dan proses dilanjutkan ke ti berikutnya. 4. Untuk setiap obyek ti dalam first array yang belum ditandai (unmarked), tandai ti sebagai outlier. 5. Jika blok dalam second array sudah pernah dimasukkan ke dalam first array sebelumnya, berhenti; jika belum, tukar posisi nama dari first array dan second array dan kembali ke langkah 2. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Bab 3 METODE PENELITIAN Bab ini berisi penjelasan mengenai langkah atau metode yang dilakukan untuk menyelesaikan masalah dalam penelitian ini. Langkah penyelesaian masalah tersebut meliputi data yang digunakan dalam penelitian, cara mengolah data dan contoh implementasi algoritma Block-based Nested-Loop. Hal-hal tersebut akan diuraikan dalam tiga sub bab di bawah ini. 3.1 Data Pada penelitian ini data yang digunakan adalah data akademik mahasiswa Universitas Sanata Dharma Prodi Teknik Informatika Angkatan 2007 dan 2008. Data ini diperoleh dari gudang data akademik mahasiswa hasil penelitian Rosa dkk (2011). Data diperoleh dalam bentuk skrip .sql. Dari skrip tersebut, data yang digunakan dalam penelitian ini adalah data nilai hasil seleksi masuk mahasiswa (jalur tes dan jalur prestasi) dan nilai indeks prestasi semester (IPS) pada semester satu sampai semester empat. Total data akademik yang digunakan dalam penelitian ini sebanyak 126 buah. 19 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 3.2 20 Pengolahan Data Pengolahan data akademik dalam penelitian ini meliputi beberapa langkah yaitu : 3.2.1 Pemrosesan Awal Data Data mentah yang digunakan dalam penelitian ini dalam bentuk skrip .sql. Sebelum mengolah data yang ada dalam skrip tersebut, skrip dijalankan terlebih dahulu menggunakan SQLyog. Hasil yang diperoleh yaitu terdapat gudang data dengan nama data_mahasiswa dan di dalamnya terdapat beberapa tabel yaitu dim_angkatan, dim_daftarsmu, dim_fakultas, dim_jeniskel, dim_kabupaten, dim_prodi, dim_prodifaks, dim_statustes dan fact_lengkap2. Setelah semua tabel berhasil dibuat, proses pengolahan data dilanjutkan ke seleksi data. Gambar 3.1 Gudang data ‘data_mahasiswa’ 3.2.2 Seleksi Data Pada tahap ini dilakukan seleksi terhadap data yang relevan dengan penelitian. Berdasarkan data yang diperoleh, data yang akan dipakai adalah kolom ips1, ips2, ips3, ips4, ips4, nil11, nil12, nil13, nil14, nil15 dan final. Kolom-kolom tersebut seluruhnya berada pada tabel fact_lengkap2. Kolomkolom tersebut kemudian diseleksi lagi barisnya yaitu diambil hanya baris PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 21 dengan sk_prodi = 27. Baris dengan sk_prodi = 27 merupakan data mahasiswa yang berasal dari Prodi Teknik Informatika. Data ini yang dipilih karena dapat digunakan sebagai variabel numerik untuk mendeteksi outlier dan sesuai untuk mencapai tujuan penelitian. 3.2.3 Transformasi Data Data yang telah diseleksi masih berupa data yang belum tepat untuk ditambang. Data tersebut belum tepat ditambang karena masih terdapat perbedaan rentang nilai antara atribut nilai final, nilai tes masuk dan ips. Nilai final memiliki rentang nilai antara 0-100. Nilai tes masuk memiliki rentang nilai antara 0-10. Ips memiliki rentang nilai antara 0-4. Perbedaan rentang nilai ini akan disamakan melalui proses transformasi data. Transformasi data dilakukan dengan menggunakan metode normalisasi. Metode normalisasi dilakukan dengan cara membuat skala pada data atribut. Salah satu jenis metode normalisasi yaitu min-max normalization (Han & Kamber, 2006). Min-max normalization didefinisikan sebagai berikut : (3.1) di mana v = nilai awal, minA = nilai minimum atribut A sebelum normalisasi, maxA = nilai maksimum atribut A sebelum normalisasi, new_maxA = nilai PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 22 maksimum atribut A setelah normalisasi dan new_minA = nilai minimum atribut A setelah normalisasi. Penelitian ini menggunakan data berupa nilai tes masuk, nilai final dan ips. Range data nilai tes masuk dan data nilai final disamakan dengan range data ips. Contoh normalisasi data nilai final adalah sebagai berikut. Diketahui nilai final awal v = 77.10, nilai minimum awal minA = 0, nilai maksimum awal maxA = 100, nilai minimum baru new_minA = 0 dan nilai maksimum baru new_minA = 4, maka nilai final setelah normalisasi v’ = 77.10−0 100 −0 4 − 0 + 0 = 3.08 Contoh normalisasi data nilai tes masuk adalah sebagai berikut. Diketahui nilai tes awal v = 8.00, nilai minimum awal minA = 0, nilai maksimum awal maxA = 10, nilai minimum baru new_minA = 0 dan nilai maksimum baru new_minA = 4, maka nilai tes setelah normalisasi v’ = 3.2.4 8.00 − 0 10 −0 4 − 0 + 0 = 3.20 Penambangan Data Data yang telah melalui proses transformasi data selanjutnya dicari outliernya menggunakan algoritma deteksi outlier yaitu algoritma Block-based Nested-Loop. Data yang diteliti akan dibatasi pada data dua tahun angkatan di Universitas Sanata Dharma yaitu tahun angkatan 2007 dan 2008. Pada tahap ini, akan ditentukan juga variabel-variabel yang akan digunakan untuk menambang data. Variabel-variabel tersebut antara lain : 1. Input, yang terdiri dari : a. Nilai hasil seleksi penerimaan mahasiswa baru. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 23 Untuk mahasiswa yang mengikuti jalur tes, nilai hasil seleksi yang digunakan berasal dari lima jenis mata tes yaitu nilai penalaran mekanik, nilai penalaran verbal, nilai hubungan ruang, nilai Bahasa Inggris dan nilai kemampuan numerik serta nilai final. Untuk mahasiswa yang mengikuti jalur prestasi, nilai hasil seleksi yang digunakan berasal dari nilai final. b. Nilai Indeks Prestasi Semester (IPS) pada semester 1 sampai semester 4. 2. Output, yaitu sejumlah data yang masuk ke dalam kelompok outlier, jika ada 3.2.5 Evaluasi Pola yang Ditemukan Pada tahap ini, pengetahuan atau pola berupa outlier yang didapat dari proses deteksi outlier akan dievaluasi dengan hipotesa yang telah dibentuk sebelumnya. Hipotesa awal mengenai mahasiswa yang masuk ke dalam kategori outlier yaitu mahasiswa dengan data akademik khusus atau unik dilihat dari hasil seleksi masuk dan IPS setiap semester. Kesesuaian hasil deteksi outlier dengan hipotesa awal menunjukan output yang baik dari proses penambangan data yang dilakukan. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 3.2.6 24 Presentasi Pengetahuan Tahap ini merupakan tahap akhir dari penelitian. Pola khusus yang dihasilkan (outlier) perlu ditampilkan ke dalam bentuk yang mudah dimengerti oleh pihak yang berkepentingan. Oleh sebab itu, pada tahap ini akan dilakukan pembuatan sistem dengan antarmuka pengguna yang mudah dimengerti oleh pihak universitas. 3.3 Contoh Implementasi Algoritma Block-based Nested-Loop Pada penelitian ini, dilakukan deteksi outlier menggunakan algoritma Block-based Nested-Loop dengan data akademik yang berasal dari gudang data data akademik mahasiswa yang berasal dari penelitian Rosa dkk (2011). Data yang awalnya dalam bentuk skrip .sql diubah ke dalam format .xls agar lebih mudah untuk diolah. Data yang akan diolah berasal dari tabel fact_lengkap2. Jumlah data yang digunakan sebanyak 13 baris. Data tersebut telah diseleksi khusus untuk mahasiswa yang memiliki sk_prodi = 27 (Prodi Teknik Informatika), angkatan 2007 dan statustes = T (jalur tes). Data yang digunakan untuk analisis tersebut adalah seperti gambar 3.2 di bawah ini PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 25 Gambar 3.2 Data mentah untuk implementasi algoritma Block-based NestedLoop Pada bagian ini, penjelasan mengenai langkah-langkah deteksi outlier menggunakan algoritma Block-based Nested-Loop hanya akan ditampilkan menggunakan data mahasiswa di atas pada semester satu saja. Untuk semester tiga hingga semester empat hanya akan ditampilkan hasil deteksi outliernya saja. Proses deteksi outlier menggunakan algoritma Block-based Nested-Loop adalah sebagai berikut: 1. Menentukan nilai parameter D = 2 dan M = 4 2. Mengasumsikan jumlah blok = 4 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 3. 26 Membagi seluruh data ke dalam sejumlah blok. Jumlah blok = 4, maka setiap 13 4 = 3 data dan sisa 1 data. Berdsarkan perhitungan tersebut, setiap blok akan berisi 3 buah data. Perhitungan ini menyisakan 1 data yang belum masuk ke dalam sebuah blok. Sisa data dapat dimasukkan ke dalam blok yang mana saja. Dalam contoh ini, sisa data dimasukkan ke dalam blok ke-4. Dengan demikian diperoleh hasil pembagian blok yaitu blok 1, blok 2, blok 3 (masing-masing berisi 3 data) dan blok 4 (berisi 4 data) Tabel 3.1 Data mentah dibagi ke dalam 4 blok 4. First array diisi dengan data dari blok 1. 5. Setiap data dalam first array dihitung jaraknya terhadap setiap data lainnya dalam first array menggunakan Euclidean distance dan nilainya dimasukkan pada kolom Eucliden dist. Setiap kali jarak telah dihitung, nilai jarak langsung dibandingkan dengan nilai parameter D. Jika jarak ≤ D, maka kedua data dinyatakan sebagai PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 27 tetangga dan ditandai dengan angka 1 pada kolom Neighbor. Jika jarak > D, maka dinyatakan sebagai bukan tetangga dan ditandai dengan angka 0. Gambar 3.3 Pengecekan tetangga pada first array antara blok 1 dan blok 1 Menurut analisis di atas, pada data mahasiswa dengan nomor 73 ditemukan tetangga sebanyak 2 buah yaitu mahasiswa dengan nomor 74 dan 75. 6. Setelah jumlah tetangga ditemukan, lalu dibandingkan dengan nilai parameter M. Jika jumlah tetangga > M maka data tersebut dinyatakan sebagai bukan outlier, jika sebaliknya maka data masih dinyatakan sebagai unmarked. Pada contoh di atas, karena diperoleh jumlah tetangga = 2 yang artinya < M, maka data masih diberi keterangan unmarked. 7. Selanjutnya, pengecekan dilakukan terhadap data lainnya dalam blok 1 yaitu mahasiswa nomor 74 dan 75 (kembali ke langkah 5). Hasil pengecekan dalam first array (blok 1 dan blok 1) diperoleh semua data masih berstatus unmarked. Artinya, seluruh data tersebut masih dicek lagi dalam pengecekan berikutnya pada iterasi selanjutnya. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 28 Gambar 3.4 Hasil akhir pengecekan blok 1 dan blok 1 dalam first array Selanjutnya blok 2 dimasukkan ke second array. 8. Setiap data dalam first array yang masih unmarked, dicari tetangganya yang berada dalam second array. Jumlah tetangga yang diperoleh pada perhitungan sebelumnya akan ditambahkan ke dalam pengecekan ini. Gambar 3.5 Pencarian tetangga dari data first array pada second array PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 29 Pada gambar di atas, terlihat bahwa mahasiswa nomor 73 mendapatkan 1 orang tetangga pada pengecekan dengan blok 2. Jumlah tetangga ini dijumlahkan dengan jumlah tetangga sebelumnya yaitu 2 orang sehingga menjadi 3 orang. Mahasiswa nomor 73 masih berstatus unmarked pada tahap ini karena jumlah tetangganya masih < M. Maka data mahasiswa ini akan dimasukkan lagi ke dalam pengecekan selanjutnya. 9. Selanjutnya, pengecekan dilakukan terhadap data lainnya dalam blok 1 yaitu mahasiswa nomor 74 dan 75 (kembali ke langkah 8). Hasil akhir pengecekan antara blok 1 (first array) dan blok 2 (second array) diperoleh mahasiswa nomor 73, 74 dan 75 akan dimasukkan ke dalam pengecekan dengan blok selanjutnya karena masih ditandai sebagai unmarked. Gambar 3.6 Hasil akhir pengecekan blok 1 (first array) dan blok 2 (second array) PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 30 Selanjutnya blok 3 dimasukkan ke second array. 10. Setiap data dalam first array yang masih unmarked, dicari tetangganya yang berada dalam second array. Jumlah tetangga yang diperoleh pada perhitungan sebelumnya akan ditambahkan ke dalam pengecekan ini. Gambar 3.7 Pencarian tetangga dari data first array pada second array Pada gambar di atas, terlihat bahwa mahasiswa nomor 73 mendapatkan 1 tetangga. Jumlah tetangga ini dijumlahkan dengan jumlah tetangga sebelumnya yaitu 3 orang sehingga menjadi 4 orang. Mahasiswa nomor 73 masih berstatus unmarked pada tahap ini karena jumlah tetangganya masih kurang dari M. Maka data mahasiswa ini akan dimasukkan lagi ke dalam pengecekan selanjutnya. 11. Selanjutnya, pengecekan dilakukan terhadap data lainnya dalam blok 1 yaitu mahasiswa nomor 74 dan 75 (kembali ke langkah 10). Hasil akhir pengecekan antara blok 1 (first array) dan blok 3 (second array) diperoleh 2 data yang ditandai sebagai bukan outlier yaitu mahasiswa dengan nomor 74 dan 75. Ketika mahasiswa 74 dicek dengan mahasiswa nomor 80, jumlah tetangga mahasiswa nomor 74 telah mencapai M > 4. Jumlah tetangga PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 31 mahasiswa nomor 74 adalah 4 dari pengecekan sebelumnya dan ditambah 1 pada tahap ini sehingga menjadi 5 orang. Data yang diberi label biru menunjukkan data yang tidak ikut serta ditambahkan sebagai tetangga mahasiswa nomor 74 karena pengecekan berhenti saat M > 4. Kedua data ini tidak akan disertakan lagi dalam pengecekan berikutnya pada iterasi selanjutnya. Gambar 3.8 Hasil akhir pengecekan blok 1 (first array) dan blok 3 (second array) Selanjutnya blok 4 dimasukkan ke dalam second array. 12. Setiap data dalam first array yang masih unmarked, dicari tetangganya yang berada dalam second array. Jumlah tetangga yang diperoleh pada perhitungan sebelumnya akan ditambahkan ke dalam pengecekan ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 32 Gambar 3.9 Hasil akhir pengecekan blok 1 (first array) dan blok 4 (second array) Hasil akhir pengecekan antara blok 1 (first array) dan blok 4 (second array) diperoleh data mahasiswa 73 yang ditandai sebagai bukan outlier yaitu. Ketika mahasiswa 73 dicek dengan mahasiswa nomor 83, jumlah tetangga mahasiswa nomor 73 telah mencapai M > 4. Jumlah tetangga mahasiswa nomor 73 adalah 4 dari pengecekan sebelumnya dan ditambah 1 pada tahap ini sehingga menjadi 5 orang. Data yang diberi label biru menunjukkan data yang tidak ikut serta ditambahkan sebagai tetangga mahasiswa nomor 73 karena pengecekan berhenti saat M > 4. Karena seluruh data dalam blok 1 telah dicek dengan seluruh blok lainnya maka iterasi pegecekan outlier untuk data dalam blok 1 telah selesai. 13. Jika blok yang berada dalam second array belum pernah menjadi first array, tukarkan isi kedua array tersebut dan proses pengecekan berjalan kembali seperti pada langkah ke-4. Jika blok yang berada pada second array sudah pernah menjadi first array, proses deteksi outlier dihentikan. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 33 Urutan pengecekan data pada kasus di atas adalah sebagai berikut: 1. Blok 1 dan Blok 1, kemudian dengan Blok 2, Blok 3, Blok 4 total ada 4 blok yang dibaca 2. Blok 4 dan Blok 4 (tidak perlu dibaca, sudah berada dalam array), kemudian dengan Blok 1 (tidak perlu dibaca, sudah berada dalam array), Blok 2, dan Blok 3 total ada 2 blok yang dibaca 3. Blok 3 dan Blok 3, kemudian dengan Blok 4, Blok 1, dan Blok 2 total ada 2 blok yang dibaca 4. Blok 2 dan Blok 2, kemudian dengan Blok 3, Blok 4, Blok 1 total ada 2 blok yang dibaca Total ada 10 blok yang dibaca dalam pengecekan ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Bab 4 ANALISIS DAN PERANCANGAN SISTEM 4.1 Identifikasi Sistem Universitas Sanata Dharma melakukan seleksi penerimaan mahasiswa baru setiap tahun. Seleksi penerimaan mahasiswa baru terbagi menjadi dua jalur yaitu jalur prestasi dan jalur tes. Kedua jalur penerimaan mahasiswa baru tersebut memiliki persyaratan yang harus dipenuhi oleh calon mahasiswa. Calon mahasiswa yang mengikuti jalur prestasi diwajibkan melampirkan nilai raport SMA saat kelas XI semester 1 dan semester 2. Untuk calon mahasiswa yang mengikuti jalur tes, diwajibkan mengikuti tes tertulis yang terdiri dari lima jenis tes yaitu tes penalaran mekanik, tes penalaran verbal, tes hubungan ruang, tes kemampuan numerik dan tes Bahasa Inggris. Berdasarkan nilai final untuk jalur prestasi dan nilai final serta nilai lima tes untuk jalur tes tersebut, dapat ditentukan calon mahasiswa yang diterima menjadi mahasiswa di Universitas Sanata Dharma. Mahasiswa di Universitas Sanata Dharma menjalani masa perkuliahan yang dibagi ke dalam beberapa semester. Setiap semester dilakukan evaluasi untuk mengetahui tingkat pemahaman setiap mahasiswa. Tingkat pemahaman mahasiswa ditunjukkan oleh Indeks Prestasi Semester (IPS). Setiap mahasiswa memiliki IPS yang bervariasi terhadap mahasiswa lainnya. Selain itu setiap mahasiswa juga dapat memiliki IPS yang sama atau berbeda-beda di setiap semester. 34 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 35 Deteksi outlier bermanfaat dalam membantu pihak universitas dalam menemukan data akademik yang unik. Mahasiswa yang memiliki nilai tinggi saat mengikuti seleksi penerimaan mahasiswa baru belum tentu akan memiliki IPS yang tinggi di setiap semester, demikian juga sebaliknya. Tetapi tidak menutup kemungkinan juga bahwa ada mahasiswa yang selalu memiliki nilai tinggi atau rendah sejak seleksi penerimaan mahasiswa baru hingga di setiap semester selama perkuliahan. Dengan demikian, ada kemungkinan munculnya mahasiswa dengan data akademik yang unik di setiap semester. Mahasiswa dengan data akademik yang unik ini selanjutnya disebut sebagai outlier. Sistem ini menggunakan pendekatan distance-based dengan algoritma Block-based Nested-Loop untuk melakukan deteksi outlier. Data yang digunakan penelitian ini untuk diolah menggunakan sistem deteksi outlier yaitu data akademik mahasiswa Prodi Teknik Informatika angkatan 2007 dan 2008 di Universitas Sanata Dharma berupa hasil tes penerimaan mahasiswa baru (nilai penalaran mekanik, nilai penalaran verbal, nilai hubungan ruang, nilai Bahasa Inggris dan nilai kemampuan numerik), nilai final dan nilai indeks prestasi semester dari semester satu sampai semester empat. Data diperoleh dari gudang data akademik mahasiswa hasil penelitian Rosa dkk (2011). 4.2 Input Sistem, Proses Sistem dan Output Sistem 4.2.1 Input Sistem Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based NestedLoop ini dapat menerima masukan data dari pengguna berupa file berformat .xls dan .csv serta tabel dari basis data. Pengguna perlu memperhatikan kelengkapan PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 36 data yang diinputkan sehingga proses deteksi outlier yang dilakukan oleh sistem dapat berjalan dengan benar dan keluaran yang dihasilkan juga tepat. Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based NestedLoop ini juga memerlukan masukan data berupa nilai M dan D. Nilai M dan D ini diperlukan untuk melakukan deteksi outlier terhadap data file .xls, .csv atau tabel dari basis data yang diinputkan pengguna. Penjelasan lebih lanjut dari nilai M dan D dapat dijelaskan sebagai berikut: 1. Nilai M menunjukkan jumlah tetangga atau obyek maksimum dari sebuah outlier dalam ketetanggaan-D (Knorr & Ng, 1998). Sebuah data akan dinyatakan sebagai outlier apabila jumlah tetangganya kurang dari atau sama dengan M. Sebaliknya, data yang jumlah tetangganya lebih dari M akan dinyatakan sebagai bukan outlier. Penentuan nilai M disesuaikan dengan jumlah data yang digunakan serta persentase data yang diperkirakan sebagai outlier. 2. Nilai D menunjukkan jangkauan (range) nilai yang menjadi dasar penentuan dua buah data merupakan tetangga atau tidak berdasarkan jarak (euclidean distance) kedua data tersebut. Perhitungan jarak akan dilakukan oleh sistem. Jika jarak dua data bernilai kurang dari atau sama dengan D, maka keduanya merupakan tetangga. Pengguna menentukan nilai D dengan memperhatikan range nilai setiap atribut dari data yang diinputkan. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 37 Pada penelitian ini peneliti menggunakan data akademik mahasiswa Prodi Teknik Informatika Universitas Sanata Dharma. Data yang digunakan ini terbagi menjadi data akademik mahasiswa yang mengikuti jalur tes dan jalur prestasi. Beberapa atribut yang digunakan dalam data akademik tersebut dapat dilihat pada tabel 4.1 di bawah ini. Tabel 4.1 Tabel Nama Atribut pada Data Akademik Mahasiswa No. 1. Nama Atribut Final 2. Nil11 3. Nil12 4. Nil13 5. 6. Nil14 Nil15 7. Ips1 8. Ips2 9. Ips3 10. Ips4 4.2.2 Penjelasan Nilai Atribut ini menyimpan nilai final mahasiwa saat seleksi penerimaan mahasiswa baru Atribut ini menyimpan hasil tes penalaran mekanik Atribut ini menyimpan hasil tes penalaran verbal Atribut ini menyimpan hasil tes hubungan ruang Atribut ini menyimpan hasil tes Bahasa Inggris Atribut ini menyimpan hasil tes kemampuan numerik Atribut ini menyimpan nilai IPS mahasiswa semester 1 Atribut ini menyimpan nilai IPS mahasiswa semester 2 Atribut ini menyimpan nilai IPS mahasiswa semester 3 Atribut ini menyimpan nilai IPS mahasiswa semester 4 0 – 100 0 – 10 0 – 10 0 – 10 0 – 10 0 – 10 0–4 0–4 0–4 0-4 Proses Sistem Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based NestedLoop ini memiliki beberapa tahapan proses. Pertama, pengguna memasukkan data yang akan diolah dalam bentuk file berformat .xls atau .csv. Pengguna juga dapat memasukkan data dari basis data. Kedua, pengguna dapat melakukan PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 38 seleksi atribut serta melihat distribusi atribut. Seleksi atribut digunakan untuk memilih atribut tertentu yang akan dihapus. Distribusi atribut digunakan untuk melihat variasi nilai dalam setiap atribut berserta jumlahnya dalam bentuk tabel maupun grafik. Tahap kedua ini merupakan tahap pilihan sehingga tidak harus dikerjakan. Ketiga, pengguna harus memasukkan nilai parameter M dan D sebelum proses deteksi outlier dilakukan. Kemudian sistem akan menghitung jumlah blok yang diperlukan berdasarkan jumlah data yang dimasukkan, jumlah atribut serta kapasitas memori Java Virtual Machine (JVM) yang tidak terpakai. Setelah itu data dikelompokkan ke dalam blok yang telah dibuat. Kemudian, setiap data akan dihitung jaraknya (Euclidean distance) dengan data lainnya. Dua buah data dianggap sebagai tetangga apabila nilai Euclidean distance kurang dari sama dengan nilai parameter D. Saat perhitungan tetangga sebuah data telah mencapai M+1, maka data tersebut dianggap sebagai bukan outlier. Sebaliknya jika hingga pengecekan dengan data terakhir jumlah tetangga sebuah data belum mencapai M+1 maka data tersebut merupakan outlier. Tahapan proses di atas dapat dilihat pada gambar 4.1 di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 39 Start Data tipe .xls Seleksi atribut? Ya Proses seleksi atribut Ya Proses distribusi atribut Data tipe .csv Tidak Data dari basis data Distribusi atribut? Tidak Masukkan M dan D Proses deteksi outlier Tampilkan outlier End Gambar 4.1 Proses Umum Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop 4.2.3 Output Sistem Keluaran yang diperoleh dari sistem yang dibangun ini terbagi menjadi dua bagian sebagai berikut: 1. Proses input menampilkan : PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 2. 4.3 a. Data yang dipilih dalam bentuk tabel data, jumlah data b. Daftar nama atribut 40 Proses deteksi outlier menampilkan : a. Outlier beserta daftar nilai untuk setiap atribut b. Jumlah data c. Jumlah outlier d. Lama deteksi outlier Perancangan Struktur Data Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested- Loop ini menggunakan struktur data berupa graph. Pemilihan penggunaan struktur data graph karena dapat membantu penyimpanan data dengan banyak atribut serta untuk menghubungkan satu data dengan data lainnya. Setiap data akan dianggap sebagai vertex. Setiap vertex memiliki label serta nilai. Nilai setiap vertex disimpan dalam bentuk list karena setiap vertex dapat memiliki lebih dari satu atribut. Penggunaan algoritma Block-based Nested-Loop mengharuskan adanya pembentukan blok-blok data untuk membantu proses load data ke memori. Setiap blok berisi sekumpulan vertex yang jumlahnya disesuaikan dengan perhitungan blok. Setiap blok memiliki nomor blok, isi blok, jumlah anggota, sisa dan status first array. Nomor blok digunakan untuk membantu pertukaran blok selama proses deteksi outlier berlangsung. Saat pembagian vertex ke dalam sejumlah blok, ada kemungkinan terdapat sisa vertex karena jumlah data tidak habis dibagi PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 41 dengan jumlah blok. Sisa vertex ini akan dimasukkan ke blok tertentu. Karena tidak ada aturan khusus mengenai penempatan vertex sisa tersebut, peneliti menetapkan untuk memasukkannya ke dalam blok dengan nomor urut terakhir. Status first array bertipe boolean dan digunakan sebagai penanda bahwa sebuah blok sudah pernah menjadi first array. Status ini diperlukan sebab sesuai dengan aturan dalam algoritma Block-based Nested-Loop, sebuah blok hanya dapat sekali menjadi first array. Ilustrasi struktur data yang digunakan oleh sistem ini dapat dilihat pada gambar di bawah ini. Input data sejumlah 8 baris dengan 3 atribut Nama Atribut 1 Atribut 2 Atribut 3 A .... .... .... B .... .... .... C .... .... .... D .... .... .... E .... .... .... F .... .... .... G .... .... .... H .... .... .... Buat Graph (8) Index 0 1 2 3 4 5 6 7 0 0 -1 -1 -1 -1 -1 -1 -1 1 -1 0 -1 -1 -1 -1 -1 -1 2 -1 -1 0 -1 -1 -1 -1 -1 3 -1 -1 -1 0 -1 -1 -1 -1 4 -1 -1 -1 -1 0 -1 -1 -1 5 -1 -1 -1 -1 -1 0 -1 -1 6 -1 -1 -1 -1 -1 -1 0 -1 7 -1 -1 -1 -1 -1 -1 -1 0 - Dibentuk matriks jarak (edge). Karena data berjumlah 8 maka dibentuk matriks 8x8. Untuk pertemuan indeks yang sama akan diberi nilai 0 dan pertemuan indeks yang berbeda akan diberi nilai -1. - Dibentuk vertex sebanyak 8 buah kosong PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Insert Vertex Label „A‟ List nilai Vertex[0] = A index . . . . . . . . . StatusUnmarked = true StatusNonOutlier =false Label „H‟ List nilai Vertex[7] = H StatusUnmarked = true StatusNonOutlier =false 42 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 43 Hitung jumlah blok dan pembagian vertex ke dalam blok Diasumsikan pada contoh kasus ini, diperoleh : jumlah blok = 3 data per blok = 2 sisa = 2 sisa lalu dimasukkan ke blok terakhir A B C D Blok 1 Blok 2 E F G H Blok 3 Insert edge dan pencarian outlier First Array Second Array Blok 1 Status first array blok 1 harus false baru dimasukkan ke First Array Blok 1 dan Blok 2 Blok 1 dan Blok 3 Untuk tiap vertex dalam blok 1 : -jumlah tetangga <= M -status unmarked = true -status nonoutlier = false Setiap vertex yang berada dalam blok 1 dihitung euclidean distance dan jumlah tetangganya PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 44 Status first array blok 1 = true First Array Second Array Blok 3 Status first array blok 3 harus false baru dimasukkan ke First Array Blok 3 dan Blok 1 Blok 3 dan Blok 2 Untuk tiap vertex dalam blok 3 : -jumlah tetangga <= M -status unmarked = true -status nonoutlier = false Setiap vertex yang berada dalam blok 3 dihitung euclidean distance dan jumlah tetangganya Status first array blok 3 = true First Array Second Array Blok 2 Status first array blok 2 harus false baru dimasukkan ke First Array Blok 2 dan Blok 3 Blok 2 dan Blok 1 Untuk tiap vertex dalam blok 2 : -jumlah tetangga <= M -status unmarked = true -status nonoutlier = false Setiap vertex yang berada dalam blok 2 dihitung euclidean distance dan jumlah tetangganya Status first array blok 2 = true Karena status first array blok 1 = true, maka blok 1 tidak dimasukkan lagi ke first array. Hal ini menandakan seluruh blok telah dicek outliernya. Kemudian proses PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 45 pencarian outlier selesai. Lalu setiap vertex yang memiliki status non outlier = false akan ditampilkan sebagai outlier. 4.4 Diagram Use Case Diagram use case digunakan untuk menggambarkan interaksi antara pengguna dengan sistem. Pengguna sistem ini sebanyak satu orang. Fungsi yang dapat dijalankan oleh pengguna sistem ini adalah fungsi memasukkan data dalam bentuk file .xls, .csv atau tabel dari basis data. Fungsi berikutnya itu seleksi atribut dan distribusi atribut. Fungsi berikutnya yaitu fungsi proses pencarian outlier dari data yang dimasukkan. Fungsi terakhir yaitu fungsi menyimpan hasil deteksi outlier dalam bentuk file. Diagram use case dari sistem pendeteksi outlier menggunakan algoritma Block-based Nested-Loop ini dapat dilihat pada gambar 4.2 di bawah ini. Gambar 4.2 Diagram Use Case Detail tabel ringkasan dan skenario use case dapat dilihat pada bagian lampiran dalam tugas akhir ini pada lampiran 1 dan 2. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.5 46 Perancangan Sistem 4.5.1 Diagram Konteks Data .xls, data .csv, tabel dalam basis data, M, D Pengguna Outlier, jumlah outlier, jumlah data, lama deteksi outlier Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop Gambar 4.3 Diagram Konteks 4.5.2 Diagram Aktivitas Diagram aktivitas digunakan untuk menunjukan aktivitas yang dikerjakan oleh pengguna dan sistem dalam setiap use case yang disebutkan dalam gambar 4.1. Berikut adalah diagram aktivitas dari setiap use case: 1. Diagram Aktivitas Input Data File .xls, .csv atau Tabel Dari Basis Data 2. Diagram Aktivitas Pencarian Outlier 3. Diagram Aktivitas Simpan Hasil Pencarian Outlier 4. Diagram Aktivitas Seleksi Atribut 5. Diagram Aktivitas Distribusi Atribut Detail diagram aktivitas dari setiap use case dapat dilihat pada bagian lampiran dalam tugas akhir ini pada lampiran 3. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 47 4.5.3 Diagram Kelas Analisis Gambar 4.4 Diagram Kelas Analisis PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 48 Detail tabel diagram kelas analisis dapat dilihat pada bagian lampiran dalam tugas akhir ini pada lampiran 4. 4.5.4 Diagram Sequence Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based NestedLoop ini memiliki beberapa sequence diagram dalam proses perancangannya. Berikut adalah sequence diagram dari Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop. 1. Diagram Sequence Input Data File .xls, .csv atau Tabel Dari Basis Data 2. Diagram Sequence Pencarian Outlier 3. Diagram Sequence Simpan Hasil Pencarian Outlier 4. Diagram Sequence Seleksi Atribut 5. Diagram Sequence Distribusi Atribut Untuk penjelasan detail dari masing – masing diagram sequence dapat dilihat pada lampiran yang terdapat pada tugas akhir ini pada lampiran 5. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.5.3 Diagram Kelas Desain Gambar 4.5 Diagram Kelas Desain 49 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 50 HalamanAwal -titleLabel : JLabel -footer1Label : JLabel -footer2Label : JLabel -masukButton : JButton -icon : JLabel -halamanAwalDesktopPane : JDesktopPane -halamanAwalPanel : Jpanel +HalamanAwal() : <<constructor>> -masukButtonActionPerformed (java.awt.event.ActionEvent evt) : void HalamanUtama -atributDField -atributDLabel -atributMField - atributMLabel -bantuanButton -buttonPanel -checkAllButton -deteksiOutlierTabel -distAtributButton -hapusAtributButton -hapusAtributLabel -hapusAtributTable -hasilOutlierTextArea -jTabbedPane1 -jumDataField -jumDataLabel -jumlahDataField -jumlahDataLabel -keluarButton -namaAlgoLabel -panelDeteksiOutlier -panelPreprocess -pathField -pilihDBButton -pilihFileButton -preprocessTabel -prosesButton -simpanButton -submitDataButton -titleLabel -titlePanel -uncheckAllButton cb_table : JTextField : JLabel : JTextField : JLabel : JButton : JPanel : JButton : JTable : JButton : JButton : JLabel : JTable : JTextArea : JTabbedPane : JTextField : JLabel : JTextField : JLabel : JButton : JLabel : JPanel : JPanel : JTextField : JButton : JButton : JTable : JButton : JButton : JButton : JLabel : JPanel : JButton : PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 51 CheckBoxTableModel fm : SeleksiAtribut con : DatabaseConnection +HalamanUtama() : <<constructor>> +HalamanUtama(DatabaseConnection db, String namaTabel) : <<constructor>> +pilihFile() : void +pilihXLS(JfileChooser chooser, String nama_file, String pola, String pola2) : void +pilihCSV(JfileChooser chooser, String nama_file, String pola, String pola2) : void +tampilTabelBasisdata(DatabaseConnection db, String namaTabel) : void +cekAtribut(String x, List<String> hapus) : boolean +cekAtribut2(String x, Vector kolom) : boolean +updateCellWidth(JTable t) : void +adjustRowSizes(JTable jTable) : void +adjustColumnSizes(JTable table, int column, int margin) : void +tandaiSemua() : void +batalTandai() : void +hapusAtribut() : void +distribusiAtribut() : void +submitData() : void +prosesData() : void +simpanHasil() : void Database -connection : Connection +getConnOracle(String url, String user, String pwd) : static boolean +getConnMySQL(String url, String user, String pwd) : static boolean +displayTableOracle(Connection conn) : ResultSet +displayTableMySql(Connection conn) : ResultSet +displayTable(Connection conn, String namaTabel) : ResultSet DatabaseConnection -connection : static Connection +setConnection(Connection aConnection) : static void +isConnectedOracle(String url, String user, String pwd) : boolean +isConnectedMySQL(String url, String user, String pwd) : boolean +connectToOracle(String url, String user, String pwd) : Connection +connectToMySQL(String url, String user, String pwd) : Connection +getConnection() : Connection +closeConnection(String url, String user, String pwd) : boolean PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI CheckBoxTableModel colom : String[ ] nama_atribut : List<String> fm : SeleksiAtribut lfm : List<SeleksiAtribut> +CheckBoxTableModel : <<constructor>> +getRowCount() : int +getColumnName(int col) : String +getValueAt(int rowIndex, int columnIndex) : Object +getColumnClass(int columnIndex) : Class +setValueAt(Object val, int rowIndex, int columnIndex) : void +isCellEditable(int row, int col) : boolean +add(int x,SeleksiAtribut field_m) : void +removeRow() : void +removeRow2() : void SeleksiAtribut -atribut : List<String> -atribut2 : String -pilih : Boolean +SeleksiAtribut() : <<constructor>> +SeleksiAtribut(String vl, boolean st) : <<constructor>> +getPilih() : boolean +setPilih(Boolean pilih) : void +getAtribut() : List<String> +setAtribut(List<String> atribut) : void +getAtribut2() : String +setAtribut2(String atribut2) : void GraphController g : Graph +deteksiOutlier(int row) : void +tampilHasil(JTable t, double m, double d, String jumData, String path) : String Graph edge size vertex block : double[ ][ ] : int : Vertex[ ] : Block[ ] 52 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI +Graph(int a) : <<constructor>> +insertVertex(String label, List<Double> nilai) : void +insertBlock(int no_urut, List<Integer> daftar_vertex) : void +insertEdge(int i, int j, double nilai) : void +euclidean(int a, int b) : double +NestedLoop(JTable tabel, double m, double d) : void +displayMatrix() : void +displayOutlier(JTable t, double m, double d, String jumData, String path) : String Block -no_urut : int -jum_anggota : int -jum_blok : int -sisa : int -isi_blok : List<Integer> -firstArray : boolean +Block() : <<constructor>> +Block(int no_urut, List<Integer> dv) <<constructor>> +getNo_urut() : int +setNo_urut(int no_urut) : void +getJum_anggota() : int +setJum_anggota(int jum_anggota) +getJum_blok() : int +setJum_blok(int jum_blok) : void +getSisa() : int +setSisa(int sisa) : void +isFirstArray() : boolean +setFirstArray(boolean firstArray) : void +getIsi_blok() : List<Integer> +setIsi_blok(List<Integer> isi_blok) Vertex -label : String -unmarked : boolean -non_outlier : boolean -nilai : List<Double> -jumlah_tetangga : int +Vertex() : <<constructor>> +Vertex(String label, List<Double> nilai) : << constructor>> +getLabel() : String : : void : void 53 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI +setLabel(String label) : void +getNilai() : List<Double> +setNilai(List<Double> nilai) : void +getJumlah_tetangga() : int +setJumlah_tetangga(int jumlah_tetangga) : void +isUnmarked() : boolean +setUnmarked(boolean unmarked) : void +isNon_outlier() : boolean +setNon_outlier(boolean non_outlier) : void HalamanBantuan -jDesktopPane1 : JDesktopPane -jScrollPane1 : JScrollPane -jTextArea1 : JTextArea -keluarButton : JButton +HalamanBantuan() : <<constructor>> -keluarButtonActionPerformed(java.awt.event.ActionEvent evt) : void HalamanDistribusiAtribut -atributCombo : JComboBox -jDesktopPane1 : JDesktopPane -jLabel2 : JLabel -jLabel3 : JLabel -jPanel1 : JPanel1 -jPanel2 : JPanel2 -keluarButton : JButton -lihatGrafikButton : JButton -tabelDistribusi : JTable model : JTable -count : int + HalamanDistribusiAtribut(java.awt.Frame parent, List<String> daftarAtribut, JTable tabel) : <<constructor>> -daftarAtribut(List<String> daftarAtribut, JTable tabel) : void -pilihAtribut() : void -viewGrafik() : void +getCount() : int +setCount(int count) : void BarChart +tampil(int[][] v, String[][] n, String[][] t) : void 54 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 55 HalamanKonfirmasiKeluar -jDesktopPane1 : JDesktopPane -jPanel1 : JPanel -konfirmasiLabel : JLabel -tidakButton : JButton -yaButton : JButton +HalamanKonfirmasiKeluar() : <<constructor>> -yaButtonActionPerformed(java.awt.event.ActionEvent evt) : void -tidakButtonActionPerformed(java.awt.event.ActionEvent evt) : void HalamanMissingValues -jDesktopPane1 : JDesktopPane -jPanel1 : JPanel -missingValueTArea : JTextArea -tidakButton : JButton -yaButton : JButton model : DefaultTableModel +HalamanMissingValues(DefaultTableModel tabel) : <<constructor>> -yaButtonActionPerformed(java.awt.event.ActionEvent evt) : void -tidakButtonActionPerformed(java.awt.event.ActionEvent evt) : void HalamanPilihDB -batalButton : JButton -databaseField : JTextField -databaseLabel : JLabel -kueriLabel : JLabel -okButton : JButton -passwordField : JTextField -passwordLabel : JLabel -pilihKoneksiCombo : JComboBox -pilihKoneksiDesktopPane : JDesktopPane - pilihKoneksiPanel : JPanel - titleLabel : JLabel - urlField : JTextField - usernameField : JTextField - usernameLabel : JLabel +HalamanPilihDB() : <<constructor>> -pilihBasisdata() : void -koneksi() : void -batalButtonActionPerformed(java.awt.event.ActionEvent evt) : void HalamanPilihTabel PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 56 -batal1Button : JButton -daftarTableCombo : JComboBox -jDesktopPane1 : JDesktopPane -jLabel1 : JLabel -jLabel2 : JLabel -jPanel1 : JPanel -okPilihTabelButton : JButton con : DatabaseConnection +HalamanPilihTabel(DatabaseConnection c, int db) : <<constructor>> -batallButtonActionPerformed(java.awt.event.ActionEvent evt) : void -daftarTabel(int db) : void -pilihTabel() : void 4.5.4 Detail Algoritma Tiap Method Pada Tiap Kelas 4.5.6.1 Detail Algoritma Pada Method di Kelas HalamanUtama Tabel 4.2 Tabel Kelas HalamanUtama Nama method pilihFile() Fungsi method Menampilkan dialog untuk memilih file .xls atau .csv Algoritma method 1. Menampilkan dialog Open File 2. Jika file yang pilih berformat .xls, panggil method pilihXLS() 3. Jika file yang pilih berformat .csv, panggil method pilihCSV() pilihXLS(JfileChooser, String, String, String) Membaca file dalam format .xls dan menampilkannya ke dalam tabel data 4. Jika file yang dipilih selain yang berformat .xls dan .csv, menampilkan pesan peringatan 1. Membuat vector baru dengan nama columnNames dan data 2. Inisialisasi row = 0 3. Selama row < sheet.getRows(), ke langkah 4, jika tidak ke langkah 11 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 57 4. Membuat vector baru dengan nama rows 5. Inisialisasi column = 0 6. Selama column < sheet.getColumn(), ke langkah 6, jika tidak ke langkah 10 7. Jika row = 0, ke langkah 6, jika tidak ke langkah 7 8. Cell (column, row) dari file .xls ditambahkan ke vector columnNames. column++, lalu kembali ke langkah 6 9. Cell (column, row) dari file .xls ditambahkan ke vector rows. column++, lalu kembali ke langkah 6 10. Jika row != 0, maka rows ditambahkan ke vector data. Lalu row++ dan kembali ke langkah 3 11. Mengeset model tabel preprocess dengan nama kolom = vector columnNames dan data = vector data 12. Inisialisasi nilai i = 0 13. Selama i < model.getColumnCount(), ke langkah 13, jika tidak ke langkah 19 14. Inisialisasi nilai j = 0 15. Selama j < model.getRowCount(), ke langkah 15, jika tidak ke PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 58 langkah 18 16. Jika i=0 ke langkah 16, jika i!=0 ke langkah 17 17. Jika model.getValue(j,0).isEmpty( ) = true, i = model.getColumncount() -1 lalu break, jika false j++ lalu ke langkah 14 18. Jika model.getValue(j,i).isEmpty() = true atau model.getValue(j,i).matches (pola) = true atau model.getValue(j,i). matches (pola2)= true, panggil HalamanMissingValues, i = model.getColumncount() 1 lalu break Jika false semua, j++ lalu kembali ke langkah 14 19. i++ lalu kembali ke langkah 12 20. Inisialisasi i = 0 pilihCSV(JfileChooser, String, String, String) Membaca file dalam format .csv dan menampilkannya ke dalam tabel data 21. Selama i < model.getColumncount() tambahkan nama kolom ke cb_table 1. Membuat vector baru dengan nama columnNames dan data 2. Membaca baris pertama dari file .csv 3. Selama masih terdapat cell yg berisi nilai tertentu, menambahkan setiap nilai cell pada baris pertama ke vector columnNames. Jika tidak ke langkah 4 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 59 4. Selama masih ada baris selanjutnya, ke langkah 5 jika tidak ke langkah 6 5. Selama masih terdapat cell yg berisi nilai tertentu, menambahkan setiap nilai cell ke vector row. Jika tidak, row ditambahkan ke vector data lalu pindah ke baris berikutnya dan kembali ke langkah 4 6. Mengeset model tabel preprocess dengan nama kolom = vector columnNames dan data = vector data 7. Inisialisasi nilai i = 0 8. Selama i < model.getColumnCount(), ke langkah 8, jika tidak ke langkah 12 9. Inisialisasi nilai j = 0 10. Selama j < model.getRowCount(), ke langkah 10, jika tidak ke langkah 11 11. Jika model.getValue(j,i).isEmpty() = true atau model.getValue(j,i).matches (pola) = true atau model.getValue(j,i). matches (pola2)= true, panggil HalamanMissingValues, i = model.getColumncount() 1 lalu break Jika false semua, j++ lalu kembali ke langkah 9 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 60 12. i++ lalu kembali ke langkah 7 13. Inisialisasi i = 0 tampilTabelBasisdata (DatabaseConnection, String) Membaca tabel dari basis data dan menampilkannya ke dalam tabel data 14. Selama i < model.getColumncount() tambahkan nama kolom ke cb_table 1. Mengambil tabel dari basis data dengan memaggil method displayTable(db.getConnectio n, namaTabel) 2. Membuat vector columnName dan vector data 3. Inisialisasi i = 1 4. Selama i <= columnCount, ambil nama kolom ke-i dari basis data dan ditambahkan ke columnName 5. Selama rs.next = true kerjakan langkah 6-8 6. Inisialisasi i = 1, buat vector data2 7. Selama i <= columnCount, ambil data pada setiap baris di kolom ke-I dan ditambahkan ke data2 8. Tambahkan data2 ke dalam data, kembali ke langkah 5 9. Mengeset model tabel preprocess dengan nama kolom = vector columnNames dan data = vector data 10. Inisialisasi nilai i = 0 11. Selama i < PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 61 model.getColumnCount(), ke langkah 12, jika tidak ke langkah 18 12. Inisialisasi nilai j = 0 13. Selama j < model.getRowCount(), ke langkah 14, jika tidak ke langkah 17 14. Jika i=0 ke langkah 15, jika i!=0 ke langkah 16 15. Jika model.getValue(j,0).isEmpty( ) = true, i = model.getColumncount() -1 lalu break, jika false j++ lalu ke langkah 13 16. Jika model.getValue(j,i).isEmpty() = true atau model.getValue(j,i).matches (pola) = true atau model.getValue(j,i). matches (pola2)= true, i = model.getColumncount() 1 lalu break Jika false semua, j++ lalu kembali ke langkah 13 17. i++ lalu kembali ke langkah 11 18. Inisialisasi i = 0 cekAtribut (String, List<String>) Mengecek namanama atribut yang akan dihapus berdasarkan tabel 19. Selama i < model.getColumncount() tambahkan nama kolom ke cb_table 1. Inisialisasi i = 0 2. Selama i < hapus.size ke langkah 3, jika tidak ke PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI atribut 62 langkah 4 3. Jika hapus.get(i).equals(x), kembalikan nilai true cekAtribut2 (String, Vector) Mengecek namanama atribut yang tidak dihapus dari tabel data 4. Kembalikan nilai false 1. Inisialisasi i = 0 2. Selama i < kolom.size ke langkah 3, jika tidak ke langkah 4 3. Jika kolom.get(i).equals(x), kembalikan nilai true updateCellWidth (JTable) adjustRowSizes (JTable) Mengatur lebar cell pada setiap kolom dari tabel data agar sesuai dengan ukuran karakter terpanjang Mengatur ukuran baris pada tabel data 4. Kembalikan nilai false 1. Memanggil method adjustRowSizes(t) 2. Inisialisasi i = 0 3. Selama i < t.getColumnCount() panggil method adjustColumnSizes(t,i,2) 1. Inisialisasi row = 0 2. Selama row < jTable.getRowCount() ke langkah 3 3. maxHeight = 0 4. Inisialisasi column = 0 5. Selama column < 6. jTable.getColumnCount(), bandingkan tinggi baris kerow, kolom ke-column dengan maxHeight lalu simpan nilai maksimum ke maxHeight 7. Tentukan tinggi baris ke-row dengan memanggil method PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI adjustColumnSizes (JTable) Mengatur ukuran kolom pada tabel data 63 jTable.setRowHeight(row, maxheight) lalu kembali ke langkah 2 1. Inisialisasi r = 0, lebar nama kolom = width = comp.getPreferredSize().widt h 2. Selama r < table.getRowCount, lebar kolom pada baris ke-r = currentWidth lalu ambil nilai maksimum antara width dan currentWidth kemudian disimpan dalam width tandaiSemua() batalTandai() hapusAtribut() Memberi tanda check pada semua nama atribut pada tabel atribut Menghapus tanda check pada semua nama atribut pada tabel atribut Menghapus atribut pada tabel data sesuai dengan yang diberi tanda pada tabel atribut 3. Menentukan lebar kolom, col.setWidth(width) 1. Inisialisasi i = 0 2. Selama i < cb.table.getRowCount, cb_table.setValueAt(true,i,1) 1. Inisialisasi i = 0 2. Selama i < cb.table.getRowCount, cb_table.setValueAt(false,i,1) 1. Membuat list bernama hapus_atribut 2. Inisialisasi i = 0 3. Selama i < cb_table.getRowCount, ke langkah 4 4. Jika cb_table.getValueAt(i,1).equa ls(true), tambahkan cb_table.getValueAt(i,0) ke dalam hapus_atribut 5. Membuat vector columnNames dan data PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 64 6. Inisialisasi i = 0 7. Selama i < cb_table.getRowCount, ke langkah 8 8. Jika method cekAtribut(cb_table.getValue At(i,0), hapus_atribut) mengembalikan nilai false maka cb_table.getValueAt(i,0) ditambahkan ke columnNames 9. Inisialisasi i = 0 10. Selama i < row, buat vector rows lalu ke langkah 11 11. Inisialisasi j = 0 12. Selama j < column, ke langkah 13 13. Jika method cekAtribut2(model.getColum nName(j), columnNames) mengembalikan nilai true maka model.getValueAt(i,j) ditambahkan ke rows 14. rows ditambahkan ke data, kembali ke langkah 7 distribusiAtribut() Menampilkan distribusi atribut dari data yang ada di tabel data 15. Mengeset model tabel preprocess dengan nama kolom = vector columnNames dan data = vector data 1. Membuat list daftarAtribut untuk menampung namanama atribut 2. jumlahAtribut = preprocessTabel.getColumnC ount() – 1 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 65 3. Inisialisasi i = 1 4. Selama i < jumlahAtribut, tambahkan nama kolom ke-1 ke dalam daftarAtribut submitData() Menyalin data tabel dan jumlah data dari tab Preprocess ke tab Deteksi outlier 5. Mengirim daftarAtribut dan preprocessTabel ke kelas HalamanDistribusiAtribut 1. Mengambil model dari preprocessTabel, preprocessTable.getModel(), lalu menyimpannya dalam variabel model 2. Mengeset model deteksiOutlierTabel = model prosesData() Mengirim data pada tabel data serta nilai D dan M untuk proses pencarian outlier 3. Berpindah ke tab deteksi otulier dengan mengeset jTabbedPane1.setSelectedCo mponent(panelDeteksiOutlier ), jTabbedPane1.setEnabledAt( 1, true) 1. Membuat pattern untuk karakter angka dan/atau tanda titik yaitu pola = [0-9.]* 2. Membuat pattern untuk karakter tanda titik yaitu pola2 = [.]* 3. Jika jumDataField.getText().equal s(“”), menampilkan pesan bahwa data kosong 4. Jika isi field D dan/atau M lebih dari 0 karakter dan mengandung karakter selain yang ada pada pola dan pola2, tampilkan pesan bahwa nilai M dan D harus berupa bilangan bulat atau desimal PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 66 5. Jika isi field D dan/atau M tidak diisi, tampilkan pesan bahwa keduanya harus diisi simpanHasil() Menyimpan hasil deteksi outlier dalam bentuk file .txt atau .doc 6. Jika langkah 3-4 bernilai false, panggil method tampilHasil() (deteksiOutlierTabel, m, d, jumDataField.getText(), pathField.getText()) 1. Membuka dialog Save File 2. Membaca lokasi penyimpanan file fileChooser.getSelectedFile(). getPath() dan disimpan dalam variabel filename 3. Membaca format file yang dipilih fileChooser.getFileFilter().get Description() dan disimpan dalam variabel extension 4. Jika extension = "Microsoft Word (*.doc)" maka format file adalah .doc 5. Jika extension = "Text Documents (*.txt)" maka format file adalah .txt 6. Mengambil teks dari text area hasilOutlierTextArea.getText () lalu disimpan dalam hasil_text_area 7. Menampung tiap baris dalam hasil_text_area ke dalam array baca 8. Inisialisasi i = 0 9. Selama i < baca.length, tulis baca ke-I ke dalam file PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 67 4.5.6.2 Detail Algoritma Pada Method di Kelas HalamanPilihDB Tabel 4.3 Tabel Kelas HalamanPilihDB Nama method pilihBasisdata() koneksi() Fungsi method Menampilkan url dari basis data tertentu Melakukan login ke basis data tertentu Algoritma method 1. Jika pilihKoneksiCombo.getSelec tedIndex() == 0 maka urlField.setText("jdbc:oracle: thin:@localhost:1521:XE") 2. Jika pilihKoneksiCombo.getSelec tedIndex() == 1 maka urlField.setText("jdbc:mysql: //localhost:3306/") 1. Jika field username, password, url dan/atau nama database ada salah satu yang kosong, muncul pesan peringatan bahwa semua data harus diisi, jika tidak ke langkah 2 2. Jika pilihKoneksiCombo.getSelec tedIndex() == 0, maka melakukan login ke basis data Oracle dengan memanggil Database.getConnOracle(url, username, password) lalu ke langkah 3 Jika pilihKoneksiCombo.getSelec tedIndex() == 1, maka melakukan login ke basis data MySQL dengan memanggil Database.getConnMySQL(ur l, username, password) lalu ke langkah 3 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 68 3. Jika login berhasil, tampilkan pesan sukses lalu tampilkan form Halaman Pilih Tabel. Jika tidak berhasil, tampilakan pesan kesalahan 4.5.6.3 Detail Algoritma Pada Method di Kelas HalamanPilihTabel Tabel 4.4 Tabel Kelas HalamanPilihTabel Nama method daftarTabel (Connection, int) Fungsi method Menampilkan daftar tabel yang terdapat dalam basis data yang dipilih pengguna 1. Algoritma method Jika db = 0, maka memanggil tabel-tabel dalam basis data Oracle dengan memanggil method displayTableOracle(con. getConnection()) Jika db = 1, maka memanggil tabel-tabel dalam basis data MySQL dengan memanggil method displayTableMySql(con. getConnection()) 2. pilihTabel() Mengirim isi tabel yang dipilih pengguna ke tabel data pada Halaman Utama 1. 2. Mengisi daftar tabel pada form Halaman Pilih Tabel dengan daftarTableCombo.addIt em(rset.getString(1)) Mengambil nama tabel yang dipilih pengguna daftarTableCombo.getS electedItem() Mengirimkan nama tabel ke kelas Halaman Utama PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.5.6.4 69 Detail Algoritma Pada Method di Kelas DistribusiAtribut Tabel 4.5 Tabel Kelas DistribusiAtribut Nama method daftarAtribut (List<String>, JTable) Fungsi method Menampilkan daftar nama atribut yang ada pada tabel data pilihAtribut() Menampilkan distribusi atribut yang dipilih pengguna dari daftar atribut 1. 2. 1. Algoritma method Inisialisasi i = 0 Selama i < daftarAtribut.size, tambahkan daftar atribut ke-i ke dalam atributCombo Membuat list bernama listData 2. Inisialisasi i = 1 3. Selama i < model.getColumnCount() ke langkah 3 4. Jika atribut yang dipilih pengguna = model.getColumnName(i) maka inisialisasi j = 0 5. Selama j < model.getRowCount(), masukkan seluruh data pada kolom ke-i ke dalam listData 6. Menghapus duplikasi data dalam listData dengan memasukkan listData ke dalam HashSet Kemudian membersihkan listData dengan listData.clear() Lalu memasukkan listData yang telah dihilangkan duplikasinya dengan PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 70 listData = new ArrayList(hashSet) 7. Inisialisasi k = 0 8. Selama k < listData.size(), inisialisasi l = 0 lalu ke langkah 9 9. Selama l < model.getRowCount(), jika listData.get(k) = model.getValueAt(l,i) maka setCount(count+1) 10. data[k][0] = listData.get(k).toString() data[k][1] = String.valueOf(getCount() ) setCount(0) lalu kembali ke langkah 8 11. tabelDistribusi dibuat dengan data = array data dan nama kolom = array columnName viewGrafik() Mengirim data atribut ke kelas BarChart untuk ditampilkan grafik distribusi dari atribut tersebut 1. Inisialisasi i = 0 2. Selama i < tabelDistribusi.getRowC ount(), ambil data pada tabelDistribusi baris kei, kolom ke-0 lalu masukkan ke array ass dan baris ke-i, kolom ke-1 lalu masukkan ke array pars dan baris kei, kolom ke-1 dikonversi ke nilai integer lalu dimasukkan ke array jum 3. Panggil method tampil (jum,ass,ass) yang ada PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 71 di kelas BarChart 4.5.6.5 Detail Algoritma Pada Method di Kelas Graph Tabel 4.6 Tabel Kelas Graph Nama method insertVertex (String, List<Double>) insertBlock (int, List<Integer>) insertEdge (int, int, double) euclidean (int, int) Fungsi method Membuat vertex Membuat blok Mengisi nilai edge Menghitung nilai euclidean distance antara dua data Algoritma method 1. Membaca input method berupa label dan list nilai 2. Menambah size vertex, vertex[size++] lalu membuat vertex baru dengan label dan nilai yang diinputkan lewat parameter 1. Membaca input method berupa no_urut dan list daftar_vertex 2. Membuat blok baru pada index ke- no_urut dan berisi vertex dalam daftar_vertex yang diinputkan lewat parameter 1. Membaca nilai input parameter yaitu i, j dan nilai 2. Mengisi edge[i][j] dan edge[j][i] dengan nilai 1. Membaca nilai input parameter yaitu a dan b 2. Membuat list data1 dan data2 3. data1 diisi dengan vertex[a].getNilai, data2 diisi dengan vertex[b].getNilai 4. total = 0, i = 0 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 72 5. Selama i < data1.size, hitung total = total + Math.pow(data1.get(i) data2.get(i), 2.0) NestedLoop (JTable, double, double) Melakukan proses deteksi outlier dengan nilai parameter M dan D yang diinputkan pengguna 6. Method ini lalu mengembalikan nilai 1. Menerima input tabel, m dan d 2. Membuat list nilaiAtribut untuk menampung data nilai setiap vertex dan variabel label bertipe String untuk menyimpan nama label dari setiap vertex 3. Inisialisasi i = 0 4. Selama i < jumbaris, buat listAtribut baru lalu inisialisasi j = 0 5. Selama j < jumKolom, Jika j=0 maka label = model.getValueAt(i, j).toString(). Jika j!= 0 maka nilaiAtribut.add(Double. parseDouble(model.get ValueAt(i, j).toString())) 6. Menambahkan vertex baru dengan memanggil method insertVertex(label, nilaiAtribut) 7. Hitung jumlah blok dengan perhitungan int hitung_blok = (int) PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 73 (jumBaris * jumKolom * byte_element * 2 / availableMemory_JVM) 8. Jika hitung_blok <=1 maka jumlah_blok = 1, data_per_blok = jumBaris, sisa = 0 Jika jumBaris%hitung_blok != 0 maka jumlah_blok = hitung_blok, data_per_blok = jumBaris/jumlah_blok, sisa = jumBaris%jumlah_blok Jika jumBaris%hitung_blok == 0 maka jumlah_blok = hitung_blok, data_per_blok = jumBaris/jumlah_blok, sisa = 0 9. Membuat list daftar_vertex dan inisialisasi counter = 0 10. Inisialisasi i = 0 11. Selama i < jumlah_blok Jika i = jumlah_blok -1 && sisa != 0 maka data_per_blok = data_per_blok + sisa Membuat daftar_vertex baru Inisialisasi j = 0 Selama j < data_per_blok, tambahkan counter ke PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 74 list daftar_vertex kemudian counter++ Membuat blok baru dengan memanggil method insertBlock(i, daftar_vertex) 12. Inisialisasi list first_array = null dan list second_array = null 13. Inisialisasi i = 0 14. Selama i < jumlah_blok Jika block[selected_fristArra y] belum pernah menjadi first_array maka isi blok tersebut ditampung dalam first_array Inisialisasi j = 0 15. Selama j < jumlah_blok Jika j = 0, maka size1 dan size2 = first_array Jika j!= 0, maka isi blok dari block[selected_secondA rray] ditampung dalam second_array, size1 = first_array.size() dan size2 = second_array.size() Inisialisasi counter_load_firstArray = 0, k = counter_load_firstArray 16. Selama k < size1, (saat k PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 75 = size1, ke langkah 19) Jika vertex[first_array.get(k)] .isUnmarked() = true maka index1 = first_array.get(k) Inisialisasi counter_load_secondArr ay = 0, l = counter_load_secondArr ay Selama l < size2, (saat l = size2, ke langkah 18) Jika (k != l) || (k == l && j > 0), cek jika pertama = true maka index2 = first_array.get(l), jika pertama = false maka index2 = second_array.get(l) Jika edge[index1][index2] == -1 maka isi nilai edge dengan memanggil method insertEdge(index1, index2, euclidean(index1, index2)) 17. Jika edge[index1][index2] > 0 && edge[index1][index2] <= d && (((k != l)) || (k == l && j > 0)) Maka tambahkan jumlah PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 76 tetangga dari vertex[index1] dengan cara vertex[index1].setJumla h_tetangga(vertex[index 1].getJumlah_tetangga() + 1) Setelah menambahkan cek apakah tetangga dari vertex[index1] tersebut telah mencapai M+1, jika ya maka vertex[index1].setNon_o utlier(true) dan vertex[index1].setUnma rked(false), jika tidak maka vertex[index1].setUnma rked(true) Kembali ke langkah 17 18. Jika k == (size1 - 1), artinya sebuah blok telah dicek seluruh anggotanya maka pertama diberi nilai false sehingga blok tersebut tidak boleh dimasukkan lagi ke dalam first_array. Kembali ke langkah 16 19. Jika i == 0 && j < jumlah_blok – 1 maka selected_secondArray++ Jika i != 0 && j > 1 && j != jumlah_blok – 1 Cek apakah selected_secondArray == block.length - 1 && j < jumlah_blok – 1, jika ya maka PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 77 selected_secondArray = 0, jika selected_secondArray < block.length – 1 maka selected_secondArray++ Jika i != 0 && j == 1 Cek apakah selected_secondArray < block.length - 1 && j < jumlah_blok – 1, jika ya maka selected_secondArray++ , jika selected_secondArray == block.length - 1 && j < jumlah_blok – 1 maka selected_secondArray = 0 Kembali ke langkah 15 20. Pada tahap ini dilakukan pergantian tempat antara first_array dan second_array dengan cara : block[selected_firstArra y].setFirstArray(true) tukar = selected_firstArray selected_firstArray = selected_secondArray selected_secondArray = tukar displayOutlier (Jtable, double, double, String, String) Menampilkan hasil deteksi outlier Kembali ke langkah 14 1. t1 = System.nanoTime() 2. Memanggil method NestedLoop(t,m,d) 3. t2 = System.nanoTime() PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 78 4. Inisialisasi i = 0 5. Selama i < vertex.length, jika vertex[i].isNonOutlier = false maka tambahkan jumlah outlier dengan 1 lalu tampilkan vertex[i].getLabel 6. Inisialisasi j = 0 7. Selama j < t.getColumnCount() 8. Inisialisasi k = 0 9. Selama k < t.getRowCount() 10. Jika vertex[i].getLabel()==t. getValueAt(k, 0) maka data pada baris-k tersebut akan ditampilkan 11. Menampilkan jumlah data, jumlah outlier, dan lama deteksi outlier = ((t2 - t1) * java.lang.Math.pow(10, -9)) 4.5.6.6 Detail Algoritma Pada Method di Kelas DatabaseConnection Tabel 4.7 Tabel Kelas DatabaseConnection Nama method isConnectedOracle (String, String, String) Fungsi method Mengecek apakah sistem telah terhubung dengan basis data Oracle Algoritma method 1. Jika connectToOracle(url, user, pwd) != null mengembalikan nilai true 2. Jika PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI isConnectedMySQL (String, String, String) connectToOracle (String, String, String) connectToMySQL (String, String, String) Mengecek apakah sistem telah terhubung dengan basis data MySQL Melakukan koneksi ke basis data Oracle Melakukan koneksi ke basis data MySQL 79 connectToOracle(url, user, pwd) == null mengembalikan nilai false 1. Jika connectToMySQL(url, user, pwd) != null mengembalikan nilai true 2. Jika connectToOracle(url, user, pwd) == null mengembalikan nilai false 1. Membuat koneksi ke basis data Oracle dengan url, username dan password yang diinputkan setConnection(DriverM anager.getConnection(ur l, user, pwd)) 2. Jika berhasil maka sistem telah terhubung dengan basis data Oracle 1. Membuat koneksi ke basis data MySQL dengan url, username dan password yang diinputkan setConnection(DriverM anager.getConnection(ur l, user, pwd)) 2. Jika berhasil maka sistem telah terhubung dengan basis dataMySQL PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.5.6.7 80 Detail Algoritma Pada Method di Kelas Database Tabel 4.8 Tabel Kelas Database Nama method getConnOracle (String, String, String) getConnMySQL (String, String, String) displayTableOracle (Connection) Fungsi method Mengirimkan url, username dan password yang diinputkan pengguna untuk login ke basis data Oracle Mengirimkan url, username dan password yang diinputkan pengguna untuk login ke basis data MySQL Menampilkan daftar tabel yang ada dalam basis data Oracle Algoritma method 1. Mengecek apakah sistem telah terkoneksi dengan basis data Oracle boolean ok = kon.isConnectedOracle( url, user, pwd) 2. Mengembalikan nilai ok 1. Mengecek apakah sistem telah terkoneksi dengan basis data Oracle boolean ok = kon.isConnectedOracle( url, user, pwd) 2. Mengembalikan nilai ok 1. Membuat kueri untuk menampilkan semua tabel dalam basis data Oracle yaitu query = "select table_name from user_tables" 2. Eksekusi kueri displayTableMySQL (Connection) Menampilkan daftar tabel yang ada dalam basis data MySQL 3. Mengembalikan ResultSet yang berisi daftar tabel yang dihasilkan kueri 1. Membuat kueri untuk menampilkan semua tabel dalam basis data MySQL yaitu query = "show tables" 2. Eksekusi kueri 3. Mengembalikan PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI displayTable (Connection, String) Menampilkan isi tabel dari nama tabel yang dipilih oleh pengguna 81 ResultSet yang berisi daftar tabel yang dihasilkan kueri 1. Membuat kueri untuk menampilkan data dari tabel dalam basis data tertentu yaitu query = "select * from "+namaTabel 2. Eksekusi kueri 3. Mengembalikan ResultSet berupa isi tabel yang dihasilkan kueri 4.5.6.8 Detail Algoritma Pada Method di Kelas CheckBoxTableModel Tabel 4.9 Tabel Kelas CheckBoxTableModel Nama method add(int, SeleksiAtribut) removeRow() removeRow2() Fungsi method Mengambil nama seluruh atribut dari tabel data untuk ditambahkan ke dalam tabel atribut Menghapus nama atribut yang telah di hapus, dari tabel data, pada tabel atribut Membersihkan isi tabel daftar atribut sebelum data baru dimuat ke Halaman Utama Algoritma method 1. Membaca input parameter x dan field_m 2. Menambahkan field_m sebagai data pada index ke-x ke dalam list lfm 1. Membuat ArrayList bernama s 2. Selama seleksi atribut < lfm, Lakukan pengecekan atribut mana saja yang dipilih (akan dihapus) Jika seleksi.getPilih() = false maka seleksi ditambahkan ke list s 3. lfm = s 1. Membuat ArrayList bernama s 2. Selama seleksi atribut < PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 82 lfm, Lakukan pengecekan atribut mana saja yang tidak dipilih (tidak dihapus) Jika seleksi.getPilih() = false maka seleksi dihapus dari list s 3. lfm = s 4.5.6.8 Detail Algoritma Pada Method di Kelas BarChart Tabel 4.10 Tabel Kelas BarChart Nama method tampil(int[][], String[][], String[][]) Fungsi method Menampilkan grafik distribusi dari atribut yang dipilih pengguna Algoritma method 1. Membaca nilai parameter input yaitu array v, array n dan array t 2. Inisialisasi i = 0 3. Selama i < n.length, data.setValue(v[i][1], n[i][0], t[i][0]) 4. Membuat chart dengan data yang diinputkan pada langkah 3 4.6 Perancangan Antarmuka Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested- Loop ini memiliki desain antarmuka yang digunakan untuk melakukan interaksi dengan pengguna. Antarmuka sistem terdiri dari 7 tampilan yang terdiri dari HalamanAwal, HalamanUtama, HalamanDistribusiAtribut, HalamanPilihDB, HalamanPilihTabel, HalamanBantuan dan HalamanKonfirmasiKeluar. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 83 HalamanUtama terbagi menjadi dua bagian yaitu Preprocess dan Deteksi Outlier. Detail desain antarmuka dapat dijelaskan sebagai berikut: 4.6.1 Halaman Awal Halaman Awal ini akan ditampilkan pertama kali saat pengguna menjalankan sistem. Pada halaman ini terdapat sebuah tombol untuk masuk ke dalam Halaman Utama. Nama Sistem ICON Masuk Gambar 4.6 Tampilan Antarmuka Halaman Awal 4.6.2 Halaman Utama (Preprocess) Halaman Utama merupakan tampilan inti dari sistem ini. Di sebelah kiri Halaman Utama terdapat tombol Bantuan dan Keluar. Tombol Bantuan digunakan untuk melihat petunjuk penggunaan serta beberapa aturan yang berkaitan dengan penggunaan sistem. Tombol Keluar digunakan untuk keluar dari sistem ini. Halaman Utama terbagi atas dua tab. Tab pertama bernama Preprocess. Pada tab Preprocess ini, pengguna dapat menjalankan beberapa fungsi sistem. Di bagian tengah Halaman Utama terdapat tombol Pilih File dan Pilih DB yang digunakan untuk melakukan input data yang akan diolah. Pilih File digunakan PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 84 untuk membuka dialog Open File sehingga pengguna dapat memilih file .xls atau .csv dan Pilih DB digunakan untuk menginputkan data tabel dari basis data. Tombol Distribusi Atribut digunakan untuk membuka Halaman Distribusi Atribut. Tombol Hapus, Tandai Semua, dan Batal Tandai Semua digunakan untuk keperluan seleksi atribut. Pada Halaman Utama ini juga terdapat dua buah tabel. Tabel yang letaknya di atas, digunakan untuk menampung data yang diinputkan pengguna dan tabel yang di bawah untuk menampung daftar nama atribut yang ada pada tabel di atas sehingga atribut tertentu dapat dihapus oleh pengguna dengan terlebih dahulu memilih nama atribut pada tabel yang ada di bagian bawah halaman ini. Tombol Submit digunakan untuk berpindah ke tab Deteksi Outlier. Saat tombol Submit ditekan, maka tabel data dan jumlah data pada tab Preprocess ini akan dikirim ke tabel data serta field jumlah data pada tab Deteksi Outlier. Pada halaman ini juga jumlah data yang diinputkan akan ditampilkan beserta lokasi atau sumber data yang diinputkan. Tampilan Antarmuka Halaman Utama tab Preprocess dapat dilihat pada gambar 4.7 di bawah ini. Gambar 4.7 Tampilan Antarmuka Halaman Utama (Tab Preprocess) PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.6.3 85 Halaman Utama (Deteksi Outlier) Bagian atau tab kedua dari Halaman Utama bernama Deteksi Outlier. Pada tab ini, tabel data dan field jumlah datanya telah terisi secara otomatis dengan data dari tab Preprocess. Pada tab ini terdapat dua buah field untuk input data yaitu M dan D. Kedua field ini harus diisi saat akan menekan tombol Proses. Tombol Proses digunakan untuk memulai proses deteksi outlier. Hasil deteksi outlier lalu ditampilkan pada text area di bawah tabel. Pengguna dapat menyimpan hasil deteksi outlier tersebut dengan cara menekan tombol Simpan. Ketika tombol Simpan ditekan maka sistem akan menampilka dialog Save File. Tampilan Antarmuka Halaman Utama tab Deteksi Outlier dapat dilihat pada gambar 4.8 di bawah ini. Gambar 4.8 Tampilan Antarmuka Halaman Utama (Tab Deteksi Outlier) PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.6.4 86 Halaman Distribusi Atribut Halaman Distribusi Atribut ini ditampilkan saat pengguna menekan tombol Distribusi Atribut pada Halaman Utama. Pada halaman ini, terdapat JComboBox yang berisi daftar atribut yang berasal dari tabel data pada Halaman Utama. Kemudian terdapat tabel Detail Isi Atribut yang akan menampilkan distribusi dari setiap atribut. Isi tabel Detail Isi Atribut akan disesuaikan dengan nama atribut yang dipilih dari JComboBox. Kemudian terdapat tombol Lihat Grafik untuk menampilkan grafik distribusi atribut dan tombol Keluar untuk menutup Halaman Distribusi Atribut dan kembali ke Halaman Utama. Tampilan Antarmuka Halaman Distribusi Atribut dapat dilihat pada gambar 4.9 di bawah ini. Daftar Atribut : Detail Isi Atribut Nama Lihat Grafik Count Keluar Gambar 4.9 Tampilan Antarmuka Halaman Distribusi Atribut PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.6.5 87 Halaman Pilih DB Halaman Pilih DB ini ditampilkan saat pengguna menekan tombol Pilih DB pada Halaman Utama. Pada halaman ini terdapat JComboBox yang digunakan untuk memilih basis data. Halaman ini juga berisi beberapa field yaitu username, password, database dan url. Field-field tersebut digunakan untuk melakukan login ke basis data yag dipilih dari JComboBox. Tombol OK digunakan untuk melakukan koneksi ke basis data. Tombol Batal digunakan untuk menutup Halaman Pilih DB ini dan kembali ke Halaman Utama. Tampilan Antarmuka Halaman Pilih DB dapat dilihat pada gambar 4.10 di bawah ini. Oracle Username : Password : Database : URL : OK Batal Gambar 4.10 Tampilan Antarmuka Halaman Pilih DB PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4.6.6 88 Halaman Pilih Tabel Halaman Pilih Tabel ini ditampilkan saat pengguna telah berhasil melakukan koneksi dari Halaman Pilih DB. Terdapat sebuah JComboBox pada halaman ini yang digunakan untuk pengguna memilih tabel dari basis data. Selanjutnya terdapat tombol OK yang digunakan untuk menginputkan data tabel ke sistem lalu masuk ke Halaman Utama. Tombol Batal digunakan untuk kembali ke Halaman Utama tanpa menginputkan data. Tampilan Antarmuka Halaman Pilih Tabel dapat dilihat pada gambar 4.11 di bawah ini. Nama tabel : OK Batal Gambar 4.11 Tampilan Antarmuka Halaman Pilih Tabel 4.6.7 Halaman Bantuan Halaman Bantuan ini ditampilkan saat pengguna menekan tombol Bantuan di Halaman Utama. Jika ingin keluar dari halaman ini dan kembali ke Halaman Utama maka pengguna menekan tombol Keluar. Tampilan Antarmuka Halaman Bantuan dapat dilihat pada gambar 4.12 di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 89 Petunjuk dan Aturan Penggunaan Program Keluar Gambar 4.12 Tampilan Antarmuka Halaman Bantuan 4.6.8 Halaman Konfirmasi Keluar Halaman Konfirmasi Keluar ini ditampilkan saat pengguna menekan tombol Keluar di Halaman Utama. Jika pengguna yakin untuk keluar dari sistem, maka menekan tombol YA. Jika tidak ingin keluar dari sistem dan kembali ke Halaman Utama maka pengguna menekan tombol TIDAK. Tampilan Antarmuka Halaman Konfirmasi Keluar dapat dilihat pada gambar 4.13 di bawah ini. Konfirmasi keluar YA TIDAK Gambar 4.13 Tampilan Antarmuka Halaman Konfirmasi Keluar PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI BAB 5 IMPLEMENTASI SISTEM Pada bab ini berisi tentang implementasi sistem yang dibuat berdasarkan pada analisis dan perancangan sistem dalam bab sebelumnya. Implementasi aplikasi ini dilakukan dengan menggunakan NetBeans IDE 6.9.1 pada komputer dengan spesifikasi processor Intel Core 2 Duo 2.00 Ghz, RAM 2.00 Gb. Implementasi sistem terdiri dari implementasi antarmuka, implementasi struktur data dan implementasi kelas. Daftar nama kelas yang diimplementasikan dalam sistem ini dapat dilihat pada tabel 5.1 di bawah ini. Tabel 5.1 Tabel Nama Kelas yang Diimplementasikan dalam Sistem No 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Nama Kelas HalamanAwal HalamanUtama HalamanPilihDB Nama File Fisik HalamanAwal.form HalamanUtama.form HalamanPilihDB.form Nama File Executable HalamanAwal. class HalamanUtama.class HalamanPilihDB. class HalamanPilihTabel HalamanPilihTabel.form HalamanPilihTabel. class HalamanDistribusiA HalamanDistribusiAtribut.f HalamanDistribusiAtri tribut orm but. class HalamanBantuan HalamanBantuan.form HalamanBantuan. class HalamanKonfirmasi HalamanKonfirmasiKeluar HalamanKonfirmasiK Keluar .form eluar. Class HalamanMissingVal HalamanMissingValues.for HalamanMissingValue ues m s. class Vertex Vertex.java Vertex. class Graph Graph.java Graph. class Block Block.java Block.class SeleksiAtribut SeleksiAtribut.java SeleksiAtribut. class DatabaseConnection DatabaseConnection.java DatabaseConnection. class Database Database.java Database. class CheckBoxTableMo CheckBoxTableModel.java CheckBoxTableModel 90 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 16 17 5.1 del BarChart GraphController BarChart.java GraphController.java 91 . class class BarChart. class GraphController. class Implementasi Antarmuka Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested- Loop telah selesai dibangun, maka pada bab ini akan ditampilkan antarmuka dari sistem tersebut. 5.1.1 Implementasi Halaman Awal Pada saat program pertama kali dijalankan maka akan ditampilkan form seperti pada gambar 5.1 di bawah ini : Gambar 5.1 Antarmuka Halaman Awal Listing program terdapat pada lampiran 6. Pada Halaman Awal ini terdapat tombol “Masuk” yang digunakan untuk membuka Halaman Utama. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 92 5.1.2 Implementasi Halaman Utama Halaman ini merupakan halaman inti dari aplikasi Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop. Semua proses utama aplikasi ini terdapat di dalam halaman ini. Bagian Halaman Utama yang akan ditampilkan pertama kali yaitu tab Preprocess. Pada tab Preprocess, pengguna dapat mempersiapkan data yang diinputkan agar siap diolah. Tampilan Halaman Utama, tab Preprocess dapat dilihat pada gambar 5.2 di bawah ini. Gambar 5.2 Antarmuka Halaman Utama, tab Preprocess Jika pengguna ingin mengolah data berformat .xls atau .csv, maka pengguna menekan tombol “Pilih File” untuk mencari data. Setelah dipilih maka akan muncul tampilan antarmuka seperti gambar 5.3 dibawah ini: PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 93 Gambar 5.3 Antarmuka Halaman Utama, tab Preprocess (File .xls atau .csv) Pengguna dapat melakukan seleksi atribut dari data yang telah diinputkan dengan memilih nama atribut yang bersangkutan pada tabel atribut. Pengguna dapat memilih seluruh atribut dengan menekan tombol “Tandai Semua” atau membatalkan semua atribut yang telah dipilih dengan menekan tombol “Batal Tandai Semua”. Setelah pengguna menekan tombol “Hapus”, maka atribut yang telah dipilih akan dihapus dari tabel data. Tampilan untuk menghapus atribut dapat dilihat pada gambar 5.4 di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 94 Gambar 5.4 Antarmuka Halaman Utama, tab Preprocess (Seleksi atribut) Setelah data yang diinputkan telah siap untuk diproses untuk pencarian outlier, pengguna menekan tombol “Submit” agar Halaman Utama secara otomatis akan membuka tab Deteksi Outlier. Tampilan Halaman Utama tab Deteksi Outlier dapat dilihat pada gambar 5.5 di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 95 Gambar 5.5 Antarmuka Halaman Utama, tab Deteksi Outlier Pengguna lalu dapat memproses data untuk dicari outliernya pada halaman ini. Pengguna harus memasukkan nilai M dan D sebelum menekan tombol “Proses”. Saat proses deteksi outlier berhasil dilakukan, tampilannya akan menjadi seperti gambar 5.6 di bawah ini. Gambar 5.6 Antarmuka Halaman Utama, tab Deteksi Outlier (hasil deteksi outlier) PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 96 Setelah hasil deteksi outlier ditampilkan, pengguna dapat menyimpan hasil tersebut dengan menekan tombol “Simpan”. Hasil deteksi outlier ini dapat disimpan ke dalam file berformat .txt atau .doc. Dialog yang ditampilkan untuk menyimpan file dapat dilihat pada gambar 5.7 di bawah ini. Gambar 5.7 Dialog Untuk Menyimpan Hasil Deteksi Outlier Ketika file berhasil disimpan, akan muncul pesan konfirmasi seperti gambar 5.8 di bawah ini. Gambar 5.8 Pesan Sukses Menyimpan File Hasil Deteksi Outlier 5.1.3 Implementasi Halaman Pilih DB Halaman ini ditampilkan saat pengguna menekan tombol “Pilih DB” pada Halaman Utama. Tampilan halaman Pilih DB dapat dilihat pada gambar 5.9 di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 97 Gambar 5.9 Antarmuka Halaman Pilih DB Pengguna dapat menginputkan data yang berasal dari sebuah tabel dalam basis data. Halaman Pilih DB digunakan untuk login pengguna ke dalam basis data. Pengguna harus memilih nama basis data, serta menginputkan seluruh data secara lengkap dan benar kemudian menekan tombol “OK”. Pengguna dapat membatalkan login ke basis data dengan menekan tombol “Batal”. Ketika koneksi ke basis data berhasil, maka akan muncul dialog konfirmasi seperti pada gambar 5.10 di bawah ini. Gambar 5.10 Pesan Sukses Melakukan Koneksi Ke Basis data 5.1.4 Implementasi Halaman Pilih Tabel Halaman ini ditampilkan saat pengguna telah berhasil melakukan koneksi ke basis data. Tampilan halaman Pilih Tabel dapat dilihat pada gambar 5.10 di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 98 Gambar 5.11 Antarmuka Halaman Pilih Tabel Pada halaman Pilih Tabel, pengguna dapat memilih tabel yang berasal dari basis data yang sebelumnya dipilih. Setelah memilih tabel dari daftar yang tersedia, pengguna menekan tombol “OK” untuk memuat data dari basis data ke tabel data pada Halaman Utama. Untuk membatalkan input data dari basis data dilakukan dengan menekan tombol “Batal”. Setelah memilih tabel yang diinginkan, tabel akan ditampilkan pada Halaman Utama seperti gambar 5.12 di bawah ini. Gambar 5.12 Antarmuka Halaman Utama, tab Preprocess (input tabel dari basis data) PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 5.1.5 99 Implementasi Halaman Distribusi Atribut Pengguna dapat melihat distribusi atribut dari data yang diinputkan dengan menekan tombol “Distribusi Atribut” yang terdapat pada Halaman Utama. Tampilan halaman distribusi atribut dapat dilihat pada gambar 5.13 di bawah ini. Gambar 5.13 Antarmuka Halaman Distribusi Atribut Pengguna dapat melihat grafik distribusi atribut dengan menekan tombol “Lihat Grafik” pada halaman distribusi atribut. Tampilan grafik distribusi atribut dapat dilihat pada gambar 5.14 di bawah ini. Gambar 5.14 Antarmuka Grafik Distribusi Atribut PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 5.1.6 100 Implementasi Halaman Bantuan Pengguna dapat membuka halaman bantuan dengan menekan tombol “Bantuan” pada halaman utama. Pada halaman bantuan, terdapat petunjuk mengenai cara penggunaan sistem serta beberapa aturan yang penting untuk diperhatikan oleh pengguna sebelum menggunakan sistem. Tampilan halaman bantuan dapat dilihat pada gambar 5.15 di bawah ini. Listing program terdapat pada lampiran 6. Gambar 5.15 Antarmuka Halaman Bantuan 5.1.7 Implementasi Halaman Konfirmasi Keluar Halaman konfirmasi keluar ini ditampilkan saat pengguna menekan tombol “Keluar” pada halaman utama. Halaman ini ditampikan untuk mengkonfirmasi lagi ke pengguna apakah telah yakin untuk keluar dari sistem. Jika ingin keluar dari sistem, pengguna menekan tombol “YA”. Jika pengguna masih ingin menggunakan sistem maka menekan tombol “TIDAK”. Tampilan halaman konfirmasi keluar ini dapat dilihat pada gambar 5.16 di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 101 Gambar 5.16 Antarmuka Halaman Konfirmasi Keluar Listing program terdapat pada lampiran. 5.1.8 Implementasi Pengecekan Masukan Selain pemrosesan data, sistem ini juga menyediakan error handling untuk mengatasi kesalahan dalam melakukan input ke dalam sistem. Berikut adalah error handling yang dimiliki oleh Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop. 1. Ketika pengguna memilih sebuah file dengan format selain .txt dan .doc untuk diinputkan ke sistem, maka akan muncul tampilan seperti gambar 5.17 di bawah ini. Gambar 5.17 Pesan Kesalahan (1) 2. Ketika pengguna belum melakukan input data yang lengkap (username, password, nama basis data atau url) saat melakukan login ke basis data di PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 102 halaman pilih DB lalu menekan tombol OK, maka akan muncul tampilan seperti gambar 5.18 di bawah ini. Gambar 5.18 Pesan Kesalahan (2) 3. Ketika pengguna menginputkan data yang salah (username, password, nama basis data atau url) saat melakukan login ke basis data di halaman pilih DB lalu menekan tombol OK, maka akan muncul tampilan seperti gambar 5.19 di bawah ini. Gambar 5.19 Pesan Kesalahan (3) 4. Ketika pengguna belum memasukkan nilai M atau D pada saat menekan tombol Proses di halaman utama tab deteksi outlier, maka akan muncul tampilan seperti gambar 5.20 di bawah ini. Gambar 5.20 Pesan Kesalahan (4) PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 5. 103 Ketika pengguna memasukkan nilai M atau D berupa karakter selain angka dan menekan tombol Proses di halaman utama tab deteksi outlier, maka akan muncul tampilan seperti gambar 5.21 di bawah ini. Gambar 5.21 Pesan Kesalahan (5) 6. Ketika terdapat kesalahan seperti pemilihan lokasi penyimpanan file hasil deteksi outlier, maka akan muncul tampilan seperti gambar 5.22 di bawah ini. Gambar 5.22 Pesan Kesalahan (6) 7. Ketika pengguna menginputkan dari berupa file .xls, .csv atau tabel dari basis data dan data tersebut mengandung minimal satu baris atau cell yang kosong atau berisi karakter bukan angka, maka akan muncul tampilan seperti gambar 5.23 di bawah ini. Gambar 5.23 Pesan Kesalahan (7) PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 8. 104 Ketika pengguna menginputkan dari berupa file .xls, .csv atau tabel dari basisdata dan pada data tersebut ada minimal sebuah label yang kosong (kolom pertama dianggap sebagai label), maka akan muncul tampilan seperti gambar 5.24 di bawah ini. Gambar 5.24 Pesan Kesalahan (8) Listing program dari setiap error handling dapat dilihat dalam listing program implementasi dari setiap halaman dalam sistem ini. Khusus untuk HalamanMissingValues, listring program terdapat pada lampiran 6. 5.1.9 Implementasi Halaman Open File Halaman Open File adalah sebuah antarmuka untuk pengguna memilih file .xls atau .csv yang akan diolah dalam proses deteksi outlier pada sistem ini. Tampilan untuk open file dapat dilihat pada gambar 5.25 dibawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 105 Gambar 5.25 Antarmuka Open File 5.2 Implementasi Struktur Data Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based NestedLoop menggunakan struktur data graph. Setiap data yang dimasukkan akan dianggap sebagai vertex. Setiap data akan dikelompokkan ke dalam block tertentu. Pada bagian ini akan dijelaskan implementasi struktur data pada kelas Vertex, kelas Graph dan kelas Block. 5.2.1 Implementasi Kelas Vertex Dalam sistem ini, setiap data yang akan diolah menggunakan sistem ini akan dianggap sebagai vertex. Setiap vertex memiliki atribut berupa label, boolean unmarked, boolean non_outlier, List<Double> nilai dan jumlah tetangga. Implementasi struktur data vertex dapat dilihat pada listing program di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI public class Vertex { private String label; private boolean unmarked = true; private boolean non_outlier = false; private List<Double> nilai; private int jumlah_tetangga; public Vertex() { } public Vertex(String label, List<Double> nilai) { setLabel(label); setNilai(nilai); setUnmarked(unmarked); setNon_outlier(non_outlier); } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public List<Double> getNilai() { return nilai; } public void setNilai(List<Double> nilai) { this.nilai = nilai; } 106 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 107 public int getJumlah_tetangga() { return jumlah_tetangga; } public void setJumlah_tetangga(int jumlah_tetangga) { this.jumlah_tetangga = jumlah_tetangga; } public boolean isUnmarked() { return unmarked; } public void setUnmarked(boolean unmarked) { this.unmarked = unmarked; } public boolean isNon_outlier() { return non_outlier; } public void setNon_outlier(boolean non_outlier) { this.non_outlier = non_outlier; }} 5.2.2 Implementasi Kelas Graph Dalam sistem ini, seluruh data yang diolah akan dibentuk menjadi sebuah graph. Setiap graph memiliki atribut berupa double[ ][ ] edge, int size = 0, Vertex[ ] vertex dan Block[ ] block. Implementasi struktur data graph dapat dilihat pada listing program di bawah ini. public Graph(int a) { edge = new double[a][a]; vertex = new Vertex[a]; size = 0; for (int i = 0; i < a; i++) { for (int j = 0; j < a; j++) { edge[i][j] = -1; edge[j][i] = -1; } edge[i][i] = 0; } } Gambar 5.26 Listing Programlas Gra PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 108 Method insertVertex() digunakan untuk menambahkan sebuah data sebagai vertex. sebuah vertex memiliki label dan nilai dalam bentuk list bertipe double. public void insertVertex(String label, List<Double> nilai) { vertex[size++] = new Vertex(label, nilai); .27 Listing Program Kelas Graph (method insertVertex) } Method insertBlock() digunakan untuk menambahkan beberapa vertex ke dalam sebuah blok tertentu. Setiap blok memiliki nomor urut. public void insertBlock(int no_urut, List<Integer> daftar_vertex) { block[no_urut] = new Block(no_urut, daftar_vertex); } ng Program Kelas Graph (method insertBlock) Method insertEdge() digunakan untuk memasukkan komponen nilai setiap vertex ke dalam matriks graph. public void insertEdge(int i, int j, double nilai) { edge[i][j] = edge[j][i] = nilai; } Gambar 5.29 Listing Program Kelas Graph (method insertEdge) Method euclidean() digunakan untuk menghitung jarak antara dua vertex menggunakan rumus euclidean distance. Method ini lalu mengembalikan nilai jarak tersebut dengan format double. public double euclidean(int a, int b) { List<Double> data1 = new ArrayList<Double>(); List<Double> data2 = new ArrayList<Double>(); data1 = vertex[a].getNilai(); data2 = vertex[b].getNilai(); double total = 0; for (int i = 0; i < data1.size(); i++) { total = total + Math.pow(data1.get(i) - data2.get(i), 2.0); } return Math.sqrt(total); } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 5.2.3 109 Implementasi Kelas Block Dalam sistem ini, seluruh data yang diolah akan dibentuk menjadi sebuah graph dan dikelompokkan dalam block. Setiap block memiliki atribut berupa int no_urut, int jum_anggota, int jum_blok, int sisa, List<Integer> isi_blok dan boolean firstArray = false. Implementasi struktur data block dapat dilihat pada listing program di bawah ini. public class Block { private int no_urut; private int jum_anggota; private int jum_blok; private int sisa; private List<Integer> isi_blok; private boolean firstArray = false; public Block() { } public Block(int no_urut, List<Integer> dv) { setNo_urut(no_urut); setIsi_blok(dv); setFirstArray(firstArray); } public int getNo_urut() { return no_urut; } public void setNo_urut(int no_urut) { this.no_urut = no_urut; } public int getJum_anggota() { return jum_anggota; } public void setJum_anggota(int jum_anggota) { this.jum_anggota = jum_anggota; } public int getJum_blok() { return jum_blok; } public void setJum_blok(int jum_blok) { this.jum_blok = jum_blok; } public int getSisa() { return sisa; } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 110 public void setSisa(int sisa) { this.sisa = sisa; } public boolean isFirstArray() { return firstArray; } public void setFirstArray(boolean firstArray) { this.firstArray = firstArray; } public List<Integer> getIsi_blok() { return isi_blok; } public void setIsi_blok(List<Integer> isi_blok) { this.isi_blok = isi_blok;}} 5.3 Implementasi Kelas Pada bagian ini terdapat beberapa listing program dari kelas-kelas utama yang digunakan dalam sistem ini. Method-method yang ditampilkan dari setiap kelas hanya method yang memuat fungsi utama sistem yang berkaitan dengan algoritma Block-based Nested-Loop. 5.3.1 Implementasi Kelas HalamanUtama Pada kelas HalamanUtama terdapat beberapa method yang berkaitan dengan fungsi utama antara lain pilihFile, pilihXLS, pilihCSV, tampilTabelBasisdata, cekAtribut, cekAtribut2, hapusAtribut, distribusiAtribut, submitData, prosesData dan simpanHasil. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI CheckBoxTableModel cb_table = new CheckBoxTableModel(); SeleksiAtribut fm; DatabaseConnection con; public HalamanUtama(DatabaseConnection db, String namaTabel) { initComponents(); tampilTabelBasisdata(db, namaTabel); } public void pilihFile() { JFileChooser chooser = new JFileChooser(); int returnVal = chooser.showOpenDialog(null); if (returnVal == JFileChooser.APPROVE_OPTION) { String nama_file = chooser.getSelectedFile().getPath(); String[] potong = nama_file.split("\\."); String pola = "[0-9.]*"; String pola2 = "[.]*"; if (potong[1].equals("xls")) { //FILE EXCEL pilihXLS(chooser, nama_file, pola, pola2); } else if (potong[1].equals("csv")) { //FILE CSV pilihCSV(chooser, nama_file, pola, pola2); } else { JOptionPane.showMessageDialog(null, "File yang dipilih harus berformat .xls atau .csv"); } } } public void pilihXLS(JFileChooser chooser, String nama_file, String pola, String pola2) { cb_table.removeRow2(); File excelFile = chooser.getSelectedFile(); pathField.setText(nama_file); Vector columnNames = new Vector(); Vector data = new Vector(); try { Workbook workbook = Workbook.getWorkbook(excelFile); Sheet sheet = workbook.getSheets()[0]; for (int row = 0; row < sheet.getRows(); row++) { Vector rows = new Vector(); for (int column = 0; column < sheet.getColumns(); column++) { if (row == 0) { columnNames.addElement(sheet.getCell(column, row).getContents()); } else { rows.addElement(sheet.getCell(column, row).getContents()); } } if (row != 0) { data.addElement(rows); } } 111 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 112 hasilOutlierTextArea.setText(null); DefaultTableModel model = new DefaultTableModel(data, columnNames); preprocessTabel.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); preprocessTabel.setModel(model); updateCellWidth(preprocessTabel); jumlahDataField.setText("" + data.size()); distAtributButton.setEnabled(true); for (int i = 0; i < model.getColumnCount(); i++) { for (int j = 0; j < model.getRowCount(); j++) { if (i == 0) { if (model.getValueAt(j, 0).toString().isEmpty()) { JOptionPane.showMessageDialog(null, "Label data Anda tidak lengkap. Silahkan lengkapi label data " + "pada file asli Anda."); i = model.getColumnCount() - 1; break; } } else { if (model.getValueAt(j, i).toString().isEmpty() || !model.getValueAt(j, i).toString().matches(pola) || model.getValueAt(j, i).toString().matches(pola2)) { HalamanMissingValues m = new HalamanMissingValues(model); m.setVisible(true); i = model.getColumnCount() - 1; break; } } } } // AbstractTableModel dengan JCheckBox for (int i = 0; i < model.getColumnCount(); i++) { fm = new SeleksiAtribut(); fm.setAtribut2(model.getColumnName(i)); fm.setPilih(false); cb_table.add(i, fm); } deteksiOutlierTabel.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); deteksiOutlierTabel.setModel(model); updateCellWidth(deteksiOutlierTabel); jumDataField.setText(jumlahDataField.getText()); PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 113 hapusAtributTable.setModel(cb_table); hapusAtributButton.setEnabled(true); checkAllButton.setEnabled(true); uncheckAllButton.setEnabled(true); submitDataButton.setEnabled(true); } catch (Exception e) { } } public void pilihCSV(JFileChooser chooser, String nama_file, String pola, String pola2) { File csvFile = chooser.getSelectedFile(); pathField.setText(nama_file); Vector columnNames = new Vector(); Vector data = new Vector(); String line; try { BufferedReader br = new BufferedReader(new FileReader(csvFile)); StringTokenizer st = new StringTokenizer(br.readLine(), ","); while (st.hasMoreTokens()) { columnNames.addElement(st.nextToken()); } while ((line = br.readLine()) != null) { StringTokenizer st2 = new StringTokenizer(line, ","); Vector row = new Vector(); while (st2.hasMoreTokens()) { row.addElement(st2.nextToken()); } data.addElement(row); } br.close(); DefaultTableModel model = new DefaultTableModel(data, columnNames); preprocessTabel.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); preprocessTabel.setModel(model); updateCellWidth(preprocessTabel); pathField.setText(csvFile.getPath()); jumlahDataField.setText("" + data.size()); distAtributButton.setEnabled(true); for (int i = 0; i < model.getColumnCount(); i++) { for (int j = 0; j < model.getRowCount(); j++) { if (model.getValueAt(j, i).toString().isEmpty() || !model.getValueAt(j, i).toString().matches(pola) || model.getValueAt(j, i).toString().matches(pola2)) { PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 114 JOptionPane.showMessageDialog(null, "Data Anda belum lengkap. " + "Silahkan lengkapi data Anda pada file asli."); i = model.getColumnCount() - 1; break; } } } // AbstractTableModel dengan JCheckBox List<String> isiData = new ArrayList<String>(); for (int i = 0; i < model.getColumnCount(); i++) { fm = new SeleksiAtribut(); fm.setAtribut2(model.getColumnName(i)); fm.setPilih(false); cb_table.add(i, fm); } deteksiOutlierTabel.setAutoResizeMode(JTable.AUTO_RESIZE_OF F); deteksiOutlierTabel.setModel(model); updateCellWidth(deteksiOutlierTabel); jumDataField.setText(jumlahDataField.getText()); hapusAtributTable.setModel(cb_table); hapusAtributButton.setEnabled(true); checkAllButton.setEnabled(true); uncheckAllButton.setEnabled(true); submitDataButton.setEnabled(true); } catch (Exception e1) { } } public void tampilTabelBasisdata(DatabaseConnection db, String namaTabel) { try { Database con = new Database(); ResultSet rs; rs = con.displayTable(db.getConnection(), namaTabel); java.sql.ResultSetMetaData meta = rs.getMetaData(); int coloumCount = meta.getColumnCount(); Vector columnName = new Vector(); Vector data = new Vector(); PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 115 columnName.clear(); for (int i = 1; i <= coloumCount; i++) { columnName.add(meta.getColumnName(i)); } data.clear(); while (rs.next()) { Vector data2 = new Vector(); for (int i = 1; i <= coloumCount; i++) { data2.add(rs.getString(i)); } data2.add("\n"); data.add(data2); } DefaultTableModel model = new DefaultTableModel(data, columnName); preprocessTabel.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); preprocessTabel.setModel(model); updateCellWidth(preprocessTabel); jumlahDataField.setText("" + data.size()); pathField.setText("TABEL : " + namaTabel); cb_table.removeRow2(); String pola = "[0-9.]*"; String pola2 = "[.]*"; for (int i = 0; i < model.getColumnCount(); i++) { for (int j = 0; j < model.getRowCount(); j++) { if (i == 0) { if (model.getValueAt(j, 0) == null) { JOptionPane.showMessageDialog(null, "Label data Anda tidak lengkap. Silahkan lengkapi label data pada file asli Anda."); i = model.getColumnCount() - 1; break; } } else { if (model.getValueAt(j, i) == null || !model.getValueAt(j, i).toString().matches(pola) || model.getValueAt(j, i).toString().matches(pola2)) { JOptionPane.showMessageDialog(null, "Data Anda belum lengkap. " + "Silahkan lengkapi data Anda pada file asli."); i = model.getColumnCount() - 1; break; PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI } } } } List<String> isiData = new ArrayList<String>(); for (int i = 0; i < model.getColumnCount(); i++) { fm = new SeleksiAtribut(); fm.setAtribut2(model.getColumnName(i)); fm.setPilih(false); cb_table.add(i, fm); } deteksiOutlierTabel.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); deteksiOutlierTabel.setModel(model); updateCellWidth(deteksiOutlierTabel); jumDataField.setText(jumlahDataField.getText()); hapusAtributTable.setModel(cb_table); hapusAtributButton.setEnabled(true); checkAllButton.setEnabled(true); uncheckAllButton.setEnabled(true); submitDataButton.setEnabled(true); } catch (Exception e) { } } public boolean cekAtribut(String x, List<String> hapus) { boolean y = false; for (int i = 0; i < hapus.size(); i++) { if (hapus.get(i).equals(x)) { y = true; } } return y; } public boolean cekAtribut2(String x, Vector kolom) { boolean y = false; for (int i = 0; i < kolom.size(); i++) { if (kolom.get(i).equals(x)) { y = true; } } return y; } 116 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI //http://stackoverflow.com/questions/13013989/how-to-adjust-jtable-columns-tofit-the-longest-content-in-column-cells private void updateCellWidth(JTable t) { adjustRowSizes(t); for (int i = 0; i < t.getColumnCount(); i++) { adjustColumnSizes(t, i, 2); } } //http://stackoverflow.com/questions/13013989/how-to-adjust-jtable-columns-tofit-the-longest-content-in-column-cells private void adjustRowSizes(JTable jTable) { for (int row = 0; row < jTable.getRowCount(); row++) { int maxHeight = 0; for (int column = 0; column < jTable.getColumnCount(); column++) { TableCellRenderer cellRenderer = jTable.getCellRenderer(row, column); Object valueAt = jTable.getValueAt(row, column); Component tableCellRendererComponent = cellRenderer.getTableCellRendererComponent(jTable, valueAt, false, false, row, column); int heightPreferable = tableCellRendererComponent.getPreferredSize().height; maxHeight = Math.max(heightPreferable, maxHeight); } jTable.setRowHeight(row, maxHeight); } } //http://stackoverflow.com/questions/13013989/how-to-adjust-jtable-columns-tofit-the-longest-content-in-column-cells public void adjustColumnSizes(JTable table, int column, int margin) { DefaultTableColumnModel colModel = (DefaultTableColumnModel) table.getColumnModel(); TableColumn col = colModel.getColumn(column); int width; TableCellRenderer renderer = col.getHeaderRenderer(); if (renderer == null) { renderer = table.getTableHeader().getDefaultRenderer(); } Component comp = renderer.getTableCellRendererComponent(table, col.getHeaderValue(), false, false, 0, 0); 117 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 118 width = comp.getPreferredSize().width; for (int r = 0; r < table.getRowCount(); r++) { renderer = table.getCellRenderer(r, column); comp = renderer.getTableCellRendererComponent(table, table.getValueAt(r, column), false, false, r, column); int currentWidth = comp.getPreferredSize().width; width = Math.max(width, currentWidth); } width += 2 * margin; col.setPreferredWidth(width); col.setWidth(width); } private void tandaiSemua() { for (int i = 0; i < cb_table.getRowCount(); i++) { cb_table.setValueAt(true, i, 1); } } private void batalTandai() { for (int i = 0; i < cb_table.getRowCount(); i++) { cb_table.setValueAt(false, i, 1); } } private void hapusAtribut() { List<String> hapus_atribut = new ArrayList<String>(); for (int i = 0; i < cb_table.getRowCount(); i++) { if (cb_table.getValueAt(i, 1).equals(true)) { hapus_atribut.add(cb_table.getValueAt(i, 0).toString()); } } TableModel model = preprocessTabel.getModel(); int column = model.getColumnCount(); int row = model.getRowCount(); Vector columnNames = new Vector(); Vector data = new Vector(); for (int i = 0; i < cb_table.getRowCount(); i++) { if (!cekAtribut(cb_table.getValueAt(i, 0).toString(), hapus_atribut)) { columnNames.addElement(cb_table.getValueAt(i, 0)); } } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI for (int i = 0; i < row; i++) { Vector rows = new Vector(); for (int j = 0; j < column; j++) { if (cekAtribut2(model.getColumnName(j).toString(), columnNames)) { rows.addElement(model.getValueAt(i, j)); } } data.addElement(rows); } DefaultTableModel new_model = new DefaultTableModel(data, columnNames); preprocessTabel.setModel(new_model); if (!data.isEmpty() && !columnNames.isEmpty()) { updateCellWidth(preprocessTabel); } if (columnNames.isEmpty()) { jumlahDataField.setText(null); submitDataButton.setEnabled(false); checkAllButton.setEnabled(false); uncheckAllButton.setEnabled(false); hapusAtributButton.setEnabled(false); distAtributButton.setEnabled(false); pathField.setText(null); jTabbedPane1.setSelectedComponent(panelPreprocess); jTabbedPane1.setEnabledAt(1, false); } cb_table.removeRow(); } private void distribusiAtribut() { List<String> daftarAtribut = new ArrayList<String>(); int jumlahAtribut = preprocessTabel.getColumnCount() - 1; for (int i = 1; i <= jumlahAtribut; i++) { daftarAtribut.add(preprocessTabel.getColumnName(i)); } HalamanDistribusiAtribut distribusiDialog = new HalamanDistribusiAtribut(this, daftarAtribut, preprocessTabel); distribusiDialog.setVisible(true); } 119 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI private void submitData() { TableModel model = preprocessTabel.getModel(); deteksiOutlierTabel.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); deteksiOutlierTabel.setModel(model); updateCellWidth(deteksiOutlierTabel); jumDataField.setText(jumlahDataField.getText()); jTabbedPane1.setSelectedComponent(panelDeteksiOutlier); jTabbedPane1.setEnabledAt(1, true); } //deteksi outlier private void prosesData() { String pola = "[0-9.]*"; String pola2 = "[.]*"; if (jumDataField.getText().equals("")) { JOptionPane.showMessageDialog(null, "Anda belum memasukkan data"); atributDField.setText(null); atributMField.setText(null); jTabbedPane1.setSelectedComponent(panelPreprocess); prosesButton.setEnabled(false); } else if (atributDField.getText().length() > 0 && atributMField.getText().length() > 0 && ((!atributDField.getText().matches(pola) || atributDField.getText().matches(pola2)) || (!atributMField.getText().matches(pola) || atributMField.getText().matches(pola2)))) { JOptionPane.showMessageDialog(null, "Nilai M dan D harus berupa bilangan bulat atau desimal!"); atributDField.setText(null); atributMField.setText(null); prosesButton.setEnabled(false); } else if (atributDField.getText().equals("") || atributMField.getText().equals("")) { JOptionPane.showMessageDialog(null, "Nilai M dan D harus diisi!"); prosesButton.setEnabled(false); } else { double m = Integer.parseInt(atributMField.getText()); double d = Double.parseDouble(atributDField.getText()); GraphController g = new GraphController(); g.deteksiOutlier(deteksiOutlierTabel.getRowCount()); hasilOutlierTextArea.setText(g.tampilHasil(deteksiOutlierTabel, m, d, jumDataField.getText(), pathField.getText())); prosesButton.setEnabled(false); atributDField.setText(null); 120 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI atributMField.setText(null); simpanButton.setEnabled(true); } } private void simpanHasil() { JFileChooser fileChooser = new JFileChooser(new File("D:/")); fileChooser.setFileFilter(new FileNameExtensionFilter("Microsoft Word (*.doc)", "doc")); fileChooser.setFileFilter(new FileNameExtensionFilter("Text Documents (*.txt)", "txt")); FileOutputStream file_output_stream; int returnValue = fileChooser.showSaveDialog(this); if (returnValue == JFileChooser.APPROVE_OPTION) { String filename = fileChooser.getSelectedFile().getPath(); String extension = fileChooser.getFileFilter().getDescription(); File ff = new File(filename); //buat file output stream if (extension.equals("Microsoft Word (*.doc)")) { ff = new File(filename + ".doc"); } else if (extension.equals("Text Documents (*.txt)")) { ff = new File(filename + ".txt"); } try { file_output_stream = new FileOutputStream(ff); } catch (FileNotFoundException fe) { JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Deteksi Outlier Gagal! " + "Periksa kembali lokasi Anda akan menyimpan file"); //fe.printStackTrace(); return; } try { //ambil teks dari JTextArea String hasil_text_area = hasilOutlierTextArea.getText(); String[] baca = hasil_text_area.split("\\n"); FileWriter outFile = new FileWriter(ff); PrintWriter out = new PrintWriter(outFile, true); for (int i = 0; i < baca.length; i++) { out.println("" + baca[i].toString()); } file_output_stream.close(); } catch (IOException ie) { JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Deteksi Outlier Gagal !"); 121 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 122 atributMField.setText(null); simpanButton.setEnabled(true); } } private void simpanHasil() { JFileChooser fileChooser = new JFileChooser(new File("D:/")); fileChooser.setFileFilter(new FileNameExtensionFilter("Microsoft Word (*.doc)", "doc")); fileChooser.setFileFilter(new FileNameExtensionFilter("Text Documents (*.txt)", "txt")); FileOutputStream file_output_stream; int returnValue = fileChooser.showSaveDialog(this); if (returnValue == JFileChooser.APPROVE_OPTION) { String filename = fileChooser.getSelectedFile().getPath(); String extension = fileChooser.getFileFilter().getDescription(); File ff = new File(filename); //buat file output stream if (extension.equals("Microsoft Word (*.doc)")) { ff = new File(filename + ".doc"); } else if (extension.equals("Text Documents (*.txt)")) { ff = new File(filename + ".txt"); } try { file_output_stream = new FileOutputStream(ff); } catch (FileNotFoundException fe) { JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Deteksi Outlier Gagal! " + "Periksa kembali lokasi Anda akan menyimpan file"); //fe.printStackTrace(); return; } try { //ambil teks dari JTextArea String hasil_text_area = hasilOutlierTextArea.getText(); String[] baca = hasil_text_area.split("\\n"); FileWriter outFile = new FileWriter(ff); PrintWriter out = new PrintWriter(outFile, true); for (int i = 0; i < baca.length; i++) { out.println("" + baca[i].toString()); } file_output_stream.close(); } catch (IOException ie) { JOptionPane.showMessageDialog(this, "Penyimpanan Hasil Deteksi Outlier Gagal !"); } JOptionPane.showMessageDialog(this, "Hasil Deteksi Outlier Telah Berhasil Disimpan di " + filename); } simpanButton.setEnabled(false); } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 123 5.3.2 Implementasi Kelas HalamanPilihDB Pada kelas HalamanPilihDB terdapat beberapa dua method yang berkaitan dengan fungsi login ke basis data yaitu pilihBasisdata dan koneksi. private void pilihBasisdata() { if (pilihKoneksiCombo.getSelectedIndex() == 0) { databaseField.setText(null); databaseField.setEnabled(false); urlField.setText("jdbc:oracle:thin:@localhost:1521:XE"); } else if (pilihKoneksiCombo.getSelectedIndex() == 1) { databaseField.setEnabled(true); urlField.setText("jdbc:mysql://localhost:3306/"); } else { urlField.setText(null); } } private void koneksi() { if (usernameField.getText().isEmpty() || passwordField.getText().isEmpty() || urlField.getText().isEmpty() || (databaseField.getText().isEmpty() && pilihKoneksiCombo.getSelectedIndex()==1)) { JOptionPane.showMessageDialog(null, "Semua data/field di atas harus diisi."); } else { if (pilihKoneksiCombo.getSelectedIndex() == 0) { String username = usernameField.getText(); String password = passwordField.getText(); String url = urlField.getText(); boolean kon = Database.getConnOracle(url, username, password); if (kon == true) { JOptionPane.showMessageDialog(this, username+", Anda berhasil melakukan koneksi ke basisdata"); DatabaseConnection db = new DatabaseConnection(); this.dispose(); HalamanPilihTabel dialog = new HalamanPilihTabel(db, pilihKoneksiCombo.getSelectedIndex()); dialog.setVisible(true); } else { JOptionPane.showMessageDialog(this, "Username/Password/Nama basisdata/URL yang Anda masukkan salah!"); usernameField.setText(""); passwordField.setText(""); PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 124 databaseField.setText(""); usernameField.requestFocus(); } } else { String username = usernameField.getText(); String password = passwordField.getText(); String url = urlField.getText() + databaseField.getText(); boolean kon = Database.getConnMySQL(url, username, password); if (kon == true) { JOptionPane.showMessageDialog(this, username+", Anda berhasil melakukan koneksi ke basisdata"); DatabaseConnection db = new DatabaseConnection(); this.dispose(); HalamanPilihTabel dialog = new HalamanPilihTabel(db, pilihKoneksiCombo.getSelectedIndex()); dialog.setVisible(true); } else { JOptionPane.showMessageDialog(this, "Username/Password/URL yang Anda masukkan salah!"); usernameField.setText(""); passwordField.setText(""); databaseField.setText(""); usernameField.requestFocus(); } } } } 5.3.3 Implementasi Kelas HalamanPilihTabel Pada kelas HalamanPilihTabel terdapat dua method yang berkaitan dengan fungsi membaca tabel dari sebuah basis data yaitu daftarTabel dan pilihTabel. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 125 public HalamanPilihTabel(DatabaseConnection c, int db) { this.con = c; initComponents(); daftarTabel(db); } private void daftarTabel(int db) { try { Database dc = new Database(); ResultSet rset; if (db == 0) { rset = dc.displayTableOracle(con.getConnection()); while (rset.next()) { daftarTableCombo.addItem(rset.getString(1)); } } else if (db == 1) { rset = dc.displayTableMySql(con.getConnection()); while (rset.next()) { daftarTableCombo.addItem(rset.getString(1)); } } } catch (SQLException ex) { Logger.getLogger(HalamanPilihTabel.class.getName()).log(Level.SEVERE, null, ex); } } private void pilihTabel() { java.awt.Window window[] = java.awt.Window.getWindows(); for (int i = 0; i < window.length; i++) { window[i].dispose(); window[i] = null; } HalamanUtama coba = new HalamanUtama(con, daftarTableCombo.getSelectedItem().toString()); coba.setVisible(true); jDesktopPane1.getMaximumSize(); } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 126 5.3.4 Implementasi Kelas HalamanDistribusiAtribut Pada kelas HalamanDistribusiAtribut terdapat tiga method yang berkaitan dengan fungsi distribusi atribut dari yaitu daftarAtribut, pilihAtribut dan viewGrafik. JTable model; private int count = 0; public HalamanDistribusiAtribut(java.awt.Frame parent, List<String> daftarAtribut, JTable tabel) { initComponents(); daftarAtribut(daftarAtribut, tabel); } private void daftarAtribut(List<String> daftarAtribut, JTable tabel) { lihatGrafikButton.setEnabled(false); model = tabel; for (int i = 0; i < daftarAtribut.size(); i++) { atributCombo.addItem(daftarAtribut.get(i).toString()); } } private void pilihAtribut() { String pilihAtribut = atributCombo.getSelectedItem().toString(); String[] columnName = new String[2]; String[][] data = null; List<String> listData = new ArrayList<String>(); for (int i = 1; i < model.getColumnCount(); i++) { if (pilihAtribut.equalsIgnoreCase(model.getColumnName(i).toString())) { columnName[0] = model.getColumnName(i).toString(); columnName[1] = "Count"; for (int j = 0; j < model.getRowCount(); j++) { listData.add(model.getValueAt(j, i).toString()); } HashSet hashSet = new HashSet(listData); listData.clear();// Clearing arraylist1 listData = new ArrayList(hashSet); data = new String[listData.size()][2]; // System.out.println("List data after removing : " + listData.toString()); for (int k = 0; k < listData.size(); k++) { for (int l = 0; l < model.getRowCount(); l++) { if (listData.get(k).toString().equalsIgnoreCase(model.getValueAt(l, i).toString())) { setCount(count + 1); } } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 127 data[k][0] = listData.get(k).toString(); data[k][1] = String.valueOf(getCount()); // System.out.println("Count : " + getCount()); setCount(0); } } } DefaultTableModel d = new DefaultTableModel(data, columnName); tabelDistribusi.setModel(d); lihatGrafikButton.setEnabled(true); } private void viewGrafik() { String ass[][]; String pars[][]; int jum[][]; int a = tabelDistribusi.getRowCount(); int b = tabelDistribusi.getColumnCount(); ass = new String[a][b]; pars = new String[a][b]; jum = new int[a][b]; for (int i = 0; i < a; i++) { ass[i][0] = tabelDistribusi.getValueAt(i, 0).toString(); pars[i][1] = tabelDistribusi.getValueAt(i, 1).toString(); jum[i][1] = Integer.parseInt(pars[i][1]); } BarChart br = new BarChart(); br.tampil(jum, ass, ass); } 5.3.5 Implementasi Kelas SeleksiAtribut Pada kelas SeleksiAtribut terdapat method-method yang berkaitan dengan fungsi seleksi atribut. public class SeleksiAtribut { private List<String> atribut; private String atribut2; private Boolean pilih; public SeleksiAtribut(){ } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 128 public SeleksiAtribut(String vl, boolean st) { atribut2 = vl; pilih = new Boolean(st); } public Boolean getPilih() { return pilih; } public void setPilih(Boolean pilih) { this.pilih = pilih; } public List<String> getAtribut() { return atribut; } public void setAtribut(List<String> atribut) { this.atribut = atribut; } public String getAtribut2() { return atribut2; } public void setAtribut2(String atribut2) { this.atribut2 = atribut2; } } 5.3.6 Implementasi Kelas DatabaseConnection Pada kelas DatabaseConnection terdapat method-method yang digunakan untuk menghubungkan sistem dengan basis data tertentu yang dipilih pengguna. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 129 public class DatabaseConnection { private static Connection connection = null; public static void setConnection(Connection aConnection) { connection = aConnection; } public boolean isConnectedOracle(String url, String user, String pwd){ //closeConnection(url, user, pwd); if (connectToOracle(url, user, pwd) != null) { return true; } else { return false; } } public boolean isConnectedMySQL(String url, String user, String pwd) { //closeConnection(url, user, pwd); if (connectToMySQL(url, user, pwd) != null) { return true; } else { return false; } } public Connection connectToOracle(String url, String user, String pwd) { try { Class.forName("oracle.jdbc.driver.OracleDriver"); setConnection(DriverManager.getConnection(url, user, pwd)); System.out.println("Koneksi Berhasil"); } catch (Exception e) { System.out.println(e.getMessage()); } return getConnection(); } public Connection connectToMySQL(String url, String user, String pwd) { try { Class.forName("org.gjt.mm.mysql.Driver"); setConnection(DriverManager.getConnection(url, user, pwd)); System.out.println("Koneksi Berhasil"); PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 130 } catch (Exception e) { System.out.println(e.getMessage()); } return getConnection(); } public Connection getConnection() { return connection; } public boolean closeConnection(String url, String user, String pwd) { if (isConnectedMySQL(url, user,pwd)) { try { getConnection().close(); setConnection(null); } catch (SQLException ex) { ex.printStackTrace(); } return true; } else if (isConnectedOracle(url, user,pwd)) { try { getConnection().close(); setConnection(null); } catch (SQLException ex) { ex.printStackTrace(); } return true; } else { return false; } } 5.3.7 Implementasi Kelas Database Kelas Database merupakan kelas controller yang berisi method-method untuk memanggil method-method pada kelas DatabaseConnection. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 131 public class Database { private Connection connection; public static boolean getConnOracle(String url, String user, String pwd) { DatabaseConnection kon = new DatabaseConnection(); boolean ok = kon.isConnectedOracle(url, user, pwd); return ok; } public static boolean getConnMySQL(String url, String user, String pwd) { DatabaseConnection kon = new DatabaseConnection(); boolean ok = kon.isConnectedMySQL(url, user, pwd); return ok; } public ResultSet displayTableOracle(Connection conn) throws SQLException { Statement stmt; ResultSet rset; String query; stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); query = "select table_name from user_tables"; //System.out.println("\nExecuting query: " + query); rset = stmt.executeQuery(query); return rset; } public ResultSet displayTableMySql(Connection conn) throws SQLException { Statement stmt; ResultSet rset; String query; stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); query = "show tables"; // System.out.println("\nExecuting query: " + query); rset = stmt.executeQuery(query); return rset; } public ResultSet displayTable(Connection conn, String namaTabel) throws SQLException { Statement stmt; ResultSet rset; String query; stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 132 query = "select * from "+namaTabel; // System.out.println("\nExecuting query: " + query); rset = stmt.executeQuery(query); return rset; } } 5.3.8 Implementasi Kelas CheckBoxTableModel Kelas CheckBoxTableModel merupakan kelas yang berisi method-method yang berkaitan dengan fungsi seleksi atribut. public class CheckBoxTableModel extends AbstractTableModel { String[] colom = {"Atribut", "Pilih"}; List<String> nama_atribut; SeleksiAtribut fm = new SeleksiAtribut("", false); List<SeleksiAtribut> lfm ; public CheckBoxTableModel() { lfm = new ArrayList<SeleksiAtribut>(); } public int getRowCount() { return lfm.size(); } public int getColumnCount() { return colom.length; } @Override public String getColumnName(int col) { return colom[col]; } public Object getValueAt(int rowIndex, int columnIndex) { switch (columnIndex) { case 0: return lfm.get(rowIndex).getAtribut2(); PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI case 1: return lfm.get(rowIndex).getPilih(); } return null; } @Override public Class getColumnClass(int columnIndex) { return getValueAt(0, columnIndex).getClass(); } @Override public void setValueAt(Object val, int rowIndex, int columnIndex) { switch (columnIndex) { case 0: lfm.get(rowIndex).setAtribut2(val.toString()); break; case 1: lfm.get(rowIndex).setPilih((Boolean) val); break; } fireTableCellUpdated(rowIndex, columnIndex); } @Override public boolean isCellEditable(int row, int col) { return true; } public void add(int x,SeleksiAtribut field_m) { lfm.add(x,field_m); fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1); } public void removeRow() { List<SeleksiAtribut> s = new ArrayList<SeleksiAtribut>(); for (SeleksiAtribut seleksi : lfm) { if (!seleksi.getPilih()) { s.add(seleksi); } } lfm=s; fireTableDataChanged(); } 133 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 134 public void removeRow2() { List<SeleksiAtribut> s = new ArrayList<SeleksiAtribut>(); for (SeleksiAtribut seleksi : lfm) { if (!seleksi.getPilih()) { s.remove(seleksi); } } lfm=s; fireTableDataChanged(); } } 5.3.9 Implementasi Kelas BarChart Kelas BarChart merupakan kelas yang berisi method tampil yang digunakan untuk menampilkan grafik distribusi atribut. public class BarChart extends JFrame { public void tampil(int[][] v, String[][] n, String[][] t) { setTitle("Grafik Distribusi Atribut"); DefaultCategoryDataset data = new DefaultCategoryDataset(); for (int i = 0; i < n.length; i++) { data.setValue(v[i][1], n[i][0], t[i][0]); } JFreeChart jf = ChartFactory.createBarChart3D("Dataset Chart", "dataset", "sum", data, PlotOrientation.VERTICAL, true, true, true); ChartPanel cp = new ChartPanel(jf); setLayout(new BorderLayout()); add(cp, "Center"); pack(); RefineryUtilities.centerFrameOnScreen(this); this.setVisible(true); } } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 135 5.3.10 Implementasi Kelas GraphController Kelas GraphController merupakan kelas controller yang berisi methodmethod untuk memanggil method pada kelas Graph yang berkaitan dengan fungsi deteksi outlier. public class GraphController { Graph g; public void deteksiOutlier(int row) { g = new Graph(row); } public String tampilHasil(JTable t, double m, double d, String jumData, String path) { return g.displayOutlier(t, m, d, jumData, path); } } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI BAB 6 PENGUJIAN DAN ANALISIS HASIL PENGUJIAN 6.1 Fase Implementasi Pengujian Pada bab ini akan dibahas mengenai tahap pengembangan sistem pendeteksi outlier menggunakan algoritma Block-based Nested-Loop yaitu pengujian sistem. Berikut merupakan tahap-tahap yang dilakukan dalam pengujian sistem : 6.1.1 Rencana Pengujian Pengujian terhadap sistem ini meliputi empat metode pengujian, yaitu pengujian blackbox, pengujian efek perubahan nilai atribut penambangan data , pengujian review dan validasi oleh pengguna dan pengujian perbandingan waktu deteksi outlier berdasarkan jumlah blok. Pengujian blackbox adalah pengujian perangkat lunak dari aspek fungsional dengan tidak memperhatikan struktur internal dari perangkat lunak yang diuji. Pengetahuan khusus mengenai struktur internal dan pemrograman pada umumnya tidak diperlukan dalam pengujian blackbox. Pengujian blackbox dilakukan untuk mengetahui apakah sebuah perangkat lunak sudah berfungsi sesuai dengan yang diharapkan pengguna. Pengujian efek perubahan nilai atribut penambangan data dilakukan dengan cara mengubah nilai paramater yang dimiliki algoritma Block-based Nested-Loop, yaitu nilai M dan D. Pengujian review dan validasi oleh pengguna dilakukan dengan membandingkan hasil deteksi outlier yang diperoleh melalui sistem dengan hasil deteksi outlier yang dilakukan oleh pengguna dalam hal ini Kaprodi (Kepala Program Studi) Teknik Informatika Universitas Sanata Dharma. 136 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 137 Pengujian perbandingan waktu deteksi outlier berdasarkan jumlah blok dilakukan untuk mengetahui pengaruh penggunaan blok-blok data terhadap waktu yang diperlukan sistem dalam mendeteksi outlier. Berikut dapat dilihat rencana pengujian sistem pada tabel 6.1 dibawah ini: Tabel 6.1 Tabel Rencana Pengujian Kelas Uji DatabaseConnection HalamanUtama Halaman DistribusiAtribut HalamanPilihDB HalamanPilihTabel Butir Uji Jenis Pengujian Cek koneksi ke dalam basis data Black Box (MySQL) Cek koneksi ke dalam basis data Black Box (Oracle) Menampilkan form HalamanUtama Black Box Menampilkan data dari file .xls Black Box Menampilkan data dari file .csv Black Box Menampilkan data dari tabel dalam Black Box basis data Melakukan seleksi atribut Black Box Menampilkan hasil deteksi outlier Black Box Menyimpan hasil deteksi outlier Black Box Menampilkan form Black Box HalamanDistribusiAtribut Menampilkan daftar atribut beserta Black Box jumlahnya Menampilkan grafik distribusi atribut Black Box Menampilkan form HalamanPilihDB Black Box Mengecek kelengkapan input data untuk login ke basis data Menampilkan form Black Box HalamanPilihTabel Menampilkan daftar tabel yang Black Box berasal dari basis data yang dipilih pengguna 6.1.1.1 Pengujian Blackbox 6.1.1.1.1 Pengujian DatabaseConnection Data pengujian dari kelas DatabaseConnection dapat dilihat pada tabel 6.2 di bawah ini. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 138 Tabel 6.2 Tabel Pengujian Kelas DatabaseConnection Aktifitas yang dilakukan Input username, password, nama database, url benar (MySQL) Kasus dan Hasil Uji (Data Benar) Yang Diharapkan Pengamatan Menampilkan Pesan sukses pesan sukses berhasil melakukan ditampilkan koneksi ke basis data Input username, Menampilkan Pesan sukses password, url benar pesan sukses berhasil (Oracle) melakukan ditampilkan koneksi ke basis data Kasus dan Hasil Uji (Data Salah) Aktifitas Keluaran Hasil yang yang dilakukan yang Diharapkan Didapat Input username, Menampilkan Pesan berhasil password, nama pesan peringatan ditampilkan database atau url ada bahwa koneksi ke yang salah (MySQL) basis data gagal. Input username, Menampilkan Pesan berhasil password atau url ada pesan peringatan ditampilkan yang salah (Oracle) bahwa koneksi ke basis data gagal. Kesimpulan Diterima Diterima Kesimpulan Diterima Diterima 6.1.1.1.2 Pengujian HalamanUtama Data pengujian dari kelas HalamanUtama dapat dilihat pada tabel 6.3 di bawah ini. Tabel 6.3 Tabel Pengujian Kelas HalamanUtama Aktifitas yang dilakukan Input data dari file bertipe .xls Input data dari file bertipe .csv Input data dari tabel dalam basis Kasus dan Hasil Uji (Data Benar) Keluaran yang Hasil yang Diharapkan Didapat Data tertampil ke Data tertampil ke dalam tabel dalam tabel Data tertampil ke Data tertampil ke dalam tabel dalam tabel Data tertampil ke Data tertampil ke dalam tabel dalam tabel Kesimpulan Diterima Diterima Diterima PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI data Memilih satu atau lebih atribut yang akan dihilangkan lalu menekan tombol hapus Menekan tombol Tandai Semua Atribut beserta data dalam tabel yang dipilih terhapus Semua atribut akan ditandai untuk dihapus tombol Semua atribut Tandai tidak ditandai Menekan Batal Semua Melakukan proses deteksi outlier menggunakan algoritma NestedLoop Menekan tombol Simpan (.doc) 139 Data sesuai atribut Diterima yang terpilih berhasil dihapus dari tabel Semua atribut Diterima berhasil ditandai Semua atribut Diterima berhasil tidak ditandai Hasil deteksi outlier Diterima beserta nilai parameter M dan D berhasil ditampilkan Menampilkan hasil deteksi outlier beserta nilai parameter M dan D File tersimpan File berhasil sesuai dengan disimpan nama dan lokasi yang ditentukan pengguna dan berformat .doc Menekan tombol File tersimpan File berhasil Simpan (.txt) sesuai dengan disimpan nama dan lokasi yang ditentukan pengguna dan berformat .txt Kasus dan Hasil Uji (Data Salah) Aktifitas Keluaran Hasil yang yang dilakukan yang Diharapkan Didapat Input data dari file Menampilkan Pesan peringatan bertipe .xls pesan peringatan berhasil (terdapat baris bahwa data yang ditampikan kosong) dimasukan salah (terdapat baris kosong). Input data dari file Menampilkan Pesan peringatan bertipe .xls pesan peringatan berhasil (terdapat label bahwa data yang ditampikan yang kosong) dimasukan salah (terdapat label kosong). Input data dari file Menampilkan Pesan peringatan Diterima Diterima Kesimpulan Diterima Diterima Diterima PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI bertipe .xls (data pesan peringatan selain label berupa bahwa data yang huruf) dimasukan salah (berformat bukan angka). Input data dari file Menampilkan bertipe .xls (data pesan peringatan mengandung bahwa data yang sembarang dimasukan salah karakter) (berformat bukan angka). Input data dari file Menampilkan bertipe .csv pesan peringatan (terdapat baris bahwa data yang kosong atau salah (terdapat mengandung baris kosong atau karakter bukan mengandung angka) karakter bukan angka). Input data dari Menampilkan tabel dalam basis pesan peringatan data (terdapat bahwa data yang baris kosong) dimasukan salah (terdapat baris kosong). Input data dari Menampilkan tabel dalam basis pesan peringatan data (terdapat bahwa data yang label kosong) dimasukan salah (terdapat label kosong). Input nilai D atau Menampilkan M ada yang pesan peringatan kosong bahwa nilai D dan M harus terisi Input nilai D atau Menampilkan M bukan angka pesan peringatan atau mengandung bahwa nilai D dan karakter M harus berupa angka Menyimpan file Menampilkan hasil deteksi pesan peringatan outlier pada lokasi bahwa lokasi yang salah penyimpanan file salah berhasil ditampikan Pesan peringatan berhasil ditampikan Diterima Pesan peringatan berhasil ditampikan Diterima Pesan peringatan berhasil ditampikan Diterima Pesan peringatan berhasil ditampikan Diterima Pesan peringatan Diterima berhasil ditampilkan Pesan peringatan Diterima berhasil ditampilkan Pesan peringatan Diterima berhasil ditampilkan. 140 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 6.1.1.1.3 141 Pengujian HalamanDistribusiAtribut Data pengujian dari kelas HalamanDistribusiAtribut dapat dilihat pada tabel 6.4 di bawah ini. Tabel 6.4 Tabel Pengujian Kelas HalamanDistribusiAtribut Kasus dan Hasil Uji (Data Benar) Aktifitas Keluaran yang Hasil yang Didapat yang dilakukan Diharapkan Memilih nama Detail jumlah data Detail jumlah data atribut dari atribut tertampil dari atribut terpilih ke dalam tabel berhasil ditampilkan ke dalam tabel Menekan tombol Detail jumlah data Detail jumlah data Lihat Grafik tertampil dalam berhasil tertampil bentuk diagram dalam bentuk batang diagram batang Kasus dan Hasil Uji (Data Salah) Aktifitas Keluaran yang Hasil yang Didapat yang dilakukan Diharapkan 6.1.1.1.4 Kesimpulan Diterima Diterima Kesimpulan Pengujian HalamanPilihDB Data pengujian dari kelas HalamanPilihDB dapat dilihat pada tabel 6.5 di bawah ini. Tabel 6.5 Tabel Pengujian Kelas HalamanPilihDB Aktifitas yang dilakukan Input username, password, nama database atau url lengkap (MySQL) Input username, password atau url lengkap (Oracle) Aktifitas Kasus dan Hasil Uji (Data Benar) Keluaran yang Hasil yang Didapat Kesimpulan Diharapkan Menampilkan pesan Pesan sukses berhasil Diterima sukses melakukan ditampilkan koneksi Menampilkan pesan Pesan sukses berhasil Diterima sukses melakukan ditampilkan koneksi Kasus dan Hasil Uji (Data Salah) Keluaran yang Hasil yang Didapat Kesimpulan PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI yang dilakukan Input username, password, nama database atau url ada yang kosong (MySQL) Input username, password atau url ada yang kosong (Oracle) Diharapkan Menampilkan pesan peringatan bahwa semua data harus terisi. Menampilkan pesan peringatan bahwa semua data harus terisi. Pesan berhasil ditampilkan Diterima Pesan berhasil ditampilkan Diterima 142 6.1.1.1.5 Pengujian HalamanPilihTabel Data pengujian dari kelas HalamanPilihTabel dapat dilihat pada tabel 6.6 di bawah ini. Tabel 6.6 Tabel Pengujian Kelas HalamanPilihTabel Aktifitas yang dilakukan Membuka HalamanPilihTabel Aktifitas yang dilakukan Kasus dan Hasil Uji (Data Benar) Keluaran yang Hasil yang Diharapkan Didapat Menampilkan Daftar table daftar tabel yang berhasil berasal dari basis ditampilkan data yang dipilih pengguna Kasus dan Hasil Uji (Data Salah) Keluaran yang Hasil yang Diharapkan Didapat Kesimpulan Diterima Kesimpulan 6.1.1.1.6 Kesimpulan Hasil Pengujian Blackbox Berdasarkan hasil pengujian terhadap setiap fungsi sistem dengan kasus uji di atas, disimpulkan bahwa sistem dapat menghasilkan keluaran yang sesuai dengan yang diharapkan pengguna dan menangani error terhadap fungsi – fungsi yang tidak berjalan sesuai aturan. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 143 6.1.1.2 Pengujian Review dan Validitas oleh Pengguna 6.1.1.2.1 Perbandingan Perhitungan Manual dan Sistem Dataset yang digunakan yaitu data akademik mahasiswa Prodi Teknik Informatika angkatan 2007 yang diterima melalui jalur tes tertulis. Atribut yang digunakan terdiri dari ips1, ips2, ips3, ips4, nil11, nilai12, nil13, nil14 dan nil15. Data akademik tersebut diproses melalui perhitungan secara manual menggunakan Microsoft Excel untuk ditemukan hasil outliernya. Hasil dari perhitungan manual menggunakan algoritma Block-based Nested-Loop akan dibandingkan dengan hasil deteksi outlier yang diperoleh dari Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop. Berikut adalah tabel perbandingan hasil deteksi outlier dari data akademik mahasiswa Prodi Teknik Informatika angkatan 2007 sebanyak 13 mahasiswa yang diterima melalui jalur tes tertulis menggunakan perhitungan manual dan perhitungan sistem. Tabel 6.7 Tabel Perbandingan Hasil Deteksi Outlier Mahasiswa Angkatan 2007 Jalur Tes Tertulis Input Parameter (M, D) Hasil Outlier Semester 1, 2 dan 4 M=4;D=2 3 Hitung Manual 1. 2. 3. 1. 2. 3. 4. Mhs-79 Mhs-81 Mhs-91 Mhs-79 Mhs-81 Mhs-89 Mhs-91 Sistem 1. 2. 3. 1. 2. 3. 4. Mhs-79 Mhs-81 Mhs-91 Mhs-79 Mhs-81 Mhs-89 Mhs-91 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 144 Tabel 6.8 Tabel Nilai per Atribut Hasil Outlier Mahasiswa Angkatan 2007 Jalur Tes Tertulis No Mhs-79 Mhs-81 Mhs-89 Mhs-91 Nil11 Nil12 Nil13 Nil14 Nil15 4.00 1.20 2.40 2.80 2.00 0.80 1.60 2.40 3.60 3.20 2.40 3.20 2.40 1.20 1.20 3.20 2.80 0.40 2.80 0.80 IPS1 1.44 1.72 2.94 1.72 IPS2 IPS3 IPS4 2.42 1.65 2.59 2.65 2.53 1.53 1.55 2.43 1.96 1.68 2.35 2.24 Berdasarkan tabel 6.7 di atas, dapat dilihat bahwa hasil deteksi outlier yang diperoleh melalui perhitungan manual maupun sistem menghasilkan outlier yang sama. Jadi, dapat disimpulkan bahwa sistem mampu menghasilkan keluaran sesuai dengan yang diharapkan seperti pada perhitungan manual. 6.1.1.2.2 Hasil Deteksi dari Sistem untuk Pengujian Review dan Validitas oleh Pengguna Untuk meyakinkan bahwa hasil deteksi outlier yang diperoleh melalui perhitungan oleh sistem adalah benar, maka hasil tersebut perlu dianalisis oleh Kaprodi. Analisis dilakukan untuk mempertimbangkan apakah kumpulan nilai yang dimiliki oleh mahasiswa yang dinyatakan sebagai outlier dapat diterima sebagai kejadian langka di antara mahasiswa lainnya. Kaprodi lalu dapat menentukan mahasiswa mana saja yang sudah tepat atau belum tepat untuk dimasukkan dalam kelompok outlier. Dataset yang digunakan yaitu data akademik mahasiswa Prodi Teknik Informatika angkatan 2007 dan 2008 yang diterima melalui jalur tes tertulis dan jalur prestasi. Atribut yang digunakan terdiri dari ips1, ips2, ips3, ips4, nil11, nilai12, nil13, nil14, nil15 dan final. Dataset dibagi menjadi tiga PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 145 variasi sebagai masukan sistem. Berikut adalah beberapa tabel hasil deteksi outlier yang diperoleh dari sistem. 1. Data Mahasiswa Prodi Teknik Informatika Angkatan 2007 dan 2008 Jalur Tes (54 mahasiswa) semester 1 sampai semester 4 Atribut yang digunakan ips1, ips2, ips3, ips4, nil11, nil12, nil13, nil14, nil15. Ips1 Ips2 Ips3 Ips4 Nil1 Nil2 Nil3 Nil4 Nil5 Rata 2.61 2.56 2.53 2.46 2.43 2.10 2.59 2.13 2.24 -Rata Standar 0.562 0.645 0.718 0.846 0.515 0.528 0.685 0.641 0.638 Deviasi M = 5, D = 2 Hasil Outlier Semester 1 (2) Nomor Ips1 Nil11 Nil12 Mhs-79 1.44 4.00 2.00 Mhs-81 1.72 1.20 0.80 Nil13 3.60 3.20 Nil14 2.40 1.20 Nil15 2.80 0.40 Hasil Outlier Semester 2 (3) Nomor Ips2 Nil11 Nil12 Mhs-81 1.72 1.20 0.80 Mhs-119 1.28 2.40 3.20 Mhs-120 1.04 3.20 2.00 Nil13 3.20 3.60 3.60 Nil14 1.20 2.80 3.20 Nil15 0.40 3.20 1.60 Hasil Outlier Semester 3 (3) Nomor Ips3 Nil11 Nil12 Mhs-81 1.53 1.20 0.80 Mhs-103 0.59 2.40 2.40 Mhs-120 1.04 3.20 2.00 Nil13 3.20 2.80 3.60 Nil14 1.20 1.20 3.20 Nil15 0.40 3.60 1.60 Hasil Outlier Semester 4 (6) Nomor Ips4 Nil11 Nil12 Mhs-81 1.68 1.20 0.80 Mhs-97 0.05 2.80 2.40 Mhs-100 1.07 2.40 1.60 Mhs-107 0.00 2.80 2.00 Mhs-115 0.00 2.80 1.60 Mhs-119 0.82 2.40 3.20 Nil13 3.20 2.40 2.80 1.20 2.00 3.60 Nil14 1.20 2.00 3.60 1.60 2.40 2.80 Nil15 0.40 2.00 2.80 1.60 1.20 3.20 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 2. Data Mahasiswa Prodi Teknik Informatika Angkatan 2007 dan 2008 Jalur Prestasi (72 mahasiswa) Atribut yang digunakan ips1, ips2, ips3, ips4, final Rata-Rata Standar Deviasi Ips1 2.79 0.592 Ips2 2.74 0.694 Ips3 2.86 0.527 Ips4 2.98 0.620 Final 2.89 0.141 M = 5, D = 1 Hasil Outlier Semester 1 (1) Nomor Ips1 Final Mhs-69 0.85 2.85 Hasil Outlier Semester 2 (2) Nomor Ips2 Final Mhs-17 0.32 2.72 Mhs-37 0.44 2.90 Hasil Outlier Semester 3 (1) Nomor Ips3 Final Mhs-17 0.69 2.72 Hasil Outlier Semester 4 (1) Nomor Ips4 Final Mhs-51 0.94 2.89 3. Data Mahasiswa Prodi Teknik Informatika Angkatan 2007 dan 2008 Jalur Tes dan Jalur Prestasi (126 mahasiswa) Atribut yang digunakan ips1, ips2, ips3, ips4, final M = 5, D = 1 Rata-Rata Standar Deviasi Ips1 2.71 0.584 Ips2 2.66 0.677 Ips3 2.72 0.635 Ips4 2.76 0.764 Final 2.63 0.384 146 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 147 Hasil Outlier Semester 1 (2) Nomor Ips1 Final Status Tes Mhs-69 0.85 2.85 P Mhs-81 1.72 1.12 T Hasil Outlier Semester 2 (3) Nomor Ips2 Final Status Tes Mhs-17 0.32 2.72 P Mhs-37 0.44 2.90 P Mhs-81 2.61 1.12 T Hasil Outlier Semester 3 (4) Nomor Ips3 Final Status Tes Mhs-17 0.69 2.72 P Mhs-81 1.53 1.12 T Mhs-103 0.59 2.56 T Mhs-120 0.19 2.56 T Hasil Outlier Semester 4 (3) Nomor Ips4 Final Status Tes Mhs-81 1.68 1.12 T Mhs-107 0.00 2.04 T Mhs-115 0.00 2.00 T 6.1.1.2.3 Kesimpulan Pengujian Review dan Validitas oleh Pengguna Kesimpulan yang diperoleh berdasarkan review yang dilakukan oleh Kaprodi terhadap hasil outlier yang diperoleh melalui Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop adalah sebagai berikut: 1. Kasus uji pertama menggunakan dataset mahasiswa Prodi Teknik Informatika angkatan 2007 dan 2008 yang mengikuti jalur tes tertulis. Hasil outlier yang diperoleh oleh sistem pada semester 1 hingga semester 4 yaitu 9 mahasiswa. Ada beberapa mahasiswa yang hanya muncul pada PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 148 satu atau dua semester saja tetapi ada pula yang muncul di setiap semester seperti Mhs-81. Kaprodi menyetujui hasil outlier yang diperoleh sistem. Menurut Kaprodi, mahasiswa-mahasiswa tersebut memang memiliki IPS yang jauh lebih rendah dibandingkan mahasiswa lainnya. Jika diperhatikan dari nilai tes masuk, Mhs-81 memiliki nilai tes masuk yang jauh lebih rendah dibandingkan mahasiswa lainnya. Dengan demikian dapat diterima bahwa 9 orang mahasiswa tersebut merupakan outlier pada semester pertama hingga semester empat karena nilai-nilainya yang jauh lebih rendah dibandingkan mahasiswa lainnya. 2. Kasus uji kedua menggunakan dataset mahasiswa Prodi Teknik Informatika angkatan 2007 dan 2008 yang mengikuti jalur prestasi. Hasil outlier yang diperoleh oleh sistem pada semester 1 hingga semester 4 yaitu 4 mahasiswa. Ada beberapa mahasiswa yang hanya muncul pada satu semester saja tetapi ada pula yang muncul dalam dua semester seperti Mhs-17. Kaprodi menyetujui hasil outlier yang diperoleh sistem. Menurut Kaprodi, mahasiswa-mahasiswa tersebut memang memiliki IPS yang yang jauh lebih rendah dibandingkan mahasiswa lainnya. Jadi, dapat diterima bahwa 4 orang mahasiswa tersebut merupakan outlier pada semester pertama hingga semester empat karena nilai-nilainya yang jauh lebih rendah dibandingkan mahasiswa lainnya. 3. Kasus uji ketiga menggunakan dataset mahasiswa Prodi Teknik Informatika angkatan 2007 dan 2008 jalur prestasi dan jalur tes tertulis. Hasil outlier yang diperoleh oleh sistem pada semester 1 hingga semester PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 149 4 yaitu 8 mahasiswa. Seluruh mahasiswa yang muncul sebagai outlier pada kasus uji ketiga ini memang menjadi outlier seperti pada kasus uji pertama dan kedua sehingga hasil outlier ini dianggap konsisten dengan kasus uji sebelumnya dan disetujui oleh Kaprodi. 4. Menurut Kaprodi, mahasiswa yang menjadi outlier dapat dikarenakan nilainya terlalu rendah dan tidak memiliki cukup teman yang nilainya sama atau mendekati nilai mahasiswa tersebut. Penentuan outlier tidak bisa didasarkan pada perbandingan nilai tes masuk dan IPS seorang mahasiswa dengan dirinya sendiri tetapi seluruh komponen nilai yang dimiliki seorang mahasiswa harus dibandingkan dengan mahasiswa lainnya. Pendapat lain yang dinyatakan oleh Kaprodi yaitu mahasiswa yang selalu menjadi outlier dari semester 1 hingga semester 4 karena nilainya terlalu rendah tidak dapat dijadikan satu-satunya dasar untuk menilai mahasiswa tersebut sebagai mahasiswa yang nilainya sudah tidak dapat ditingkatkan lagi. Sebagai contoh, pada kasus uji pertama, Mhs-81 menjadi outlier selama empat semester awal karena nilainya terlalu rendah. Tetapi berdasarkan pengamatan Kaprodi terhadap data akademik mahasiswa tersebut, IPS Mhs-81 justru mengalami peningkatan pada semester-semester berikutnya. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 150 6.1.1.3 Pengujian Efek Perubahan Nilai Atribut Penambangan Data Pengujian terhadap Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based Nested-Loop dapat dilakukan dengan mengubah nilai parameter M dan D. Berikut adalah beberapa hasil deteksi outlier yang diperoleh dari eksekusi data akademik mahasiswa Prodi Teknik Informatika angkatan 2007 dan 2008 semester 1 yang diterima melalui jalur tes tertulis dan jalur prestasi sejumlah 126 mahasiswa menggunakan sistem dengan nilai parameter M dan D yang diubahubah. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 151 Tabel 6.9 Tabel Jumlah Outlier Berdasarkan Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai M dan D yang Berubah-ubah (54 Mahasiswa) M = 4 M=5 M = 6 M = 7 M = 8 M = 9 D=1 D=2 D=3 D=4 D=5 42 2 0 0 0 46 2 0 0 0 48 3 0 0 0 51 4 0 0 0 52 4 0 0 0 53 4 0 0 0 Gambar 6.1a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai M=4 dan D Berubah-ubah Gambar 6.1b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai M=5 dan D Berubah-ubah Gambar 6.2a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai D=1 dan M Berubah-ubah Gambar 6.2b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes Tertulis Semester 1 dengan Nilai D=2 dan M Berubah-ubah PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 152 Tabel 6.10 Tabel Jumlah Outlier Berdasarkan Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai M dan D yang Berubah-ubah (72 mahasiswa) M = 4 M=5 M = 6 M = 7 M = 8 M = 9 D=1 D=2 D=3 D=4 D=5 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 Gambar 6.3a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai M=4 dan D Berubah-ubah Gambar 6.3b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai M=5 dan D Berubah-ubah Gambar 6.4a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai D=1 dan M Berubah-ubah Gambar 6.4b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Prestasi Semester 1 dengan Nilai D=2 dan M Berubah-ubah PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 153 Tabel 6.11 Tabel Jumlah Outlier Berdasarkan Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes dan Jalur Prestasi dengan Nilai M dan D yang Berubah-ubah (126 Mahasiswa) M = 4 M=5 M = 6 M = 7 M = 8 M = 9 D=1 D=2 D=3 D=4 D=5 1 0 0 0 0 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0 2 0 0 0 0 Gambar 6.5a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Semester 1 dengan Nilai M=4 dan D Berubah-ubah Gambar 6.5b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Semester 1 dengan Nilai M=5 dan D Berubah-ubah Gambar 6.6a Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Semester 1 dengan Nilai D=1 dan M Berubah-ubah Gambar 6.6b Grafik Hasil Deteksi Outlier pada Data Mahasiswa Angkatan 2007 dan 2008 Semester 1 dengan Nilai D=2 dan M Berubah-ubah PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 154 6.1.1.3.1 Kesimpulan Pengujian Efek Perubahan Nilai Atribut Penambangan Data Berdasarkan beberapa hasil deteksi outlier di atas, dapat disimpulkan beberapa hal sebagai berikut: 1. Jika nilai M tetap dan nilai D bertambah, jumlah outlier akan tetap atau berkurang. Hal ini disebabkan jangkauan nilai (D) yang digunakan sebagai batas nilai sebuah kelompok bukan outlier semakin bertambah sedangkan jumlah tetangga (M) yang diperlukan tetap sehingga mengurangi kemunculan outlier. Kondisi ini dapat dilihat pada gambar 6.1 di atas. 2. Jika nilai D tetap dan nilai M bertambah, jumlah outlier akan tetap atau bertambah. Hal ini disebabkan jangkauan nilai (D) yang digunakan sebagai batas nilai sebuah kelompok bukan outlier tetap sedangkan jumlah tetangga (M) yang diperlukan bertambah sehingga menambah kemunculan outlier. Kondisi ini dapat dilihat pada gambar 6.2 di atas. 3. Pemilihan nilai M dan D mempengaruhi hasil deteksi outlier. Pemilihan nilai M dan D yang tepat dapat menghasilkan keluaran berupa outlier yang tepat juga. Jika pemilihan nilai M dan D tidak sesuai maka akan ada kemungkinan data yang sebenarnya bukan outlier terbaca oleh algoritma Block-based Nested-Loop sebagai outlier demikian juga sebaliknya. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 155 6.1.1.4 Pengujian Perbandingan Waktu Deteksi Outlier Berdasarkan Jumlah Blok Pada penelitian ini penulis menggunakan algoritma Block-based NestedLoop dalam mendeteksi outlier. Algoritma Block-based Nested-Loop memiliki prinsip block-oriented. Data-data yang diolah menggunakan algoritma ini akan dimasukkan ke dalam blok-blok tertentu. Blok-blok data selanjutnya akan bergantian masuk dan keluar dari memori selama proses deteksi outlier berlangsung. Setiap komputer memiliki memori dengan kapasitas tertentu. Setiap kali ada proses load data ke memori maka kapasitas memori yang kosong akan berkurang. Semakin banyak data yang diproses ke dalam memori maka akan semakin banyak ruang memori yang dipakai. Algoritma Block-based NestedLoop dikhususkan untuk deteksi outlier pada data dalam jumlah besar. Ketika kapasitas memori yang kosong kurang dari ukuran data yang akan di-load ke memori maka data dibagi ke dalam blok-blok data agar dapat secara bergantian masuk ke dalam memori. Selama sebuah data berada dalam memori, akan dilakukan proses deteksi outlier terhadap data tersebut. Jadi, sebuah data tidak perlu masuk berkali-kali ke dalam memori untuk dihitung jaraknya dengan data lain maupun untuk perhitungan jumlah tetangganya. Pengujian ini dimaksudkan untuk melihat pengaruh penggunaan blokblok data terhadap waktu yang diperlukan oleh algoritma Block-based NestedLoop untuk melakukan deteksi outlier. Data yang digunakan adalah data PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 156 akademik mahasiswa Prodi Teknik Informatika angkatan 2007 dan 2008 jalur prestasi dan jalur tes sejumlah 126 mahasiwa. Total kapasitas memori saat pengujian ini dilakukan adalah sebesar 19.890.176 bytes. Sebelum algoritma ini dijalankan, kapasitas memori yang kosong sebesar 12.928.176 bytes. Saat algoritma ini dijalankan, ruang memori yang digunakan dari awal hingga akhir algoritma Block-based Nested-Loop berjalan adalah sebesar 7.305.400 bytes. Berdasarkan data tersebut terlihat bahwa kapasitas memori yang tersedia melebihi jumlah data yang akan diproses. Hal ini mengakibatkan jumlah blok data yang terbentuk hanya satu karena seluruh data dapat langsung masuk ke memori secara bersamaan tanpa perlu dipecah ke dalam beberapa blok. Oleh sebab itu, pada pengujian ini jumlah blok dijadikan konstanta yang bernilai 1 dan 2 agar dapat dilihat perbandingan lama deteksi outlier pada data yang dipecah ke beberapa blok dan yang hanya menggunakan satu blok. Setiap pengujian dilakukan dengan terlebih dahulu melakukan restart pada komputer agar kapasitas memori kosong yang digunakan pada saat eksekusi program tetap sama. Berikut ini adalah tabel perbandingan lama deteksi outlier : Tabel 6.12 Tabel Perbandingan Lama Deteksi Outlier Berdasarkan Jumlah Blok pada Data Mahasiswa Angkatan 2007 dan 2008 Jalur Tes dan Jalur Prestasi Pengujian 1 2 3 4 5 6 7 8 Jumlah Blok 1 0.042789002 detik 0.020603497 detik 0.020371910 detik 0.022191141 detik 0.020390796 detik 0.022181388 detik 0.020535434 detik 0.020651433 detik 2 0.019838321 detik 0.020215153 detik 0.044256818 detik 0.020106247 detik 0.053300593 detik 0.011608695 detik 0.020707078 detik 0.020180457 detik PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 9 10 11 12 13 14 15 16 17 18 19 20 0.041769129 detik 0.020422828 detik 0.031415547 detik 0.020981882 detik 0.045891224 detik 0.035943643 detik 0.035923278 detik 0.020498897 detik 0.053786389 detik 0.020850795 detik 0.020401679 detik 0.020346456 detik 157 0.020130156 detik 0.022138491 detik 0.020115168 detik 0.020242460 detik 0.042321115 detik 0.020183024 detik 0.020449623 detik 0.020199662 detik 0.020142371 detik 0.041829481 detik 0.045726185 detik 0.019651582 detik 6.1.1.4.1 Kesimpulan Pengujian Perbandingan Waktu Deteksi Outlier Berdasarkan Jumlah Blok Hasil pengujian di atas menunjukkan bahwa deteksi outlier yang dilakukan dengan menggunakan 2 blok data menghasilkan waktu deteksi outlier yang lebih cepat dibandingkan dengan yang hanya menggunakan 1 blok data. Dari 20 kali pengujian, algoritma Block-based Nested-Loop yang dijalankan dengan membagi data ke dalam 2 blok ternyata mampu menghasilkan waktu deteksi outlier yang lebih cepat dalam 14 kali pengujian atau sebesar 70%. Hal ini membuktikan bahwa penggunaan blok-blok data memiliki pengaruh dalam mempercepat proses deteksi outlier. Data yang digunakan pada penelitian masih tergolong sedikit untuk kapasitas memori yang tersedia pada komputer yang digunakan sehingga perbandingan lama deteksi outlier tidak begitu berbeda antara yang menggunakan 1 blok dan 2 blok. Jika data yang digunakan memiliki jumlah yang lebih besar, perbandingan lama deteksi outlier antara yang menggunakan blok data dengan yang tidak akan lebih terlihat dengan jelas. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 158 6.2 Kelebihan dan Kekurangan Sistem Sistem yang dibangun ini memiliki kelebihan dan kekurangan. Berikut adalah kelebihan dan kekurangan dari sistem: 6.2.1 1. Kelebihan Sistem Sistem dapat membaca input data yang berasal dari basis data (Oracle atau MySQL) serta file dengan format .xls dan .csv 2. Sistem dapat melakukan seleksi atribut atau kolom terhadap data yang diinputkan oleh pengguna. 3. Sistem dapat menyimpan hasil deteksi outlier ke dalam file dengan format .txt dan .doc 6.2.2 1. Kekurangan Sistem Sistem tidak dapat membaca input data berupa file dengan format selain .xls dan .csv 2. Sistem tidak dapat melakukan seleksi baris terhadap data yang diinputkan pengguna. 3. Sistem tidak dapat menangani error terhadap input data berformat .csv yang di dalamya terdapat data yang kosong atau data yang tidak berformat angka. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI BAB 7 KESIMPULAN DAN SARAN 7.1 Kesimpulan Kesimpulan yang diperoleh sebagai hasil penyelesaian tugas akhir ini adalah: 1. Sistem Pendeteksi Outlier Menggunakan Algoritma Block-based NestedLoop yang merupakan alat bantu yang digunakan untuk melakukan deteksi outlier pada sekumpulan data numerik telah berhasil dibangun. 2. Algoritma Block-based Nested-Loop terbukti dapat mendeteksi outlier dalam dataset. 3. Pemilihan nilai atribut M dan D sangat berpengaruh terhadap hasil deteksi outlier. 4. Penggunaan blok-blok data dapat mempercepat proses deteksi outlier. 7.2 Saran Berdasarkan hasil analisis pada tugas akhir ini, penulis memberikan saran untuk perbaikan dan pengembangan program lebih lanjut antara lain: 1. Program yang dibangun ini belum bisa menerima masukan selain file berformat .xls, .csv dan tabel dari basis data sehingga format dataset tidak bebas. Sistem ini bisa dilengkapi dengan tambahan pembaca data dari format lain contohnya seperti .doc 159 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 2. 160 Program yang dibangun ini belum bisa menangani data yang kosong yang berasal dari masukan data berupa file .csv. Sistem ini dapat disempurnakan dengan penanganan data kosong atau missing values pada data dengan format file .csv. PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI DAFTAR PUSTAKA Baradwaj, Brijesh Kumar & Pal, Saurabh. 2011. Mining Educational Data to Analyze Student‟s Performance Vol. 2 No 6. Hal 63-69. Fayyad, Usama et al. 1996. From Data Mining to Knowledge Discovery in Databases Vol. 17 No. 3. hal 37-54. Ghoting, Amol et al. 2006. Fast Mining of Distance-Based Outliers in HighDimensional Datasets. Hal 609-613. Han, Jiawei & Kamber, Micheline. 2006. Data Mining: Concepts and Techniques 2nd ed. San Francisco, CA: Morgan Kaufmann Publishers. Hawakins, Douglas M. 1980. Identification of Outliers. London: Chapman and Hall. Khannedy, Eko. “Menampilkan JCheckBox Di JTable”. http://eecchhoo.wordpress.com/2010/07/15/menampilkan-jcheckbox-dijtable/. (diakses tanggal 10 Mei 2013) Knorr, Edwin M & Ng., Raymond T. Algorithms for Mining Distance-Based Outliers in Large Datasets. Hal 392-403 MadProgrammer. “How to Adjust JTable Columns to Fit The Longest Content in Column Cells”. http://stackoverflow.com/questions/13013989/how-to-adjustjtable-columns-to-fit-the-longest-content-in-column-cells. (diakses tanggal 10 Mei 2013) Rosa, Paulina Heruningsih Prima, Ridowati Gunawan, Sri Hartati Wijono. The Development of Academic Data Warehouse as a Basis for Decision Making : Case Study at XYZ University. Proceeding of International Conference on Enterprise Information Systems and Applications, Universitas Islam Indonesia, Yogyakarta, Indonesia, 2013. Tair, Mohammed M. Abu & El-Halees, Alaa M. 2012. Mining Educational Data to Improve Students‟ Performance: A Case Study Vol. 2 No. 2. Hal 140-146 161 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI LAMPIRAN Lampiran 1 : Tabel Ringkasan Use Case Tabel Deskripsi Use Case Nomor Use Case NL-001 Nama Use Case Deskripsi Aktor Input data file .xls, .csv atau tabel dari basis data Use case ini menggambarkan proses input data, dalam bentuk file .xls, .csv atau .tabel dari basis data yang akan digunakan untuk proses deteksi outlier Use case ini menggambarkan proses pencarian outlier dalam data yang telah diinputkan Use case ini menggambarkan proses simpan hasil pencarian outlier ke dalam file .txt atau .doc Use case ini menggambarkan proses seleksi atribut dari data yang diinputkan, sehingga atribut yang tidak diperlukan dapat dihapus Use case ini menggambarkan proses distribusi atribut serta melihat grafik distribusi atribut dari data yang diinputkan Pengguna NL-002 Pencarian outlier NL-003 Simpan hasil pencarian outlier NL-004 Seleksi atribut NL-005 Distribusi atribut Pengguna Pengguna Pengguna Pengguna Lampiran 2 : Skenario Use Case Nama Use-case ID Use-case Prioritas Pelaku Bisnis Utama Deskripsi Kondisi Awal Urutan Aktivitas Normal Input data file .xls, .csv atau tabel dari basis data NL-001 Tinggi Pengguna Use case ini menggambarkan proses input data Pengguna membuka halaman utama Aksi Aktor Respon Sistem Step 1: Menekan tombol Pilih File Step 2: Menampilkan JFileChooser Step 3 : Memilih data yang akan diinputkan 162 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 163 dalam bentuk file .xls atau .csv Aktivitas Alternatif Kondisi Akhir Nama Use-case ID Use-case Prioritas Pelaku Bisnis Utama Deskripsi Kondisi Awal Urutan Aktivitas Normal Step 4 : Membaca file yang dipilihh lalu menampilkan data pada tabel data, menampilkan jumlah data dan menampilkan nama atribut pada tabel atribut. Alt-Step 1: Jika pengguna ingin menginputkan data berupa tabel dalam basis data, maka pengguna menekan tombol Pilih DB. Alt-Step 3 : Pengguna melakukan login ke basis data dan memilih tabel yang berisi data yang akan diinputkan. Data berhasil dibaca lalu ditampilkan pada tabel data di halaman utama beserta jumlah data dan daftar nama atribut dalam data. Pencarian Outlier NL-002 Tinggi Pengguna Use case ini menggambarkan proses pencarian outlier Pengguna telah membuka file yang berisi data yang akan diolah Aksi Aktor Respon Sistem Step 1 : Menekan tombol Submit Step 3: Memasukkan nilai parameter M dan D lalu menekan tombol Proses Step 2: Menampilkan halaman utama bagian deteksi outlier dan menampilkan data pada tabel berserta jumlah datanya. Step 4 : Menampilkan hasil pencarian outlier PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 164 Aktivitas Alternatif Kondisi Akhir Hasil deteksi outlier dari data pengujian berhasil ditampilkan Nama Use-case ID Use-case Prioritas Pelaku Bisnis Utama Deskripsi Simpan Hasil Pencarian Outlier NL-003 Normal Pengguna Use case ini menggambarkan proses menyimpan hasil pencarian outlier Pengguna telah memperoleh hasil pencarian outlier Aksi Aktor Respon Sistem Kondisi Awal Urutan Aktivitas Normal Step 1 : Menekan tombol Simpan Step 3 : Memasukkan nama file yang akan disimpan, memilih format file lalu menekan tombol Save Step 2 : Menampilkan dialog untuk menyimpan file Step 4 : Menyimpan file hasil pencarian outlier Aktivitas Alternatif Kondisi Akhir File hasil pencarian outlier berhasil disimpan Nama Use-case ID Use-case Prioritas Pelaku Bisnis Utama Deskripsi Seleksi Atribut NL-004 Normal Pengguna Use case ini menggambarkan proses menyeleksi atribut dari data yang diinputkan Pengguna telah membuka file yang berisi data yang akan diolah Aksi Aktor Respon Sistem Kondisi Awal Urutan Aktivitas Normal Step 1 : Memilih nama atribut yang akan dihapus lalu menekan tombol hapus Step 2 : Menghapus PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 165 atribut yang telah dipilh dari tabel data Aktivitas Alternatif Kondisi Akhir Atribut yang dipilih berhasil dihapus Nama Use-case ID Use-case Prioritas Pelaku Bisnis Utama Deskripsi Distribusi Atribut NL-005 Normal Pengguna Use case ini menggambarkan proses distribusi atribut dari data Pengguna telah membuka file yang berisi data yang akan diolah Aksi Aktor Respon Sistem Kondisi Awal Urutan Aktivitas Normal Step 1 : Menekan tombol Distribusi Atribut Step 2 : Menampilkan dialog distribusi atribut Step 3 : Memilih atribut dari daftar atribut Aktivitas Alternatif Kondisi Akhir Step 4 : Menampilkan detail isi atribut Alt-Step 3 : Menekan tombol Lihat Grafik untuk melihat grafik distribusi atribut Distribusi atribut beserta grafik berhasil ditampilkan PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Lampiran 3 : Diagram Aktivitas 1. Input data file .xls, .csv atau tabel dari basis data. Pengguna 166 Sistem Menekan tombol untuk input data file .xls atau .csv tabel dari basis data Menampilkan JFileChooser Menampilkan dialog login ke basis data Memasukkan username, password dan/atau nama basis data lalu memilih nama tabel Memilih file .xls atau .csv Membaca data yang dipilih lalu menampilkannya pada tabel data beserta jumlahnya dan daftar nama atribut PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 2. Pencarian outlier Pengguna Menekan tombol Submit 167 Sistem Menampilkan halaman utama bagian deteksi outlier dan menampilkan data pada tabel berserta jumlah datanya. Memasukkan nilai parameter D dan M lalu menekan tombol Proses Menampilkan hasil deteksi outlier 3. Simpan file hasil pencarian outlier Pengguna Menekan tombol Simpan Sistem Menampilkan dialog untuk menyimpan file Memasukkan nama file yang akan disimpan, memilih format file lalu menekan tombol Save Menyimpan file hasil pencarian outlier PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 4. Seleksi Atribut Pengguna Memilih nama atribut lalu menekan tombol Hapus 5. Distribusi Atribut Pengguna Menekan tombol Distribusi Atribut Memilih nama atribut dari daftar atribut Menekan tombol Lihat Grafik 168 Sistem Menghapus atribut yang telah dipilih dari tabel data Sistem Menampilkan dialog distribusi atribut Menampilkan detail isi atribut Menampilkan grafik distribusi atribut PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 169 Lampiran 4 : Tabel Diagram Kelas Analisis Tabel Kelas Analisis Input Data File .xls dan .csv No Nama Kelas 1 Tipe Deskripsi HalamanUtama Boundary Kelas ini menyediakan halaman untuk menginputkan data file .xls atau .csv Tabel Kelas Analisis Input Data Tabel dari Basis Data No Nama Kelas Tipe Deskripsi 1 Boundary Kelas ini menyediakan halaman untuk HalamanUtama menginputkan tabel dari basis data 2 Halaman Pilih DB Boundary Kelas ini menyediakan tampilan untuk memilih basis data dan memasukkan data untuk login ke basis data tersebut 3 Database Controller Kelas ini befungsi untuk mengirim data login ke basis data tertentu ke kelas DatabaseConnection 4 DatabaseConnection Entity Kelas ini berfungsi untuk membangun koneksi ke basis data 5 Halaman Pilih Boundary Tabel Kelas ini berfungsi untuk menyediakan halaman untuk memilih tabel yang berasal dari basis data yang telah terhubung dengan sistem Tabel Kelas Analisis Pencarian Outlier No Nama Kelas Tipe Deskripsi 1 Boundary Kelas ini menyediakan halaman deteksi HalamanUtama outlier 2 Graph Entity Kelas ini berfungsi untuk menjalankan algoritma Block-based Nested-Loop PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 3 Vertex Entity 170 Kelas ini berfungsi untuk menyimpan informasi setiap obyek vertex yang terbentuk 4 Block Entity Kelas ini berfungsi untuk menyimpan informasi setiap obyek block yang terbentuk 5 GraphController Controller Kelas ini berfungsi untuk menghubungkan kelas HalamanUtama dan Graph Tabel Kelas Analisis Simpan Hasil Pencarian Outlier No Nama Kelas 1 Tipe Deskripsi HalamanUtama Boundary Kelas ini menyediakan halaman deteksi outlier yang di dalamnya terdapat tombol untuk menyimpan hasil deteksi outlier. Tabel Kelas Analisis Seleksi Atribut No Nama Kelas Tipe Deskripsi 1 Boundary Kelas ini menyediakan tampilan HalamanUtama untuk melakukan seleksi atribut 2 SeleksiAtribut Entity Kelas ini menyediakan methodmethod untuk mengelola informasi setiap atribut 3 CheckBoxTableModel Controller Kelas ini menyediakan methodmethod untuk mengelola fungsi seleksi atau hapus atribut Tabel Kelas Analisis Distribusi Atribut No Nama Kelas Tipe 1 Boundary Kelas ini menyediakan tampilan HalamanUtama Deskripsi yang di dalamnya terdapat tombol PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 171 untuk masuk ke dialog distribusi atribut 2 HalamanDistribusiAtribut Boundary Kelas ini menyediakan tampilan untuk melihat detail isi setiap atribut serta grafik distrbusi atribut 3. BarChart Entity Kelas ini berisi method untuk membentuk sebuah grafik distribusi atribut Lampiran 5 : Diagram Sequence <<boundary>> HalamanUtama Menekan tombol Pilih File Pengguna pilihFile() Pengguna melihat data yang dipilih Menekan tombol Submit Gambar Diagram Sequence Input Data File xls atau .csv PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 172 Gambar Diagram Sequence Input Data Tabel dari Database PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Gambar Diagram Sequence Pencarian Outlier <<boundary>> HalamanUtama Menekan tombol Simpan Pengguna simpanHasil() Menampilkan konfirmasi file berhasil disimpan Gambar Diagram Sequence Simpan Hasil Pencarian Outlier 173 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Gambar Diagram Sequence Distribusi Atribut 174 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI Gambar Diagram Sequence Seleksi Atribut 175 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI 176 Lampiran 6 : Listing program a. Kelas HalamanAwal public class HalamanAwal extends javax.swing.JFrame { /** Creates new form HalamanAwal */ public HalamanAwal() { initComponents(); } private void masukButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_masukButtonActionPerformed // TODO add your handling code here: HalamanUtama utama = new HalamanUtama(); utama.setVisible(true); this.dispose(); }//GEN-LAST:event_masukButtonActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JLabel footer1Label; private javax.swing.JLabel footer2Label; private javax.swing.JDesktopPane halamanAwalDesktopPane; private javax.swing.JPanel halamanAwalPanel; private javax.swing.JLabel icon; private javax.swing.JButton masukButton; private javax.swing.JLabel titleLabel; // End of variables declaration//GEN-END:variables } b. Kelas HalamanBantuan public class HalamanBantuan extends javax.swing.JFrame { /** Creates new form HalamanBantuan */ public HalamanBantuan() { initComponents(); } private void keluarButtonActionPerformed(java.awt.event.ActionEvent evt) {//GENFIRST:event_keluarButtonActionPerformed // TODO add your handling code here: HalamanBantuan.this.dispose(); } PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI private javax.swing.JDesktopPane jDesktopPane1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea jTextArea1; private javax.swing.JButton keluarButton; // End of variables declaration//GEN-END:variables } c. Kelas HalamanMissingValues public class HalamanMissingValues extends javax.swing.JFrame { DefaultTableModel model; public HalamanMissingValues(DefaultTableModel tabel) { initComponents(); model=tabel; } private void yaButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_yaButtonActionPerformed // TODO add your handling code here: String pola = "[0-9.]*"; String pola2 = "[.]*"; for (int i = 0; i < model.getRowCount(); i++) { for (int j = 1; j < model.getColumnCount(); j++) { if (model.getValueAt(i, j)==null || !model.getValueAt(i, j).toString().matches(pola) || model.getValueAt(i, j).toString().matches(pola2)) { model.setValueAt(0, i, j); } } } this.dispose(); } private void tidakButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tidakButtonActionPerformed // TODO add your handling code here: this.dispose(); } private javax.swing.JDesktopPane jDesktopPane1; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea missingValueTArea; private javax.swing.JButton tidakButton; private javax.swing.JButton yaButton; // End of variables declaration//GEN-END:variables} 177 PLAGIAT PLAGIATMERUPAKAN MERUPAKANTINDAKAN TINDAKANTIDAK TIDAKTERPUJI TERPUJI d. Kelas HalamanKonfirmasiKeluar public class HalamanKonfirmasiKeluar extends javax.swing.JFrame { /** Creates new form HalamanKonfirmasiKeluar */ public HalamanKonfirmasiKeluar() { initComponents(); } private void yaButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_yaButtonActionPerformed // TODO add your handling code here: System.exit(0); } private void tidakButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tidakButtonActionPerformed // TODO add your handling code here: this.hide(); } private javax.swing.JDesktopPane jDesktopPane1; private javax.swing.JPanel jPanel1; private javax.swing.JLabel konfirmasiLabel; private javax.swing.JButton tidakButton; private javax.swing.JButton yaButton; // End of variables declaration//GEN-END:variables } 178