PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI IMPLEMENTASI DATA MINING MENGGUNAKAN METODE CLUSTERING UNTUK PREDIKSI PENJUALAN DI PT. XYZ HALAMAN JUDUL SKRIPSI Diajukan untuk Memenuhi Salah Satu Syarat Memperoleh Gelar Sarjana Komputer Program Studi Teknik Informatika Disusun oleh : Isidorus Cahyo Adi Prasetyo ( 115314009 ) PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS SANATA DHARMA YOGYAKARTA 2016 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI IMPLEMENTATION DATA MINING USING CLUSTERING METHOD FOR SELLING PREDICTION OF XYZ COMPANY HALAMAN JUDUL (Bahasa Inggris) A Thesis Presented as Partial Fulfillment of The Requirements To Obtain Sarjana Komputer Degree In Informatics Engineering Study Program Written by: Isidorus Cahyo Adi Prasetyo ( 115314009 ) INFORMATICS ENGINEERING STUDY PROGRAM DEPARTMENT OF INFORMATICS ENGINEERING FACULTY OF SCIENCE AND TECHNOLOGY SANATA DHARMA UNIVERSITY YOGYAKARTA 2016 ii PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI HALAMAN PERSETUJUAN HALAMAN PENGESAHAN iii PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI SKRIPSI PERNYATAAN KEASLIAN KARYA iv PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI v PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI vi PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI HALAMAN PERSEMBAHAN HALAMAN PERSEMBAHAN Karya Skripsi ini Saya persembahan kepada : 1. Tuhan Yesus Kristus, yang selalu mendampingiku dalam menyelesaikan karya skripsi ini. 2. Keluargaku, antara lain Bapak, Ibu, Kakek, Tante, dan Adikku yang selalu mendukungku baik berupa doa dan materi. 3. Kekasih dan segenap keluarganya yang selalu mendoakan dan memberikan semangat. 4. Para Dosen dan Teman-Teman Mahasiswa Teknik Informatika Universitas Sanata Dharma yang menjadi relasi dan penolong selama Saya menjalankan studi. 5. Keluarga besar Universitas Sanata Dharma yang telah memberikan segala pengalaman berharga dalam hidup. vii PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI HALAMAN MOTTO HALAMAN MOTTO Manusia tidak merancang untuk gagal, mereka gagal untuk merancang. ( William J. Siegel ) “IF YOU CAN’T FLY THEN RUN, IF YOU CAN’T RUN THEN WALK IF YOU CAN’T WALK THEN CRAWL, BUT WHATEVER YOU DO YOU HEVE YOU KEEP MOVING FORWARD” (Martin Luther King.Jr.) Stay Hungry, Stay Foolish ( Steve Jobs) Because I actualy learned that in life you can Only trust, like, yourself, actualy. Not in sense that you can’t trust people but, Yeah, like I said: the one who will never let you down is yourself. Benedict Hang Yong Lim “HyHy” Dota’s pro gamer – 2011 "One way to forget about pain is to do something you will be in, completely. So. computer games." (Danil "Dendi" Ishutin) viii PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI ABSTRAK Seiring perkembangan jaman yang semakin maju, peranan teknologi informasi dalam dunia bisnis masa kini mengalami perkembangan yang sangat pesat. Teknologi Data Mining atau penambangan data ini dapat membantu sebuah perusahaan untuk menemukan pengetahuan-pengetahuan baru, yang dapat membantu dalam pengaturan strategi bisnis. Informasi yang diperoleh dari dari proses penambangan data dapat membatu pelaku bisnis dalam meningkatkan proses bisnis dan membuat keputusan bisnis. Data penjualan produk helm pada PT. XYZ akan dimanfaatkan menggunakan teknik analisis klaster. Analisis klaster merupakan sebuah analisis pengelompokan data yang mengelompokan data berdasarkan informasi yang ditentukan pada data. Tujuan dari pengelompokan data ini adalah agar obyekobyek di dalam suatu kelompok memiliki kemiripan satu sama lain sedangakan obyek-obyek yang berbeda berada dalam kelompok yang memiliki perbedaan. Berkaitan dengan proses pengelompokan data pada penelitian ini, akan meggunakan metode hirarki divisive. Dalam metode divisive di setiap langkahnya terjadi penambahan kelompok ke dalam nilai dua nilai terkecil sampai akhirnya semua elemen bergabung. Metode ini merupakan proses pengklasteran yang didasarkan pada persamaan nilai rata-rata antar objek. Jika sebuah objek memiliki persamaan nilai rata-rata terbesar maka objek tersebut akan terpisah dan berubah menjadi splinter group. Dilakukan 7 kali percobaan pembentukan kelompok dan setiap percobaan dihitung pula nilai sum of square error (SSE) Pada penelitian ini dibuat sebuah sistem yang mengimplementasikan teknik analisis klaster menggunakan algoritma hirarki divisive. Data yang digunakan adalah data penjualan. Hasil akhir dari proses pengolahan data penjualan adalah terbentuknya 8 kelompok dengan nilai SSE terkeci dari beberapa percobaan. Masing-masing kelompok akan dianalisa berdasarkan informasi yang terkait. Hasil dari analisis klaster tersebut dapat menjadi strategi bagi pemilik perusahaan dalam pengambilan keputusan hingga menyediakan serta memasarkan produk dengan efektif untuk meningkatkan aktivitas penjualan. Kata kunci: data mining, analisis klaster, hirarki divisive. ix PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI ABSTRACT ABSTRACT Along with advanced current development, the role of information technology in business world has been showing a great improvement. Data Mining Technology can help a company to discover new comprehensions that are very useful in setting business strategy. The information gathered from the data mining will be able to help business people in escalating the business process and making a business decision. The product sales data at the XYZ Company will be used using cluster analysis technique. Cluster analysis is an analysis for gathering the data based on the information that has been chosen from the data. The aim from this data clustering is to make the objects that have similarities of each other will be placed in one group, while the different objects will be placed in one group that has dissimilarity. Regarding with the clustering data process in this research, the method that will be used is hierarchical divisive method. In the divisive method, there will be group adding in every step into the value, the two smallest values until finally all elements united. This method is a clustering process that is based on the average value equation between the objects. If an object has the biggest value equation, then the object will be separated and changed into splinter group. There will be seven group formation experiments conducted and every experiment will be counted the value of sum of square error (SSE). This research creates a system that implements cluster analysis technique using hierarchical divisive algorithm. The data used is the sales data. The final result from processing the sales data is set-up of eight groups with the smallest SSE value of several experiments. Each group will be analyzed based on associated information. The outcome from the cluster analysis can be benefited as a strategy to the company owner in making a decision to provide and market the product effectively in order to increase sales activity. Keyword: data mining, cluster analysis, hierarchical divisive. x PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI KATA PENGANTAR KATA PENGANTAR Puji dan syukur kepada Tuhan Yang Maha Esa, karena pada akhirnya penulis dapat menyelesaikan penelitian tugas akhir ini yang berjudul “IMPLEMENTASI DATA MINING MENGGUNAKAN METODE CLUSTERING UNTUK PREDIKSI PENJUALAN DI PT. XYZ”. Dalam seluruh proses penyusunan tugas akhir ini, penulis tak lepas dari doa, bantuan, dukungan, dan motivasi dari banyak pihak. Oleh karena itu, penulis ingin mengucapkan banyak terima kasih kepada: 1. Tuhan Yesus Kristus dan Bunda Maria yang selalu memberi anugerah, rahmat, dan kekuatan sehingga penulis dapat menyelesaikan penelitian dan penyusunan tugas akhir ini hingga selesai 2. Bapak Sudi Mungkasi, Ph.D. selaku Dekan Fakultas Sain dan Teknologi. 3. Ibu Rita selaku Ketua Program Studi Teknik Informatika. 4. Ibu Ridowati Gunawan, S. Kom., M.T. selaku Dosen Pembimbing Skripsi yang telah baik, sabar memberikan waktu, bimbingan, dan motivasi kepada peniulis. 5. Seluruh Dosen Teknik Informatika yang telah memberikan bekal ilmu dan pengalaman selama penulis menempuh studi dan seluruh staff Sekretariat Fakultas Sains dan Teknologi yang banyak membantu penulis dalam urusan administrasi akademik terutama menjelang ujian tugas akhir dan yudisium. 6. Kedua Orang Tua saya, F.X Suyatno dan Martha Sumini, terima kasih untuk setiap cinta, kasih, sayang, dukungan moral dan moril untuk penulis, dan doa demi kelancaran penyelesaian tugas akhir ini. 7. Margareta Desi Puspitasari seorang kekasih tercinta yang telah banyak memberi semangat, kasih sayang, motivasi dan banyak membantu saat suka dan duka. xi PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI xii PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI DAFTAR ISI HALAMAN JUDUL................................................................................................ i HALAMAN JUDUL (Bahasa Inggris) ................................................................... ii HALAMAN PERSETUJUAN ............................................................................... iii HALAMAN PENGESAHAN ................................................................................ iii PERNYATAAN KEASLIAN KARYA ................................................................ iv LEMBAR PERNYATAAN PERSETUJUAN PUBLIKASI.................................. v HALAMAN PERSEMBAHAN ........................................................................... vii HALAMAN MOTTO .......................................................................................... viii ABSTRAK ............................................................................................................. ix ABSTRACT ............................................................................................................ x KATA PENGANTAR ........................................................................................... xi DAFTAR ISI ........................................................................................................ xiii DAFTAR GAMBAR ........................................................................................... xvi DAFTAR TABEL ............................................................................................... xvii BAB I PENDAHULUAN ....................................................................................... 1 1.1. Latar Belakang ......................................................................................... 1 1.2. Rumusan Masalah .................................................................................... 3 1.3. Tujuan ....................................................................................................... 3 1.4. Batasan Masalah ....................................................................................... 3 1.5. Sistematika Penulisan ............................................................................... 4 BAB II LANDASAN TEORI ................................................................................. 6 2.1. Data Mining .............................................................................................. 6 2.2. Tahapan Data Mining ............................................................................... 7 2.3. Clustering ................................................................................................. 9 xiii PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2.4. Hierarchical Clustering ......................................................................... 11 2.5. Definisi Metode Divisive ........................................................................ 13 2.6. Algoritma Metode Divisive .................................................................... 13 2.7. Uji Akurasi Data ..................................................................................... 19 BAB III METODOLOGI PENELITIAN.............................................................. 21 3.1. Sumber data ............................................................................................ 21 3.2. Teknik Analisis Data .............................................................................. 21 BAB IV ANALISIS DAN PERANCANGAN SISTEM ...................................... 29 4.1. Identifikasi Sistem .................................................................................. 29 4.1.1. Diagram Use Case........................................................................... 29 4.1.2. Narasi Use Case .............................................................................. 29 4.2. Perancangan Umum Sistem.................................................................... 29 4.2.1. Masukan Sistem .............................................................................. 29 4.2.2. Proses Sistem .................................................................................. 30 4.2.3. Output Sistem .................................................................................. 30 4.3. Perancangan Sistem ................................................................................ 30 4.3.1. Diagram Aktivitas ........................................................................... 30 4.3.2. Diagram kelas Analisis ................................................................... 31 4.3.3. Diagram Sequence ........................................................................... 32 4.3.4. Diagram Kelas Desain..................................................................... 33 4.3.5. Rincian Algoritma Setiap Method pada Tiap Kelas ........................ 33 4.4. Perancangan Stuktur Data ...................................................................... 33 4.4.1. 4.5. Matriks Dua Dimensi ...................................................................... 34 Perancangan Antar Muka ....................................................................... 35 4.5.1. Tampilan Halaman Utama .............................................................. 35 BAB V MPLEMENTASI DAN ANALISIS HASIL ........................................... 40 5.1. Implementasi .......................................................................................... 40 5.1.1. Pengolahan Data.............................................................................. 40 5.1.2. Implementasi Antarmuka ................................................................ 46 xiv PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5.1.3. Impelentasi Kelas ............................................................................ 53 5.1.4. Implementasi Struktur Data ............................................................ 54 5.2. Analisis Hasil ......................................................................................... 58 BAB VI PENGUJIAN SISTEM ........................................................................... 67 6.1. Rencana Pengujian ................................................................................. 67 6.1.1. Hasil Pengujian Black-box .............................................................. 68 6.1.2. Kesimpulan Hasil Pengujian Black-box .......................................... 71 6.2. Kelebihan dan Kekurangan Sistem ........................................................ 71 6.2.1. Kelebihan Sistem ............................................................................ 71 6.2.2. Kekurangan Sistem ......................................................................... 71 BAB VII PENUTUP ............................................................................................. 73 7.1. Kesimpulan ............................................................................................. 73 7.2. Saran ....................................................................................................... 74 DAFTAR PUSTAKA ........................................................................................... 75 LAMPIRAN 1 ....................................................................................................... 76 LAMPIRAN 2 ....................................................................................................... 77 LAMPIRAN 3 ....................................................................................................... 82 LAMPIRAN 4 ....................................................................................................... 86 LAMPIRAN 5 ....................................................................................................... 89 LAMPIRAN 6 ....................................................................................................... 95 LAMPIRAN 7 ..................................................................................................... 125 LAMPIRAN 8 ..................................................................................................... 126 xv PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI DAFTAR GAMBAR Gambar 2.1. Data Mining Sebagai Tahapan Dalam Proses KDD .......................... 8 Gambar 2.2. Gambar Ilustrasi Algoritma Divisive ............................................... 18 Gambar 3.1. Block diagram proses program ........................................................ 21 Gambar 3.2. Jtree pembentukan Cluster ............................................................... 27 Gambar 4.1. Diagram kelas anaisis system ........................................................... 31 Gambar 4.2. Diagram kelas desain sistem ............................................................ 33 Gambar 4.3. Desain interface Halaman Utama tab Range Harga ......................... 35 Gambar 4.4. Desain interface Tab Range Harga................................................... 36 Gambar 4.5. Desain interface Halaman Utama Tab Preprosesing ........................ 38 Gambar 4.6. Desain interface Halaman Utama Tab Custering ............................. 39 Gambar 5.1. Contoh Sampel data transaksi .......................................................... 43 Gambar 5.2. Grafik SSE pembentukan Cluster .................................................... 46 Gambar 5.3. Implementasi Halaman Utama Sistem Tab Range harga ................. 47 Gambar 5.4. Implementasi Halaman Tentang....................................................... 48 Gambar 5.5. Implementasi Halaman Manual Sistem ........................................... 48 Gambar 5.6. Implementasi Input Range Harga..................................................... 49 Gambar 5.7. Implementasi Input Data .................................................................. 50 Gambar 5.8. Implementasi Informasi Tabel Data Preprocessing ......................... 51 Gambar 5.9. Implementasi Hasil Divisive Clustering dan Akurasi ...................... 52 Gambar 5.10. Analisis – Grafik Hasil SSE ........................................................... 59 Gambar 5.11. Karakter cluster .............................................................................. 63 Gambar 5.12. Data Baru........................................................................................ 65 Gambar 5.13. Hasil Cluster Ulang ........................................................................ 66 xvi PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI DAFTAR TABEL Tabel 3.1. Data contoh perhitungan jarak ............................................................. 22 Tabel 3.2. Hasil euclidean distance .................................................................... 23 Tabel 3.3. Matrik jarak tahap 2 ............................................................................. 24 Tabel 3.4. Matrik jarak tahap 3 ............................................................................. 25 Tabel 3.5. Matrik jarak tahap 4 ............................................................................. 26 Tabel 3.6. Contoh pembentukan 3 cluster oleh sistem ......................................... 28 Tabel 4.1 Tabel penjelasan diagram kelas analisis ............................................... 31 Tabel 4.2. Contoh Matriks Dua Dimensi .............................................................. 34 Tabel 4.3. Contoh represntasi matriks dua dimensi .............................................. 34 Tabel 5.1. Atribut dalam tabel detail penjualan .................................................... 40 Tabel 5.2 Atribut hasil seleksi............................................................................... 42 Tabel 5.3. Hasil preprocessing data ...................................................................... 44 Tabel 5.4. Implementasi Kelas .............................................................................. 53 Tabel 5.5. Hasil Perhitungan Nilai SSE ................................................................ 59 Tabel 5.6. Hasil Clustering Divisive untuk 159 data ............................................ 59 Tabel 5.7 Nilai rata-rata variabel quantity pada percobaan ke-7 .......................... 61 Tabel 5.8. Hasil Clustering Divisive untuk penambahan data baru ...................... 65 Tabel 6.1. Rencana pengujian Blackbox ............................................................... 67 Tabel 6.2. Tabel Pengujian input range harga....................................................... 68 Tabel 6.3. Tabel Pengujian input Data .................................................................. 69 Tabel 6.4. Tabel Pengujian Clustering .................................................................. 70 xvii PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BAB I PENDAHULUAN BAB I PENDAHULUAN 1.1. Latar Belakang Seiring perkembangan jaman yang semakin maju, peranan teknologi informasi dalam dunia bisnis masa kini mengalami perkembangan yang sangat pesat dimana perkembangannya tidak dapat dihindari. Dampak dari perkembangan tersebut juga memiliki pengaruh lain terhadap dunia bisnis seperti peningkatan efektifitas dan efisiensi kerja, peningkatan marketing melalui digital marketing, atau peningkatan potensi bisnis untuk menjangkau berbagai macam permintaan konsumen. Hal tersebut memicu persaingan antar perusahaan yang lain oleh karena itu para pelakunya harus senantiasa memikirkan cara-cara untuk terus bertahan dan jika mungkin mengembangkan sekala bisnis mereka. Perusahaan XYZ merupakan salah satu perusahaan yang bergerak di bidang distribusi helm. Permintaan akan produk yang ada merupakan bagian yang sangat penting dalam rantai penyediaan produk. Masalah yang muncul dari keadaan di atas adalah ketidaksiapan produsen dalam memenuhi jumlah setiap permintaan pasar karena permintaan dapat terjadi secara tiba-tiba atau di luar kendali perusahaan. Mengatasi hal tersebut pihak produsen diharapkan harus dapat terus meningkatkan keuntungan, salah satu caranya dengan menyediakan produk helm sesuai dengan permintaan pasar agar tidak terjadi kekurangan atau kelebihan produk. Sehingga diperlukan sistem yang mampu memprediksi 1 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI ketersedian jumlah helm yang akan dipasarkan sesuai dengan permintaan agar kegiatan penjualan dapat berjalan secara optimal. Dengan mengimplementasikan data mining menggunakan metode clustering merupakan cara yang efektif dalam melakukan peramalan, karena metode ini akan mengelompokan barang penjualan kedalam beberapa klaster yang terpisah sesuai dengan jumlah transaksi yang lakukan. Dari masing-masing klaster yang terbentuk akan kelihatan barang mana saja yang memiliki tingkat pembelian yang tinggi ataupun rendah. Dari data tersebut akan didapatkan data yang valid tentang trend pembelian atau pola konsumsi konsumen. Pembahasan dalam tugas akhir ini dititikberatkan hanya pada metode divisive. Metode divisive merupakan kebalikan dari metode agglomeratif dalam analisis klaster. Metode divisive clustering termasuk dalam analisis klaster hierarchical. Pada setiap langkahnya, metode divisive terjadi penambahan kelompok kedalam nilai dua nilai terkecil, sampai akhirnya semua elemen terkelompokkan. Alasan mengapa menggunakan metode divisive untuk pengelompokan penjualan karena tidak hanya menghasilkan jumlah cluster sebanyak inputan cluster tetapi metode ini juga dapat menghasilkan jumlah cluster dengan jumlah maksismal sama dengan jumlah sampel atau sesuai kebutuhan. Dengan kata lain jika jumlah cluster lebih banyak berarti memberikan banyak pilihan bagi produsen untuk mentukan strategi pasar berikutnya. 2 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 1.2. Rumusan Masalah Dari latar belakang diatas dapat dirumuskan masalah dari penelitian ini antara lain: 1. Bagaimanakah langkah-langkah penerapan metode divisive dalam pembentukan klaster pada data penjualan produk helm di PT. XYZ? 1.3. Tujuan Tujuan dari penelitian ini adalah melakukan analisis terhadap data penjualan untuk mengetahui prediksi pendistribusian produk helm di perusahaan XYZ dengan bantuan data mining menggunakan algoritma divisive. 1.4. Batasan Masalah Adapun batasan masalah dalam penelitian ini adalah sebagai berikut : 1. Data penjualan yang digunakan dalam proses data mining adalah tahun 2014. 2. Data yang digunakan sebagai atribut adalah data penjualan, yaitu berdasarkan kelompok harga, harga jual, quantity, nama barang (merk, tipe, dan warna), wilayah dari produk tersebut. 3. Berdasarkan input data penjualan produk helm di perusahaan XYZ tahun 2014, output yang dihasilkan program ini adalah berupa klaster produk penjualan. 4. Pengguna sistem adalah bagian pemasaran produk helm di perusahaan XYZ. 3 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 1.5. Sistematika Penulisan BAB I PENDAHULUAN Pada bab ini berisi gambaran umum penelitian meliputi: latar belakang masalah, batasan masalah, tujuan tugas akhir, rumusan masalah, dan sistematika penulisan. BAB II LANDASAN TEORI Pada bab ini berisi mengenai penjelasan dan uraian singkat mengenai teori-teori yang berkaitan dengan topik dari tugas akhir ini. BAB III METODOLOGI PENELITIAN Pada bab ini akan dijelaskan mengenai metode yang digunakan dalam penelitian ini. BAB IV ANALISIS DAN PERANCANGAN Pada bab ini berisi tentang analisis dan perancangan sistem yang akan dibuat meliputi gambaran umum sistem, data yang dibutuhkan untuk penelitian, percancangan struktur data, dan perancangan antar muka. BAB V IMPLEMENTASI DAN ANALISIS HASIL Bab ini menjelaskan mengenai implementasi dari analisis yang telah dibuat pada tahap sebelumnya. 4 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BAB VI PENGUJIAN SISTEM Pada bab ini menjelaskan mengenai pengujian terhadap sistem yang telah dibuat dan evaluasi sistem tersebut. BAB VII PENUTUP Bab ini berisi tentang kesimpulan dari penelitian yang telah dilakukan dan saran dari sistem yang nantinya akan dikembangkan. DAFTAR PUSTAKA LAMPIRAN 5 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BAB II LANDASAN TEORI BAB II LANDASAN TEORI Pada bab ini akan menjelaskan landasan teori yang digunakan dalam penelitian ini. Agar sebuah penelitian dapat berhasil maka diperlukan refrensi sebagai landasan teorinya. Landasan teori tersebut berisi tentang pengertian data mining, tahapan data mining atau tahapan dalam proses Knowledge Discovery In Databases, hierarchical clustering sebagai algorima yang digunakan untuk pengelompokan obyek data dari variabel yang telah dipilih dan bagian terakhir dalam bab ini akan dipaparkan tentang uji akurasi data. 2.1. Data Mining Data mining adalah serangkaian proses untuk menggali nilai tambah berupa pengetahuan yang selama ini tidak diketahui secara manual. Data mining adalah proses yang menggunakan teknik statistik, perhitungan, kecerdasan buatan dan machine learning untuk mengekstrasi dan mengidentifikasi informasi yang bermanfaat dan pengetahuan yang terkait dari berbagai basis data besar (Hanif, 2007). Data mining sering juga disebut knowledge discovery in database (KDD), adalah kegiatan yang meliputi pengumpulan, pemakaian data historis untuk menemukan keteraturan, pola atau hubungan dalam set data berukuran besar. Keluaran dari data mining ini bisa dipakai untuk memperbaiki pengambilan keputusan di masa depan (Santosa, 2007). Data mining adalah kegiatan 6 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI menemukan pola yang menarik dari data dalam jumlah besar, data dapat disimpan dalam database, data warehouse, atau penyimpanan informasi lainnya. Berdasarkan beberapa pengertian tersebut dapat ditarik kesimpulan bahwa data mining adalah suatu teknik menggali informasi berharga yang terpendam atau tersembunyi pada suatu database yang sangat besar sehingga ditemukan suatu pola yang menarik yang sebelumnya tidak diketahui. Beberapa metode yang sering disebut-sebut dalam literatur data mining antara lain clustering, classification, association rules mining, neural network, genetic algorithm dan lain-lain (Pramudiono, 2006). Data mining sering digunakan untuk membangun model prediksi/inferensi yang bertujuan untuk memprediksi tren masa depan atau perilaku berdasarkan analisis data terstruktur. 2.2. Tahapan Data Mining Data tidak dapat langsung diolah dengan menggunakan sistem data mining. Data tersebut harus dipersiapkan terlebih dahulu agar hasil yang diperoleh dapat lebih maksimal. Dan tahapan dalam proses Knowledge Discovery In Databases (KDD) dapat dilihat pada Gambar 2.1 terdiri dari tahapan-tahapan sebagai berikut (J. Han & Kamber, 2006): 7 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Gambar 1 Gambar 2.1. Data Mining Sebagai Tahapan Dalam Proses KDD (Sumber : J. Han & Kamber 2006) 1. Cleaning and Integration Langkah pertama adalah dengan melakukan pembersihan terhadap data dan penggabungan data. Proses data cleaning bertujuan untuk menghilangkan noise dan data yang tidak konsisten dan proses data integration bertujuan untuk menggabungkan sumber data dari berbagai tempat menjadi satu penyimpanan. 8 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2. Selection and Transformation Pada tahap selection dan transformation, data dan atribut yang akan digunakan diambil dari database untuk dianalisis. Selanjutnya data tersebut diubah menjadi bentuk yang tepat untuk di-mining. 3. Data Mining Data mining adalah proses mencari pola atau informasi menarik dalam data terpilih dengan menggunakan teknik atau metode tertentu. Teknik, metode atau algoritma dalam data mining sangat bervariasi. Pemilihan metode atau algoritma yang tepat sangat bergantung pada tujuan dan proses KDD secara keseluruhan 4. Evaluation and Presentation Pada tahap ini, dilakukan identifikasi menarik dari hasil pola-pola yang benar-benar data mining. Setelah didapatkan pola yang dihasilkan dari proses data mining perlu divisualisasikan atau ditampilkan dalam bentuk yang mudah dimengerti oleh pihak yang berkepentingan. 2.3. Clustering Clustering atau klasterisasi adalah suatu alat bantu pada data mining yang bertujuan untuk mengelompokan obyek-obyek ke dalam klaster-klaster. Klaster adalah sekelompok atau sekumpulan obyek-obyek data yang similar satu sama lain dalam kalaster yang sama dan dissimiliar terhadap obyek-obyek yang berbeda klaster. Obyek akan dikelompokan ke dalam satu atau lebih klaster sehingga obyek-obyek yang berbeda dalam satu klaster akan mempunyai kesamaan yang tinggi antara satu dengan yang lainya. Obyek-obyek dikelompokan berdasarkan 9 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI prinsip memaksimalkan kesamaan obyek pada klaster yang sama dan meminimalkan ketidaksamaan pada klaster yang berbeda. Kesamaan obyek bisanya diperoleh dari nilai-nilai atribut yang menjelaskan obyek data, sedangkan obyek-obyek data biasanya direpresentasikan sebagai sebuah titik dalam ruang multidimensi. Dengan menggunakan klasterisasi, metode ini dapat mengidentifikasi daerah yang padat, menemukan pola-pola distribusi secara keseluruhan, dan menemukan keterkaitan yang menarik antar atribut-atribut data. Dalam data mining, usaha difokuskan pada metode-metode penemuan untuk klaster pada basisdata berukuran besar secara efektif dan efesien. Kebutuhan klasterisasi dalam data mining meliputi skalabilitas, kemampuan untuk menangani tipe atribut yang berbeda, mampu menagani dimensionalitas yang tinggi, menangani data yang mempunyai noise, dan dapat diterjemahkan dengan mudah. Secara garis besar, terdapat beberapa metode klasterisasi data. Pemilihan metode klasterisasi tergantung pada tipe data dan tujuan klasterisasi itu sendiri. Metode-metode berserta algoritmanya termasuk didalamnya meliputi: 1. Partitioning Method : Membuat berbagai partisi dan kemudian mengevaluasi partidi tersebut dengan beberapa kriteria. Yang termasik ke dalam metode ini meliputi algoritma K-Means, K-Medoid, PROCLUS, CLARA, CLARANS, dana PAM 2. Hierarchical Method : Membuat suatu penguraian secara hierarikal dari himpunan data dengan menggunakan beberapa kriteria. Metode ini terdiri 10 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI atas dua macam, yaitu Agglomerative yang menggunakan stratedi bottomup dan Divisive yang menggunakan strategi top-down. Metode ini meliputi algoritma BIRCH, AGNES, DIANA, CURE, dan CHAMALEON. 3. Density-based Method : Metode ini berdasarkan konektivitas dan fungsi densitas. Metode ini meliputi algoritma DBSCAN, OPTICS, dan DENCLU. 4. Grid-base Method : Metode ini berdasarkan suatu struktur granularitas multi-level. Metode klasterisasi ini meliputi algoritma STING, WaveCluster, dan CLIQUE. 5. Model-base Method : Suatu model dihipotesiskan untuk masing-masing klaster dan ide untuk mencari best fit dari model tersebut untuk masingmasing yang lain. Metode klasterisasi ini meliputi pendekatan statistic, yaitu algoritma COBWEB dan jaringan syaraf tiruan, yaitu SOM. 2.4. Hierarchical Clustering Metode hierarchical clustering mengelmpokan objek kedalam sebuah pohon klaster. Hierarchical clustering dapat diklasifikasikan sebagai agglomerative atau divisive, tergantung pada komposisi hirarki yang di tampilkan dalam pendekatan bottom-up atau top down (split). (Han & Kamber, 2006). Pada umumya terdapat dua metode hierarchical clustering: 1. Agglomerative, metode ini dimulai dari menempatkan objek ke dalam satu cluster dan selanjutnya digabungkan ke dalam cluster yang lebih besar 11 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI hingga sebua objek terhubung dalam satu buah cluster atau hingga mencapai jumlah cluster yang diinginkan. 2. Divisive, kebalikan dari metode agglomerative. Metode ini dimulai dari satu cluster dengan seluruh objek data di dalamnya, selanjutnya cluster tersebut dipecah kedalam cluster yang lebih kecil hingga setiap cluster memiliki dua atau satu buah objek atau hingga mencapai jumlah cluster yang diinginkan. Sebelum pembentukan sebuah cluster perlu dihitung jarak kemiripan antara obyek data. Ada beberapa cara untuk mengetahui kemiripan data. Satu di antara cara yang ada adalah similarity matrix dengan perhitungan euclidean distance. Euclidean distance didefinisikan sebagai berikut: ( ) √(| | | | | | | | ) (2.1) Atau dapat disingkat dengan: ( ) √∑ Keterangan: adalah jumlah atribut atau dimensi dan adalah data 12 ( ) (2.2) PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2.5. Definisi Metode Divisive Teknik divisive clustering termasuk kedalam analisis hierarchical clustering. Pada setiap langkahnya, metode divisive terjadi penambahan kelompok kedalam dua nilai terkecil. Sampai akhirnya semua element terkelompokan. Teknik divisive merupakan proses pengklasteran yang didasarkan pada persamaan nilai rata-rata antar objek. Jika sebuah objek memiliki persamaan nilai rata-rata terbesar maka objek tersebut akan terpisah dan berubah menjadi splinter group. Pada teknik divisive ini perhitungan juga di lihat dari perbedaan atau selisih anatara persamaan nilai rata-rata dengan nilai elemen matrik yang telah menjadi splinter group. Jika selisih nilai antara persamaan nilai rata-rata dengan nilai elemen matrik splinter group bernilai negatif, maka perhitungan terhenti sehingga harus dibuat matrik baru untuk mendapatkan klaster yang lain. Perhitungan ini terus dilakukan sedemikian sehingga semua objek terpisah. 2.6. Algoritma Metode Divisive Misalkan diberikan data X matriks berukuran n x p (n = jumlah sampel data, p = variabel setiap data). Xij= data sampel ke-j (j = 1, 2, …, n) dan variabel ke-i (i = 1, 2, …, p). 1. Bentuk suatu matriks jarak dengan menggunakan jarak euclidean. Rumusnya berikut : √∑ ( 13 ) (2.3) PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Asumsikan setiap data dianggap sebagai klaster. Jika diberikan n data dan c klaster maka n = c, maka diperoleh matriks jaraknya, yaitu: ( ) (2.4) [ ] 2. Hitung nilai rata-rata setiap obyek dengan obyek lainnya 3. Tentukan objek yang memiliki nilai rata-rata yang terbesar, objek yang memiliki nilai rata-rata yang terbesar akan dipisah dan berubah menjadi splinter group. 4. Hitung selisih nilai antara elemen matriks splinter group dengan nilai rata-rata setiap objek yang tersisa. 5. Tentukan objek yang memiliki nilai selisih terbesar antara elemen matriks splinter group dengan nilai rata-rata. Jika nilai selisih tersebut bernilai positif, maka objek yang memiliki nilai selisih terbesar bergabung dengan splinter group. 6. Ulangi langkah satu sampai lima sedemikian sehingga semua nilai selisih antara nelemen matriks splinter group dengan nilai rata-rata bernilai negatif dan klaster terbagi menjadi dua klaster baru. 14 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI CONTOH ALGORITMA DIVISIVE : Untuk memperjelas metode tersebut dapat diperhatikan contoh berikut. Diketahui distance matriks D dengan 5 sample a, b, c, d, e seperti dibawah ini. [ ] Data yang terdapat dalam matrik memiliki nilai yang berbeda antara objek a, b, c, d, dan e. Dari matrik diatas kemudian akan dihitung nilai rata-rata setiap obyek dengan obyek lainnya seperti dalam Tabel 2.1: Tabel 2.1 Average dissimilarity to the other objects tahap 1 Objects Average dissimilarity to the other objects a (2+6+10+9)/4=6.75 b (2+5+9+8)/4=6.00 c (6+5+4+5)/4=5.00 d (10+9+4+3)/4=6.50 e (9+8+5+3)/4=6.25 Dari tabel 2.1 objek a disebut splinter group. Sampai pada langkah ini menghasilkan dua grup yaitu grup {a} dan grup {b,c,d,e}, tetapi perhitungan tidak berhenti sampai disini. Untuk setiap objek dari group yang besar harus di hitung average dissimilarity dengan objek yang tersisa, dan membandingkan itu dengan average dissimilarity dengan objek dari splinter group. Pada Tabel 2.2 15 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI menghitung selisih dari nilai rata-rata obyek yang tersisa dengan nilai rata-rata dari splinter group: Tabel 2.2 Difference tahap 1 Average dissimilarity Average dissimilarity to to the other objects objects of splinter group b (5.0+9.0+8.0)/3 = 7.33 2.00 5.33 c (5.0+4.0+5.0)/3 = 4.67 6.00 -1.33 d (9.0+4.0+3.0)/3 = 5.33 10.00 -4.67 e (8.0+5.0+3.0)/3 = 5.33 9.00 -3.67 Objects Difference Hasil perhitungan nilai selisih dalam Tabel 2.2 terlihat bahwa perbedaan terbesar terdapat pada objek b. Oleh sebab itu, objek b berpindah bagian menjadi splinter group. Jadi, splinter group yang satu {a,b} dan group sisanya {c,d,e}. Pada Tabel 2.3 dilakukan perhitungan ulang masing-masing group dengan obyek yang ada dan tersisa didalamnya, maka didapat: Tabel 2.3 Difference tahap 2 Average dissimilarity Average dissimilarity to to the other objects objects of splinter group c (5.0+4.0)/2 = 4.50 (5.0+3.0)/2 = 4.00 -1.00 d (4.0+3.0)/2 = 3.50 (10.0+9.0)/2 = 9.50 -6.00 e (5.0+3.0)/2 = 4.00 (9.0+8.0)/2 = 8.50 -6.00 Objects Difference Pada Tabel 2.3 terlihat, untuk semua difference bernilai negatif. Oleh sebab itu tidak terjadi perpindahan. Proses dihentikan dan langkah divisive pertama selesai. Dimana data dibagi dalam dua klaster, yaitu {a,b}, dan {c,d,e}. 16 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Dalam langkah berikutnya akan dilakukan pembagian klaster. Pembagian klaster dilakukan pada klaster yang memiliki rata-rata terbesar. Rata-rata dari klaster {a,b} adalah 2, dan untuk klaster {c,d,e} adalah 5. Oleh sebab itu, akan terjadi pembagian klaster {c,d,e}, dengan matrik sebagai berikut : [ ] Tabel 2.4 Average dissimilarity to the other objects tahap 2 Objects Average dissimilarity to the other objects c (4.0+5.0)/2 = 4.50 d (4.0+3.0)/2 = 3.50 e (5.0+3.0)/2 = 4.00 Pada Tabel 2.4 adalah hasil perhitungan nilai rata-rata dengan objek yang tersisa. Ternyata objek c yang memiliki nilai positif terbesar, maka objek c masuk dalam splinter group. Jadi, terdapat dua grup yaitu {c} dan {d,e}, selanjutnya akan dihitung nilai selisih dari nilai rata-rata obyek yang tersisa dengan nilai ratarata dari splinter group seperti dalam Tabel 2.5: Tabel 2.5 Difference tahap 3 Average dissimilarity Average dissimilarity to to the other objects objects of splinter group d 3.0 4.00 -1.00 e 3.0 5.00 -2.00 Objects 17 Difference PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Dari Tabel 2.5 memperlihatkan proses pembentukan dihentikan karena semua difference bernilai negatif. Karena itu, pembagian pada langkah dua {c,d,e} adalah {c} dan {d,e}. Jadi, klaster yang didapat {a,b}, {c}, dan {d,e}. klaster {c} disebut singleton karena hanya mengandung satu objek. Hasil dari hierarikal digambarkan seperti pada Gambar 2.2 : a a,b a,b,c,d,e b c,d,e c d,e Gambar 2 Gambar 2.2. Gambar Ilustrasi Algoritma Divisive 18 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2.7. Uji Akurasi Data Setelah didapatkan hasil olahan dengan divisive perlu diuji akurasinya supaya diketahui validitas data tersebut. Ada beberapa teknik untuk uji akurasi data tersebut. Karena metode yang digunakan adalah metode clustering maka dapat digunakan dua jenis akurasi, yaitu Internal Evaluation dan External Evaluation (Prasetyo, 2014). 1. Internal Evaluation Internal Evaluation merupakan pengujian data cluster demi validitasnya tanpa informasi dari luar. Validasi ini contohnya adalah cohesion, separation, silhouette coefficient, dan sum of square error(SSE). 2. External Evaluation Dengan menggunakan external evaluation akan diketahui kedekatan antara label cluster terbentuk dengan class yang disediakan. External evaluation ini dapat dilakukan dengan confusion matrix, entropy, dan purity. Pada penelitian ini yang akan digunakan untuk uji akurasi adalah internal evaluation, secara khusus dengan menggunkan teknik sum of square error (SEE). Pada setiap pembentukan cluster akan dihitung nilai SSE-nya. Semakin kecil nilai SSE menunjuakan bahwa cluster yang dibentuk semakin baik pula. Berukut formula SSE yang akan digunakan (Lior Rokach): ∑ ∑ ‖ 19 ‖ (2.5) PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Keterangan adalah jarak data x di indeks i adalah rata-rata semua jarak data di cluster k Berikut adalah algoritma SSE: 1. Tentukan matriks K yang akan dihitung menggunakan SSE adalah data set dari cluster k Cluster k adalah anggota dari matriks K 2. Jika k=1 3. Hitung rata-rata cluster k ( )…a 4. Lakukan langkah 5 dan 7 untuk setiap data x 5. Kurangkan a dengan data x di indek i (‖ 6. Hitung …c 7. c dijumlahkan untuk setiap cluster k … d 8. Jumlahkan total d di matriks K 9. Selesai 20 ‖) … b PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BAB III METODOLOGI PENELITIAN BAB III METODOLOGI PENELITIAN Berdasarkan pada landasan teori yang telah disampaikan pada bab kedua. Pada bab ini akan dibahas mengenai metodologi yang digunakan dalam penelitian ini. Bab ketiga ini akan dipaparkan tentang sumber data yang diperoleh dan teknik analisis data. 3.1. Sumber data Data yang digunakan adalah data penjualan tahun 2014 pada perusahaan XYZ. Data yang digunakan merupakan hasil eksport dari database perusahaan berjenis file csv. Total data transaksi penjualan bejumlah 933 record. 3.2. Teknik Analisis Data Data yang telah diperoleh selanjutnya mulai dianalisis. Berkaitan dengan tahap-tahap teknik analisis dan jalannya program digambarkan dengan block diagram sebagai berikut Data Preprocessing Perhitungan Jarak Divisive Output Jtree Akurasi Gambar 3 Gambar 3.1. Block diagram proses program 1. Data Data yang digunakan dalam penelitian ini adalah data yang diperoleh dari perusahaan XYZ. Data ini merupakan data transaksi penjualan produk helm. Data penjualan ini bersifat penting karena mengandung informasi penjualan secara 21 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI detail. Data yag digunakan adalah data penjualan tahun 2014 selama kurun waktu satu tahun. 2. Preprocessing Data yang sudah didapat selanjutnya diolah dengan tahap preprocessing. Pada tahap ini akan dilakukan data cleaning, data integration, data selection, dan data transformation. 3. Perhitungan Jarak Setalah melalui tahap preprocessing, tahap selanjutnya adalah mengukur jarak setiap data. Perhitungan jarak menggunakan euclidean distance, seperti yang telah dipaparkan pada bab kedua dalam penelitina ini. Dengan menggunakan perhitungan euclidean distance akan didapatkan jarak antar obyek data dalam sebuah matriks. Matriks tersebut nantinya akan digunakan untuk tahap selanjutnya, yaitu clustering menggunakan metode divisive. Tabel 3.1 adalah contoh data yang akan digunakan untuk perhitungan euclidean distance: Tabel 1 Tabel 3.1. Data contoh perhitungan jarak Data x y a 87.0 89.0 b 84.0 76.0 c 83.0 70.0 d 80.0 74.0 e 82.0 83.0 f 81.0 92.0 22 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Dengan menggunakan rumus perhitungan euclidean distance, didapatkan matriks jarak seperti pada Tabel 3.2: Tabel 2 Tabel 3.2. Hasil euclidean distance a b c d e f a 0.0 13.342 19.417 16.553 7.811 6.709 b 13.342 0.0 6.083 4.473 7.281 16.279 c 19.417 6.083 0.0 5.0 13.039 22.091 d 16.553 4.473 5.0 0.0 9.22 18.028 e 7.811 7.281 13.039 9.22 0.0 9.056 f 6.709 16.279 22.091 18.028 9.056 0.0 4. Divisive Dalam tahap ini hasil dari matriks jarak akan digunakan untuk pembentukan cluster. Masing-masing obyek data akan dikelompokan berdsarkan jarak kemiripannya. Proses pengelompokan menggunakan perhitungan divisive. Langkah-langkah perhitungannya seperti yang dapat dilihat dalam bab kedua dalam penelitian ini. Berikut ini penerapan algoritma divisive: Tahap 1 Langkah pertama: Dari matriks jarak pada Tabel 3.2 asumsikan setiap data dianggap sebagai klaster. Langkah kedua : Hitung nilai rata-rata setiap objek dengan objek lainnya. Rata-rata objek a = 10.63866667 Rata-rata objek b = 7.909666667 Rata-rata objek c = 10.93833333 Rata-rata objek d = 8.879 23 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Rata-rata objek e = 7.7345 Rata-rata objek f = 12.02716667 Langkah ketiga: Tentukan objek yang memiliki nilai rata-rata yang terbesar, objek yang memiliki nilai rata-rata yang terbesar akan terpisah dan berubah menjadi splinter group. Diperoleh objek f memiliki rata-rata terbesar, maka objek f keluar dan menjadi splinter group. Tahap 2 Diperoleh matrik jarak yang baru, seperti pada Tabel 3.3: Tabel 3 Tabel 3.3. Matrik jarak tahap 1 a b c d e a 0.0 13.342 19.417 16.553 7.811 b 13.342 0.0 6.083 4.473 7.281 c 19.417 6.083 0.0 5.0 13.039 d 16.553 4.473 5.0 0.0 9.22 e 7.811 7.281 13.039 9.22 0.0 Ulangi langkah kedua : Dari matriks jarak yang baru, kemudian pilih rata-rata antar antar objek dengan objek lainnya. Rata-rata objek a = 11.4246 Rata-rata objek b = 6.2358 Rata-rata objek c = 8.7078 Rata-rata objek d = 7.0492 Rata-rata objek e = 7.4702 24 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Kemudian selisihkan setiap nilai rata-rata tersebut dengan elemen matrik splinter group. Rata-rata objek a = 11.4246 - 6.709 = 4.7156 Rata-rata objek b = 6.2358 - 16.279 = -10.0432 Rata-rata objek c = 8.7078 - 22.091 = -13.3832 Rata-rata objek d = 7.0492 - 18.028 = -10.9788 Rata-rata objek e = 7.4702 - 9.056 = -1.5858 Langkah ketiga : tentukan objek yang memiliki nilai selisih terbesar, objek yang memiliki nilai selisih terbesar akan terpisah dan bergabung dengan splinter group. Objek a memiliki nilai selisih terbesar, maka objek a bergabung dengan objek f ke dalam splinter group. Tahap 3 Diperoleh matrik jarak yang baru, , seperti pada Tabel 3.4: 4 Tabel 3.4. Matrik jarak tahap 3 b c d e b 0.0 6.083 4.473 7.281 c 6.083 0.0 5.0 13.039 d 4.473 5.0 0.0 9.22 e 7.281 13.039 9.22 0.0 Ulangi langkah kedua : Dari matriks jarak yang baru, kemudian pilih rata-rata antar antar objek dengan objek lainnya. Rata-rata objek b = 4.45925 Rata-rata objek c = 6.0305 25 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Rata-rata objek d = 4.67325 Rata-rata objek e = 7.385 Kemudian selisihkan setiap nilai rata-rata tersebut dengan elemen matrik splinter group. Rata-rata objek b = 4.45925 - 14.8105 = -10.35125 Rata-rata objek c = 6.0305 - 20.754 = -14.7235 Rata-rata objek d = 4.67325 - 17.2905 =-12.61725 Rata-rata objek e = 7.385 - 8.4335 = -1.0485 Karena semua nilai selisih bernilai negatif, maka algoritma kembali ke awal. Rata-rata objek terbesar pada matriks tersebut dimiliki oleh objek e, maka objek e keluar dan membentuk klaster baru. Tahap 4 Diperoleh matrik jarak yang baru, , seperti pada Tabel 3.5: 5 Tabel 3.5. Matrik jarak tahap 4 b c d b 0.0 6.083 4.473 c 6.083 0.0 5.0 d 4.473 5.0 0.0 Ulangi langkah kedua : Dari matriks jarak yang baru, kemudian pilih rata-rata antar antar objek dengan objek lainnya. Rata-rata objek b = 3.518666667 Rata-rata objek c = 3.694333333 26 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Rata-rata objek d = 3.157666667 Kemudian selisihkan setiap nilai rata-rata tersebut dengan elemen matrik splinter group. Rata-rata objek b = 3.518666667 - 7.281 = -3.762333333 Rata-rata objek c = 3.694333333 - 13.039 = -9.344666667 Rata-rata objek d = 3.157666667 - 9.22 = -6.062333333 Karena semua nilai selisih bernilai negatif, maka algoritma berhenti sampai disini. Maka objek b, c,dan d keluar dan membentuk klaster baru. Dengan mengimplementasikan algoritma divisive menggunakan java, data sampel yang digunakan pada Tabel 3.1 menghasilhan skruktur tree cluster seperti pada Gambar 3.2: Gambar 4 Gambar 3.2. Jtree pembentukan Cluster 27 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5. Cluster Proses Divisive menghasilkan jumlah cluster maksimum sesuai dengan proses iterasi pada algoritma divisive. Hasil pembentukan cluster ditampilkan pula kedalam struktur tree. Dari hasil Jtree tersubut juga dapat ditentukan cluster yang diinginkan seperti pada Tabel 3.6. Tabel 6 Tabel 3.6. Contoh pembentukan 3 cluster oleh sistem Cluster 1 Cluster 2 Cluster 3 a e c f b d 6. Perhitungan Akurasi Pada penelitian ini akan dilakukan uji akurasi pada setiap pembentukan cluster dan mengevaluasi pola yang ditemukan dari hasil pengelompokan. Sebelum sistem menyimpan cluster yang sudah terbentuk, masing-masing cluster akan di hitung menggunakan sum of square error (SSE). Setelah semua cluster terbentuk akan ditotal jumlah SSE-nya. Dengan demikian ada sejumlah percobaan pembentukan cluster yang akan dihitung SSE-nya. SSE dengan nilai terendah mengindikasikan bahwa cluster yang tebentuk adalah yang paling baik. Pada penelitian ini dilakukan 2 sampai 7 percobaan pembentukan cluster sesuai dengan jumlah obyek data, namun tidak menutup kemungkinan jika percobaan yang dilakukan bisa lebih atau kurang atau lebih dari 7. Hal ini tergantung jumlah obyek data dan kebutuhan yang ada. 28 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BAB IV ANALISIS DAN PERANCANGAN SISTEM BAB IV ANALISI S DAN P ERANCANGAN SI STEM Pada bab ini akan dijelaskan mengenai perancangan sistem yang akan diimplementasikan. Meliputi identifikasi sistem, perancangnan umum sistem, perancangan system, perancangan struktur data dan perancangan antar muka. 4.1. Identifikasi Sistem 4.1.1. Diagram Use Case Diagram use case adalah sebuah gambaran fungsi/pekerjaan yang dapat dilakukan oleh sistem tersebut. diagram use case yang digunakan dapat dilihat pada bagian lampiran 1 untuk melihat definisi use case tersebut. 4.1.2. Narasi Use Case Pada bagian ini setiap use case akan dirinci dalam sebuah narasi yang merupakan diskripsi tekstual dari kejadian bisnis dan bagaimana pengguna berinteraksi dengan sistem untuk menyelesaikan tugas tersebut. untuk mengetahui secara keseluruhan narasi use case dapat dilihat pada lampiran 2. 4.2. Perancangan Umum Sistem 4.2.1. Masukan Sistem Masukan yang digunakan dalam sistem ini berasal dari tabel database yang kemudian di ekspor kedalam file jenis *.csv file. Ketentuan eksport juga 29 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI perlu diperhatikan. Pilihan untuk menyertakan nama kolom harus dipilih, pemisah kolom mengunakan tanda koma, dan tidak boleh ada nilai null. 4.2.2. Proses Sistem Proses dari sistem yang menghasilkan cluster yang berfungsi untuk mempediksi ini terdiri dari beberapa langkah: a. Memasukan nilai range harga kelompok, kelompok 1 sampai dengan 5. b. Penginputan file data penjualan yang akan digunakan untuk proses data mining. c. Proses clustering untuk memprediksi dijalankan. d. Uji akurasi dari cluster yang telah berhasil dibentuk dan menganalisa hasil cluster. 4.2.3. Output Sistem Sistem yang akan dirancang ini akan menampilkan hasil proses clustering diantaranya, jumlah cluster yang terbentuk, anggota setiap cluster, dan struktur tree pembentukan cluster. 4.3. Perancangan Sistem 4.3.1. Diagram Aktivitas Diagram aktivitas berfungsi untuk menunjukan seluruh tahapan alur kerja dari sistem yang dirancang. 1. Diagram aktivitas input range harga 2. Diagram aktivitas input data file 30 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 3. Diagram Aktivitas clustering 4. Diagram Aktivitas Simpan Hasil Clustering Penjelasan dari masing-masing diagram aktivitas akan di jelaskan pada bagian lampiran 3 4.3.2. Diagram kelas Analisis HalamanUtama HalamanManual User HalamanTentang KoneksiDB ControlRangeHarga Divisive verteks DataObyek RangeHarga Gambar 5 Tabel 7 Gambar 4.1. Diagram kelas anaisis system Tabel 4.1 Tabel penjelasan diagram kelas analisis No Nama kelas Jenis Keterangan 1 Controller Kelas berisi query untuk menyimpan nilai range controlRangeHarga harga, mengupdate nilai range harga, menghapus dat range harga, dan menampilkan nilai range harga yang sudah ada dari database. 31 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2 KoneksiDB Controller Kelas ini digunakan untuk menghubungkan sistem dengan database yang di gunakan oleh sistem. 3 DataObyek Model Kelas ini digunakan untuk menyimpan hasil input data penjualan 4 Divisive Model Kelas ini di gunakan untuk membentuk sebuah matriks utama. Didalam kelas ini juga terdapat method-method untuk perhitungan divisive. 5 RangeHarga Model Kelas ini digunakan untuk menyimpan nilai range harga kelompok. 6 Verteks Model Kelas ini di gunakan untuk membentuk sebuah vertex dalam matriks. 7 HalamanBantuan View Kelas ini digunakan untuk menampilkan halaman manual yang berisis tentang petunjuk penggunaan sistem 8 HalamanTentang View Kelas ini digunakan untuk menampilkan informasi yang berkaitan dengan pembuatan sistem 9 HalamanUtama View Kelas ini digunakan untuk menampilkan fungsifungsi utama dari sistem. Mulai dari tahap input range harga, tahap preprocessing, dan tahap clustering divisive 4.3.3. Diagram Sequence Berikut merupakan diagram sequence yang digunakan pada sistem ini untuk lebih jelasnya terlampir pada bagian lampiran 4: 1. Diagram Sequence Input Nilai Range Harga 2. Diagram Sequence Input Data File 3. Diagram Sequence Proses Cluster 4. Diagram Sequence Simpan Hasil Cluster 32 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 4.3.4. Diagram Kelas Desain Diagram kelas desain digunakan untuk merujuk daftar setiap kelas yang nantinya akan digunakan dalam pembuatan sistem Penjelasan masing-masing kelas berserta dengan atribut dan method yang digunakan dijelasakan pada lampiran 5. <<view>> HalamanUtama 1 memanggil 1 <<view>> HalamanBantuan memanggil 1 <<view>> HalamanTentang memiliki 1 * <<entity>> RangeHarga 1 memiliki 1 * <<control>> controlRangeHarga memanggil 1 1 <<control>> KoneksiDB memanggil 1 memanggil 1 memanggil 1 <<entity>> Divisive 1 memiliki 1 * <<entity>> Verteks memanggil 1 * <<entity>> DataObyek Gambar 6 Gambar 4.2. Diagram kelas desain sistem 4.3.5. Rincian Algoritma Setiap Method pada Tiap Kelas Rincian algoritma setiap method pada tiap kelas ini akan dijelakan pada lampiran 6. 4.4. Perancangan Stuktur Data Stuktur data dalam pengembanganya memiliki peran penting untuk menyimpan dan mengorganisir sebagai media penyimpanan sehingga data 33 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI tersebut dapat digunakan secara efisien. Perancangan struktur data yang digunakan adalah matriks dua dimensi. 4.4.1. Matriks Dua Dimensi Matrik dua dimensi merupakan kumpulan elemen-elemen yang bertipe data sama dengan satu sama variabel, tetapi terdiri dari dua indeks. Untuk membayangkan matriks dua dimensi, dapat menggunakan istilah baris (x) dan kolom (y), seperti pada Tabel 4.2. Tabel 8 Tabel 4.2. Contoh Matriks Dua Dimensi 0 1 2 3 0 [0,0] [0,1] [0,2] [0,3] 1 [1,0] [1,1] [1,2] [1,3] 2 [2,0] [2,1] [22] [2,3] Matriks dua dimensi direpresintasikan kedalam memori secara berurutan. Dimulai perbaris dengan elemen pertama adalah data pada index [0,0]. Dari contoh matriks dua dimensi pada tabel 4.2 reprensentasinya di dalam memori yaitu [0,0] | [0,1] | [0,2] | [0,3] | [1,0] | [1,1] | [1,2] | [1,3] | [2,0] | [2,1] | [22] | [2,3]. Sebuah matriks dua dimensi dapat digunakan dalam berbagi keperluan. Misalkan data jumlah popusali warga dalam wilayah tertentu, atau warna pixel di layar. Selain itu, matiks dua dimensi juga dapat digunakan untuk menampilkan data multidimensi, contoh data jumlah mahasiswa lulus di suatu universitas, seprti pada Tabel 4.3. Tabel 9 Tabel 4.3. Contoh represntasi matriks dua dimensi Jurusan 2002 2003 34 2004 2005 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI TI 40 20 50 80 TM 60 55 70 4 TE 30 45 80 100 4.5. Perancangan Antar Muka 4.5.1. Tampilan Halaman Utama Pada Gambar 4.3 ini merupakan interface pertama saat masuk sistem. Dalam halaman ini, hanya terdapat 2 tombol menu yang bertuliskan „Keluar‟ dan “Bantuan‟. Tombol “Bantuan‟memiliki 2 menu items yaitu menu item „Tentang‟, dan „Manual‟. Menu „Keluar‟ untuk keluar dari sistem ini. Menu item Menu item „Tentang‟ digunakan untuk masuk ke dalam bagian informasi sistem dan menu item „Manual‟digunakan untuk masuk ke dalam bagian bantuan penggunaan sistem. Keluar Bantuan LOGO Range Harga SISTEM PREDIKSI PENJUALAN HELM MENGGUNAKAN ALGORITMA HIERARCHICAL DIVISIVE Preprosesing Kelompok harga Clustering Batas bawah Batas Atas Kelompok – 1 Kelompok – 2 Kelompok – 3 Kelompok – 4 Kelompok - 5 Reset Simpan Delete isi Gambar 7 Gambar 4.3. Desain interface Halaman Utama tab Range Harga 35 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Halaman Utama merupakan halaman yang akan menampilkan keseluruhan proses utama pada sistem. Pada halaman ini user dapat melakukan proses imput batas harga kelompok, proses penginputan data untuk kemudian dilakukan proses clustering-nya. 1. Input range harga Pada Gambar 4.4 ini adalah tab „Range Harga‟ tangberfungsi untuk menentukan batasan nilai kelompok harga. Pada tab ini pengguna harus mengisikan batas-batas nilai kelompok harga. Nantinya batas kelompok harga ini digunakan untuk menandai setiap obyek data. Untuk inputan batasan kelompok mempunyai aturan bahwa harga batas atas tidak boleh kurang dari batas bawah kelompok sebelumnya begitu pula sebaliknya. Sebagai contoh pada kelompok 1 batas bawah 0 dan batas atasnya 20000. Maka batas atas dan bawah kelompok 2 harus lebih atau sama dengan batas atas kelompok 1. Misal batas bawah 20000 dan batas atas 30000. Range Harga Preprosesing Kelompok harga Clustering Batas bawah Batas Atas Kelompok – 1 Kelompok – 2 Kelompok – 3 Kelompok – 4 Kelompok - 5 Reset Simpan Delete isi Gambar 8 Gambar 4.4. Desain interface Tab Range Harga 36 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2. Input data dan Informasi Tabel Data Pada tab kedua ’Preprosesing’ ini berfungsi untuk menginputkan data dan melakukan proses pembentukan cluster. Bagian input program yang diberi title input data terdapat tombol pilih file untuk menginputkan data file. File yang digunakan harus bertipe file *.csv. Setelah file dipilih sistem akan menampilkasn isi data secara utuh pada tabel data. Selain itu terdapat tombol Submit Data untuk melakukan proses trasformasi data dengan cara menyeleksi atribut yang diperlukan dalam proses clustering. Setelah tombol Submit Data di pilih hasil dari proses transformasi akan di tampilkan pada tabel trasformasi data yang di beri title trasnformasi data. Untuk memulai proses preprocessing, pengguna harus memilih tombol Preprocessing. Setelah itu hasil data dari proses preprocessing akan ditampilkan pada tabel data preprocessing. Untuk memulai proses pembentukan cluster, disediakn tombol proses. Gambar 4.5 adalah rancangan Input data dan Informasi Tabel Data. 37 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Range Harga Preprosesing Clustering Data Preprocessing Input data Pilih File Tabel data Tabel data preprocessing Submit Data Trasformasi data Tabel Transformasi data Jumlah Data Jumlah Data preprocessing Preprocessing Proses Batal Gambar 9 Gambar 4.5. Desain interface Halaman Utama Tab Preprosesing 3. Hasli Proses Clustring dan Akurasi Setelah tombol proses dipilih sistem akan menampilkan hasli pembentukan cluster dan hasil akurasi pada tab ketiga „Clustering‟ ke tabel -tabel yang ada. Pada tab ini terdapat tabel-tabel, antara lain tabel jumlah cluster dan tabel label anggota cluster. Untuk menyimpan hasil pengelompokan, maka disediakan tombol Simpan. Di halama ini menampilkan hasil visual dari proses pembentukan cluster melalui fungsi Jtree. 38 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Menu LOGO Range Harga SISTEM PREDIKSI PENJUALAN HELM MENGGUNAKAN ALGORITMA HIERARCHICAL DIVISIVE Preprosesing Clustering Tabel jumlah clsuter Tree Tabel Label anggota clsuter Waktu Pembantukan Cluster simpan Total SSE Gambar 10 Gambar 4.6. Desain interface Halaman Utama Tab Custering 39 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BAB V IMPLEMENTASI DAN ANALISIS HASIL BAB V MPLEMENTA SI DAN ANALI SI S HA SI L Pada bab ini akan dijelaskan mengenai implementasi sistem sesuai rancangan sistem yang telah dijelaskan pada bab sebelumya. Implementasi sistem ini menggunakan bahasa pemrograman Java dengan aplikasi pemrograman NetBeans 7.2 pada komputer dengan spesifikasi processor intel i5 2.3 GHz, memori 4GB, dan harddisk 1T. 5.1. Implementasi 5.1.1. Pengolahan Data Data yang diperoleh merupakan hasil eksport dari database perusahaan berjenis file csv. Total data transaksi penjualan bejumlah 933 record dengan 21 atribut. Data tersebut akan diproses melalui tahap preprocessing, clustering, dan akhirnya perhitungan akurasi secara internal (Internal evaluation) dalam clustering yang coba dibentuk. Pada Tabel 5.1 adalah atribut dari tabel data penualan. Tabel 10 Tabel 5.1. Atribut dalam tabel detail penjualan No Nama Atribut Keterangan 1 noFaktur Nomor nota transaksi penjualan 2 kodeBarang Kode dari masing-masing nama barang 3 namaBarang Nama dari produk helm 4 Satuan Jenis satuan barang 40 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5 Size Ukuran dari suatu produk helm 6 hargaJual Harga dari produk helm 7 Quantity Jumlah dari pembelian barang dalam suatu transaksi 8 disscount Potongan harga dari suatu produk helm 9 discountReal Potongan harga dari suatu produk helm 10 discount2 Potongan harga dari suatu produk helm 11 Total Total harga pembelian suatu produk helm setelah discount 12 Urut Nomer urut dari setiap nota transaksi 13 Hpp - 14 Hppdpp - 15 hargaSatuan Harga satuan suatu produk helm 16 sisaPesanan - 17 statusReturOrder Berisi status dari pengembalian pembelian 18 statusNoKedit Berisi statis dari nota kredit 19 noUrut Nomer urut setiap transaksi 20 kodeArea Berisi kode are pemasaran wilayah 21 kelompokHarga Berisi label range klompok harga 5.1.1.1 Preprocessing 1. Data Cleaning Proses pembersihan data ini akan menghapus record yang mengandung data-data yang tidak relevan, tidak konsisten, dan tidak digunakan pada penelitian. 41 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Pada record penjualan detai tercatat beberapa transaksi dengan nama barang „Helm Penjualan Lama‟, record data-data yang mengandung nama barang tersebut akan dihapus karena tidak diperlukan dalam penelitian ini. Setelah dilakukan pembersihan didapatkan 834 jumlah data yang diap untuk digunakan dalam penelitian ini. 2. Data Integration Setelah data penjualan melewati tahap data cleaning selanjutnya data di diurutkan mulai dari harga jual terendah sampai harga jual tertinggi. Kemudian di simpan dalam sebuah file tipe *.csv. kode barang menjadi identitas setiap sempel obyek data. 3. Data Selection Pada tahap ini dilakukan penyeleksian terhadap data-data yang akan digunakan selama proses penelitian ini. Pada data penjualan detail terdapat 21 atribut yaitu noFaktur, kodeBarang, namaBarang, satuan, size, hargaJual, quantity, discount, discountReal, discount2, total, urut, Hpp, hppdpp, hargasatuan, sisapesan, statusReturOrder, statusNotaKredit, nourut, kodeCanvaser, KelompokHarga. Bebrapa atribut data yang diseleksi adalah noFaktur, satuan, size, discount, discountReal, discount2, urut, Hpp, hppdpp, hargasatuan, sisapesan, statusReturOrder, statusNotaKredit, nourut. Setelah dilakukan seleksi data, hanya ada 7 atribut yang digunakan dalam proses data mining seperti pada Tabel 5.2. Tabel 11 No Nama Atribut Tabel 5.2 Atribut hasil seleksi Keterangan 42 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 1 kodeBarang Kode dari masing-masing nama barang 2 namaBarang Nama dari produk helm 3 hargaJual Harga dari produk helm 4 quantity Jumlah dari pembelian barang dalam suatu transaksi 5 Total Total harga pembelian suatu produk helm setelah discount 6 kodeArea Berisi kode are pemasaran wilayah 7 kelompokHarga Berisi label range klompok harga 4. Data Transformation Pada tahap ini Transformasi yang dilakukan adalah memberi label kelompok harga pada setiap record sesuai dengan yang di tentukan oleh pengguna dan menggabungkan nama barang yang sama dan menjumlahkan total quantitynya pada setiap kelompok harganya masing-masing. Praktiknya, sebagai pada Gambar 5.1 dari data berjumlah 24 transakasi: Gambar 11 Gambar 5.1. Contoh Sampel data transaksi 43 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Setelah data dalam Gambar 5.1 melalui tahap preprocessing data oleh sistem akan menghasilkan 19 data seperti dalam Tabel 5.3: Tabel 12 Tabel 5.3. Hasil preprocessing data Nama Barang GM EVO HELLO KITTY #4 WH GM EVO HELLO KITTY #5 - SR PINK GM EVO LOLA BUNNY & BUGS BUNNY #1 WH/RED GM EVO ANGRY BIRD #3 - SR WH/RED GM EVO MICKEY MOUSE # 10 - WH GM EVO ROSSI - SR BK GM NEW IMPREZZA GENT - 2V RED/BK GM NEW IMPREZZA GEN - 2V BL MET BK GM NEW IMPREZZA GENT - 2V WH/BK NHK PREDATOR 2 VISOR SOLID - 2V WH NHK PREDATOR 2 VISOR SOLID - 2V PP NHK PREDATOR 2 VISOR SOLID - 2V R. RED GM AIRBORNE SOLID - 2V GUN MET GM AIRBORNE SOLID - 2V WH GM SUPERCROSS NEUTRON - NV WH/RED GM SUPERCROSS NEUTRON - WH/PP NHK TERMINATOR SOLID 2V - RED F GM SUPERCROSS NEUTRON - NV WH/GREEN GM SUPERCROSS NEUTRON - NV WH/GOLD Kelompok Harga 1 1 1 1 1 1 2 2 2 3 3 3 3 3 4 4 4 4 4 Total quantity 2.0 4.0 3.0 2.0 1.0 1.0 2.0 1.0 1.0 1.0 1.0 2.0 1.0 1.0 1.0 1.0 2.0 1.0 1.0 5.1.1.2 Cluster dan Akurasi Pengelompokan data yang mengelompokan data berdasarkan informasi yang ditentukan pada data disebut analisis klaster. Hal ini dilakukan agar obyekobyek di dalam suatu kelompok memiliki kemiripan satu sama lain sedangakan obyek-obyek yang berbeda berada dalam kelompok yang memiliki perbedaan. Untuk mengetahui sejauh mana pengelompokan yang dilakukan adalah baik 44 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI dilakukan uji akurasi dari setiap proses pembentukan kelompok dengan internal evaluation. Dalam penelitian ini, pengelompokan menggunakan metode hierarchical clustering divisive. Setelah data melalui tahap preprocessing selanjutnya data akan di proses menggunakan hierarchical clustering divisive. Dari data penjualan sejumlah 933 record kemudian setelah melalui tahap preprocessing menjadi 159 record dengan tiga atribut yang diproses dengan menggunakan hierarchical clustering divisive sehingga terbentuk kelompok-kelompok. Pada setiap proses pembentukan kelompok terebut diuji menggunakan sum of squares error (SSE). System yang dibentuk melakukan proses hierarchical clustering divisive, dengan menggunakan perhitungan euclidean distance sebahai metode untuk menghitungjarak kedekatan atau kemiripan antar obyek. Hasil pengelompokan ditampilkan dalam tabel-tabel informasi cluster dan Jtree sebagai visualisasi pembentukan kelompok. Seiring proses pembentukan cluster menggunakan metode divisive, SSE akan dihitung. Berdasarkan Gambar grafik 5.2 dapat dilihat nilai SSE dari masing-masing pembentukan kelompok. Pembentukan kelompok yang memiliki nilai SSE rendah dapat dikatakan bahwa pengelompokan tersebut similaritas yang tinggi. 45 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 350,000 300,000 250,000 200,000 150,000 100,000 50,000 0 2 Gambar 12 3 4 5 6 7 8 Gambar 5.2. Grafik SSE pembentukan Cluster Dari hasil tujuh perbobaan pembentukan cluster menunjukkan bahwa SSE terendah didapat pada percobaan ketujuh dengan nilai SSE 38092.636 yang menghasilkan 8 buah cluster. 5.1.2. Implementasi Antarmuka Pembuatan user interface sistem ini menggunakan NetBeans 7.3 dengan bahasa pemrograman Java. Desain user interface yang dipaparkan pada baba sebelumnya diimplementasikan dan digunakan sebagai sarana untuk menentukan batas harga kelompok sampai untuk mengetahui akurasi dari pengelompokan data dengan Hierarchical Divisive. Sistem ini dapat langsung menampilkan hasil keseluruhan proses dengan melau 2 tahap, yang pertama menentukan batas kelompok harga, preprocessing data lalu di proses clustering. User interface ini tersimpan dalam file HalamanUtama.Java (lanjut lampiran 8 coding) berikut tampilan keseluruhan sistem. 46 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5.1.3.1 Gambar 13 Implementasi Halaman Utama Gambar 5.3. Implementasi Halaman Utama Sistem Tab Range harga Dari Gambar 5.3 terdapat menu Keluar yang berfungsi untuk keluar dari sistem. Unutk menutup sistem digunakan code dispose(). Selain itu terdapat menu bantuan yang memiliki submenu Tentang dan Manual. Submenu Tentang berfungsi untuk memberi informasi tentang sistem kepada pengguna. Seperti yang tampak pada Gambar 5.4 47 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Gambar 14 Gambar 5.4. Implementasi Halaman Tentang Submenu Manual apabila diklik, maka akan menampilkan Halaman Manual tentang cara penggunaan sistem. Tampak seperti Gambar 5.5. Gambar 15 Gambar 5.5. Implementasi Halaman Manual Sistem Selain menu tersebut pada setiap halaman Tentang dan Manual terdapat 1 tombol „Kembali‟ untuk kembali ke halaman utama sistem. Pada praktiknya, ketika sistem dijalankan akan menampilkan secara bertahap dilalui. Tahap 48 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI tampilan tersebut adalah input range harga, input data, informasi tabel data, dan yang terakhir proses divisive clustering dan akurasi. Proses range harga dan preprocessing dilakukan dalam file HalamanUtama.java. Untuk proses clustering, dan SSE dilakukan dalam file bernama Divisive.java (lampiran 8) 1. Input Range Harga Setelah sistem dijalankan, sistem akan menampilkan Halaman Utama Tab Range harga sebagai tahap awal untuk memproses data. Pada tahap ini pengguna harus menginputkan nilai range harga untuk setiap kelompok. Sebelumnya sistem akan menampilkan nilai yang sudah tersimpan dalam database, jika nilai dalam database sudah ada pengguna bisa mengupdatenya dengan mengisi nilai baru dan mengklik tombol simpanm, dan jika nilai dalam database kosong pengguna harus memasukan nilai range harga baru. Tombol Delete isi untuk menghapus nilai range yang sudah ada sedangkan tombol Reset digunakan untuk mengset nilai 0. Fungsi dari nilai batas range harga kelompok nantinya berguna untuk memberi label pada setiap data obyek. Gambar 16 Gambar 5.6. Implementasi Input Range Harga 49 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2. Input Data dan Informasi Tabel Data Setelah selesai mengisi nilai range harga, masuk ke tahap berikutnya yaitu tahap input data Preprocessing. Tombol Pilih File berfungsi untuk menginputkan data yang akan di proses. File yang dapat di proses oleh sistem hanyalah yang bertipe file *.csv. setelah diinputkan sistem akan menampilkan data secara utuh pada tabel data, setelah tombol Submit Data dipilih sistem akan melakukan proses transformasi data dengan menseleksi atribut data inputan kemudian menampilkannya dalam tabel transformasi data. Tampilan dibawah ini adalah tampilan dimana data berhasil dimasukan kedalam sistem dan berhasil melalui proses transformasi. Gambar 17 Gambar 5.7. Implementasi Input Data 50 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Pada bagian input disediakan tombol Submit Data, Preprocessing dan Batal. Tombol Submit Data berfungsi untuk melakukan proses trasformasi. Tombol Batal berfungsi untuk membatalkan proses input data. Setelah pengguna mengklik tombol Preprocessing hasil data dari tahapan trasformasi akan masuk ke tabel data preprocessing, seperti tampak pada Gambar dibawah ini. Gambar 18 Gambar 5.8. Implementasi Informasi Tabel Data Preprocessing Pada Gambar 5.8 Unutk memulai proses Clustering, disediakan tombol Cluster. 51 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 3. Hasil Proses Divisive Clustering dan Akurasi User interface dari implementasi proses pengelompokan dan perhitungan akurasi dapat dilihat pada Gambar 5.9. Gambar 19 Gambar 5.9. Implementasi Hasil Divisive Clustering dan Akurasi Penjelasan tentang Gambar 5.9: a. Pada title Jumlah Cluster berisi Jumlah anggota tiap cluster. b. Pada title Label Cluster adalah isi label anggota yang dimiliki cluster itu sendiri. c. Pada bagian paling kanan adalah visualisasi kelompok dalam jtree. d. Bagian bawah terdapat informasi lama waktu pembentukan cluster dan informasi hasil perhitungan SSE. 52 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5.1.3. Impelentasi Kelas Tahapan ini berisi tentang implementasi kelas yang digunakan dalam pembuatan sistem. Method yang digunakan adalah method yang memiliki fungsi utama dalam sistem. Tabel 5.4 metupakan table yang berisi impelmentasi setiap kelas Tabel 13 No. Nama Kelas Tabel 5.4. Implementasi Kelas Nama File Fisik Nama File Executable 1 DataObjek DataObjek.java DataObjek.class 2 Divisive Divisive.java Divisive. class 3 Koneksi Koneksi.Java Koneksi. class 4 RangeHarga RangeHarga.java RangeHarga. class 5 Verteks Verteks.java Verteks. class 6 controlRangeHarga controlRangeHarga.java controlRangeHarga. Class 7 HalamanAwal HalamanAwal.java HalamanAwal.class 8 HalamanUtama HalamanUtama.java HalamanUtama.class 9 HalamanBantuan HalamanBantuan.java HalamanBantuan.class 10 HalamanTentang HalamanTentang.java HalamanTentang.class Listing program dari tiap-tiap kelas akan dijelaskan pada lampiran 8. 53 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5.1.4. Implementasi Struktur Data Tahapan ini berisi tentang implementasi struktur data yang di gunakan sistem ini. 5.1.3.1 Implementasi Kelas Verteks.java Kelas verteks merupakan kelas yang menyimpan setiap objek data ke dalam verteks. Dalam kelas ini terdapat 2 atribut untuk menyimpan data objek. Atribut yang pertama adalah label. Atribut ini berfungsi untuk menyimpan label pada setiap objek. Atribut kedua adalah nilai, atribut ini berfungsi untuk menyimpan nilai dari setiap objek. 5.1.3.2 Kelas Implementasi Kelas Divisive.java divisive merupakan kelas yang mengimplementasikan algoritma divisive, yaitu dalam digunakan untuk melakukan proses clustering itu sendiri. Dalam kelas divisive terdapat edge yang berfungsi untuk menghubungkan verteks. Kelas divisive memiliki konstruktor sendiri yang berfungsi sebagai ukuran maksimum dari verteks, method ini memiliki parameter masukan yaitu maxVerteks. public Divisive (int maxVertex) { verteksList = new Verteks[maxVertex]; adjMat = new double[maxVertex][maxVertex]; for (int i = 0; i < adjMat.length; i++) { for (int j = 0; j < adjMat.length; j++) { if (i == j) { 54 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI adjMat[i][j] = 0.0; } else { adjMat[i][j] = inf; } } } } Dalam konstruktor ini adjMat di definisikan sebagai edge yang akan menghubungkan vertex. Setelah membuat matriks, langah selanjutnya adalah memasukan vertex ke dalam kedalam matriks menggunakan method addVerteks. Dalam method ini menggunakan dua parameter masukan yaitu label dan nilai. Pada tahap ini setiap objek dimasukan kedalam vertex. public void addVerteks(String label, List<Double> nilai) { verteksList[jumVertex++] = new Verteks(label, nilai); } Setelah membuat vertex, selanjutnya menggunakan method addEdge yang berfungasi untuk memasukan nilai edge antar objek. Nilai edge merupakan jarak yang akan dihitung menggunakan rumus Euclidean Distance. public void addEdge(int x, int y, Double nilai) { adjMat[x][y] = adjMat[y][x] = nilai; } 55 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Perhitungan jarak Euclidean menggunakan method cariJarakEuclidean. Method ini memiliki parameter masukan indexAwal dan indexAkhir yang berfungsi untuk menandai dimulai dan diakhirinya indeks yang di hitung jaraknya. public Double cariJarakEcludian(int indexAwal, int indexTujuan) { List<Double> a = new ArrayList<Double>(); List<Double> b = new ArrayList<Double>(); a = verteksList[indexAwal].getNilai(); b = verteksList[indexTujuan].getNilai(); double total = 0; for (int i = 0; i < a.size(); i++) { total += Math.pow((a.get(i) - b.get(i)), 2); } double r = Math.sqrt(total); int decp = 2; BigDecimal bd = new BigDecimal(r); bd = bd.setScale(decp, BigDecimal.ROUND_DOWN); r = bd.doubleValue(); return r; } Atribut yang digunakan untuk proses clustering seperti dibawah ini. public Verteks verteksList[]; public Verteks LabelMatriks[]; public Verteks LabelSplinter[]; 56 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI public Verteks LabelMatriksAkhir[]; public Verteks LabelSplinterAkhir[]; public double adjMat[][]; public double DataMatriks[][]; public double DataSplinter[][]; public double DataMatriksAkhir[][]; public double DataSplinterAkhir[][]; ArrayList<String> MatrixList = new ArrayList<>(); ArrayList<String> SplinterList = new ArrayList<>(); ArrayList<String> MatrixLisAkhir = new ArrayList<>(); ArrayList<String> SplinterListAkhir = new ArrayList<>(); Atribut pertama adalah verteksList yang berfungsi untuk menyimpan nilai label obyek dalam verteks, atribut LabelMatriks yang berfungsi untuk menyimpan nilai label matriks yang tersisa dalam verteks, atribut LabelSplinter yang berfungsi untuk menyimpan nilai label obyek yang sudah terpisah dari matriks ke dalam verteks, atribut LabelMatriksAkhir dan LabelSplinterAkhir untuk menyimpan nilai label dari masing-masing obyek pada tahap akhir iterasi. Atribut adjMat berfungsi untuk menyimpan nilai edge matriks jarak dalam array, atribut DataMatriks dan DataSplinter berfungsi untuk menampung nilai matriks jarak selama proses iterasi, atribut DataMatriksAkhir dan DataSplinterAkhir digunakan untuk menyimpan nilai matriks diakhir proses iterasi. Atribut yang bertipe ArrayList digunakan untuk menyimpan nilai label obyek pada setiap iterasi kedalam sebuah ArrayList. 57 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5.2. Analisis Hasil Dalam penelitian ini pengelompokan digunakan dengan divisive clustering. Setelah data melewati tahap preprocessing selanjutanya data diproses menggunakan algoritma divisive clustering. Data transakasi penjualan sebelumnya berjumlah 834 dengan aktribut 21 kemudian di seleksi menjadi 834 data dengan 7 atribut setelah di proses melalui proses preprocessing menjadi 159 jumlah data dan 3 atribut. Hasil data dari preprocessing tersebutlah yang akan diproses menggunakan algoritma divisive. Untuk mengetahui sejauh mana pengelompokan yang dilakukan adalah baik maka dilakukan uji akurasi dari pembentukan kelompok dengan menggunakan internal evaluation. Setiap pembentukan kelompok tersebut diuji dengan menggunakan metode sum of square error (SSE). Sistem yang dibuat menggunakan algoritma divisive clustering ini dimulai dari satu cluster besar yaitu matriks hasil dari perhitungan menggunakan jarak euclidean. Hasil dari setiap pembentukan cluster ditampilkan dalam tabel-tabel, Jtree sebagai visualisasi clustering agar tergambar proses dari pengelompokannya. Sejalan proses clustering SSE akan dihitung. Hasil perhitungan SSE pembentukan kelompok akan ditampilkan totalnya oleh sistem. Berdasarkan pada pembentukan kelompok yang memiliki nilai SSE terendah dapat dikatakan bahwa kelompok tersebut baik. Hasil langkah percobaan disajikan pada Tabel 5.5 dan Gambar 5.10. Untuk mengetahui nilai SSE adalah statis, dilakukan samapi dengan 5 kali pengulangan pembentukan cluster pada setiap percobaan. Hasil dari percobaan tersebuat dilampirkan pada lampiran 7. 58 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Tabel 14 Tabel 5.5. Hasil Perhitungan Nilai SSE Percobaan Cluster SSE 1 2 328195.654 2 3 62465.727 3 4 47805.751 4 5 40875.609 5 6 38820.685 6 7 38255.563 7 8 38092.636 Dari Tabel 5.5 dapat diketahui bahwa nilai SSE terkecil ada pada percobaan 7 yang memberikan nilai SSE 38092.636 dari hasil tersebut dapat dikatakan pembentukan 8 cluster adalah yang terbaik. Dalam bentuk grafik, deretan nilai hasil SSE dari metode divisive clustering dapat dilihat pada Gambar 5.10. 350,000 300,000 250,000 200,000 150,000 100,000 50,000 0 2 Gambar 20 3 4 5 6 7 8 Gambar 5.10. Analisis – Grafik Hasil SSE Jumlah obyek data untuk pembentukan 8 kelompok dengan divisive clustering dapat dilihat dalam Tabel 5.6. T 59 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI abel 15 Cluster Tabel 5.6. Hasil Clustering Divisive untuk 159 data Jumlah Label Anggota anggota GM EVO SOLID - SR BK; GM EVO SOLID - SR PP; GM EVO SOLID - SR RYL RED; GM TEEN BATMAN #2 - SR WH; GM TEEN HELLO KITTY #1 - SR WH; GM TEEN HELLO KITTY #2 - SR WH; MAZ VISTRO SOLID 2V - Cluster 1 19 BK; MAZ VISTRO SOLID 2V - RYL RED; MAZ VISTRO SOLID 2V - WH; VOG XTREAM - CL BK; VOG XTREAM - CL BK/DF; VOG XTREAM - CL GUN MET; VOG XTREAM - CL ICE BL; VOG XTREAM - CL PINK CT; VOG XTREAM - CL PP; VOG XTREAM - CL R. RED; VOG XTREAM - CL WH; GM FIGHTER SOLID - SR BK; GM FIGHTER SOLID - SR WH ASCA ASTRO SOLID BK; ASCA ASTRO SOLID GUN; ASCA ASTRO SOLID RYL RED; ASCA PREMIER SOLID - 2V BK; ASCA PREMIER SOLID - 2V GUN; ASCA PREMIER SOLID - 2V WH; GM EVO SOLID - SR BL; GM EVO SOLID - SR DGM; GM EVO SOLID - SR GUN M; GM EVO SOLID - SR WH; GM TEEN ANGRY BIRD #1 SR WH/RED; GM TEEN ANGRY BIRD #1 - SR WH/YL; GM TEEN HELLO KITTY #3 - SR WH; MAZ VISTRO SOLID 2V - RED; MAZ VISTRO SOLID - PINK; VOG XTREAM 2 VSR SOLID/MEKANIK - 2V ICE BL; VOG XTREAM 2 VSR SOLID/MEKANIK - 2V WH; VOG XTREAM - CL RED F; GM FIGHTER SOLID - SR DGM; GM Cluster 2 37 FIGHTER SOLID - SR RYL RED; GM INTERCEPTOR SOLID - 2V WH; GM NEW IMPREZZA SOLID - 2V BK; GM NEW IMPREZZA SOLID - 2V GUN; GM NEW IMPREZZA SOLID - 2V RYL RED; GM NEW IMPREZZA SOLID - 2V WH; NHK GLADIATOR SOLID - 2V GUN; VOG NAVIGATOR PICLET - 2V BK/BL; VOG NAVIGATOR PICLET - 2V BK/RED; VOG NAVIGATOR PICLET - 2V BK/SIL; VOG NAVIGATOR SOLID - 2V BK; VOG NAVIGATOR SOLID - 2V GUN M; VOG NAVIGATOR SOLID - 2V PP; VOG NAVIGATOR SOLID - 2V WH; GM SUPERCROSS NEUTRON - NV WH/GOLD; GM SUPERCROSS NEUTRON - NV WH/GREEN; GM SUPERCROSS NEUTRON - NV WH/RED; GM SUPERCROSS NEUTRON - WH/PP ASCA PREMIER SOLID - 2V PP; GM EVO SOLID - SR PINK CUTE; MAZ PRIUSS * SOLID R - 2V GUN; VOG XTRAIL SOLID - CL GUN M; VOG XTRAIL SOLID - CL WH; VOG XTREAM 2VSR SOLID/MEKANIK-2V BK; VOG XTREAM 2 VSR SOLID/MEKANIK - 2V PINK; GM INTERCEPTOR SOLID - 2V BK; GM INTERCEPTOR SOLID - 2V GUN M; NHK GLADIATOR SOLID - 2V BK; NHK GLADIATOR SOLID - 2V PP; NHK PREDATOR Cluster 3 23 SOLID - CL BK; NHK PREDATOR SOLID - CL GUN M; NHK PREDATOR SOLID - CL RYL RED; NHK R6 LOTUSS - ORG/FLO; NHK R-6 ROSSI - CL GR/FLO; VOG NAVIGATOR PICLET - 2V WH/BL; VOG NAVIGATOR PICLET - 2V WH/SIL; VOG NAVIGATOR SOLID - 2V BK/DOF; VOG NAVIGATOR SOLID - 2V RYL RED; NHK GP 1000 SOLID - 2V WH; NHK GODZILLA SOLID - 2V BK; NHK TERMINATOR LOTUS 2V WH GM AIRBORNE SOLID - 2V GUN MET; GM AIRBORNE SOLID - 2V WH; NHK GP 1000 SOLID - 2V PP; NHK PREDATOR 2 VISOR SOLID - 2V FLT/BK; NHK PREDATOR 2 VISOR SOLID - 2V PP; NHK PREDATOR 2 Cluster 4 14 VISOR SOLID - 2V R. RED; NHK PREDATOR 2 VISOR SOLID - 2V WH; GM SUPERCROSS NEUTRON - NV WH/SIL; NHK GODZILLA SOLID - 2V GUN; NHK GODZILLA SOLID - 2V RYL RED; NHK GODZILLA SOLID 2V WH; NHK TERMINATOR RX 805 - 2V WH/SIL; NHK TERMINATOR SOLID 2V - RED F; NHK TERMINATOR STARBASE - 2V WH ASCA ASTRO SOLID WH; GM EVO HELLO KITTY #5 - SR PINK; GM EVO LOLA BUNNY & BUGS BUNNY #1 WH/RED; MAZ PRIUSS*SOLID R -2V RY RED; VOG TURBO SOLID - CL BK; VOG TURBO SOLID - CL WH; Cluster 5 20 VOG XTREAM 2 VSR SOLID/MEKANIK - 2V GUN; VOG XTREAM 2 VSR SOLID/MEKANIK - 2V PP; VOG XTREAM 2 VSR SOLID/MEKANIK - 2V RYL RED; GM FIGHTER SOLID - RED F; GM INTERCEPTOR SOLID 2V BK/DOF; GM INTERCEPTOR SOLID - 2V RYL RED; NHK GLADIATOR SOLID - 2V WH; NHK PREDATOR SOLID - CL FLAT BK; NHK R-6 BEYOND WH/GR; NHK R6 RALLY - BK/SIL; NHK R-6 RALLY - CL WH/SIL; 60 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI NHK REVENTOR SOLID 2V - BK; NHK X-2 SOLID - 2V GUN; VOG NAVIGATOR SOLID - 2V ICE BL GM CITYLIGHT SOLID - 2 V - RED F; GM NEW IMPREZZA GEN - 2V BL MET BK; GM NEW IMPREZZA GENT - 2V RED/BK; GM NEW IMPREZZA GENT - 2V WH/BK; GM NEW IMPREZZA SOLID - 2V BK/DOF; GM NEW Cluster 6 IMPREZZA SOLID - 2V BL; GM STARTECH SOLID BK; GM STARTECH SOLID GUN; NHK PREDATOR SOLID 19 - CL WH; NHK R6 BEYOND - WH/RED; NHK R-6 LOTUS - CL WH; NHK R6 RALLY - CL BK/BL; NHK R-6 RALLY - CL WH/BL; NHK R-6 SOLID - CL RYL RE; NHK R-6 SOLID - CL WH; NHK R-6 X-807 - CL YL FLO/BK; NHK REVENTOR SOLID WH; NHK X-2 SOLID - 2V RYL RED; VOG NAVIGATOR SOLID - 2V RED F Cluster 7 ASCA MOTIF PROTECH - 2V WH/YL; GM EVO MICKEY MOUSE # 10 - WH; VOG FREEWAY SOLID - 2V ICE 5 BL; VOG TURBO SOLID - CL GUN M; VOG XTRAIL SOLID - CL RED F ASCA MOTIF X-3 - 2V WH/GR; ASCA PREMIER SOLID - 2V RED F; GM EVO ANGRY BIRD #3 - SR WH/RED; GM EVO HELLO KITTY # 3 - WH; GM EVO HELLO KITTY #4 WH; GM EVO ROSSI - SR BK; GM TEEN SNOW WHITE #2 - SR WH; MAZ PRIUSS * SOLID R - 2V BK; MAZ PRIUSS * SOLID R - 2V WH; MAZ TREVIA ANGRY Cluster 8 BIRD # 1 SR - WH/RED; MAZ TREVIA HELLO KITTY #3 WH; MIX SPORTY SOLID - 2V BK; MIX SPORTY 22 SOLID - 2V RYL RED; VOG FREEWAY SOLID - 2V PP; VOG FREEWAY SOLID - 2V RYL RED; VOG FREEWAY SOLID - 2V WH; VOG TURBO SOLID - CL BK/DOF; VOG TURBO SOLID - CL PP; VOG XTRAIL SOLID - CL BK; VOG XTREAM 2 VSR SOLID/MEKANIK - 2V BLUE; VOG XTREAM 2 VSR SOLID/MEKANIK - 2V RED F; VOG XTREAM - CL PINK Pada Tabel 5.7 adalah hasil perhitungan nilai rata-rata quantity obyek data dari masing-masing cluster. Tabel 16 Tabel 5.7 Nilai rata-rata variabel quantity pada percobaan ke-7 Cluster ̅ Quantity 1 29,526 2 11,595 3 5,870 4 2,429 5 3,550 6 1,632 7 1,000 8 1,898 61 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Gambar 5.11 dibawah ini adalah anggota berserta ciri karakternya yang diambil berdasarkan informasi data yang terkait dari masing-masing cluster: Cluster Cluster Cluster1 Cluster Cluster 1 Cluster 1 Cluster 11 Cluster Cluster 1 Cluster 11 Cluster Cluster 1 Cluster 1 Cluster 11 Cluster Cluster 1 Cluster 11 Cluster Cluster 1 Cluster 1 Cluster Cluster 11 Cluster 1 Cluster Cluster 11 Cluster 1 Cluster 1 Cluster 1 Cluster 11 Cluster Cluster 1 Cluster 1 Cluster Cluster 11 Cluster 11 Cluster Cluster 1 Cluster 1 Cluster 11 Cluster Cluster 1 Cluster Cluster 11 Cluster 1 Cluster 1 Cluster Cluster 11 Cluster 1 Cluster Cluster 11 Cluster 1 Cluster 1 Cluster 1 Cluster 11 Cluster Cluster 1 Cluster 11 Cluster Kelompok Harga Kelompok 1 Kelompok Harga Harga 1 1 1 11 1 11 1 11 1 11 1 11 1 11 1 1 1 1 11 1 1 11 1 11 1 11 1 11 1 11 1 Total Quantity Total 30 Total Quantity Quantity 24 30 30 50 24 24 46 50 50 22 46 46 22 34 22 34 43 34 43 24 43 24 21 24 21 21 35 35 35 41 41 41 19 19 19 20 20 20 21 21 21 34 34 34 Harga Jual Harga 114000 Harga Jual Jual 114000 114000 114000 114000 114000 114000 145000 114000 114000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 145000 157750 157750 157750 157750 157750 157750 157750 157750 157750 167500 167500 167500 11 1 1 1 2 2 22 22 22 22 22 26 26 22 22 22 27 27 27 Kelompok Total Cluster Kelompok Total Cluster Kelompok Harga Quantity Total Harga Quantity Cluster Cluster 2 Harga 1 15 Quantity Cluster 2 1 15 Cluster 11 15 Cluster222 15 Cluster 1 15 Cluster 2 1 13 Cluster 2 1 15 13 Cluster 2 1 17 17 Cluster 2 1 13 Cluster 2 1 11 Cluster 22 1 11 Cluster 17 Cluster 2 11 16 Cluster 22 1 16 Cluster 11 Cluster 2 11 10 Cluster 2 1 10 Cluster 22 16 Cluster 11 8 Cluster 2 1 8 Cluster 11 11 Cluster 22 10 Cluster 2 1 11 Cluster 2 11 17 Cluster 8 Cluster 22 1 17 Cluster 2 11 8 Cluster 11 Cluster 22 1 8 Cluster 2 1 9 Cluster 2 1 17 9 Cluster 2 1 9 Cluster 2 1 89 Cluster 2 1 8 Cluster 22 1 Cluster 98 Cluster 2 11 17 Cluster 22 1 17 Cluster 9 Cluster 2 11 13 Cluster 2 13 Cluster 2 11 8 Cluster 2 1 13 13 Cluster 2 1 17 Cluster 2 11 13 Cluster 13 Cluster 22 1 13 Cluster 2 2 12 Cluster 2 2 12 Cluster 22 13 Cluster 21 14 Cluster 2 2 14 Cluster 2 2 13 Cluster 2 12 13 Cluster 2 2 10 Cluster 22 2 10 Cluster 12 Cluster 2 22 11 Cluster 22 2 11 Cluster 14 Cluster 2 22 8 Cluster 2 2 8 Cluster 13 Cluster 22 22 12 Cluster 2 2 12 Cluster 22 10 Cluster 22 11 Cluster 2 2 11 Cluster 2 22 12 Cluster 11 Cluster 22 2 12 Cluster 22 22 88 Cluster Cluster 2 2 8 Cluster 22 8 Cluster 22 12 8 Cluster 2 2 8 8 Cluster 2 2 11 Cluster 2 2 9 Cluster 22 2 9 Cluster 12 Cluster 2 22 9 Cluster 2 2 9 Cluster 22 Cluster 22 98 Cluster 2 2 9 Cluster 2 2 8 Cluster 2 4 9 Cluster 2 4 9 Cluster 22 8 Cluster 42 17 Cluster 2 4 17 Cluster 2 4 17 Cluster 24 9 Cluster 22 17 Cluster 2 42 99 Cluster Cluster 22 4 9 Nama Barang Wilayah Cluster KUL Wilayah Wilayah YOG KUL KUL YOG YOG YOG SLM YOG YOG YOG SLM SLM YOG SLM YOG SLM SLM SLM SLM GKD SLM GKD SLM GKD SLM SLM KUL KUL KUL SLM SLM SLM GKD GKD GKD GKD GKD GKD GKD GKD GKD SLM SLM SLM SLM SLM SLM KUL KUL SLM SLM SLM SLM SLM SLM Cluster Cluster4 Cluster Cluster 4 Cluster 4 Cluster 44 Cluster Cluster 4 Cluster 44 Cluster Cluster 4 Cluster 4 Cluster 44 Cluster Cluster 4 Cluster 44 Cluster Cluster 4 Cluster 4 Cluster Cluster 44 Cluster 4 Cluster Cluster 44 Cluster 4 Cluster 4 Cluster 4 Cluster 44 Cluster Cluster 4 Cluster 4 Cluster Cluster 44 Cluster 44 Cluster Cluster 4 Cluster 4 Cluster 44 Cluster Cluster 4 Cluster Cluster 44 Cluster 4 167500 167500 167500 167500 167500 204000 204000 204000 204000 204000 204000 GM TEEN BATMANNama #2 - SR WH Barang Nama Barang GM TEEN HELLO KITTY #1 - SR WH GM TEEN BATMAN #2 - SR WH GM TEEN TEEN HELLO BATMAN #2 - #2 SR WH GM KITTY SR WH WH GM TEEN HELLO KITTY #1 -- SR GM TEEN HELLO KITTY #1 - SR WH VOG XTREAM - CLKITTY BK #2 GM TEEN HELLO - SR WH GM TEEN HELLO KITTY #2 - SR WH VOG XTREAM XTREAM -- CL CL BK BK/DF VOG VOG XTREAM - CL BK VOG XTREAM VOG XTREAM -- CL CL BK/DF GUN MET VOG XTREAM - CL BK/DF VOG XTREAM -- CL GUNBL MET VOG VOG XTREAM XTREAM - CL CL ICE GUN MET VOG XTREAM -- CL ICE BLCT VOG VOG XTREAM XTREAM - CL CL PINK ICE BL VOG XTREAM - CL PINK CT VOG XTREAM - CL PP PINK CT VOG XTREAM - CL PP VOG XTREAM XTREAM -- CL CL R. PPRED VOG VOG XTREAM - CL R. RED VOG XTREAM CL R. RED VOG XTREAM CL WH VOG XTREAM - CL WH VOGVISTRO XTREAMSOLID - CL WH MAZ 2V -- BK BK MAZ VISTRO SOLID 2V MAZ VISTRO SOLID 2V - BK MAZ VISTRO VISTRO SOLID SOLID 2V 2V -- RYL RYL RED RED MAZ MAZ VISTRO SOLID 2V - RYL RED MAZ MAZ VISTRO VISTRO SOLID SOLID 2V 2V -- WH WH MAZ VISTRO SOLID 2V - WH GM EVO SOLID - SR BK GM GM EVO EVO SOLID SOLID -- SR SR BK BK GM EVO SOLID - SR PP GM GM EVO EVO SOLID SOLID -- SR SR PP PP GM EVO SOLID - SR RYL RED GM EVO SOLID - SR RYL RED GM FIGHTER SOLID - SR BK GM FIGHTER FIGHTER SOLID SOLID -- SR SR BK BK GM GM FIGHTER SOLID - SR WH GM FIGHTER FIGHTER SOLID SOLID -- SR SR WH WH GM Harga Harga Jual Harga Jual 101500 Jual 101500 103500 101500 103500 103500 103500 114000 114000 103500 114000 114000 114000 114000 114000 114000 131500 131500 114000 131500 131500 133750 131500 133750 145000 131500 145000 155250 133750 155250 156250 145000 156250 157750 157750 155250 158500 158500 156250 167500 167500 157750 167500 167500 158500 167500 167500 167500 167500 167500 204000 204000 167500 206750 206750 206750 206750 167500 207000 207000 204000 209750 209750 206750 209750 209750 206750 222750 222750 207000 222750 222750 222750 209750 222750 241250 209750 241250 270250 222750 270250 272000 272000 222750 272000 272000 222750 272000 272000 241250 272000 272000 270250 414000 414000 272000 414000 414000 414000 272000 414000 414000 272000 414000 Nama Barang Nama Barang Nama Barang ASCA ASTRO SOLID RYL RED ASCA ASTRO SOLID RYL RED ASCA ASTRO SOLID BK SOLID RYL RED ASCA ASTRO ASCA ASTRO SOLID BK ASCA ASTRO SOLID GUN ASCA ASTRO SOLID BK GUN GM TEEN ANGRY BIRD #1 - SR WH/RED GM TEEN ANGRY BIRD #1 - SR WH/RED ASCA ASTRO SOLID GUN GM TEEN ANGRY BIRD #1 - SR WH/YL GM TEEN TEEN ANGRY ANGRY BIRD BIRD #1 -- SR SR WH/YL GM GM TEEN HELLO KITTY #1 #3 - SR WH/RED WH GM TEEN TEEN ANGRY HELLO KITTY #3 -- SR SR WH GM BIRD -#1 ASCA PREMIER SOLID 2V BK WH/YL ASCA PREMIER SOLID - 2V BK GM TEEN HELLO KITTY #3 SR ASCA PREMIER SOLID - 2V WH WH ASCA PREMIER SOLID - 2V WH ASCA ASCA PREMIER PREMIER SOLID SOLID -- 2V 2V GUN BK ASCA PREMIER SOLID - 2V GUN VOG XTREAM - CL RED -F2V WH ASCA PREMIER SOLID VOG XTREAM - CL RED F VOG XTREAM 2 VSR SOLID/MEKANIK - 2V WH ASCA PREMIER SOLID - 2V GUN VOG XTREAM 2 VSR SOLID/MEKANIK - 2V WH VOG XTREAM 2 VSR SOLID/MEKANIK - 2V ICE BL VOG XTREAM -2CL RED F VSR SOLID/MEKANIK - 2V ICE BL MAZ VISTRO SOLID 2V - RED MAZ VISTRO - RED VOG XTREAMSOLID 2 VSR2V SOLID/MEKANIK - 2V WH MAZ VISTRO SOLID - PINK MAZ VISTRO SOLID - SOLID/MEKANIK PINK VOG XTREAM - 2V ICE BL GM EVO SOLID2 -VSR SR BL GM EVO SOLID - SR BL- RED MAZ VISTRO SOLID GM EVO SOLID - SR2V DGM GM EVO SOLID - SR DGM MAZ VISTRO SOLID - PINK GM EVO SOLID - SR GUN M GUN M GM EVO SOLID - SR BL GM EVO SOLID - SR WH GM GM EVO EVO SOLID SOLID -- SR SR DGM WH GM FIGHTER SOLID - SR DGM GM EVO FIGHTER SOLID -GUN SR DGM GM SOLID - SR VOG NAVIGATOR SOLID -M 2V BK VOG NAVIGATOR SOLID - 2V BK VOG NAVIGATOR SOLID - 2V GUN M VOGEVO NAVIGATOR SOLID GM SOLID - SR WH - 2V GUN M GM FIGHTER SOLID - SR RYL RED GM FIGHTER FIGHTER SOLID SOLID -- SR SR DGM RYL RED GM VOG NAVIGATOR SOLID - 2V PP VOG NAVIGATOR NAVIGATOR SOLID SOLID -- 2V 2V BK PP VOG VOG NAVIGATOR SOLID - 2V WH VOG NAVIGATOR SOLID - 2V WH VOG NAVIGATOR PICLET SOLID - -2V M VOG NAVIGATOR 2VGUN BK/BL VOG NAVIGATOR PICLET - 2V BK/BL GM FIGHTER SOLID - SR RYL VOG NAVIGATOR PICLET - 2V RED BK/RED VOG NAVIGATOR PICLET - 2V BK/RED VOG NAVIGATOR PICLET - 2V BK/SIL VOG VOG NAVIGATOR NAVIGATOR SOLID PICLET- -2V2VPP BK/SIL GM INTERCEPTOR SOLID- -2V 2V WH VOG NAVIGATOR SOLID GM INTERCEPTOR SOLID - 2VWH WH NHK GLADIATOR SOLID - 2V GUN VOG NAVIGATOR PICLET 2V BK/BL NHK GLADIATOR SOLID - 2V GUN GM NEW IMPREZZA SOLID - 2V BK GM NEW IMPREZZA SOLID - 2VBK/RED BK VOG NAVIGATOR PICLET - 2V GM NEW IMPREZZA SOLID - 2V GUN GM NEW IMPREZZA SOLID - 2VBK/SIL GUN VOG NAVIGATOR PICLET GM NEW IMPREZZA SOLID- 2V - 2V RYL RED GM NEW IMPREZZA SOLID 2V RYL RED GM NEW INTERCEPTOR GM IMPREZZASOLID SOLID- 2V - 2VWH WH GM NEW IMPREZZA SOLID - 2V WH NHK GLADIATOR SOLID 2V GUN GM SUPERCROSS NEUTRON - NV WH/GOLD GM SUPERCROSS NEUTRON - NV WH/GOLD GM SUPERCROSS NEW IMPREZZANEUTRON SOLID - 2V- NV BKWH/GREEN GM GM SUPERCROSS NEUTRON - NV WH/GREEN GM SUPERCROSS WH/RED GM IMPREZZANEUTRON SOLID - 2V-- NV GUN GM NEW SUPERCROSS NEUTRON NV WH/RED GM SUPERCROSS GM IMPREZZANEUTRON SOLID - 2V-- WH/PP RYL RED GM NEW SUPERCROSS NEUTRON WH/PP Wilayah Wilayah Wilayah KUL KUL KUL KUL KUL KUL KUL KUL KUL KUL KUL KUL YOG YOG KUL GKD GKD YOG GKD GKD GKD GKD GKD SLM GKD SLM YOG GKD YOG SLM SLM GKD GKD YOG GKD GKD SLM YOG YOG GKD SLM SLM GKD SLM SLM YOG YOG SLM YOG SLM SLM SLM GKD GKD GKD GKD YOG KUL KUL SLM SLM SLM GKD GKD GKD GKD KUL KUL KUL YOG YOG YOG SLM YOG YOG GKD YOG SLM KUL SLM SLM SLM YOG SLM SLM YOG KUL KUL YOG SLM SLM SLM YOG YOG SLM SLM SLM SLM SLM SLM GKD KUL GKD Cluster 2 2 9 272000 GM NEW IMPREZZA SOLID - 2V WH Cluster 2 4 9 414000 GM SUPERCROSS NEUTRON - NV WH/GOLD Kelompok Total Harga Total Harga GM SUPERCROSSNama Cluster2 Kelompok Barang Cluster 4 17 414000 NEUTRON - NV WH/GREEN Cluster Nama Barang Harga Quantity Jual Harga Quantity Jual GM SUPERCROSS NEUTRON - NV WH/RED Cluster 17 414000 Cluster23 14 6 133750 ASCA PREMIER SOLID - 2V PP Cluster 3 1 6 133750 ASCA PREMIER SOLID - 2V PP Cluster 414000 GM SUPERCROSS Cluster23 14 59 155000 VOG XTRAIL SOLID NEUTRON - CL GUN M- WH/PP Cluster 3 1 5 Cluster 3 1 5 Cluster 3 1 5 Cluster 3 1 7 Cluster 3 1 7 Cluster 3 Kelompok 1 6 Total Cluster 1 6 Cluster3 Quantity Cluster 3 Harga 1 6 Cluster 3 1 6 Cluster 3 1 6 Cluster 3 1 6 Cluster 33 1 6 Cluster 1 5 Cluster 3 2 6 Cluster 33 2 6 Cluster Cluster 3 21 65 Cluster 3 2 6 Cluster Cluster 33 21 57 Cluster 3 2 5 Cluster 33 Cluster 21 66 Cluster 3 2 6 Cluster 3 2 7 Cluster 33 2 7 Cluster Cluster 3 21 56 Cluster 3 2 5 Cluster 21 76 Cluster 33 2 7 Cluster 3 2 7 Cluster 3 2 67 155000 155000 155000 155250 155250 157750 Harga 157750 Jual 167500 167500 133750 180250 180250 155000 206750 206750 155000 209750 209750 155250 225750 225750 157750 225750 225750 241250 241250 167500 241250 241250 270250 180250 270250 270250 270250 206750 VOG XTRAIL SOLID - CL GUN M VOG XTRAIL SOLID - CL WH VOG XTRAIL SOLID - CL WH VOG XTREAM 2VSR SOLID/MEKANIK-2V BK VOG XTREAM 2VSR SOLID/MEKANIK-2V BK VOG XTREAM 2 VSR SOLID/MEKANIK - 2V PINK VOG XTREAM 2 VSR SOLID/MEKANIK - 2V PINK Nama Barang GM EVO SOLID - SR PINK CUTE GM EVO SOLID - SR PINK CUTE ASCA PREMIER SOLID - 2V PP MAZ PRIUSS * SOLID R - 2V GUN MAZ PRIUSS * SOLID R -GUN 2V GUN VOG XTRAIL SOLID - CL M VOG NAVIGATOR SOLID - 2V RYL RED VOG XTRAIL NAVIGATOR SOLID - 2V RYL RED VOG SOLIDSOLID - CL WH VOG NAVIGATOR - 2V BK/DOF VOG NAVIGATOR SOLID - 2V BK/DOF VOG XTREAM 2VSR SOLID/MEKANIK-2V VOG NAVIGATOR PICLET - 2V WH/BL BK VOG NAVIGATOR PICLET - 2V WH/BL VOG NAVIGATOR XTREAM 2 VSR SOLID/MEKANIK VOG PICLET - 2V WH/SIL - 2V PINK VOG NAVIGATOR PICLET - 2V WH/SIL GM INTERCEPTOR SOLID - 2V BK GM EVO INTERCEPTOR SOLID - 2V BK GM SOLID SR PINK GM INTERCEPTOR SOLID -CUTE 2V GUN M GM INTERCEPTOR SOLID - 2V GUN M NHK GLADIATOR SOLID 2V GUN BK MAZ * SOLID R ---2V NHK PRIUSS GLADIATOR SOLID 2V BK NHK GLADIATOR SOLID - 2V PP NHK GLADIATOR VOG NAVIGATOR SOLID SOLID -- 2V 2V PP RYL RED SLM YOG Wilayah SLM Wilayah SLM KUL KUL GKD GKD GKD GKD GKD KUL KUL GKD GKD Wilayah SLM SLM KUL GKD GKD GKD GKD GKD GKD GKD GKD KUL YOG YOG GKD YOG YOG KUL KUL SLM YOG YOG SLM GKD SLM SLM SLM GKD Kelompok Total Harga Nama Barang Harga Quantity Jual Kelompok Total Harga 3 2 314750 Kelompok Total Harga NHK PREDATOR 2 VISOR Nama SOLID Barang- 2V PP Nama Barang Harga Quantity Jual Harga Quantity Jual NHK PREDATOR 2 VISOR SOLID - 2V R. RED 3 4 314750 3 2 314750 NHK PREDATOR 2 VISOR SOLID - 2V PP 3 2 314750 NHK NHK PREDATOR PREDATOR 22 VISOR VISOR SOLID SOLID -- 2V 2V WH PP 314750 33 44 314750 NHK PREDATOR 2 VISOR SOLID - 2V R. RED 3 4 314750 NHK NHK PREDATOR PREDATOR 22 VISOR VISOR SOLID SOLID -- 2V 2V FLT/BK R. RED 318750 33 42 314750 NHK PREDATOR 2 VISOR SOLID - 2V WH 3 4 314750 NHK PREDATOR 2 VISOR SOLID - 2V WH 350000 NHK NHK PREDATOR GP 1000 SOLID - 2V PP 33 22 318750 2 VISOR SOLID - 2V FLT/BK 3 2 318750 NHK PREDATOR 2 VISOR SOLID - 2V FLT/BK 33 22 350000 NHK GP 1000 SOLID 371000 GM AIRBORNE SOLID- 2V - 2VPPGUN MET 3 2 350000 NHK GP 1000 SOLID - 2V PP 33 23 371000 GM AIRBORNE SOLID -- 2V GUN MET 371000 3 2 371000 GM GM AIRBORNE AIRBORNE SOLID SOLID - 2V 2V WH GUN MET 34 32 371000 GM AIRBORNE SOLID - 2V2V WH- RED F 403500 TERMINATOR SOLID 3 3 371000 NHK GM AIRBORNE SOLID - 2V WH 4 2 403500 NHK TERMINATOR SOLID 2V - RED F 4 2 417000 NHK GODZILLA SOLID 2V GUN 403500 TERMINATOR SOLID 2V - RED F 4 2 417000 NHK GODZILLA SOLID - 2V GUN 417000 NHK NHK GODZILLA GODZILLA SOLID SOLID -- 2V 2V WH GUN 44 22 417000 4 2 417000 NHK GODZILLA SOLID - 2V WH 4 2 417000 NHK GODZILLA SOLID - 2V WH- NV WH/SIL 44 33 418750 GM SUPERCROSS NEUTRON 418750 GM SUPERCROSS NEUTRON - NV WH/SIL 4 3 418750 NHK GM SUPERCROSS NEUTRON NV WH/SIL 420500 TERMINATOR RX RX 805 -- 2V 2V -WH/SIL WH/SIL 44 33 420500 NHK TERMINATOR 805 4 3 420500 NHK TERMINATOR RX 805 - 2V WH/SIL 422000 NHK NHK GODZILLA GODZILLA SOLID SOLID -- 2V 2V RYL RYL RED RED 44 22 422000 4 2 422000 NHK GODZILLA SOLID - 2V RYL RED 44 11 425500 425500 NHK NHK TERMINATOR TERMINATOR STARBASE STARBASE -- 2V 2V WH WH 4 1 425500 NHK TERMINATOR STARBASE - 2V WH Kelompok Total Kelompok Kelompok Total Total Cluster Cluster Cluster Harga Quantity Harga Quantity Cluster 5 1 4 Cluster 5 1 4 Cluster 5 1 4 Cluster 55 1 4 Cluster 1 Cluster 5 1 44 Cluster 55 1 4 Cluster Cluster 5 11 44 Cluster 5 1 4 Cluster 5 1 4 Cluster 5 1 4 Cluster 5 1 4 Cluster 5 1 4 Cluster 5 1 3 Cluster 5 1 3 Cluster 5 11 33 Cluster Cluster 55 1 3 Cluster 5 1 4 Cluster 5 1 34 Cluster 5 1 3 Cluster 5 1 43 Cluster 5 2 4 Cluster 55 2 4 Cluster Cluster 5 21 33 Cluster 55 2 3 Cluster Cluster 5 22 34 Cluster 5 2 3 Cluster 55 Cluster 22 33 Cluster 5 2 3 Cluster 22 33 Cluster 55 Cluster 5 2 3 Cluster 5 22 43 Cluster Cluster 55 2 4 Cluster 5 22 43 Cluster Cluster 55 2 4 Cluster 5 2 4 Cluster 5 2 4 Cluster 5 2 4 Cluster 5 2 4 Cluster 5 2 3 Cluster 55 2 3 Cluster Cluster 5 22 34 Cluster 55 Cluster 22 43 Harga Harga Harga Jual Jual 103500 103500 156250 156250 156250 156250 156250 156250 157750 157750 157750 170250 170250 170250 170250 170250 180250 170250 180250 190500 180250 190500 190500 190500 204000 204000 190500 209750 209750 204000 237500 237500 209750 237500 237500 237500 237500 237500 241250 237500 241250 244500 237500 244500 252750 241250 252750 270250 270250 244500 272000 272000 252750 286250 286250 270250 Nama Barang Nama Nama Barang Barang ASCA ASTRO SOLID WH ASCA ASTRO SOLID WH VOG XTREAM 2 VSR SOLID/MEKANIK - 2V GUN VOG XTREAM XTREAM 2 VSR VSR SOLID/MEKANIK SOLID/MEKANIK - 2V 2V GUN GUN VOG VOG XTREAM 22 VSR SOLID/MEKANIK -- 2V RYL RED VOG XTREAM XTREAM 2 VSR VSR SOLID/MEKANIK SOLID/MEKANIK - 2V 2V RYL RYL RED VOG VOG XTREAM 22 VSR SOLID/MEKANIK -- 2V PP RED VOG XTREAM 2 VSR SOLID/MEKANIK - 2V PP VOG XTREAM 2 VSR SOLID/MEKANIK - 2V PP VOG TURBO SOLID - CL BK VOG TURBO SOLID - CL BK VOG TURBO SOLID - CL BK VOG TURBO SOLID - CL WH VOG TURBO SOLID - CL WH MAZ PRIUSS*SOLID RY RED VOG TURBO SOLID -RRCL-2V WH MAZ PRIUSS*SOLID -2V RY RED GM EVO HELLO KITTY #5 - SR PINK MAZ PRIUSS*SOLID R -2V GM EVO HELLO KITTY #5 -RY SRRED PINK GM EVO LOLA BUNNY & BUGS BUNNY #1 WH/RED LOLA BUNNY & BUGS BUNNY #1 WH/RED GM EVO HELLO KITTY #5 - SR PINK GM FIGHTER SOLID - RED F GM EVO FIGHTER - RED F BUNNY #1 WH/RED GM LOLASOLID BUNNY VOG NAVIGATOR SOLID& -BUGS 2V ICE BL VOGFIGHTER NAVIGATOR GM SOLIDSOLID - RED- 2V F ICE BL NHK R-6 BEYOND WH/GR NHK R-6 BEYOND WH/GR VOG R6 NAVIGATOR SOLID - 2V ICE BL NHK RALLY - BK/SIL NHK R6 RALLY - BK/SIL NHK - CLWH/GR WH/SIL NHK R-6 R-6 RALLY BEYOND NHK R-6 RALLY - CL WH/SIL GM INTERCEPTOR SOLID - 2V RYL RED NHK R6 RALLY - BK/SIL GM INTERCEPTOR SOLID - 2V RYL RED GM INTERCEPTOR - 2V BK/DOF NHK R-6 RALLY - CLSOLID WH/SIL GM INTERCEPTOR SOLID - 2V BK/DOF NHK X-2 SOLID - 2V GUN GM NHKINTERCEPTOR X-2 SOLID - 2VSOLID GUN - 2V RYL RED NHK GLADIATOR SOLID - 2V WH NHKINTERCEPTOR GLADIATOR SOLID GM SOLID- 2V - 2VWH BK/DOF NHK PREDATOR SOLID - CL FLAT BK NHK X-2 PREDATOR SOLID - CL FLAT BK NHK SOLID - 2V GUN2V NHK REVENTOR SOLID - BK NHK GLADIATOR REVENTOR SOLID NHK SOLID 2V - 2V- BK WH Cluster 5 Kelompok 2 3 272000 Total Harga NHK PREDATOR SOLID - CL FLAT BK Harga Cluster Kelompok Total Nama Barang Cluster5 Nama Harga Quantity Jual NHK REVENTOR SOLID Cluster 2 3 286250 2V Barang - BK Cluster 6 Cluster 6 Cluster 6 Cluster Cluster66 Cluster Cluster 6 Cluster 6 Cluster 6 Cluster 6 Cluster 66 Cluster Cluster 6 Cluster 66 Cluster Cluster 6 Cluster 6 Cluster 66 Cluster Cluster 6 Cluster 66 Cluster Cluster 6 Cluster 6 Cluster Cluster 66 Cluster 6 Cluster Cluster 66 Cluster Cluster 66 Cluster 6 Cluster 6 Cluster 6 Cluster 66 Cluster Cluster 6 Cluster 66 Cluster Cluster 6 Cluster 6 Cluster Cluster 66 Cluster 6 Cluster 66 Cluster Cluster 6 Cluster 6 Cluster Cluster 66 Harga Quantity Jual 2 2 209750 VOG NAVIGATOR SOLID - 2V RED F 2 2 209750 VOG NAVIGATOR SOLID - 2V RED F 2 2 213500 GM CITYLIGHT SOLID - 2 V - RED F Kelompok Total Harga 2 2 213500 GM CITYLIGHT SOLID - 2 V - RED F 2 1 221000 R-6 SOLID - CL Nama WH Barang Harga Quantity Jual NHK 2 1 221000 NHK R-6 SOLID - CL WH 2 2 224000 NHK R-6 SOLID - CL RYL RE 224000 VOG NHK R-6 SOLID - CL RYL -RE 2 2 209750 NAVIGATOR SOLID 2V RED F 2 2 237500 NHK R-6 LOTUS - CL WH 2 2 237500 GM NHK R-6 LOTUSSOLID - CL WH 213500 - 2 V - RED F 22 12 240750 NHKCITYLIGHT R6 BEYOND - WH/RED 2 1 240750 NHK NHK R-6 R6 BEYOND - WH/RED 221000 SOLID -- CL CL WH 22 21 240750 NHK R6 RALLY BK/BL 2 2 240750 NHK R6 RALLY - CL BK/BL 224000 NHK R-6 R-6 RALLY SOLID -- CL RE 22 12 240750 NHK CL RYL WH/BL 2 1 240750 NHK R-6 RALLY - CL WH/BL NHK X-2 237500 NHK R-6 SOLID LOTUS- -2V CLRYL WHRED 22 22 252750 2 2 252750 NHK X-2 SOLID - 2V RYL RED 22 11 264250 GM STARTECH SOLID BK 240750 R6 BEYOND - WH/RED 2 1 264250 NHK GM STARTECH SOLID BK 22 12 264250 GM STARTECH GUN 240750 R6 RALLY -SOLID CL BK/BL 2 1 264250 NHK GM STARTECH SOLID GUN 22 21 272000 GM NEW IMPREZZA SOLID - 2V BK/DOF 240750 NHK R-6 RALLY CL WH/BL 2 272000 GM NEW IMPREZZA SOLID - 2V BK/DOF 2 1 272000 NHK PREDATOR SOLID - CL WH 272000 NHK X-2 PREDATOR SOLID CL WH 2 21 252750 SOLID - 2V RYL -RED 2 1 275500 GM NEW IMPREZZA SOLID - 2V BL 2 1 275500 GM GM NEW IMPREZZA SOLID 264250 BK - 2V BL 22 21 281500 NHKSTARTECH R-6 X-807 - SOLID CL YL FLO/BK 281500 GM NHK R-6 X-807 -SOLID CL YL FLO/BK 222 122 264250 286250 NHKSTARTECH REVENTOR SOLIDGUN WH 2 2 286250 NHK REVENTOR SOLID WH 272000 GM GM NEW NEW IMPREZZA IMPREZZA GEN SOLID- 2V - 2VBLBK/DOF 22 22 294750 MET BK 2 2 294750 GM NEW IMPREZZA GEN - 2V BL MET BK 272000 GM NHKNEW PREDATOR SOLID - CL- 2V WHRED/BK 22 21 294750 IMPREZZA GENT 2 2 294750 GM NEW IMPREZZA GENT - 2V RED/BK 22 21 294750 GM NEW IMPREZZA GENT 2V WH/BK 275500 2V WH/BK BL 2 2 294750 GM GM NEW NEW IMPREZZA IMPREZZA SOLID GENT -- 2V Cluster 6 2 2 281500 NHK R-6 X-807 - CL YL FLO/BK Kelompok Total Harga NHK REVENTOR SOLID WH Cluster 2 2 286250 Total Harga Cluster6 Kelompok Nama Barang Cluster Nama Barang Harga Quantity Jual Harga Quantity Jual GM NEW IMPREZZA GEN - 2V BL MET BK Cluster 6 2 2 294750 Cluster 76 12 12 145000 ASCA MOTIF PROTECH - 2V- 2V WH/YL Cluster 294750 GM NEW IMPREZZA GENT RED/BK Cluster 7 1 1 145000 ASCA MOTIF PROTECH - 2V WH/YL Cluster 76 294750 VOG GM NEW IMPREZZA - 2V Cluster 12 12 155000 XTRAIL SOLID - GENT CL RED F WH/BK Cluster 7 1 1 155000 VOG XTRAIL SOLID - CL RED F Cluster 7 1 1 170250 VOG TURBO SOLID - CL GUN M Cluster 7 1 1 170250 VOG TURBO SOLID - CL GUN M Total Harga VOG FREEWAY SOLID - 2V ICE BL Cluster 7 Kelompok 1 1 180500 Cluster 1 1 180500 VOG FREEWAY SOLID - 2VBarang ICE BL Cluster7 Nama Cluster 7 1 1 190500 EVO MICKEY MOUSE # 10 - WH Harga Quantity Jual GM Cluster 7 1 1 190500 GM EVO MICKEY MOUSE # 10 - WH Cluster 7 Kelompok 1 1 145000 Total Harga Harga Cluster Kelompok Total Cluster Harga Quantity Jual Harga Quantity Jual Cluster 7 1 1 155000 Cluster 8 1 2 116000 Cluster 78 116000 Cluster 11 12 170250 Cluster 8 1 2 133750 Cluster 78 1 2 133750 Cluster 180500 Cluster 8 11 21 145000 Cluster 8 1 2 145000 Cluster 190500 Cluster 87 11 21 147250 Cluster 8 1 2 147250 Cluster 8 1 2 151250 Cluster 8 1 2 151250 Cluster 8 Kelompok 1 2 153750 Total Harga Cluster 1 2 153750 Cluster88 Cluster 1 2 155000 Harga Quantity Jual Cluster 8 1 2 155000 Cluster 11 22 156250 Cluster 88 116000 156250 Cluster 8 1 2 157750 157750 Cluster 8 1 2 133750 62 ASCA MOTIF PROTECH - 2V WH/YL Nama Barang Nama Barang VOG XTRAIL SOLID - CL RED F GM TEEN SNOW WHITE #2 - SR WH GM TEEN SNOW WHITE #2 - SR VOG TURBO SOLID CL GUN M WH ASCA PREMIER SOLID - 2V RED F ASCAFREEWAY PREMIER SOLID -- 2V 2V RED F VOG ASCA MOTIF X-3 SOLID - 2V WH/GRICE BL ASCA MOTIF X-3 - 2V WH/GR GM EVO MICKEY VOG XTREAM - CLMOUSE PINK # 10 - WH VOG XTREAM - CL PINK MAZ TREVIA HELLO KITTY #3 WH MAZ TREVIA HELLO KITTY #3 WH MAZ TREVIA ANGRY BIRD # 1 SR - WH/RED MAZ TREVIA ANGRY BIRDBarang # 1 SR - WH/RED VOG XTRAIL SOLID -Nama CL BK VOG XTRAIL SOLID - CL BK VOG XTREAM 2 VSR SOLID/MEKANIK BLUE GM SNOW WHITE #2 - SR WH -- 2V VOGTEEN XTREAM 2 VSR SOLID/MEKANIK 2V BLUE VOG XTREAM 2 VSR SOLID/MEKANIK - 2V RED F VOG XTREAM ASCA PREMIER2 VSR SOLIDSOLID/MEKANIK - 2V RED F - 2V RED F Wilayah SLM Wilayah Wilayah SLM SLM SLM SLM SLM SLM YOG SLM SLM SLM YOG YOG SLM SLM SLM SLM YOG SLM YOG SLM YOG SLM SLM SLM SLM SLM SLM SLM SLM SLM SLM SLM SLM SLM SLM SLM SLM GKD GKD GKD Wilayah Wilayah Wilayah KUL KUL KUL KUL KUL KUL KUL KUL KUL KUL KUL SLM SLM SLM SLM SLM GKD SLM GKD YOG GKD YOG KUL KUL YOG SLM SLM KUL SLM SLM SLM SLM SLM SLM YOG YOG SLM SLM SLM KUL YOG KUL KUL SLM KUL SLM KUL SLM SLM SLM KUL YOG YOG SLM SLM SLM SLM YOG Wilayah Wilayah SLM GKD GKD SLM SLM Wilayah GKD GKD GKD GKD SLM SLM SLM SLM SLM GKD KUL KUL GKD SLM SLM SLM SLM SLM SLM SLM SLM KUL KUL KUL KUL SLM KUL YOG YOG SLM YOG YOG SLM KUL KUL KUL SLM SLM KUL GKD GKD YOG KUL KUL GKD YOG GKD KUL SLM Wilayah Wilayah GKD YOG KUL YOG GKD GKD GKD SLM SLM SLM SLM Wilayah SLM SLM YOG Wilayah Wilayah GKD GKD GKD SLM KUL KUL SLM KUL KUL SLM GKD GKD KUL KUL YOG YOG Wilayah GKD GKD GKD GKD KUL KUL Cluster 2 Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster2 2 Cluster Cluster 2 Cluster 2 2 22 22 22 22 22 22 22 42 42 44 44 4 4 11 1212 811 812 88 98 98 99 99 179 179 917 17 9 222750 222750 222750 222750 241250 222750 270250 241250 272000 270250 272000 272000 272000 272000 272000 272000 414000 272000 414000 414000 414000 414000 414000 414000 414000 VOG NAVIGATOR PICLET - 2V BK/RED VOGNAVIGATOR NAVIGATORPICLET PICLET- -2V2VBK/SIL BK/BL VOG VOG NAVIGATOR SOLID PICLET- -2V 2VWH BK/RED GM INTERCEPTOR VOGGLADIATOR NAVIGATORSOLID PICLET BK/SIL NHK - 2V- 2V GUN GMNEW INTERCEPTOR GM IMPREZZA SOLID SOLID -- 2V 2V WH BK NHK GLADIATOR - 2V GM NEW IMPREZZASOLID SOLID - 2VGUN GUN GM NEW IMPREZZA SOLID 2V BK RED GM NEW IMPREZZA SOLID - 2V RYL GM NEW IMPREZZA SOLID 2V GUN GM NEW IMPREZZA SOLID - 2V WH GMSUPERCROSS NEW IMPREZZA SOLID - 2V RED GM NEUTRON - NVRYL WH/GOLD GMSUPERCROSS NEW IMPREZZA SOLID - 2V GM NEUTRON - NVWH WH/GREEN GMSUPERCROSS SUPERCROSSNEUTRON NEUTRON- -NV NVWH/RED WH/GOLD GM GMSUPERCROSS SUPERCROSSNEUTRON NEUTRON- -WH/PP NV WH/GREEN GM GM SUPERCROSS NEUTRON - NV WH/RED GM SUPERCROSS NEUTRON - WH/PP YOG Cluster 6 YOG YOG SLM YOG SLM SLM SLM SLM KUL SLM SLM KUL YOG SLM SLM YOG SLM SLM GKD SLM GKD Cluster 6 2 1 264250 Cluster66 264250 Cluster 22 21 272000 Cluster 6 2 1 264250 Cluster 6 2 1 272000 Cluster66 272000 Cluster 22 12 275500 Cluster66 272000 Cluster 22 21 281500 Cluster66 275500 Cluster 22 21 286250 Cluster66 281500 Cluster 22 22 294750 Cluster66 286250 Cluster 22 22 294750 Cluster66 294750 Cluster 22 22 294750 Cluster 6 2 2 294750 Cluster 6 Kelompok 2 2 294750 Total Harga Cluster Harga Quantity Jual Kelompok Total Total Harga Kelompok Harga Cluster Cluster Cluster 7 1 1 145000 Harga Quantity Jual Harga Quantity Jual GM STARTECH SOLID GUN GMNEW STARTECH SOLID BK - 2V BK/DOF GM IMPREZZA SOLID GM PREDATOR STARTECH SOLID NHK SOLID GUN - CL WH GMNEW NEWIMPREZZA IMPREZZASOLID SOLID- -2V 2VBL BK/DOF GM NHK PREDATOR SOLID - CL WH NHK R-6 X-807 - CL YL FLO/BK GM REVENTOR NEW IMPREZZA SOLID NHK SOLID WH - 2V BL NHK R-6 IMPREZZA X-807 - CL YL FLO/BK GM NEW GEN - 2V BL MET BK NHK REVENTOR SOLID WH GM NEW IMPREZZA GENT - 2V RED/BK GM NEW IMPREZZA GEN 2V WH/BK BL MET BK GM NEW IMPREZZA GENT -- 2V GM NEW IMPREZZA GENT - 2V RED/BK GM NEW IMPREZZA GENT - 2V WH/BK Nama Barang Cluster 111 11 155000 Cluster777 145000 Cluster 145000 Cluster 7 1 1 170250 Cluster 77 11 1 155000 Cluster 155000 Cluster 7 1 1 180500 Cluster 1 1 170250 Cluster777 170250 Cluster 11 11 190500 Cluster 11 11 180500 Cluster77 180500 Cluster 7 1 1 190500 Cluster 7 Kelompok 1 1 190500 Total Harga Cluster Harga Quantity Jual Kelompok Total Harga Cluster 8 1 2 116000 Cluster Harga Quantity Jual Cluster 8 1 2 133750 Cluster88 116000 Cluster 11 22 145000 Cluster88 133750 Cluster 11 22 147250 Cluster88 145000 Cluster 11 22 151250 Cluster88 147250 Cluster 11 22 153750 Cluster88 151250 Cluster 11 22 155000 Cluster88 153750 Cluster 11 22 156250 Cluster88 155000 Cluster 11 22 157750 Cluster88 156250 Cluster 11 22 170250 Cluster88 157750 Cluster 11 22 171250 Cluster88 170250 Cluster 11 22 172250 Cluster88 171250 Cluster 11 22 173750 Cluster88 172250 Cluster 11 22 180250 Cluster88 173750 Cluster 11 22 180250 Cluster88 180250 Cluster 11 22 180500 Cluster88 180250 Cluster 11 22 180500 Cluster88 180500 Cluster 11 22 180500 Cluster88 180500 Cluster 11 22 187750 Cluster88 180500 Cluster 11 22 187750 Cluster88 187750 Cluster 11 22 187750 Cluster88 187750 Cluster 11 22 190500 Cluster 8 1 2 187750 Cluster 8 1 2 190500 VOG XTRAIL SOLID - CL RED ASCA MOTIF PROTECH - -2V ASCA MOTIF PROTECH 2VFWH/YL WH/YL VOG TURBO SOLID - CL GUN M VOG XTRAIL XTRAILSOLID SOLID- -CL CLRED REDFF VOG VOG FREEWAY SOLID - 2V ICE BL VOG TURBO TURBOSOLID SOLID- -CL CL GUNMM VOG GM EVO MICKEY MOUSEGUN # 10 - WH VOG FREEWAY FREEWAYSOLID SOLID- -2V 2VICE ICEBL BL VOG GM EVO MICKEY MOUSE WH GM EVO MICKEY MOUSE ##1010- -WH Nama Barang Kelompok Total Harga Quantity Total Cluster 3 Kelompok 1 6 Cluster Harga Quantity Cluster 3 1 5 Cluster 3 1 Cluster 3 1 56 Cluster 3 1 Cluster 3 1 75 Cluster3 3 Cluster 11 65 Cluster 3 1 7 Cluster 11 66 Cluster3 3 Harga Jual Harga 133750 Jual 155000 133750 155000 155000 155250 155000 157750 155250 167500 157750 ASCA PREMIER SOLID - 2VBarang PP Nama VOG XTRAIL SOLID - CL GUN M ASCA PREMIER SOLID 2V VOG XTRAIL SOLID - CL WH PP VOGXTREAM XTRAIL SOLID - CL GUN M VOG 2VSR SOLID/MEKANIK-2V BK VOGXTREAM XTRAIL SOLID CL WH VOG 2 VSR -SOLID/MEKANIK - 2V PINK VOG XTREAM 2VSR SOLID/MEKANIK-2V BK GM EVO SOLID 2- SR CUTE VOG XTREAM VSRPINK SOLID/MEKANIK - 2V PINK KUL Wilayah GKD KUL GKD GKD KUL GKD GKD KUL SLM GKD Cluster Cluster3 3 Cluster 3 Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster3 3 Cluster Cluster 3 Cluster 3 180250 167500 206750 180250 209750 206750 225750 209750 225750 225750 241250 225750 241250 241250 270250 241250 270250 270250 272000 270250 272000 272000 272000 272000 277750 272000 277750 277750 350000 277750 417000 350000 425500 417000 425500 MAZ * SOLID - 2VCUTE GUN GM PRIUSS EVO SOLID - SR RPINK VOG NAVIGATOR SOLID - 2V RYL RED MAZ PRIUSS * SOLID R 2V GUN VOG NAVIGATOR SOLID - 2V BK/DOF VOGNAVIGATOR NAVIGATORPICLET SOLID -- 2V 2V WH/BL RYL RED VOG VOGNAVIGATOR NAVIGATORPICLET SOLID -- 2V 2V WH/SIL BK/DOF VOG VOG NAVIGATOR SOLID PICLET- -2V 2VBK WH/BL GM INTERCEPTOR VOG NAVIGATOR SOLID PICLET- -2V 2VGUN WH/SIL GM INTERCEPTOR M GM GLADIATOR INTERCEPTOR SOLID NHK SOLID - 2V- 2V BK BK GM INTERCEPTOR SOLID 2V GUN M NHK GLADIATOR SOLID - 2V PP NHKPREDATOR GLADIATORSOLID SOLID- CL - 2VBKBK NHK NHKPREDATOR GLADIATORSOLID SOLID- CL - 2VGUN PP M NHK NHKPREDATOR PREDATORSOLID SOLID- -CL CLRYL BK RED NHK NHKR6 PREDATOR - CL GUN M NHK LOTUSS - SOLID ORG/FLO NHKR-6 PREDATOR SOLID - CL RYL RED NHK ROSSI - CL GR/FLO NHKGP R61000 LOTUSS - ORG/FLO NHK SOLID - 2V WH NHKGODZILLA R-6 ROSSISOLID - CL GR/FLO NHK - 2V BK NHKTERMINATOR GP 1000 SOLID - 2V WH NHK LOTUS 2V - WH NHK GODZILLA SOLID - 2V BK NHK TERMINATOR LOTUS 2V - WH GKD SLM GKD GKD GKD GKD YOG GKD YOG YOG KUL YOG YOG KUL SLM YOG SLM SLM YOG SLM YOG YOG YOG YOG SLM YOG SLM SLM YOG SLM SLM YOG YOG SLM YOG Cluster 11 2 21 22 22 22 22 22 22 22 22 22 22 22 32 42 43 4 4 66 6 66 56 66 75 56 77 75 67 67 56 66 55 56 75 55 7 5 2 2 252750 NHK X-2 SOLID - 2V RYL RED KUL Cluster66 240750 GM NHK R-6 RALLYSOLID - CL WH/BL YOG Cluster 22 11 264250 STARTECH BK PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI YOG Cluster 6 2 2 252750 NHK X-2 SOLID - 2V RYL RED Nama Barang Wilayah Gambar 21 Nama Nama Barang ASCA MOTIF PROTECH - 2VBarang WH/YL GM TEEN SNOW WHITE #2 Barang - SR WH Nama ASCA PREMIER SOLID - 2V RED F GM TEEN SNOW WHITE #2 ASCA MOTIF X-3 - 2V WH/GR- SR WH ASCA PREMIER VOG XTREAM - CLSOLID PINK - 2V RED F ASCA MOTIFHELLO X-3 - 2V WH/GR MAZ TREVIA KITTY #3 WH VOGTREVIA XTREAM - CL PINK MAZ ANGRY BIRD # 1 SR - WH/RED MAZ TREVIA HELLO KITTY VOG XTRAIL SOLID - CL BK #3 WH MAZXTREAM TREVIA ANGRY BIRD # 1 SR - WH/RED VOG 2 VSR SOLID/MEKANIK - 2V BLUE VOGXTREAM XTRAIL SOLID CL BK VOG 2 VSR -SOLID/MEKANIK - 2V RED F VOG XTREAM 2 VSR SOLID/MEKANIK - 2V BLUE VOG TURBO SOLID - CL PP VOG XTREAM 2 VSR SOLID/MEKANIK - 2V RED F MIX SPORTY SOLID - 2V BK VOGTURBO TURBOSOLID SOLID- -CL CLBK/DOF PP VOG MIXSPORTY SPORTYSOLID SOLID- -2V 2VRYL BK RED MIX VOGPRIUSS TURBO*SOLID BK/DOF MAZ SOLID-RCL- 2V BK MIX PRIUSS SPORTY* SOLID RYL RED MAZ SOLID -R2V- 2V WH MAZ PRIUSS * SOLID R 2V BK VOG FREEWAY SOLID - 2V PP MAZFREEWAY PRIUSS * SOLID - 2VRYL WHRED VOG SOLIDR- 2V VOGFREEWAY FREEWAYSOLID SOLID- -2V 2VWH PP VOG VOG FREEWAY SOLID#3- -2V RED GM EVO ANGRY BIRD SRRYL WH/RED VOG FREEWAY SOLID# -32V WH GM EVO HELLO KITTY - WH GMEVO EVOROSSI ANGRY BIRD GM - SR BK#3 - SR WH/RED GMEVO EVOHELLO HELLOKITTY KITTY#4# WH 3 - WH GM GM EVO ROSSI - SR BK GM EVO HELLO KITTY #4 WH Gambar 5.11. Karakter cluster Untuk penamaan masing-masing cluster yang telah terbentuk dapat berdasarkan karateristik dari masing-masing cluster, dalam penelitian ini dapat menggunakan statistik rata-rata. Cluster satu dan dua dapat dinamakan kelompok total pembelian sangat tinggi, karena kedua kelompok ini memiliki nilai rata-rata terbesar terhadap total quantitynya dan jenis produk yang dipasarkan dominan berada di wilayah Sleman. Cluster tiga dapat dinamakan kelompok total pembelian tinggi, karena kelompok ini memiliki nilai rata-rata tinggi terhadap total quantitynya setelah cluster satu dan dua dan produk yang dipasarkan dominan di wilayah Yogyakarta. Cluster empat dan lima dapat dinamakan kelompok total pembelian sedang, karena kedua kelompok ini memiliki nilai ratarata sedang terhadap total quantitynya setelah cluster tiga dan dua dan wilayah pemasaran dari cluster ini berada di wilayah Sleman dan Kulonprogo. Cluster 63 SLM SLM SLM SLM KUL SLM KUL KUL YOG KUL YOG YOG KUL YOG SLM KUL GKD SLM KUL GKD GKD KUL GKD Wilayah Wilayah Wilayah YOG GKD YOG YOG SLM GKD GKD SLM GKD SLM SLM GKD SLM SLM SLM Wilayah GKD Wilayah KUL GKD KUL KUL GKD KUL KUL GKD YOG KUL GKD YOG GKD GKD KUL GKD SLM KUL GKD SLM GKD GKD KUL GKD GKD KUL GKD GKD SLM GKD KUL SLM KUL KUL GKD KUL YOG GKD KUL YOG KUL KUL KUL PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI enam dapat dinamakan kelompok total pembelian rendah, karena kelompok ini memiliki nilai rata-rata rendah terhadap total quantitynya dan wilayah pemasaran produk dari cluster ini berada di wilayah Kulonprogo. Cluster tujuh dan delapan dapat dinamakan kelompok total pembelian sangat rendah, karena kelompok ini memiliki nilai rata-rata paling rendah terhadap total quantitynya diantara cluster lainya dan produk yang dipasarkan dominan di wilayah Gunungkidul. Dari analisis diatas Dapat disimpulkan untuk wilayah pemasarannya diantaralain, cluster satu, dua dan empat di kota Sleman, cluster tiga di kota Yogyakarta, cluster lima dan enam di kota Kulonprogo, dan cluster tujuh dan delapan di kota Gunungkidul Untuk mengetahui ketepatan sistem dalam melakukan proses pengelompokan, sebelumnya telah dilakukan pengelompokan terhadap 159 data dan menghasilkan 8 cluster, selanjutnya akan dilakukan percobaan pembentukan cluster ulang dengan menambahkan 20 data baru, percobaan ini dilakukan untuk mengetahui apakah data baru tersebut masuk di dalam cluster yang tepat atau tidak. Berikut ini adalah daftar 20 data baru. 64 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI noFaktur kodeBarang namaBarang MC1150123007 0201006047ASCA ASTRO SOLID RYL RED MC1150114007 0609707311GM TEEN HELLO KITTY #2 - SR WH MC1150130001 0503328154VOG XTREAM - CL ICE BL MC1150115003 0502604106VOG XTRAIL SOLID - CL GUN M MC1150108001 0605707227GM EVO SOLID - SR WH MC1150302002 0605730219GM EVO SOLID - SR DGM MC1150113003 0502307090VOG FREEWAY SOLID - 2V WH MC1150107001 0604501199GM FIGHTER SOLID - SR BK MC1150122003 0502828122VOG NAVIGATOR SOLID - 2V ICE BL MC1150119003 0503212143VOG NAVIGATOR PICLET - 2V BK/SIL MC1150121001 0604004181GM INTERCEPTOR SOLID - 2V GUN M MC1150120001 0609217298GM STARTECH SOLID GUN MC1150107004 0604106193GM NEW IMPREZZA SOLID - 2V RYL RED MC1150114006 0603866495GM NEW IMPREZZA GEN - 2V BL MET BK MC1150109004 0713207407NHK PREDATOR 2 VISOR SOLID - 2V WH MC1150107005 0713207407NHK PREDATOR 2 VISOR SOLID - 2V WH MC1150119004 0712107360NHK GP 1000 SOLID - 2V WH MC1150113004 0608913287GM SUPERCROSS NEUTRON - NV WH/RED MC1150112001 0713822423NHK TERMINATOR RX 805 - 2V WH/SIL MC1150123004 0717007476NHK TERMINATOR LOTUS 2V - WH satuan pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs pcs size 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 hargaJualquantity 101500 1 116000 2 147250 2 155000 2 167500 1 170000 2 180500 2 204000 2 209750 1 225750 2 241250 1 264250 1 275500 1 294750 1 314750 1 318750 1 350000 1 418750 1 420500 1 425500 2 Gambar 22 discount 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 discountReal discount2 total 0 0 101500 0 0 232000 0 0 294500 0 0 310000 0 0 167500 0 0 340000 0 0 361000 0 0 408000 0 0 209750 0 0 451500 0 0 241250 0 0 264250 0 0 275500 0 0 294750 0 0 314750 0 0 318750 0 0 350000 0 0 418750 0 0 420500 0 0 851000 urut 2 2 1 5 2 8 10 4 15 4 3 8 11 7 4 12 1 4 12 7 hpp 92000 208000 265000 277000 153500 307000 325000 374000 189500 409000 221500 240000 250000 267500 290000 290000 317000 380500 386000 772000 hppdpp 92000 208000 265000 277000 153500 307000 325000 374000 189500 409000 221500 240000 250000 267500 290000 290000 317000 380500 386000 772000 hargasatuan sisapesan statusReturOrder statusNotaKredit nourut 101500 0 N N 980 116000 0 N N 800 147250 0 N N 432 155000 0 N N 272 167500 0 N N 624 170000 0 N N 830 180500 0 N N 220 204000 0 N N 157 209750 0 N N 975 225750 0 N N 900 241250 0 N N 919 264250 0 N N 304 275500 0 N N 602 294750 0 N N 786 314750 0 N N 700 318750 0 N N 621 350000 0 N N 902 418750 0 N N 745 420500 0 N N 191 425500 0 N N 373 Gambar 5.12. Data Baru Dari data baru pada Gambar 5.12 menghasilkan pengelompokan baru seperti pada Tabel 5.8: Tabel 17 Tabel 5.8. Hasil Clustering Divisive untuk penambahan data baru Cluster Cluster 1 Cluster 2 Cluster 3 Cluster 4 Cluster 5 Cluster 6 Cluster 7 Cluster 8 Jumlah anggota 20 29 31 13 22 18 5 21 Pada Tabel 5.8 adalah hasil yang diperoleh dari proses pengelompokan ulang, selanjutanya akan dicek apakah ke-20 data tersebut sudah masuk kedalam cluster yang sama dengan percobaan sebelumnya. Pada Gambar 5.13 adalah hasil pengelompokannya: 65 kodeCanvaser KelompokHar KUL 0 YOG 0 SLM 0 GKD 0 SLM 0 SLM 0 KUL 0 SLM 0 SLM 0 YOG 0 YOG 0 KUL 0 KUL 0 GKD 0 SLM 0 SLM 0 YOG 0 SLM 0 SLM 0 YOG 0 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Cluster Lama ASCA ASTRO SOLID RYL RED GM TEEN HELLO KITTY #2 - SR WH VOG XTREAM - CL ICE BL VOG XTRAIL SOLID - CL GUN M GM EVO SOLID - SR WH GM EVO SOLID - SR DGM GM FIGHTER SOLID - SR BK VOG NAVIGATOR PICLET - 2V BK/SIL GM NEW IMPREZZA SOLID - 2V RYL RED VOG NAVIGATOR SOLID - 2V ICE BL GM INTERCEPTOR SOLID - 2V GUN M GM STARTECH SOLID GUN NHK GP 1000 SOLID - 2V WH NHK TERMINATOR RX 805 - 2V WH/SIL NHK TERMINATOR LOTUS 2V - WH Gambar 23 Cluster Cluster Cluster 2 Cluster 1 Cluster 1 Cluster 3 Cluster 2 Cluster 2 Cluster 1 Cluster 2 Cluster 2 Cluster 5 Cluster 3 Cluster 6 Cluster 3 Cluster 4 Cluster 3 Cluster 2 Cluster 1 Cluster 1 Cluster 3 Cluster 2 Cluster 2 Cluster 1 Cluster 2 Cluster 2 Cluster 5 Cluster 3 Cluster 6 Cluster 3 Cluster 4 Cluster 3 Cluster baru ASCA ASTRO SOLID RYL RED GM TEEN HELLO KITTY #2 - SR WH VOG XTREAM - CL ICE BL VOG XTRAIL SOLID - CL GUN M GM EVO SOLID - SR WH GM EVO SOLID - SR DGM GM FIGHTER SOLID - SR BK VOG NAVIGATOR PICLET - 2V BK/SIL GM NEW IMPREZZA SOLID - 2V RYL RED VOG NAVIGATOR SOLID - 2V ICE BL GM INTERCEPTOR SOLID - 2V GUN M GM STARTECH SOLID GUN NHK GP 1000 SOLID - 2V WH NHK TERMINATOR RX 805 - 2V WH/SIL NHK TERMINATOR LOTUS 2V - WH Gambar 5.13. Hasil Cluster Ulang Hasilnya 15 dari 20 data baru yang di cluster ulang masuk ke dalam cluster yang sama dan 5 data lainnya masuk ke dalam cluster yang berbeda. Percobaan ini bertujuan untuk mengetahui seberapa akuratnya sistem dalam membentuk sebuah cluster. 66 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BAB VI PENGUJIAN SISTEM BAB VI PENGUJIAN SISTEM Pada bab ini akan dijelaskan mengenai pengujian yang dilakukan, berikut tahapa-tahapan yang dilakukan dalam pengujian sistem: 6.1. Rencana Pengujian Hanya akan dilakukan satu jenis pengujian dalam sistem ini, yaitu pengujian menggunakan blackbox. Pengujian menggunakan metode blackbox berkaitan dengan pengujian terhadap antarmuka sistem. Mencangkup pengujian apakah semua fungsi-fungsi sistem berjalan dengan sesuai dengan kebutuhan fungsional yang telah di definisikan. Berikut ini merupakan tabel rencana pengujian blackbox yang akan di lakukan pada masing-masing kelas dalam sistem ini. Tabel 18 No. 1 Tabel 6.1. Rencana pengujian Blackbox Kelas Uji HalamanUtama Butir Uji Melakukan input range Jenis Pengujian batas Blackbox Menampilkan data dari file yang Blackbox kelompok harga berekstensi .csv Melakukan clustering Blackbox Menampilkan hasil clustering Blackbox Menjalankan fungsi simpan hasil Blackbox pengelompokan 67 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 6.1.1. Hasil Pengujian Black-box 1. Pengujian Input Range Harga Berikut ini merupakan data pengujian untuk Input Range Harga pada kelas HalamanUtama. Tabel 19 Tabel 6.2. Tabel Pengujian input range harga Kasus dan Hasil Uji (Data Benar) No 1 Aktifitas yang Keluaran yang Hasil yang dilakukan diharapkan diharapkan Input nilai batas Data berhasil di Data berhasil atas dan batas simpan kedalam di Diterima simpan bawah mulai dari tabel kedalam tabel kelompok kategori_nilai 1 kategori_nilai Kesimpulan sampai kelompok 5 Kasus dan Hasil Uji (Data Salah) 1 Input nilai batas Menampilkan atas dan bawah Pesan batas pesan error kesalahan pada bahwa nilai berhasil masing-masing range kelompok mengandung Diterima harga ditampilkan mengandung sifat gabungan gabungan 2 Input nilai batas Menampilkan atas bawah dan Pesan batas pesan error kesalahan pada bahwa nilai berhasil setiap kelompok range harga ditampilkan ada yang kosong boleh tidak kosong 68 Diterima PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2. Pengujian Input Data Berikut ini merupakan data pengujian untuk Input Data pada kelas HalamanUtama. Tabel 20 Tabel 6.3. Tabel Pengujian input Data Kasus dan Hasil Uji (Data Benar) No 1 Aktifitas yang Keluaran yang Hasil yang dilakukan diharapkan diharapkan Memasukan data Data berhasil di Data dari file yang seleksi berekstensi .csv Kesimpulan Diterima dan ditampilkan ditampilkan dalam tabel dalam tabel Kasus dan Hasil Uji (Data Salah) 1 Memasukan data Menampilkan dari file yang pesan Pesan error kesalahan berekstensi selain bahwa file yang berhasil .csv dimaksukan tidak sesuai dengan format 69 ditampilkan Diterima PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 3. Pengujian Simpan Hasil Pengelompokan Berikut ini merupakan data pengujian untuk Simpan Hasil Pengelompokan pada kelas HalamanUtama. Tabel 21 Tabel 6.4. Tabel Pengujian Clustering Kasus dan Hasil Uji (Data Benar) No 1 Aktifitas yang Keluaran yang Hasil yang dilakukan diharapkan diharapkan Menekan button directory yang File simpan pilih tersimpan dan telah melakukan oleh penyimpanan user file di Diterima dengan ekstensi berhasil .doc dengan tersimpan ekstensi .doc berhasil Kesimpulan file dengan ekstensi .doc Menekan button directory yang File simpan pilih tersimpan dan telah melakukan oleh penyimpanan user file di Diterima dengan ekstensi berhasil .xls dengan tersimpan ekstensi .xls berhasil file dengan ekstensi .xls Kasus dan Hasil Uji (Data Salah) 1 - - 70 - - PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 6.1.2. Kesimpulan Hasil Pengujian Black-box Berdasarkan hasil pengujian yang telah dikakukan dapat disimpulkan bahwa sistem ini dapat menangani error ketika fungsi yang dijalankan salah atau tidak seseuai dengan aturan pemakaiannya, sedangakan secara fungsional sistem ini dapat berjalan dengan baik dan menghasilkan keluaran yang sesuai dengan yang diharapkan 6.2.Kelebihan dan Kekurangan Sistem 6.2.1. Kelebihan Sistem Kelebihan dari sistem prediksi penjualan helm menggunakan algoritma hierarchical divisive ini adalah: 1. Sistem dapat menyeleksi atribut secara otomatis. 2. Sistem menampilkan hasil clustering yang mudah dipahami oleh user. 3. Sistem mampu menampilkan waktu lama pembentukan cluster. 4. Sistem ini dapat mentimpan hasil sesuai pada tabel informasi cluster denga hasil penyimpanan berupa file bertipe .xls, .doc, .txt. 6.2.2. Kekurangan Sistem Kekurangan dari sistem prediksi penjualan helm menggunakan algoritma hierarchical divisive ini adalah: 1. Sistem tidak dapat menambahkan jumlah kategori kelompok harga. 2. Sistem hanya dapat menerima masukan file bertipe .csv. 71 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 3. Sistem tidak dapat menerima masukan dari tabel di database MySql ataupun Oracle. 4. File csv harus merupakan hasil ekspor dari database MySQl tabel detailpenjualancanvaser diharuskan baris pertama adalah nama kolom dan baris seterusnya adalah datanya, dengan ketentuan ekspor Escaped by „\‟, Lines Terminated by „\r\n‟ dan Fields terminated by ‟,‟. 72 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BAB VII PENUTUP BAB VII PENUTUP 7.1. Kesimpulan Hasil penelitian sistem prediksi penjualan helm menggunakan algoritma hierarchical divisive ini menghaslikan kesimpulan sebagai berikut: 1. Sistem ini digunakan untuk melakukan pengelompokan produk dengan menggunakan metode divisive clustering yang digunakan untuk memrediksi pendistribusian produk helm. 2. Algoritma divisive yang yang diterapkan dapat mengelompokan data untuk memprediksi penjualan helm dengan menunjukkan nilai sum of square error terendah dalam percobaan pengelompokannya. Pembentukan kelompok menghasilkan 8 buah cluster. 3. Nilai dari SSE bergantung pada jumlah data dan jumlah cluster yang dihasilkan, semakin maksimal jumlah cluster yang dihasilkan maka nilai SSE semakin kecil. 4. Semakin banyak jumlah cluster yang dihasilkan dari proses divisive clustering akan memberikan lebih banyak pula pisihan untuk menentukan strategi pasar untuk kedepannya. 73 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 7.2. Saran Berdasarkan hasil pengujian dan analisa pada tugas akhir ini, penulis memberikan saran untuk pengembangan penilitian secara lebih lanjut, antara lain: 1. Sistem ini diharapkan dapat dikembangkan agar mampu menerima inputan file selain tipe csv atau dapat langsung mengambil sumber data dari database yang terkait. 2. Hasil clustering dapat divisualkan jauh lebih baik dan lengkap sehingga lebih interaktif dan lebih mudah dipahami(misal dendogram atau report karakter cluster). 3. Algoritma yang dibuat pada sistem ini terbatas dalam pengolahan cluster dalam jumlah data yang besar. Kedepannya diharapkan pengembangan algoritma divisive dapat di buat lebih akurat, cepat, detail, dan efektif dalam mengolah data yang besar. 4. Penyimpanan hasil clustering dapat dibuat dengan yang lebih relevan sesuai dengan kebutuhan. 74 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI DAFTAR PUSTAKA Al Fatta, Hanif. 2007. Analisa dan Perancangan Sistem Informasi. Yogyakarta, Andi. Budi Santosa. Data Mining : Teknik Pemanfaatan Data Untuk Keperluan Bisnis. Graha Ilmu, Yogyakarta, 2007. Han & Kamber. 2006. Data Mining Concepts and Techniques Edisi ke-2. San Fransisco : Morgan Kaufmann publisher. Larose , Daniel T, 2005, Discovering Knowledge in Data: An Introduction to Data Mining, John Willey & Sons. Inc. Lior Rokach, “Data Mining And Knowledge Discovery Handbook, Chapter 15: Methods”. Clustering Available http://www.ise.bgu.ac.il/faculty/liorr/hbchap15.pdf at: [Diakses tanggal 25 Januari 2015] Munir, Rinaldi. 2004. Matematika Diskrit. Pramudiono, I., 2006, Apa itu data mining?, http://datamining.japati.net/cgibin/indodm.cgi?bacaarsip&1155527614&artik el, tanggal terakhir akses 16 Januari 2007. Prasetyo, E. (2014). Data Mining: Pengolahan Data Menjadi Informasi Menggunakan Matlab.Yogyakarta: Andi Veronika S. Moertini. Data mining sebagai solusi bisnis. In INTEGRAL, volume 7, April 2002. 75 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI LAMPIRAN 1 DIAGRAM USE CASE Input kelompo Harga Input data User Proses Clustering Simpan hasilClustering Definisi Aktor No Aktor Deskripsi 1 User Aktor ini dapat range kelompok harga jual, melakukan proses input data, melakukan proses klaster dan simpan hasil pengelompokan. Definisi Use Case Nomor Use Case Nama Use Case 001 Deskripsi Input kelompok Use case ini menentukan range kelompok harga harga untuk mengeset kelompok harga data penjualan nantinya. 002 Input data Use case mengingputkan data penjualan yang sudah di ekspor dari database yang berformat csv. 003 Proses clustering Use case menggambarkan proses dimana user melakukan proses cluster terhadap data penjualan yang ada. 004 Simpan hasil Use case ini menggambarkan user melakukan cluster simpan hasil pola cluster yang telah dilakukan 76 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI LAMPIRAN 2 NARASI USE CASE Nama Use Case Input kelompok harga Nomor Use Case 001 Actor User Deskripsi Use Case Use case ini menggambarkan penentuan kelompok range harga. Kondisi Awal Tampil halaman home Kondisi Akhir Sistem menyimpan data kelompok range harga. Langkah Umum Actor Sistem Langkah 1: sistem menampilkan halaman utama. Langkah 2: User menginputkan range batas kelompok harga. Langkah 3: User menginputkan batas bawah kelompok satu dan batas atas harga kelompok 1. Langkah 4: User menginputkan batas bawah kelompok satu dan batas atas harga kelompok 2. Langkah 5: User menginputkan batas bawah kelompok satu dan batas atas harga kelompok 3. Langkah 6: User menginputkan batas bawah kelompok satu dan batas atas harga kelompok 4. 77 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Langkah 7: User menginputkan batas bawah kelompok satu dan batas atas harga kelompok 5. Langkah 8: User mengklik tombol “Simpan”. Langkah 9: menyimpan kelompok sistem akan range harga ke table kategori_nilai. Langkah 10: sistem akan pindah ke tab preprosesing. Langkah Alternatif Alt-Lagkah 2: jika user tidak benar menginputkan jumlah harga sistem akan menempilkan peringatan jika user salah memasukan harga. Alt-Lagkah 3- Alt-Lagkah 7: jika user menginputkan jumlah harga lebih kecil dari batas harga kelompok sebelumnya sistem akan menampikan peringatan jika range harga sistem akan menempilkan peringatan jika batas harga tidak sesuai. Kesimpulan Use case ini akan berhenti apabila user telah menginputkan batas harga yang sesuai. Use case ini tidak akan menyimpan batas nilai kelompok harga jika batas nilai kelompok selanjutnya lebih kecil dari batas nilai kelompok sebelum-sebelumnya. 78 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Nama Use Case Input data Nomor Use Case 002 Actor User Deskripsi Use Case Use case ini melakukan proses input data berupa file csv hasil eksport dari table detail penjualan. Kondisi Awal Nilai-nilai batas kelompok harga berhasil di simpan dan Tampil halaman home tab preprosesing. Kondisi Akhir Sistem melakukan proses sleksi atribut, pelabelan kelompok harga dan pegelompokan data berdasarkan nama barang. Langkah Umum Actor Sistem Langkah 1: Manager mengklik “Pilih File”. Langkah 2: menampilkan Sistem file chooser untuk memasukan file. Langkah 3: User sistem melakukan pencarian file yang akan digunakan. Langkah 4: menampilkan Sistem data yang dimasukan kedalam tabel data Langkah 5: User mengklik tombol “Submit”. Langkah 6: Sistem mensleksi atribut yang diperlukan terhadap penelitian, lalu sistem 79 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI memberi label pada kelompok harga sesuai dengan batas nilai kelompok yang sudah ditentukan, lalu sistem menampilkan data pada table sleksi sesuai dengan isi file yang telah dipilih. Langkah 7: User mengklik tombol “Preprocessing”. Langkah 6: Sistem melakukan akan proses pengelompokan nama barang yang sama dan menjumlahkan quantity-nya Berdasarkan tiap kelompoknya. Langkah 7: menampilkah Sistem akan hasil data sistem akan preprosesing. Langkah 8: User mengklik tombol “Cluster” Langkah 9: melakukan proses clustering Langkah Alternatif Alt-Lagkah 3: jika user menginputkan file selain file yang bertipe .CSV sistem akan error dan memberi peringatanberupa file inputan harus bertipe csv. Alt-Lagkah 5: jika user mengklik tombol “BATAL” sistem akan 80 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI membatalkan proses input data. Kesimpulan Use Case ini memulai proses input data, memberi label kelompok untuk digunakan pada proses preprosesing data. Nama Use Case Proses Clustering Nomor Use Case 003 Actor User Deskripsi Use Case Use case ini melakukan proses preprocessing Kondisi Awal Data hasil preprocessing siap digunakan untu proses clustering Kondisi Akhir Hasil dari data penjualan yang diproses oleh sistem berhasil membentuk cluster Langkah Umum Actor Sistem Langkah 1: Sistem akan melakukan proses pengclusteran, sistem menampilkan hasil cluster pada table cluster, serta menampilkan label dan jumlah cluster pada masing-masing tabelnya. Langkah Alternatif - Kesimpulan Use Case ini adalah proses dari data mining menggunakan algoritma hierarki divisive. 81 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI LAMPIRAN 3 DIAGRAM AKTIVITAS 1. Diagram aktivitas input range harga user menginputkan nilai batas atah dan batas bawah harga tiap kelompok T Y Mengecek nilai inputan masing-masing kelompok Sistem menyimpan nilai kelompok harga di database 82 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 2. Diagram aktivitas input data file Menklik timbol "Pilih file" menampilkan file chooser untuk memasukkan file mencari file yang digunakan menyeleksi atribut lalu menampilkan data pada tabel data sesuai dengan isi file mengklik tombol "Submit" melakukan treanformasi data lalu menampilkan hasil preprosesing pada tabel di tab Clustering mengklik tombol "proses" melakukan proses clustering 83 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 3. Diagram Aktivitas clustering melakukan proses cluster menampilkan hasli cluster pada tabel 84 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 4. Diagram Aktivitas Simpan Hasil Deteksi Outlier mengklik tombol "SIMPAN" menampilkan dialog pemilihan direktori penyimpanan menentukan lokasi penyimpanan mengisikan nama file menyimpan hasil cluster kedalam file dalam direktori yang terpilih memilih ekstensi penyimpanan file 85 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI LAMPIRAN 4 Diagram Sequence Input nilai Range harga <<Controller>> controlRangeHar ga <<Entity>> RangeHarga <<view>> HalamanUtama User 1. Menampilkan HalamanUtama Tab Range Harga 6. prosesInsertRange(RangeHarga range) 2. HalamanUtama.lihatRangeHarga() 3. mengisi semua nilainilai batas kelompok 4. cekInputRangeHarga() 5. cekIsiData() 7. prosesUpdateRange(RangeHarga range) Diagram Sequence Input Data File <<view> HalamanUtama User 1. Menekan tombol "Pilih File" 2. Menampilkan kotak dialog File chooser 3. Memilih file bertipe .csv 4. pilihFileB utton Ac tion Per fo rmed(java.awt.event.ActionEven t evt) 5. Menapilkan data inputan di tabel data 6. Menekan tombol "Submite" 7.Inpu tPrepro sesData(tabelInputData); 8. Menapilkan data Seleksi di tabel seleksi 9. Menekan tombol "Preprocessing" 10.SubmitPreprosesing(); 11. Menapilkan data preprocessing di tabel preprocessing 86 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Diagram Sequence Proses Cluster <<view>> HalamanUtama User <<Control>> ControlRangeHarga <<Entity>> Graph 1. Menekan tombol "Cluster" 2. crlharga.deletePreproses(); 3. graph.inputDa ta(dataKelompokHargaTable); 5. LostClustering2(int iterasi) 4. graph.LostClustering(); 6. SimpanCluster( ArrayList<String> list, int Iter, Double Data, double sse) 7. SimpanSubCluster( ArrayList<String> list, int Iter, Double Data, double sse) 9. SimpanCluster( ArrayList<String> list, int Iter, Double Data, double sse) 11. TampilLabel(); 10. SimpanSubCluster( ArrayList<String> list, int Iter, Double Data, double sse) 12. TampilJML(); 13. TampilSSE(); 14. pop_tree(); 87 8. LostClustering3(int iterasi) PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Diagram Sequence Simpan Hasil Cluster <<view>> HalamanUtama User 1. Menekan tombol "Simpan" 2. Menampilkan kotak dialog penyimpanan 3. Memilih direktori penyimpanan 4. Mengisi nama file hasil penyimpanan 5. Memilih tipe file hasil penyimpanan jButtonSimpanActionPer formed(java.awt.event.ActionEvent evt) 7. Menampilkan pesan berhasil di simpan 88 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI LAMPIRAN 5 DIAGRAM KELAS DESAIN 89 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 90 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 91 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 92 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 93 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 94 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI LAMPIRAN 6 1. Rincian algoritma pada setiap method pada kelas KoneksiDB Nama Method Fungsi Algoritma KoneksiDB() Method ini digunakan 1. Mengambil parameter url, userid, dan untuk mengkoneksikan bukaKoneksi() password untuk membuat koneksi. 2. Jika benar, sistem akan mengembalikan nikai sistem ke koneksi dan berhasil terkoneksi dengan database database MySql MySql . Method ini digunakan 1. Mengambil parameter url, userid, dan untuk membuka koneksi baru. password untuk membuat koneksi. 2. Jika benar, sistem akan mengembalikan nikai koneksi dan berhasil terkoneksi dengan database MySql. lihatData(String sql) Method ini digunakan 1. Mengambil parameter inputan yang berupa untuk mengeksekusi sebuah query query. 2. Jika benar, Sistem akan menampilkan query tersebut. 2. Rincian algoritma pada setiap method pada kelas graph Nama Method Fungsi Algoritma addVerteks(String, Method ini digunakan 1. Membaca inputan parameter label dan nilai. List) untuk membuat 2. Mendeklarasikan sebuah vertex baru dengan sebuah vertex untuk memasukan nilai label dan nilai kedalam vertex. membentuk graph addEdge(int, int, Method ini digunakan 1. Membaca inputan nilai parameter x, y, dan nilai. Double) untuk mengisi setiap 2. memasukan nilai-nilai dari parameter tersebut nilai edge pada vertex kedalam variabel adjMatt untuk mengisi nilai edge. cariJarakEcludian(int, Method ini digunakan int) 1. Membaca parameter indexAwal dan untuk mencari nilai kemiripan obyek indexTujuan. 2. Membuat obyek a dan obyek b untuk 95 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI menggunakan menampung nilai dari indexAwal dan perhitungan euclidean 1.Membaca parameter indexAwal dan distance indexTujuan. 3. Mengeset nilai sum = 0.0. 4. Selama nilai i kurang dari jumlah data a, maka akan di lakukan perhitungan sum = sum + Math.pow((x.get(i) - y.get(i)), 2.0). 5. Mengembalikan nilai sum. 6. Membulatkan hasil sum menjadi 2 angka di belakang koma. tampilJarakEuclidean Method ini digunakan () untuk menampilkan maka akan ditampilkan graph hasil label dari vertex tersebut. perhitungan euclidean 1. Selama nilai i kurang dari panjang vertexList, 2. Selama nilai i kurang dari panjang adjMat, maka distance akan di tampilkan perhitungan jarak Euclidian Distance. inputData(JTable ) Method ini digunakan 1. Membaca inputan parameter tabel. untuk menginputkan 2. Selama i kurang dari data dari Jtabel ke jumlah baris pada tabel, maka di buat obyek dalam matriks dan listNilai bertipe ArrayList. kedalam graph 3. Mulai dari j samadengan 1, selama j kurang dari jumlah kolom pada tabel. Set label nilai label pada indeks ke-0 pada tabel. 4. Memanggil method addVertex untuk membuat verteks. 5. Selama i kurang dari jumlah baris pada tabel dan selama j= i+1 kurang dari jumlah baris pada kolom, dan selam i tidak sama dengan j maka akan memanggil method addEdge untuk mengisi nilai edge dengan jarak 96 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI EcluidianDistance pada method cariJarakEcludian. LostClustering () Method ini berisi 1. Membersihkan obyek mapClsuter. algoritma divisive 2. Memanggil method SpDelete(). yang digunakan untuk 3. Membuat obyek iterasi bertipe int mengset nilai tahapan pertama iterasi menjadi 1. proses 4. Memanggil method getadjMat. pengelompokan data. 5. Memanggil method getVerteksList. 6. Memanggil method Averagematrix. 7. Memanggil method CariObjekTerbesar. 8. Untuk i sama dengan 0 selama i kurang dari panjang data LabelCluster. 9. Jika i tidak sama dengan splinter maka ambil nilai LabelCluster masukkan ke MatrixList. 10. Jika i sama dengan splinter maka ambil nilai LabelCluster masukkan ke SplinterList. 11. Memanggil method UpdateMatriks. 12. Memanggil method getDataMatriks. 13. Memanggil method getLabelMatriks. 14. Memanggil method getDataSplinter. 15. Memanggil method Averagematrix. 16. Memanggil method AverageSplinter. 17. Memanggil method HitungSelisih. 18. Memanggil method AmbilIndexSelisih tampung nilai kembali ke obyek indexSplinter. 19. Membuta obyek posCount bertipe int. mengeset nilai posCount menjadi 0. 20. Untuk semua nilai j diisikan dengan obyek HasilSelisih. 21. Jika j lebih besar dari 0 maka, jumlahkan nilai posCount. 97 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 22. Jika posCount sama dengan 0 maka lakukan langkah berikut: a. 23. Jika tidak maka lakukan langkah 1 s.d 9: 1. Bersihkan MatrixList. 2. Untuk I sama dengan 0 selama I kurang dari panjang LabelClusterUpdate. 3. Jika indexSplinter tidak mengandung elemen i. 4. Ambil nilai dari LabelClusterUpdate kemudian diisikan ke obyek MatrixList. 5. Jika indexSplinter mengandung elemen i. 6. Ambil nilai dari LabelClusterUpdate kemudian diisikan ke obyek SplinterList. 7. Memanggil method UpdateMatriks. 8. Memanggil method UpdateMatriksAkhir. 9. Memanggil method LostClustering2. LostClustering2 () Method ini berisi 1. Membaca inputan parameter iterasi. algoritma divisive 2. Memanggil method getadjMat yang digunakan untuk 3. Memanggil method getDataMatriks tahapan kedua proses 4. Memanggil method getDataSplinter pengelompokan data 5. Memanggil method getVerteksList jika kemolpok splinter 6. Memanggil method getLabelMatriks masih memiliki nilai 7. Memanggil method Averagematrix positif. 8. Memanggil method AverageSplinter 9. Memanggil method HitungSelisih 10. Memanggil method AmbilIndexSelisih tampung nilai kembali ke obyek indexSplinter 11. Membuat obyek posCount bertipe int. mengeset nilai posCount menjadi 0 12. Untuk semua nilai j diisikan dengan obyek 98 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI HasilSelisih 13. Jika j lebih besar dari 0 maka, jumlahkan nilai posCount 14. Jika posCount sama dengan 0 maka lakukan langkah 1 s.d 17: 15. Memanggil method MaxCluster 16. Memanggil method akurasi 17. Membuat obyek ArrayList tempC bertipe string 18. Isi element tempC dengan obyek arraylist SplinterListAkhir 19. Memanggil method SimpanCluster 20. Isi Isi element mapClsuter dengan obyek arraylist tempC 21. Jumlahkan nilai iter 22. Membersihkan elemen MatrixList 23. Membersihkan element SplinterList 24. Untuk I sama dengan 0 selama I kurang dari panjang LabelClusterUpdate 25. Jika indexSplinter tidak mengandung elemen i 26. Ambil nilai dari LabelClusterUpdate kemudian diisikan ke obyek MatrixList 27. Jika indexSplinter mengandung elemen i 28. Ambil nilai dari LabelClusterUpdate kemudian diisikan ke obyek SplinterList 29. Memanggil method UpdateMatriks 30. Memanggil method UpdateMatriksAkhir 31. Memanggil method LostClustering3 32. Jika tidak maka lakukan langkah 1 s.d 9 : 33. Membersihkan elemen MatrixList 34. Untuk I sama dengan 0 selama I kurang dari panjang LabelClusterUpdate 99 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 35. Jika indexSplinter tidak mengandung elemen i 36. Ambil nilai dari LabelClusterUpdate kemudian diisikan ke obyek MatrixList 37. Jika indexSplinter mengandung elemen i 38. Ambil nilai dari LabelClusterUpdate kemudian diisikan ke obyek SplinterList 39. Memanggil method UpdateMatriks 40. Memanggil method UpdateMatriksAkhir 41. Memanggil method LostClustering2 LostClustering3() Method ini berisi 1. Membaca inputan parameter iterasi. algoritma divisive 2. Memanggil method getadjMat yang digunakan untuk 3. Memanggil method getDataSplinter tahapan kedua proses 4. Memanggil method getDataMatriks pengelompokan data 5. Memanggil method getVerteksList jika kemolpok splinter 6. Memanggil method getLabelMatriks masih memiliki nilai 7. Memanggil method Averagematrix negatif. 8. Memanggil method AverageSplinter 9. Memanggil method HitungSelisih 10. Memanggil method AmbilIndexSelisih tampung nilai kembali ke obyek indexSplinter 11. Membuat obyek posCount bertipe int. mengeset nilai posCount menjadi 0 12. Untuk semua nilai j diisikan dengan obyek HasilSelisih 13. Jika j lebih besar dari 0 maka, jumlahkan nilai posCount 14. Jika posCount sama dengan 0 maka lakukan langkah 1 s.d 15: 15. Memanggil method UpdateMatriks 16. Memanggil method UpdateMatriks 17. Memanggil method MaxCluster 100 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 18. Memanggil method akurasi 19. Memanggil method MaxCluster 20. Memanggil method akurasi 21. Membuat obyek ArrayList TempSplinterBaru bertipe string 22. Membuat obyek ArrayList TempSplinter bertipe string 23. Isi element TempSplinterBaru dengan obyek arraylist MatrixLisAkhir 24. Isi element TempSplinter dengan obyek arraylist SplinterListAkhir 25. Isi Isi element mapClsuter dengan obyek arraylist TempSplinter 26. Memanggil method SimpanCluster 27. Jumlahkan nilai iter 28. Isi Isi element mapClsuter dengan obyek arraylist TempSplinterBaru 29. Memanggil method SimpanCluster 30. Jika tidak maka lakukan langkah 1 s.d 9 : 31. Membersihkan elemen MatrixList 32. Untuk I sama dengan 0 selama I kurang dari panjang LabelClusterUpdate 33. Jika indexSplinter tidak mengandung elemen i 34. Ambil nilai dari LabelClusterUpdate kemudian diisikan ke obyek MatrixList 35. Jika indexSplinter mengandung elemen i 36. Ambil nilai dari LabelClusterUpdate kemudian diisikan ke obyek SplinterList 37. Memanggil method UpdateMatriks 38. Memanggil method UpdateMatriksAkhir 39. Memanggil method LostClustering2 101 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI UpdateMatriks(Array Method ini digunakan List, ArrayList, untuk mengupdate isi double[][], array DataMatriks dan Verteks[]) adSplinter yang nantinya digunakan 1. Membaca inputan parameter MatrixUtama, MatrixSplit, data dan list. 2. Membuat obyek m bertipe int. mengeset nilai m menjadi 0. 3. Membuat obyek m1 bertipe int. mengeset nilai untuk proses clustering slanjutnya m1 menjadi 0. 4. Membuat obyek countMatrix bertipe ArrayList. 5. Membuat obyek countSplit bertipe ArrayList. 6. Membuat obyek LabelSpliter bertipe Verteks. 7. Membuat obyek LabelCluster bertipe Verteks. 8. Membuat obyek dataMatriks bertipe array. 9. Membuat obyek dataSplit array. 10. Untuk i sama dengan 0, selama i kurang dari ukuran MatrixUtama. 11. Membuat obyek count bertipe int, memanggil method Search. 12. Isi element countMatrix dengan count. 13. Untuk i sama dengan 0, selama i kurang dari ukuran MatrixSplit. 14. Membuat obyek count bertipe int, memanggil method Search. 15. Isi element countSplit dengan count. 16. Set nilai m sama dengan 0. 17. Set nilai m1 sama dengan 0. 18. Selama j kurang dari panjang data list. 19. Jika elemen countMatrix mengandung j. 20. Set LabelCluster dengan elemen list pada index j. 21. Jumlahkan nilai m. 22. Jika elemen countSplit mengandung j. 23. Set LabelSpliter dengan elemen list pada index j. 102 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 24. Jumlahkan nilai m1. 25. Set nilai m sama dengan 0. 26. Set nilai m1 sama dengan 0. 27. Selama e kurang dari panjang data data. 28. Jika elemen countMatrix mengandung e 29. Membuat obyek n bertipe int. mengeset nilai n menjadi 0. 30. Membuat obyek k bertipe int. mengeset nilai k menjadi 0. 31. Selama j kurang dari panjang data data 32. Jika elemen countMatrix mengandung j 33. Set datamatriks dengan elemen data1 pada index e dan j. 34. Jumlahkan nilai n. 35. Jika elemen countSplit mengandung j 36. Set dataSplit dengan elemen data1 pada index e dan j 37. Jumlahkan nilai k 38. Jumlahkan nilai m 39. Jumlahkan nilai m1 40. Memanggil method setDataMatriks 41. Memanggil method setLabelMatriks 42. Memanggil method SetDataSplinter 43. Memanggil method setLabelSplinter UpdateMatriksAkhir( Method ini digunakan ArrayList, ArrayList, untuk mengupdate isi double[][], array Verteks[]) DataMatriksAkhir dan DataSplinterAkhir 1. Membaca inputan parameter MatrixUtama, MatrixSplit, data dan list. 2. Membuat obyek m bertipe int. mengeset nilai m menjadi 0 3. Membuat obyek m1 bertipe int. mengeset nilai yang nantinya digunakan untuk m1 menjadi 0 4. Membuat obyek countMatrix bertipe ArrayList 103 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI menghitung akurasi 5. Membuat obyek countSplit bertipe ArrayList 6. Membuat obyek LabelMatriks1 bertipe Verteks 7. Membuat obyek LabelSplinter1 bertipe Verteks 8. Membuat obyek DataMatriks1 bertipe array 9. Membuat obyek DataSplinter1 bertipe array 10. Untuk i sama dengan 0, selama i kurang dari ukuran MatrixUtama 11. Membuat obyek count bertipe int, memanggil method Search 12. Isi element countMatrix dengan count 13. Untuk i sama dengan 0, selama i kurang dari ukuran MatrixSplit 14. Membuat obyek count bertipe int, memanggil method Search 15. Isi element countSplit dengan count 16. Set nilai m sama dengan 0 17. Set nilai m1 sama dengan 0 18. Selama j kurang dari panjang data list 19. Jika elemen countMatrix mengandung j 20. Set LabelMatriks1 dengan elemen list pada index j 21. Jumlahkan nilai m 22. Jika elemen countSplit mengandung j 23. Set LabelSplinter1 dengan elemen list pada index j 24. Jumlahkan nilai m1 25. Set nilai m sama dengan 0 26. Selama e kurang dari panjang data data 27. Jika elemen countMatrix mengandung e 28. Membuat obyek n bertipe int. mengeset nilai n menjadi 0 104 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 29. Selama j kurang dari panjang data data 30. Jika elemen countMatrix mengandung j 31. Set DataMatriks1 dengan elemen data1 pada index e dan j 32. Jumlahkan nilai n 33. Jumlahkan nilai m 34. Set nilai m1 sama dengan 0 35. Selama e kurang dari panjang data data 36. Jika elemen countSplit mengandung e 37. Membuat obyek n bertipe int. mengeset nilai n menjadi 0 38. Selama j kurang dari panjang data data 39. Jika elemen countSplit mengandung j 40. Set DataSplinter1 dengan elemen data1 pada index e dan j 41. Jumlahkan nilai n 42. Jumlahkan nilai m 43. Memanggil method setDataMatriks 44. Memanggil method setLabelMatriks 45. Memanggil method SetDataSplinter 46. Memanggil method setLabelSplinter 47. Membarsihkan isi elemen MatrixLisAkhir 48. Membarsihkan isi elemen SplinterListAkhir 49. Selama i kurang dari panjang list 50. Jika countMatrix mengandung i 51. Isi ambil nilai list isikan ke elemen MatrixLisAkhir 52. Jika countSplit mengandung i 53. Isi ambil nilai list isikan ke elemen SplinterListAkhir AmbilIndexSelisih(do Method ini digunakan 1. Membaca inputan parameter Data dan list. 105 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI uble[], Verteks[]) untuk mengambil nilai 2. Membaut obyek tempIndex bertipe ArrayList minimum dari hasil 3. Membuat obyek minValueCounter bertipe int, perhitungan selisih kelompok matrik set nilai sama dengan 0 4. Membuat obyek index bertipe int, set nilai sama dengan kelompok splinter dengan 0 5. Membaut obyek rerataAll bertipe array 6. Membuat obyek nilaiMin bertipe int, set nilai sama dengan 0 7. Selama i kurang dari panjang Data 8. Ini elemen retaraAll pada indeks i dengan Data pada indeks i 9. Membuat obyek bd bertipe BigDecimal 10. Isi nilai bd dengan elemen rerataAll 11. Memenggil method setScale 12. Isi elemen rerataAll dengan nilai bd 13. Isi nilaiMin dengan elemen rerataAll 14. Selama I kurang dari panjang rerataAll 15. Jika elemen rarataAll lebih besar dari nilaiMin maka 16. nilaiMin sama dengan elemen rarataAll 17. set nilai minValueCounter sama dengan 1 18. set nilai index sama dengan 1 19. membersihkan elemen tempIndex 20. Isi elemen tempIndex dengan nilai index 21. Jika Jika elemen rarataAll lebih besar dari nilaiMin maka 22. Jumlahkan nilai minValueCounter 23. Isi elemen tempIndex dengan nilai i 24. Mengembalikan nilai tempIndex Search(String) Method ini digunakan 1. Membaca inputan parameter label. untuk untuk mencari 2. Selama i kurang dari panjang verteksList 106 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI label sampel 3. Jika label sama dengan elemen verteksList 4. Mengembalikan nilai i 5. Jika tidak mengembalikan nilai -1 CariObjekTerbesar Method ini digunakan 1. Membaca inputan parameter data dan label. (double[], Verteks[]) untuk menghirung 2. Membuat obyek nilaiMax bertipe int. nilai rata-rata splinter 3. Membuat obyek sum bertipe double grup. 4. Membuat obyek idMax bertipe int. 5. Untuk i =0, selama i kurang dari panjang data array 6. Tampung setiap nilai array data ke variabel sum. 7. Jika nilai sum lebih besar dari nilai nilaiMax. 8. nilaiMax=sum 9. set nilai baru idMax dengan nilai indeks i yang memiliki nilai rata-rata terbesar. 10. Set splinter dengan niali idxMax 11. Mengembalikan nilai splinter Averagematrix Method ini digunakan 1. Membaca inputan parameter data, list dan (double[][], untuk mencari nilai ra- Verteks[], ArrayList) rata dari semua 2. Membuat obyek rerata beripe array sample pada matriks. 3. Selama i dan j kurang dari panjang data, listSize. jumlahkan semua nilai pada masing-masing sampel data lalu tampung di variabel rerata. 4. Nilai rerata pada setiap index i dibagi jumlah sample list 5. Memanggil method RoundTo2DecimalsArray 6. Mengmbalikan nilai rerata AverageSplinter Method ini digunakan 1. Membaca inputan parameter data, list dan (double[][], untuk memisah matrik Verteks[], ArrayList) yang memiliki nilai 2. Membuat obyek rerata beripe array rata-rata terbesar. 3. Selama i dan j kurang dari panjang data dan listSize. 107 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI listSize, jumlahkan semua nilai pada masingmasing sampel data lalu tampung di variabel rerata. 4. Nilai rerata pada setiap index i dibagi jumlah sample listSize. 5. Memanggil method RoundTo2DecimalsArray. 6. Mengmbalikan nilai rerata. HitungSelisih(double Method ini digunakan 1. Membaca inputan parameter obyekMatrix, [], double[], untuk menghitung Verteks[]) selisih antara 2. Membuat obyek rerata beripe array kelompok matrik 3. Membuat obyek ave beripe array. dengan kelompok 4. Membuat obyek nilaiMax beripe double. splinter 5. Membuat obyek idxMax beripe int. objekSplinter dan list. 6. Selama i kurang dari panjang data obyekMatrix 7. Hitung selisih elemen obyekMatrix dengan objekSplinter pada masing-masing index, tampung hasil selisih di obyek rerata 8. Pindahkan isi elemen rerata ke obyek ave 9. Set nilaiMx dengan elemen ave 10. Selama i kurang dari dari panjang data ave 11. Jika elemen ave lebih besar dari nilai indexMax 12. Set nilaiMax dengan elemen ave 13. Set idMax dengan i 14. Memanggil method RoundTo2DecimalsArray. 15. Mengmbalikan nilai HasilSelisih. RoundTo2DecimalsA Method ini digunakan 1. Membaca inputan parameter val. rray(double[]) 2. Selama i kurang dari panjang data val untuk membulatkan hasil nilai yang bertipe 3. Membuat obyek bd bertipe BigDecimal, set array elemen val di bd 4. Memanggil method setScale 108 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 5. Set elemen val dengan bd 6. Mengembalikan nilai val RoundTo2DecimalsS Method ini digunakan 1. Membaca inputan parameter val. ingle(double) untuk membulatkan 2. Membuat obyek bd bertipe BigDecimal, set hasil nilai bertipe double elemen val di bd 3. Memanggil method setScale 4. Set elemen val dengan bd 5. Mengembalikan nilai val MaxCluster_C(doubl Digunakan untuk e[][]) mengukur diameter matriks cluster C. 1. Baca parameter masukan nilai rata-rata setiap samepl dan label sampel 2. Membuat obyek nilaiMax bertipe int. 3. Membuat obyek sum bertipe double 4. Membuat obyek idMax bertipe int. 5. Untuk i =0, selama i kurang dari panjang data array 6. Tampung setiap nilai array data ke variabel sum. 7. Jika nilai sum lebih besar dari nilai nilaiMax. 8. nilaiMax=sum 9. set nilai baru idMax dengan nilai indeks i yang memiliki nilai rata-rata terbesar 10. Mengembalikan nilai idMax BobotMatriks Method ini digunakan 1. Membaca inputan parameter data dan list. (double[][],ArrayList untuk mencari nilai 2. Membuat obyek mean bertipe int. ) bobot dari matrik itu 3. Membuat obyek sum bertipe array sendiri 4. Untuk i =0 dan j=0, selama i dan j kurang dari panjang data array 5. Set nilai sum=0 6. Jumlahkan setiap elemen data array, tampung di obyek sum 7. Bagi elemen sum dengan panjang data array 109 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI tampung di obyek ave 8. Mengembalikan nilai ave akurasi(double[][]) Method ini digunakan 1. Membaca inputan parameter data. untuk menghitung 2. Membuat obyek mean bertipe int. sum of square. 3. Membuat obyek sum bertipe array 4. Membuat obyek sse bertipe double 5. Membuat obyek sumerr2 bertipe array[] 6. Membuat obyek matriks bertipe array [][] 7. Untuk i =0 dan j=0, selama i dan j kurang dari panjang data array 8. Set nilai sum=0 9. Jumlahkan setiap elemen data array, tampung di obyek sum 10. Bagi elemen sum dengan panjang data array tampung di obyek mean 11. Untuk i dan j =0, selama i dan j kurang dari panjang data maka lakukan matriks [i][j] = (data[i][j] - mean) 12. Untuk i dan j =0, selama i dan j kurang dari panjang data maka lakukan matriks [i][j] = Math.pow((matriks [i][j]), 2) 13. Untuk i dan j =0, selama i dan j kurang dari panjang data maka lakukan sumerr2[i] += matriks[i][j] 14. Jumlahkan elemen sumerr2 tampung di sse 15. Membnulatkan nilai sse 16. Mengembalikan nilai sse 3. Rincian algoritma pada setiap method pada kelas controlRangeHarga 110 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Nama Method Fungsi Algoritma cekIsiData() Method ini digunakan 1. membuat obyek baru koneksi. untuk mengecek isi 2. Membuat obyek jumlah bertipe int. data pada tabel 3. membuka koneksi kategori_nilai dalam 4. Membuat obyek baru range harga database 5. Membuat obyek sql beripe string. 6. menyiapkan query 7. mengeksekusi query yang diberikan kemudian ditamung dalam obyek ResultSet. 8. selama membaca hasil query, range memanggil method setJumlah untuk mengeset jumlah isi data 9. mengambil jumlah yang telah diset 10. jika nilai jumlah sama dengan 0 mengembalikan status true. 11. jika tidak, mengembalikan status false. prosesInsertRange(Ra Method ini digunakan 1. membaca input parameter range ngeHarga range) untuk menyimpan 2. membuat obyek koneksi bertipe koneksi. nilai batas range harga 3. Memanggil storage procedure spUpdateRangeH kelompok ke dalam 4. Mengambil nilai batas harga bawah1 dari obyek tabelKategoriNilai dengan menggunakan range 5. Mengambil nilai batas harga atas1 dari obyek storage procedure range 6. Mengambil nilai batas harga bawah2 dari obyek range 7. Mengambil nilai batas harga atas2 dari obyek range 8. Mengambil nilai batas harga bawah3 dari obyek range 9. Mengambil nilai batas harga atas3 dari obyek 111 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI range 10. Mengambil nilai batas harga bawah4 dari obyek range 11. Mengambil nilai batas harga atas4 dari obyek range 12. Mengambil nilai batas harga bawah5 dari obyek range 13. Mengambil nilai batas harga atas5 dari obyek range 14. Meneksekusi query prosesUpdateRange( Method ini digunakan 1. membaca input parameter range RangeHarga range) untuk mengupdate 2. membuat obyek koneksi bertipe koneksi. nilai batas range harga 3. Memanggil storage procedure kelompok ke dalam tabelKategoriNilai spSimpanRangeHarga 4. Mengambil nilai batas harga bawah1 dari obyek dengan menggunakan storage procedure range 5. Mengambil nilai batas harga atas1 dari obyek range 6. Mengambil nilai batas harga bawah2 dari obyek range 7. Mengambil nilai batas harga atas2 dari obyek range 8. Mengambil nilai batas harga bawah3 dari obyek range 9. Mengambil nilai batas harga atas3 dari obyek range 10. Mengambil nilai batas harga bawah4 dari obyek range 11. Mengambil nilai batas harga atas4 dari obyek range 12. Mengambil nilai batas harga bawah5 dari obyek 112 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI range 13. Mengambil nilai batas harga atas5 dari obyek rang 14. Meneksekusi query tampilkanRangeNilai Method ini digunakan 1. Membuat obyek conn bertipe koneks (String kategori) untuk menampilkan 2. Membuat obyek rs bertipe ResultSet nilai batas atas dan 3. Membuka koneksi batas bawah pada 4. Membuat query “select batas_bwh, batas_atas setiap kategori from kategori_nilai where kode_range like '" + keompok dari tabel kategori + "'" kategoriNilai. 5. Mengeksekusi query 6. Mengembalikan hasil rs deleteIsiData() Method ini digunakan 1. Membuat obyek conn bertipe koneks untuk menghapus isi 2. Memanggil Storage procedure spdeleteKategori tabel kategori nilai 3. Mengeksekusi query tampilJumlahCluster( Method ini digunakan 1. Membuat obyek conn bertipe koneks ) untuk menampilkan 2. Membuat obyek rs bertipe ResultSet jumlah cluster yang 3. Membuka koneksi dihasilkan dari proses 4. Membuat query “SELECT divisive Count(datacluster.cluster) FROM datacluster" 5. Mengeksekusi query 6. Mengembalikan hasil rs SimpanCluster(Array Method ini digunakan 1. Baca parameter inputan list, Iter, Data, sse List, int, Double, untuk mentimpan 2. Membuat obyek bertipe koneksi double) hasil cluster ke dalam 3. Membuat obyek sql bertipe srting, database 4. Membuat obyek callst bertipe CallableStatement, set dengan nilai sql 5. Set parameter inputan dengan obyek iterasi 6. Mengeksekusi sql 7. Memanggil method SimpanSubCluster (list, Iter, 113 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Data, sse) 8. Memanggil method tutupKoneksi SimpanSubCluster Method ini digunakan 1. Membaca parameter inputan list, Iter, Data, sse (ArrayList, int, untuk menyimpan 2. Membuat obyek koneksi beripe koneksi Double, double) semua anggota cluster 3. Untuk i=0, selama I kurang dari panjang list dalam tabel 4. Membuat obyek sql beripe string sub_datacluster. 5. Membuat obyek callst bertipe CallableStatement 6. Set callst 1 dengan mengambil label pada obyek list 7. Set callst 2 dengan nilai obyek Data 8. Set callst 3 dengan nilai obyek iter 9. Set callst 4 dengan nilai obyek sse 10. Mengeksekusi query SpDelete() Method ini digunakan 1. Membuat obyek koneksi bertipe koneksi untuk menghapus data 2. Memanggil SP spdelete pada tabel dataCluster 3. Mengeksekusi query dan sub_dataCluster. 4. Rincian algoritma pada setiap method pada kelas Halaman Utama Nama Method Fungsi Algoritma lihatRangeHarga() Method ini digunakan 1. memanggil method tampilkanRangeNilai untuk untuk mengecek isi mengambil nilai-nilai dari kategori kelompok 1 nilai reange 2. tampung hasil dalam rs kolompok-kelompok 3. selama membaca isi rs, set bawah1filed dan harga tabel kategoriNilai, atas1filed dengan nilai rs. 4. memanggil method tampilkanRangeNilai untuk kemudian ditampilkan kedalam sistem mengambil nilai-nilai dari kategori kelompok 2 5. tampung hasil dalam rs 6. selama membaca isi rs, set bawah2filed dan atas2filed dengan nilai rs. 7. memanggil method tampilkanRangeNilai untuk 114 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI mengambil nilai-nilai dari kategori kelompok 3. 8. tampung hasil dalam rs 9. selama membaca isi rs, set bawah3filed dan atas3filed dengan nilai rs. 10. memanggil method tampilkanRangeNilai untuk mengambil nilai-nilai dari kategori kelompok 4 11. tampung hasil dalam rs 12. selama membaca isi rs, set bawah4filed dan atas4filed dengan nilai rs. 13. memanggil method tampilkanRangeNilai untuk mengambil nilai-nilai dari kategori kelompok 5 14. tampung hasil dalam rs 15. Selama membaca isi rs, set bawah5filed dan atas5filed dengan nilai rs. prosesclustering() Method ini digunakan 1. Cek apakah text field JumlahCluster kosong, jika untuk memulai proses ya, cetak “Jumlah Cluster tidak boleh kosong”. clustering Jika tidak, lakukan langkah 2. 2. Cek apakah text field JumlahCluster berisi numeric positif. Jika ya, lakukan langkah 3 3. Membuat Obyek decp bertipe int. 4. Membuat obyek jml bertipe int dan mengisinya dengan nilai JumlahCluster field. 5. Membuat obyek bernama graph di kelas graph. 6. Memanggil method input data ke dalam tabel dataKelompokHargaTable 7. Memanggil method SetCluster dengan imputan jml. 8. memanggil method Clustering. 9. memanggil method tampilCluster 10. memanggil method tampilLabel 11. memanggil method tampilJml 115 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 12. memanggil method tampilSSE 13. memanggil method pop_tree. tampilCluster() Method ini digunakan 1. nama password dengan isi "1234" untuk menampilkan 2. Buat obyek tipe ArrayList bernama isi tabel sub_cluster menggunakan SP columnNames 3. Buat obyek tipe ArrayList bernama data 4. Buat obyek bertipe String dengan nama sql isi "SELECT anggota, bobot, cluster, sse FROM sub_datacluster" 5. Buka koneksi 6. Mengeksekusi obyek query sql 7. Tampung hasil di obyek ResultSet 8. Buat obyek ResultSetMetaData bernama mb dengan isi rs.getMetaData() 9. Set md.getColumnCount di obyek column 10. Tampung nama colom pada obyek columnNames 11. Tampung isi baris dalam obyek data 12. Buat obyek tipe Vector dengan nama columnNamesVector 13. Buat obyek tipe Vector dengan nama dataVector 14. Masukan isi baris columnNameske obyek dataVector5 15. Masukan isi baris subVector ke obyek columnNamesVector 16. Buat obyek DefaultTableModel bernama tabelmodel1 berisi dataVector dan columnNamesVector 17. Set model dataClusterdengan tabelmodel1 TampilLabel() Method ini digunakan 1. Buat obyek tipe ArrayList bernama 116 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI untuk menampilkan columnNames cluster dan anggola 2. Buat obyek tipe ArrayList bernama data dari cluster itu sendiri 3. Buat obyek bertipe String dengan nama sql isi " dari tabel SELECT sub_datacluster.cluster, sub_dataClusterr. sub_datacluster.anggota FROM sub_datacluster" 4. Buka koneksi 5. Mengeksekusi obyek query sql 6. Tampung hasil di obyek ResultSet 7. Buat obyek ResultSetMetaData bernama mb dengan isi rs.getMetaData() 8. Set md.getColumnCount di obyek column 9. Tampung nama colom pada obyek columnNames 10. Tampung isi baris dalam obyek data 11. Buat obyek tipe Vector dengan nama columnNamesVector 12. Buat obyek tipe Vector dengan nama dataVector 13. Masukan isi baris columnNameske obyek dataVector5 14. Masukan isi baris subVector ke obyek columnNamesVector 15. Buat obyek DefaultTableModel bernama tabelmodel1 berisi dataVector dan columnNamesVector 16. Set model DataLabel tabelmodel1 TampilJML() Method ini digunakan 1. Buat obyek tipe ArrayList bernama untuk menampilkan columnNames jumlah dari angota 2. Buat obyek tipe ArrayList bernama data yang dimiliki cluster 3. Buat obyek bertipe String dengan nama sql isi " masing-masing cluster select `sub_datacluster`.`cluster` AS `Cls`, count 117 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI tersebut (`sub_datacluster` .`anggota`) AS `Jml` from `sub_datacluster` group by `sub_datacluster`.`cluster` ORDER BY "sub_datacluster.id ASC" 4. Buka koneksi 5. Mengeksekusi obyek query sql 6. Tampung hasil di obyek ResultSet 7. Buat obyek ResultSetMetaData bernama mb dengan isi rs.getMetaData() 8. Set md.getColumnCount di obyek column 9. Tampung nama colom pada obyek columnNames 10. Tampung isi baris dalam obyek data 11. Buat obyek tipe Vector dengan nama columnNamesVector 12. Buat obyek tipe Vector dengan nama dataVector 13. Masukan isi baris columnNameske obyek dataVector5 14. Masukan isi baris subVector ke obyek columnNamesVector 15. Buat obyek DefaultTableModel bernama tabelmodel1 berisi dataVector dan columnNamesVector 16. Set model DataJml tabelmodel1 TampilSSE() Method ini digunakan 1. Buat obyek tipe ArrayList bernama untuk menampilkan jumlah total SSE columnNames 2. Buat obyek tipe ArrayList bernama data 3. Buat obyek bertipe String dengan nama sql isi " SELECT SUM(mysum) FROM (SELECT DISTINCT sub_datacluster.sse AS mysum FROM sub_datacluster GROUP BY 118 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI sub_datacluster.cluster) AS bb;" 4. Buka koneksi 5. Mengeksekusi query ditampung dalam ResultSet rs 6. Baca rs 7. Set TotalSSETextField1 rs.getString("SUM(mysum)") pilihFile() Method ini digunakan 1. Menampilkan JFileChooser open file untuk menampilkan 2. Mendapatkan nilai atribut nama_file yang dipilih JFileChooser untuk 3. Deklarasi array bertipe String bernama memilih file excel potong_nama_file untuk memberi nama file bertipe .csv kemudian dengan pemisah “\\” membaca file lalu 4. Jika potong_nama_file.equals (“csv”) menampilkan ke 5. Membuat vector baru bernama columnName. dalam tabel data. 6. Membuat vector baru bernama dataKeseluruhan. 7. Baca file inputan 8. Tampung nama kolom da isi semua baris dalam columnName dan dataKeseluruhan obyek 9. Membuat obyek baru dob bertipe DataObyek 10. Ambil data pada colom ke 1, 2, 5, 6, 10, 19, dan 20 tampung dalam dob 11. Ambil nilai- nilai batas bawah dan batas bawah pada setiap kelompok tampung dalam obyek a 1 s.5 dan b 1 s.d 5 12. Set semua kelompok harga pada DataObyek 13. Ambil semua nilai dalam obyek data, tampung dalam obyek InputData 14. Ambil nama colom ke ke 1, 2, 5, 6, 10, 19, dan 20 dari file inputan dan tampung semua di coluomDataFix 15. Membuat DefaultTableModel bernama model 119 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI dengan isi baris berisi InputData dan kolom berisi columnName. 16. Atur tabel dataPreprocessTable menjadi seperti model. 17. Set jumlahDataSeleksi = tablemodel.getRowCount( 18. Set jumlahDataSeleksiTextField.setText(" " + jumlahDataSeleksi); submitData() Method ini digunakan 1. Untuk i=0, selama I kurang dari panjang data untuk memulah tahap preprocessing Objekdat 2. Buat obyek st bertipe StringTokenizer berisi mengolah data agar siap untu k di mining. nama barang 3. Buat obyek baru a bertipe ArrayList 4. Tampung st ke dalam a 5. Ambil nilai kelompok harga 6. Jika kelompok harga sama dengan 1 7. Tampung semua nama barang pada a yang memiliki kelompok harga sama dengan 1 di tipekelompok1 8. Jika kelompok harga sama dengan 2 9. Tampung semua nama barang pada a yang memiliki kelompok harga sama dengan 2 di tipekelompok2 10. Jika kelompok harga sama dengan 3 11. Tampung semua nama barang pada a yang memiliki kelompok harga sama dengan 3 di tipekelompok1 12. Jika kelompok harga sama dengan 4 13. Tampung semua nama barang pada a yang memiliki kelompok harga sama dengan 4 di 120 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI tipekelompok4 14. Jika kelompok harga sama dengan 5 15. Tampung semua nama barang pada a yang memiliki kelompok harga sama dengan 5 di tipekelompok5 16. Buat obyek PenggambunganTipeKelompok1 bertipe HashSet 17. Tampung tipekelompok1 kedalam PenggambunganTipeKelompok1 18. Bersihkan tipekelompok1 19. Tampung PenggambunganTipeKelompok1 ke tipekelompok1 20. Buat obyek PenggambunganTipeKelompok2 bertipe HashSet 21. Tampung tipekelompok2 kedalam PenggambunganTipeKelompok2 22. Bersihkan tipekelompok2 23. Tampung PenggambunganTipeKelompok3 ke tipekelompok2 24. Buat obyek PenggambunganTipeKelompok3 bertipe HashSet 25. Tampung tipekelompok3 kedalam PenggambunganTipeKelompok3 26. Bersihkan tipekelompok3 27. Tampung PenggambunganTipeKelompok4 ke tipekelompok4 28. Buat obyek PenggambunganTipeKelompok4 bertipe HashSet 29. Tampung tipekelompok4 kedalam PenggambunganTipeKelompok4 30. Bersihkan tipekelompok4 121 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 31. Tampung PenggambunganTipeKelompok1 ke tipekelompok4 32. Buat obyek PenggambunganTipeKelompok5 bertipe HashSet 33. Tampung tipekelompok5 kedalam PenggambunganTipeKelompok5 34. Bersihkan tipekelompok5 35. Tampung PenggambunganTipeKelompok5 ke tipekelompok5 36. Untuk setiap tipe kelompok lakukan langkah dibawah ini a. Buat obyek baru z bertipe array b. Untuk k=0, selama k kurang dari panjang data tipekelompok* c. Set buat objek baru jumlahQuantity=0 d. Untuk j=0, selama j kurang dari panjang data Objekdat e. Buat obyek st bertipe StringTokenizer berisi nama barang f. Buat obyek baru a bertipe ArrayList g. Tampung st ke dalam a h. Tampung a.get(0).toString() kedalam tipe yang bertipe string i. Jika tipekelompok* di indeks k sama dengan tipe j. Buat obyek baru quatity berisi setiap quantity pada indeks j dari data Objekdat k. Buat obyek datatampung berisi quatity l. Jika z[0][k] sama dengan 0 m. Set z[0][k] dengan datatampung n. Jika tidak, set jumlahQuantity= z[0][k] 122 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI o. jumlahQuantity= jumlahQuantity+ z[0][k] p. z[0][k]= jumlahQuantity q. buat objek baru DataObyek bernama dob yang berisi tipekelompok 1, 1, dan jumlahQuantity r. inputkan obyek dob ke obyek hasilPengelompokan 37. Untuk i=0, selama I kurang dari panjang data hasilPengelompokan 38. Buat obyek baru sementara1 bertipe vextor 39. Ambil nama barang pada indeks I di hasilPengelompokan tampung ke dalam sementara1 40. Ambil kelompok harga pada indeks I di hasilPengelompokan tampung ke dalam sementara1 41. Ambil quantity pada indeks I di hasilPengelompokan tampung ke dalam sementara1 42. Masukan nilai sementara1 ke obyek FixDataPre 43. Buat obyek vector namakolom 44. Masukan isi nama kolom dengan Nama Barang, Kelompok Harga, Quantity 45. Buat obyek DefaultTableModel bernama tabelmodel1 berisi FixDataPre dan namakolom 46. Set model dataKelompokHargaTable dengan tabelmodel1 47. Set jumlahDataDivisiveTextField dengan dataKelompokHargaTable.getRowCount() cekInputRangeHarga( Method ini digunakan ) untuk mengecek input 1. Buat obyek RangeHarga dengan nama nilaiRange 123 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI nilai harga kelompok. 2. Buat obyek controlRangeHarga dengan nama crlharga 3. Membuat obyek bertipe boolean dengan nama cekData berisi false; 4. Cek jika semua feld kosong 5. Tampilkan pesan error 6. Cek jika salah satu field ada yang kosong tampilkan pesan error 7. Cek jika nilai field ada yang mengandung sifat gabungan 8. Tampilakn pesan error 9. Cek jika semua field valid. Ambil setiap nilai tampung semua nilai data dalam obyek nilaiRange 10. Set cekData dengan cekIsiData 11. Cek status jika cekData sama dengan false, maka lakukan langkah 12, 12. Panggil method prosesUpdateRange 13. Jika true =, panggil method prosesInsertRange SimpanHasilCluster() Method ini digunakan 1. Menampilkan filechooser untuk lokasi penyimpanan file hasil clustering. untuk menyimpan hasil clustering 2. Mengatur file filter agar hanya bisa disimpan dalam tipe file doc, dan xls. kedalam file 3. Deklarasi variabel bernama file_output_stream bertipe FileOutputStream. 4. Deklarasi variabel bernama returnValue bertipe int dengan inisialisasi fileChooser menampilkan kotak dialog simpan. 5. Cek apakah returnValue == JFileChooser.APPROVE_OPTI ON. Jika ya lakukan langkah 6 – 14. 124 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 6. Membuat variabel bernama filename bertipe String berisi path data yang di pilih. 7. Membuat variabel ext berisi filter terhadap tipe file. 8. Cek apakah ext berisi Microsoft Excel (*.xls). jika ya lakukan langkah 9 - 12. 9. Membuat variabel bernama f bertipe File. 10. Inisialisasi f sama dengan file baru dengan nama file diikuti .xls 11. Menampilkan output f. 12. Mengirimkan isi data tabel hasil clsurteing 13. Cek apakah ext berisi Microsoft Word (*.doc) jika ya lakukan seperti langkah 9-12. Jika tidak lakukan langkah 14. 14. Cek apakah ext bertipe .txt, jika ya lakukan seperti langkah 9-12. 15. Pesan “Hasil Pengklasteran Telah Berhasil Disimpan” LAMPIRAN 7 PERCOBAAN PERHITUNGAN SUM OF SQUARE ERROR Tabel perbobaan Percobaan Cluster 1 2 3 4 5 2 3 4 5 6 SSE P1 P2 P3 328195,65 1255753,346 821891,83 62465,727 67127,071 58150,59 47805,751 48929,494 42545,224 40875,609 46019,204 40004,988 38820,685 43346,701 36243,742 125 P4 326564,11 58018,005 41290,008 38748,327 36407,959 P5 326564,11 67127,071 48929,494 46044,137 43371,634 AVG 611793,8 62577,69 45899,99 42338,45 39638,14 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI 6 7 7 8 38255,563 38092,636 42899,059 42735,546 35907,797 36078,589 42923,992 39213 35562,333 35733,125 42760,479 38976,82 Keterangan: P1: Perbobaan 1 adalah data preprocessing yang normal sesuai dengan haris output dari tahapan preprocessing. P2: Percobaan 2 adalah data preprocessing yang di urutkan nama barangnya secara ascending. P3: Percobaan 3 adalah data preprocessing yang di urutkan nama barangnya secara descending. P4: Percobaan 4 adalah data preprocessing yang di urutkan berdasarkan nama barangnya dan total quantity secara descending. P6: Percobaan 5 adalah data preprocessing yang di urutkan berdasarkan kelompoik harga secara descending. Percobaan ini bertujian untuk mengetahui pakah sistem menghasilkan nilai SSE yang tepat jika sumber datanya di ubah strukturnya. Pada setiap percobaan jumlah anggota yang dimiliki masing-masing cluster sama jumlahnya. LAMPIRAN 8 LISTING PROGRAM Listring Program – controlRangeHarga.java package Controller; import Entity.RangeHarga; import Entity.KoneksiDB; import static Entity.KoneksiDB.getConnection; import java.sql.CallableStatement; import java.sql.Connection; 126 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import javax.swing.JTable; /** * * @author Adiman */ public class controlRangeHarga { public boolean cekIsiData() throws SQLException { KoneksiDB conn = new KoneksiDB(); int jumlah = 0; conn.bukaKoneksi(); RangeHarga range = new RangeHarga(); String sql = "select count(*) as jumlahData from kategori_nilai"; PreparedStatement statement = (PreparedStatement) conn.bukaKoneksi().prepareStatement(sql); ResultSet rs = (ResultSet) statement.executeQuery(); while (rs.next()) { range.setJumlahData(Integer.parseInt(rs.getString("jumlahData"))); } jumlah = range.getJumlahData(); if (jumlah == 0) { return true; } else { return false; } } public void prosesInsertRange(RangeHarga range) throws SQLException { KoneksiDB konek = new KoneksiDB(); String sql = "{call spSimpanRangeHarga(?,?,?,?,?,?,?,?,?,?)}"; java.sql.CallableStatement callst = konek.bukaKoneksi().prepareCall(sql); callst.setDouble(1, range.getHargaBawah1()); 127 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI callst.setDouble(2, range.getHargaAtas1()); callst.setDouble(3, range.getHargaBawah2()); callst.setDouble(4, range.getHargaAtas2()); callst.setDouble(5, range.getHargaBawah3()); callst.setDouble(6, range.getHargaAtas3()); callst.setDouble(7, range.getHargaBawah4()); callst.setDouble(8, range.getHargaAtas4()); callst.setDouble(9, range.getHargaBawah5()); callst.setDouble(10, range.getHargaAtas5()); callst.executeUpdate(); } public void prosesUpdateRange(RangeHarga range) throws SQLException { KoneksiDB konek = new KoneksiDB(); String sql = "{call spUpdateRangeH(?,?,?,?,?,?,?,?,?,?)}"; java.sql.CallableStatement callst = konek.bukaKoneksi().prepareCall(sql); callst.setDouble(1, range.getHargaBawah1()); callst.setDouble(2, range.getHargaAtas1()); callst.setDouble(3, range.getHargaBawah2()); callst.setDouble(4, range.getHargaAtas2()); callst.setDouble(5, range.getHargaBawah3()); callst.setDouble(6, range.getHargaAtas3()); callst.setDouble(7, range.getHargaBawah4()); callst.setDouble(8, range.getHargaAtas4()); callst.setDouble(9, range.getHargaBawah5()); callst.setDouble(10, range.getHargaAtas5()); callst.executeUpdate(); } public static ResultSet tampilkanRangeNilai(String kategori) throws SQLException { KoneksiDB conn = new KoneksiDB(); ResultSet rs; conn.bukaKoneksi(); String sql = "select batas_bwh, batas_atas from kategori_nilai where kode_range like '" + kategori 128 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI + "'"; rs = (ResultSet) conn.lihatData(sql); return rs; } public void deleteIsiData() throws SQLException { KoneksiDB konek = new KoneksiDB(); String sql = "{call spdeleteKategori}"; CallableStatement callst = konek.bukaKoneksi().prepareCall(sql); callst.executeUpdate(); } public static ResultSet tampilJumlahCluster() throws SQLException { KoneksiDB conn = new KoneksiDB(); ResultSet rs; conn.bukaKoneksi(); String sql = "SELECT Count(datacluster.cluster) FROM datacluster"; rs = (ResultSet) conn.lihatData(sql); return rs; } public void SimpanCluster(ArrayList<String> list, int Iter, Double Data, double sse) throws SQLException { Connection con = getConnection(); CallableStatement callst = null; String sql = "{call sapsimpan_test(?)}"; try { callst = con.prepareCall(sql); callst.setString(1, "Cluster " + Iter); callst.executeUpdate(); } catch (Exception e) { System.err.println("SQLException: " + e.getMessage()); } finally { if (callst != null) { 129 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI try { callst.close(); } catch (SQLException e) { System.err.println("SQLException: " + e.getMessage()); } } if (con != null) { try { con.close(); } catch (SQLException e) { System.err.println("SQLException: " + e.getMessage()); } } } SimpanSubCluster(list, Iter, Data, sse); } public void SimpanSubCluster(ArrayList<String> list, int Iter, Double Data, double sse) throws SQLException { Connection con = getConnection(); CallableStatement callst = null; String sql = "{call sapsimpan_sub(?,?,?,?)}"; try { callst = con.prepareCall(sql); for (int i = 0; i < list.size(); i++) { callst.setString(1, list.get(i)); callst.setDouble(2, Data); callst.setString(3, "Cluster " + Iter); callst.setDouble(4, sse); callst.executeUpdate(); } } catch (Exception e) { System.err.println("SQLException: " + e.getMessage()); } 130 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } public void SimpanTree(Double Data, ArrayList<String> list, int Jml, String Label, String par, String pos) throws SQLException { Connection con = getConnection(); CallableStatement callst = null; String sql = "{call SimpanTree(?,?,?,?,?,?)}"; try { callst = con.prepareCall(sql); callst.setDouble(1, Data); callst.setString(2, list.toString()); callst.setInt(3, Jml); callst.setString(4, Label); callst.setString(5, par); callst.setString(6, pos); callst.executeUpdate(); //} } catch (Exception e) { System.err.println("SQLException: " + e.getMessage()); } } public void simpanPre(JTable tabel) throws SQLException { Connection con = getConnection(); CallableStatement callst = null; String sql = "{call sppreproses(?,?,?)}"; String nb[] = new String[tabel.getRowCount()]; String klp[] = new String[tabel.getRowCount()]; String qty[] = new String[tabel.getRowCount()]; for (int i = 0; i < tabel.getRowCount(); i++) { nb[i] = tabel.getValueAt(i, 0).toString(); klp[i] = tabel.getValueAt(i, 1).toString(); 131 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI qty[i] = tabel.getValueAt(i, 2).toString(); try { callst = con.prepareCall(sql); callst.setString(1, nb[i]); callst.setString(2, klp[i]); callst.setString(3, qty[i]); callst.executeUpdate(); } catch (Exception e) { System.err.println("SQLException: " + e.getMessage()); } } } public void SpDelete() throws SQLException { KoneksiDB konek = new KoneksiDB(); String sql = "{call spdelete}"; CallableStatement callst = konek.bukaKoneksi().prepareCall(sql); callst.executeUpdate(); konek.tutupKoneksi(); } public void deletePreproses() throws SQLException { KoneksiDB konek = new KoneksiDB(); String sql = "{call deletepreproses}"; CallableStatement callst = konek.bukaKoneksi().prepareCall(sql); callst.executeUpdate(); konek.tutupKoneksi(); } } Listing Program – DataObyek.java package Entity; /** * 132 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI * @author Adiman */ public class DataObyek { private String KodeBarang; private String hargaJual; private Double quantity; private Double jumlah; private String total; private String NamaBarang; private String KelompokHarga; private String area; public DataObyek() { } public DataObyek(String NamaBarang,String KelompokHarga, Double jumlah) { this.NamaBarang = NamaBarang; this.KelompokHarga = KelompokHarga; this.quantity = jumlah; } public String getKodeBarang() { return KodeBarang; } public void setKodeBarang(String KodeBarang) { this.KodeBarang = KodeBarang; } public String getHargaJual() { return hargaJual; } public void setHargaJual(String hargaJual) { this.hargaJual = hargaJual; } public Double getQuantity() { return quantity; } public void setQuantity(Double quantity) { this.quantity = quantity; } 133 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI public Double getJumlah() { return jumlah; } public void setJumlah(Double jumlah) { this.jumlah = jumlah; } public String getTotal() { return total; } public void setTotal(String total) { this.total = total; } public String getNamaBarang() { return NamaBarang; } public void setNamaBarang(String NamaBarang) { this.NamaBarang = NamaBarang; } public String getKelompokHarga() { return KelompokHarga; } public void setKelompokHarga(String KelompokHarga) { this.KelompokHarga = KelompokHarga; } public String getArea() { return area; } public void setArea(String area) { this.area = area; } } Listing Program-Graph.java package Entity; import Controller.controlRangeHarga; 134 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI import java.math.BigDecimal; import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.TreeMap; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; /** * * @author Adiman */ public class Graph { public Verteks verteksList[]; public Verteks LabelMatriks[]; public Verteks LabelSplinter[]; public Verteks LabelMatriksAkhir[]; public Verteks LabelSplinterAkhir[]; public double adjMat[][]; public double DataMatriks[][]; public double DataSplinter[][]; public double DataMatriksAkhir[][]; public double DataSplinterAkhir[][]; public double inf = -1.0; public int jumVertex = 0; public int JmlCluster; public int iter = 1; public int cls = 1; public int decp = 3; ArrayList<String> MatrixList = new ArrayList<>(); ArrayList<String> SplinterList = new ArrayList<>(); ArrayList<String> MatrixLisAkhir = new ArrayList<>(); ArrayList<String> SplinterListAkhir = new ArrayList<>(); Map<String, ArrayList<String>> mapClsuter = new HashMap(); double[] mean; double[] std; controlRangeHarga control = new controlRangeHarga(); public Graph(int maxVertex) { verteksList = new Verteks[maxVertex]; adjMat = new double[maxVertex][maxVertex]; for (int i = 0; i < adjMat.length; i++) { for (int j = 0; j < adjMat.length; j++) { 135 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI if (i == j) { adjMat[i][j] = 0.0; } else { adjMat[i][j] = inf; } } } } public Verteks[] getLabelMatriksAkhir() { return LabelMatriksAkhir; } public void setLabelMatriksAkhir(Verteks[] LabelMatriksAkhir) { this.LabelMatriksAkhir = LabelMatriksAkhir; } public Verteks[] getLabelSplinterAkhir() { return LabelSplinterAkhir; } public void setLabelSplinterAkhir(Verteks[] LabelSplinterAkhir) { this.LabelSplinterAkhir = LabelSplinterAkhir; } public double[][] getDataMatriksAkhir() { return DataMatriksAkhir; } public void setDataMatriksAkhir(double[][] DataMatriksAkhir) { this.DataMatriksAkhir = DataMatriksAkhir; } public double[][] getDataSplinterAkhir() { return DataSplinterAkhir; } public void setDataSplinterAkhir(double[][] DataSplinterAkhir) { this.DataSplinterAkhir = DataSplinterAkhir; } public int getJmlCluster() { return JmlCluster; } public void setJmlCluster(int JmlCluster) { 136 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI this.JmlCluster = JmlCluster; } public double[][] getDataSplinter() { return DataSplinter; } public void SetDataSplinter(double[][] adSplinter) { this.DataSplinter = adSplinter; } public Verteks[] getLabelSplinter() { return LabelSplinter; } public void setLabelSplinter(Verteks[] verteksListSplinter) { this.LabelSplinter = verteksListSplinter; } public Verteks[] getVerteksList() { return verteksList; } public void setVerteksList(Verteks[] verteksList) { this.verteksList = verteksList; } public double[][] getadjMat() { return adjMat; } public void setadjMat(double[][] data) { this.adjMat = data; } public void addVerteks(String label, List<Double> nilai) { verteksList[jumVertex++] = new Verteks(label, nilai); } public void addEdge(int x, int y, Double nilai) { adjMat[x][y] = adjMat[y][x] = nilai; } public double[][] getDataMatriks() { 137 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI return DataMatriks; } public void setDataMatriks(double[][] DataMatriks) { this.DataMatriks = DataMatriks; } public Verteks[] getLabelMatriks() { return LabelMatriks; } public void setLabelMatriks(Verteks[] LabelMatriks) { this.LabelMatriks = LabelMatriks; } public void inputData(JTable jTableData) { String label = "P"; int p = 1; for (int i = 0; i < jTableData.getRowCount(); i++) { int o = 0; List<Double> listNilai = new ArrayList<Double>(); for (int j = 1; j < jTableData.getColumnCount(); j++) { label = String.valueOf(jTableData.getValueAt(i, 0)); listNilai.add(Double.parseDouble(jTableData.getValueAt(i, j).toString())); } p++; addVerteks(label, listNilai); MatrixList.add(label); } for (int i = 0; i < jTableData.getRowCount(); i++) { for (int j = i + 1; j < jTableData.getRowCount(); j++) { if (i != j) { addEdge(i, j, cariJarakEcludian(i, j)); } } } } public void tampilJarakEuclidean() { System.out.println(""); System.out.println("-------------------------------------Jarak Ecludian------------------------------------"); System.out.print("\t"); for (int i = 0; i < verteksList.length; i++) { System.out.print("" + verteksList[i].getLabel() + "\t"); } 138 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI System.out.println("\t"); for (int i = 0; i < adjMat.length; i++) { System.out.print("" + verteksList[i].getLabel() + "\t"); for (int j = 0; j < verteksList.length; j++) { System.out.print("" + adjMat[i][j] + "\t"); } System.out.println("\t"); } System.out.println("\t"); System.out.println("-------------------------------------Jarak Ecludian------------------------------------"); } public void LostClustering() throws SQLException { double Bobot = BobotMatriks(adjMat, SplinterListAkhir); control.SimpanTree(Bobot, MatrixList, MatrixList.size(), "root", "null", "null"); System.out.println("bobot" + Bobot); MatrixList.clear(); mapClsuter.clear(); control.SpDelete(); int iterasi = 1; System.out.println("----------------------------------------Iterasi " + iterasi + "--------------------------------------"); System.out.println("Clustering"); double[][] DataCluster = getadjMat(); Verteks[] LabelCluster = getVerteksList(); double rerataMatrix[]; double rerataSplinter[]; double HasilSelisih[]; int splinter = 0; rerataMatrix = Averagematrix(DataCluster, LabelCluster, MatrixList); splinter = CariObjekTerbesar(rerataMatrix, LabelCluster); for (int i = 0; i < LabelCluster.length; i++) { if (i != splinter) { MatrixList.add(LabelCluster[i].getLabel()); } else { SplinterList.add(LabelCluster[i].getLabel()); } } UpdateMatriks(MatrixList, SplinterList, DataCluster, LabelCluster); double[][] DataClusterUpdate = getDataMatriks(); 139 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI Verteks[] LabelClusterUpdate = getLabelMatriks(); double[][] DataSplinterUpdate = getDataSplinter(); rerataMatrix = Averagematrix(DataClusterUpdate, LabelClusterUpdate, MatrixList); rerataSplinter = AverageSplinter(DataSplinterUpdate, LabelClusterUpdate, SplinterList); HasilSelisih = HitungSelisih(rerataMatrix, rerataSplinter, LabelClusterUpdate); ArrayList<Integer> indexSplinter = AmbilIndexSelisih(HasilSelisih, LabelClusterUpdate); int posCount = 0; for (double j : HasilSelisih) { if (j > 0) { posCount++; } } if (posCount == 0) { System.out.println("STOP, NILAI SPLINTER GRUP NEGATIF! Clustering"); } else { System.out.println("LANJUT, NILAI SPLINTER GRUP POSITIF Clustering"); MatrixList.clear(); for (int i = 0; i < LabelClusterUpdate.length; i++) { if (!indexSplinter.contains(i)) { MatrixList.add(LabelClusterUpdate[i].getLabel()); } else { SplinterList.add(LabelClusterUpdate[i].getLabel()); } } UpdateMatriks(MatrixList, SplinterList, DataCluster, LabelCluster); UpdateMatriksAkhir(MatrixList, SplinterList, DataCluster, LabelCluster); LostClustering2(iterasi + 1); } } public void LostClustering2(int iterasi) throws SQLException { System.out.println("----------------------------------------Iterasi " + iterasi + "--------------------------------------"); System.out.println("ClusterIterasi"); tampilAnggotaCluster(); double[][] DataCluster = getadjMat(); double[][] DataClusterUpdate = getDataMatriks(); double[][] DataSplinterUpdate = getDataSplinter(); Verteks[] LabelCluster = getVerteksList(); Verteks[] LabelClusterUpdate = getLabelMatriks(); double rerataMatrix[]; double rerataSplinter[]; double HasilSelisih[]; 140 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI int splinter = 0; rerataMatrix = Averagematrix(DataClusterUpdate, LabelClusterUpdate, MatrixList); rerataSplinter = AverageSplinter(DataSplinterUpdate, LabelClusterUpdate, SplinterList); HasilSelisih = HitungSelisih(rerataMatrix, rerataSplinter, LabelClusterUpdate); ArrayList<Integer> indexSplinter = AmbilIndexSelisih(HasilSelisih, LabelClusterUpdate); int posCount = 0; for (double j : HasilSelisih) { if (j > 0) { posCount++; } } if (posCount == 0) { System.out.println("STOP, NILAI SPLINTER GRUP NEGATIF! Mulai baru pengelompokan"); double Bobot14 = BobotMatriks(DataMatriksAkhir, MatrixLisAkhir); System.out.println("adsM" + Bobot14); control.SimpanTree(Bobot14, MatrixLisAkhir, MatrixLisAkhir.size(), "node", "rootR", "right"); double Bobot31 = BobotMatriks(DataSplinterAkhir, SplinterListAkhir); System.out.println("adsS" + Bobot31); control.SimpanTree(Bobot31, SplinterListAkhir, SplinterListAkhir.size(), "node", "rootL", "left"); double Bobot = BobotMatriks(DataSplinterAkhir, SplinterListAkhir); double HasilAkurasi = akurasi(DataSplinterAkhir); ArrayList< String> tempC = new ArrayList(); tempC.addAll(SplinterListAkhir); control.SimpanCluster(tempC, iter, Bobot, HasilAkurasi); mapClsuter.put("Cluster " + iter, tempC); iter++; MatrixList.clear(); SplinterList.clear(); for (int i = 0; i < LabelClusterUpdate.length; i++) { if (!indexSplinter.contains(i)) { MatrixList.add(LabelClusterUpdate[i].getLabel()); } else { SplinterList.add(LabelClusterUpdate[i].getLabel()); } } UpdateMatriks(MatrixList, SplinterList, DataCluster, LabelCluster); UpdateMatriksAkhir(MatrixList, SplinterList, DataCluster, LabelCluster); System.out.println("a"); tampilAnggotaCluster(); LostClustering3(iterasi + 1); } else { 141 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI System.out.println("LANJUT, NILAI SPLINTER GRUP POSITIF2 ClusterIterasi"); MatrixList.clear(); for (int i = 0; i < LabelClusterUpdate.length; i++) { if (!indexSplinter.contains(i)) { MatrixList.add(LabelClusterUpdate[i].getLabel()); } else { SplinterList.add(LabelClusterUpdate[i].getLabel()); } } UpdateMatriks(MatrixList, SplinterList, DataCluster, LabelCluster); UpdateMatriksAkhir(MatrixList, SplinterList, DataCluster, LabelCluster); LostClustering2(iterasi + 1); } } public void LostClustering3(int iterasi) throws SQLException { System.out.println("----------------------------------------Iterasi " + iterasi + "--------------------------------------"); System.out.println("ClusterIterasi2"); tampilAnggotaCluster(); double[][] DataCluster = getadjMat(); double[][] DataSplinterUpdate = getDataSplinter(); double[][] DataClusterUpdate = getDataMatriks(); Verteks[] LabelCluster = getVerteksList(); Verteks[] LabelClusterUpdate = getLabelMatriks(); double rerataMatrix[]; double rerataSplinter[]; double HasilSelisih[]; int splinter = 0; rerataMatrix = Averagematrix(DataClusterUpdate, LabelClusterUpdate, MatrixList); rerataSplinter = AverageSplinter(DataSplinterUpdate, LabelClusterUpdate, SplinterList); HasilSelisih = HitungSelisih(rerataMatrix, rerataSplinter, LabelClusterUpdate); ArrayList<Integer> indexSplinter = AmbilIndexSelisih(HasilSelisih, LabelClusterUpdate); int posCount = 0; for (double j : HasilSelisih) { if (j > 0) { posCount++; } } if (posCount == 0) { System.out.println("STOP, NILAI SPLINTER GRUP NEGATIF!2 ClusterIterasi2"); UpdateMatriks(MatrixList, SplinterList, DataCluster, LabelCluster); UpdateMatriksAkhir(MatrixList, SplinterList, DataCluster, LabelCluster); 142 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI double Bobot14 = BobotMatriks(DataMatriksAkhir, MatrixLisAkhir); control.SimpanTree(Bobot14, MatrixLisAkhir, MatrixLisAkhir.size(), "node", "right", "right"); System.out.println("adsM" + Bobot14); double Bobot31 = BobotMatriks(DataSplinterAkhir, SplinterListAkhir); System.out.println("adsS" + Bobot31); control.SimpanTree(Bobot31, SplinterListAkhir, SplinterListAkhir.size(), "node", "right", "left"); double Bobot = BobotMatriks(DataMatriksAkhir, MatrixLisAkhir); double HasilAkurasi = akurasi(DataMatriksAkhir); double Bobot1 = BobotMatriks(DataSplinterAkhir, SplinterListAkhir); double HasilAkurasi1 = akurasi(DataSplinterAkhir); ArrayList<String> TempSplinterBaru = new ArrayList<>(); ArrayList<String> TempSplinter = new ArrayList<>(); TempSplinterBaru.addAll(MatrixLisAkhir); TempSplinter.addAll(SplinterListAkhir); mapClsuter.put("Cluster " + iter, TempSplinter); control.SimpanCluster(TempSplinter, iter, Bobot1, HasilAkurasi1); iter++; mapClsuter.put("Cluster " + iter, TempSplinterBaru); control.SimpanCluster(TempSplinterBaru, iter, Bobot, HasilAkurasi); System.out.println(" b"); tampilAnggotaCluster(); //LostClustering2(iterasi + 1); } else { System.out.println("LANJUT, NILAI SPLINTER GRUP POSITIF1 ClusterIterasi2"); MatrixList.clear(); for (int i = 0; i < LabelClusterUpdate.length; i++) { if (!indexSplinter.contains(i)) { MatrixList.add(LabelClusterUpdate[i].getLabel()); } else { SplinterList.add(LabelClusterUpdate[i].getLabel()); } } UpdateMatriks(MatrixList, SplinterList, DataCluster, LabelCluster); UpdateMatriksAkhir(MatrixList, SplinterList, DataCluster, LabelCluster); LostClustering2(iterasi + 1); } } public void tampilAnggotaCluster() { System.out.println(""); System.out.println("----------------------------------"); System.out.println("Update Anggota Clsuter " 143 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI + "\nClsuter C :" + MatrixList + "\nClsuter N :" + SplinterList); System.out.println("----------------------------------"); System.out.println(""); } public void tampilMap() { System.out.println(""); System.out.println("HASIL CLUSTERING"); Map<String, ArrayList<String>> treeMap = new TreeMap<String, ArrayList<String>>(mapClsuter); for (Map.Entry<String, ArrayList<String>> entry : treeMap.entrySet()) { System.out.println(entry.getKey() + " = " + entry.getValue()); } } public void UpdateMatriks(ArrayList<String> MatrixUtama, ArrayList<String> MatrixSplit, double[][] data, Verteks[] list) { int m = 0; int m1 = 0; ArrayList<Integer> countMatrix = new ArrayList(); ArrayList<Integer> countSplit = new ArrayList(); Verteks[] LabelSpliter = new Verteks[MatrixSplit.size()]; Verteks[] LabelCluster = new Verteks[MatrixUtama.size()]; double[][] datamatriks = new double[MatrixUtama.size()][MatrixUtama.size()]; double[][] dataSplit = new double[MatrixUtama.size()][MatrixSplit.size()]; for (int i = 0; i < MatrixUtama.size(); i++) { int count = Search(MatrixUtama.get(i)); countMatrix.add(count); } for (int i = 0; i < MatrixSplit.size(); i++) { int count = Search(MatrixSplit.get(i)); countSplit.add(count); } m = 0; m1 = 0; for (int j = 0; j < list.length; j++) { if (countMatrix.contains(j)) { LabelCluster[m] = list[j]; m++; } if (countSplit.contains(j)) { 144 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI LabelSpliter[m1] = list[j]; m1++; } } m = 0; m1 = 0; for (int e = 0; e < data.length; e++) { if (countMatrix.contains(e)) { int n = 0; int k = 0; for (int j = 0; j < data.length; j++) { if (countMatrix.contains(j)) { datamatriks[m][n] = data[e][j]; n++; } if (countSplit.contains(j)) { dataSplit[m1][k] = data[e][j]; k++; } } m++; m1++; } } setDataMatriks(datamatriks); setLabelMatriks(LabelCluster); SetDataSplinter(dataSplit); setLabelSplinter(LabelSpliter); public void UpdateMatriksAkhir(ArrayList<String> MatrixUtama, ArrayList<String> MatrixSplit, double[][] data, Verteks[] list) { int m = 0; int m1 = 0; ArrayList<Integer> countMatrix = new ArrayList(); ArrayList<Integer> countSplit = new ArrayList(); Verteks[] LabelMatriks1 = new Verteks[MatrixUtama.size()]; Verteks[] LabelSplinter1 = new Verteks[MatrixSplit.size()]; double[][] DataMatriks1 = new double[MatrixUtama.size()][MatrixUtama.size()]; double[][] DataSplinter1 = new double[MatrixSplit.size()][MatrixSplit.size()]; ///ambil index for (int i = 0; i < MatrixUtama.size(); i++) { int count = Search(MatrixUtama.get(i)); 145 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI countMatrix.add(count); } ///ambil index for (int i = 0; i < MatrixSplit.size(); i++) { int count = Search(MatrixSplit.get(i)); countSplit.add(count); } m = 0; m1 = 0; for (int j = 0; j < list.length; j++) { if (countMatrix.contains(j)) { LabelMatriks1[m] = list[j]; m++; } if (countSplit.contains(j)) { LabelSplinter1[m1] = list[j]; m1++; } } m = 0; for (int e = 0; e < data.length; e++) { if (countMatrix.contains(e)) { int n = 0; for (int j = 0; j < data.length; j++) { if (countMatrix.contains(j)) { DataMatriks1[m][n] = data[e][j]; n++; } } m++; } } m = 0; for (int e = 0; e < data.length; e++) { if (countSplit.contains(e)) { int n = 0; for (int j = 0; j < data.length; j++) { if (countSplit.contains(j)) { DataSplinter1[m][n] = data[e][j]; n++; } } m++; } 146 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } setDataMatriksAkhir(DataMatriks1); setLabelSplinterAkhir(LabelMatriks1); setDataSplinterAkhir(DataSplinter1); setLabelSplinterAkhir(LabelSplinter1); MatrixLisAkhir.clear(); SplinterListAkhir.clear(); for (int i = 0; i < list.length; i++) { if (countMatrix.contains(i)) { MatrixLisAkhir.add(list[i].getLabel()); } if (countSplit.contains(i)) { SplinterListAkhir.add(list[i].getLabel()); } } } public ArrayList<Integer> AmbilIndexSelisih(double[] Data, Verteks[] list) { ArrayList<Integer> tempIndex = new ArrayList<>(); int minValueCounter = 0; int index = 0; double rerataAll[] = new double[Data.length]; double nilaiMin = 0; for (int i = 0; i < Data.length; ++i) { rerataAll[i] = Data[i]; BigDecimal bd = new BigDecimal(rerataAll[i]); bd = bd.setScale(decp, BigDecimal.ROUND_DOWN); rerataAll[i] = bd.doubleValue(); nilaiMin = rerataAll[i]; } for (int i = 0; i < rerataAll.length; i++) { if (rerataAll[i] > nilaiMin) { nilaiMin = rerataAll[i]; minValueCounter = 1; index = i; tempIndex.clear(); tempIndex.add(index); } else if (rerataAll[i] == nilaiMin) { minValueCounter++; tempIndex.add(i); } 147 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } return tempIndex; } public int Search(String label) { for (int i = 0; i < verteksList.length; i++) { if (label.equals(verteksList[i].getLabel())) { return i; } } return -1; } public int CariObjekTerbesar(double[] data, Verteks[] label) { double nilaiMax = 0; double sum; int idxMax = 0; for (int i = 0; i < data.length; i++) { sum = data[i]; if (sum > nilaiMax) { nilaiMax = sum; idxMax = i; } } return idxMax; } public double[] Averagematrix(double[][] data, Verteks[] list, ArrayList<String> listSize) { double rerata[] = new double[data.length]; for (int i = 0; i < data.length; ++i) { for (int j = 0; j < data.length; ++j) { rerata[i] += data[i][j]; } rerata[i] = rerata[i] / list.length; } return rerata; } public double[] AverageSplinter(double[][] data, Verteks[] list, ArrayList listSize) { double rerata[] = new double[data.length]; for (int i = 0; i < data.length; ++i) { for (int j = 0; j < listSize.size(); ++j) { rerata[i] += data[i][j]; } 148 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI rerata[i] = rerata[i] / listSize.size(); } return rerata; } public double[] HitungSelisih(double[] obyekMatrix, double[] objekSplinter, Verteks[] list) { double rerata[] = new double[objekSplinter.length]; double ave[] = new double[objekSplinter.length]; double nilaiMax = 0; int idxMax = 0; for (int i = 0; i < obyekMatrix.length; ++i) { rerata[i] = obyekMatrix[i] - objekSplinter[i]; ave[i] = rerata[i]; nilaiMax = ave[i]; } for (int i = 0; i < ave.length; i++) { if (ave[i] >= nilaiMax) { nilaiMax = ave[i]; idxMax = i; } } return ave; } public double[] RoundTo2DecimalsArray(double[] val) { for (int i = 0; i < val.length; ++i) { BigDecimal bd = new BigDecimal(val[i]); bd = bd.setScale(decp, BigDecimal.ROUND_DOWN); val[i] = bd.doubleValue(); } return val; } public double RoundTo2DecimalsSingle(double val) { BigDecimal bd = new BigDecimal(val); bd = bd.setScale(decp, BigDecimal.ROUND_FLOOR); val = bd.doubleValue(); return val; } public double BobotMatriks(double[][] data, ArrayList<String> list) { double ave = 0; double sum = 0; for (int i = 0; i < data.length; i++) { 149 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI sum = 0; for (int j = 0; j < data[i].length; j++) { sum += data[i][j]; ave = sum / data.length; } } return RoundTo2DecimalsSingle(ave); } public double akurasi(double[][] data) { double sse = 0; double[] sumerr2 = new double[data.length]; double[][] matriks = new double[data.length][data.length]; double mean = 0; double sum = 0; for (int i = 0; i < data.length; i++) { sum = 0; for (int j = 0; j < data[i].length; j++) { sum += data[i][j]; mean = sum / data.length; } } for (int i = 0; i < matriks.length; i++) { for (int j = 0; j < matriks[i].length; j++) { matriks[i][j] = data[i][j] - mean; } } for (int i = 0; i < matriks.length; i++) { for (int j = 0; j < matriks[i].length; j++) { matriks[i][j] = Math.pow(matriks[i][j], 2); } } for (int i = 0; i < matriks.length; i++) { for (int j = 0; j < matriks.length; j++) { sumerr2[i] += matriks[i][j]; } sse += sumerr2[i]; BigDecimal bd = new BigDecimal(sse); bd = bd.setScale(decp, BigDecimal.ROUND_DOWN); sse = bd.doubleValue(); } return sse; } 150 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } Listing Program – KoneksiDB.java package Entity; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Adiman */ public class KoneksiDB { private static final String url = "jdbc:mysql://localhost:3306/skripsi"; private String user = "root"; private String password = "1234"; private Connection koneksi; private Statement statement; public KoneksiDB() throws SQLException { try { Class.forName("com.mysql.jdbc.Driver"); koneksi = DriverManager.getConnection(url, user, password); statement = koneksi.createStatement(); } catch (ClassNotFoundException ex) { Logger.getLogger(KoneksiDB.class.getName()).log(Level.SEVERE, null, ex); } } public Connection bukaKoneksi() throws SQLException { Connection konek = DriverManager.getConnection(url, user, password); return konek; } public void tutupKoneksi() throws SQLException { if (koneksi != null) { koneksi.close(); } } 151 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI public ResultSet lihatData(String sql) throws SQLException { ResultSet rs = null; rs = statement.executeQuery(sql); return rs; } public static void main(String[] args) throws SQLException { KoneksiDB tes = new KoneksiDB(); } public static Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/skripsi", "root", "1234"); return con; } catch (Exception ex) { System.out.println("Database.getConnection() Error -->" + ex.getMessage()); return null; } } public static void close(Connection con) { try { con.close(); } catch (Exception ex) { } } } Listing Program – RangeHarga.java package Entity; /** * * @author Adiman */ public class RangeHarga { private double HargaAtas1; private double HargaAtas2; private double HargaAtas3; private double HargaAtas4; private double HargaAtas5; private double HargaBawah1; private double HargaBawah2; 152 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI private double HargaBawah3; private double HargaBawah4; private double HargaBawah5; private int jumlahData; public RangeHarga() { } public double getHargaAtas1() { return HargaAtas1; } public void setHargaAtas1(double HargaAtas1) { this.HargaAtas1 = HargaAtas1; } public double getHargaAtas2() { return HargaAtas2; } public void setHargaAtas2(double HargaAtas2) { this.HargaAtas2 = HargaAtas2; } public double getHargaAtas3() { return HargaAtas3; } public void setHargaAtas3(double HargaAtas3) { this.HargaAtas3 = HargaAtas3; } public double getHargaAtas4() { return HargaAtas4; } public void setHargaAtas4(double HargaAtas4) { this.HargaAtas4 = HargaAtas4; } public double getHargaAtas5() { return HargaAtas5; } public void setHargaAtas5(double HargaAtas5) { this.HargaAtas5 = HargaAtas5; } 153 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI public double getHargaBawah1() { return HargaBawah1; } public void setHargaBawah1(double HargaBawah1) { this.HargaBawah1 = HargaBawah1; } public double getHargaBawah2() { return HargaBawah2; } public void setHargaBawah2(double HargaBawah2) { this.HargaBawah2 = HargaBawah2; } public double getHargaBawah3() { return HargaBawah3; } public void setHargaBawah3(double HargaBawah3) { this.HargaBawah3 = HargaBawah3; } public double getHargaBawah4() { return HargaBawah4; } public void setHargaBawah4(double HargaBawah4) { this.HargaBawah4 = HargaBawah4; } public double getHargaBawah5() { return HargaBawah5; } public void setHargaBawah5(double HargaBawah5) { this.HargaBawah5 = HargaBawah5; } public int getJumlahData() { return jumlahData; } public void setJumlahData(int jumlahData) { 154 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI this.jumlahData = jumlahData; } } Listing Program – verteks.java package Entity; import java.util.List; public class Verteks { private String label; private List<Double> nilai; public Verteks(String label, List<Double> nilai1) { setLabel(label); setNilai(nilai1); } 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; } } Listing Program – HalamanBantuan.java package View; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; /** * * @author Adiman */ public class HalamanBantuan extends javax.swing.JFrame { public HalamanBantuan() { initComponents(); 155 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI setTitle("Halaman Bantuan"); setLocationRelativeTo(this); setResizable(false); } @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("AKU"); setBackground(new java.awt.Color(255, 255, 255)); setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); setMinimumSize(new java.awt.Dimension(860, 450)); setName("Form"); // NOI18N jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanel1.setName("jPanel1"); // NOI18N jLabel5.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel5.setText("SISTEM PREDIKSI PENJUALAN HELM MENGGUNAKAN"); jLabel5.setName("jLabel5"); // NOI18N jLabel6.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel6.setText("ALGORITMA HIERARCHICAL DIVISIVE"); jLabel6.setName("jLabel6"); // NOI18N jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/logo.png"))); // NOI18N jLabel4.setName("jLabel4"); // NOI18N javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(14, 14, 14) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI NG, false) .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 721, javax.swing.GroupLayout.PREFERRED_SIZE)) 156 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI .addContainerGap(36, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(20, 20, 20) .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel6) .addContainerGap(20, Short.MAX_VALUE)) .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); jPanel4.setBackground(new java.awt.Color(255, 255, 255)); jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanel4.setName("jPanel4"); // NOI18N jScrollPane1.setName("jScrollPane1"); // NOI18N jTextArea1.setColumns(20); jTextArea1.setRows(5); jTextArea1.setText("Petunjuk Penggunaan\nA. Petunjuk Preprocessing Data\n 1. Tekan tombol 'Pilih File' untuk mengambil data dalam format file.csv \n - Baris pertama pada file berformat .csv dianggap nama kolom.\n - Label data tidak boleh kosong sehingga data pada kolom pertama dianggap sebagai \n label data.\n 2. Tekan tombol 'Submit' untuk memproses data yang sudah siap olah ke dalam \n tab 'Cluster'\n\nB. Petunjuk Proses Clustering\n 1. Tekan tombol 'Proses' untuk memulai proses Cluster \n 3. Tekan tombol 'Simpan Hasil Outlier' untuk menyimpan hasil deteksi\n outlier dalam format file .xls atau .doc atau .txt"); jTextArea1.setName("jTextArea1"); // NOI18N jScrollPane1.setViewportView(jTextArea1); kembaliButton.setText("KEMBALI"); kembaliButton.setName("kembaliButton"); // NOI18N kembaliButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { kembaliButtonActionPerformed(evt); } }); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() 157 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI .addContainerGap() .addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN G) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 851, Short.MAX_VALUE) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel4Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) .addComponent(kembaliButton))) .addContainerGap()) ); jPanel4Layout.setVerticalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 304, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(kembaliButton) .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 158 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI .addContainerGap()) ); pack(); }// </editor-fold> private void kembaliButtonActionPerformed(java.awt.event.ActionEvent evt) { try { HalamanUtama awal = new HalamanUtama(); awal.setVisible(true); this.dispose(); } catch (SQLException ex) { Logger.getLogger(HalamanBantuan.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new HalamanBantuan().setVisible(true); } }); } } Listing Program – HalamanTentang.java package View; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; /** * * @author Adiman */ public class HalamanTentang extends javax.swing.JFrame { /** * Creates new form HalamanUtama */ public HalamanTentang() { initComponents(); setTitle("Halaman Tentang"); setLocationRelativeTo(this); setResizable(false); } 159 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("AKU"); setBackground(new java.awt.Color(255, 255, 255)); setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); setMinimumSize(new java.awt.Dimension(860, 450)); setName("Form"); // NOI18N jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanel1.setName("jPanel1"); // NOI18N jLabel5.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel5.setText("SISTEM PREDIKSI PENJUALAN HELM MENGGUNAKAN"); jLabel5.setName("jLabel5"); // NOI18N jLabel6.setFont(new java.awt.Font("Tahoma", 1, 24)); // NOI18N jLabel6.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel6.setText("ALGORITMA HIERARCHICAL DIVISIVE"); jLabel6.setName("jLabel6"); // NOI18N jLabel4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Image/logo.png"))); // NOI18N jLabel4.setName("jLabel4"); // NOI18N javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(14, 14, 14) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILI NG, false) .addComponent(jLabel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) 160 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 721, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(36, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addGap(20, 20, 20) .addComponent(jLabel5) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel6) .addContainerGap(20, Short.MAX_VALUE)) .addComponent(jLabel4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); jPanel4.setBackground(new java.awt.Color(255, 255, 255)); jPanel4.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanel4.setName("jPanel4"); // NOI18N jLabel7.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N jLabel7.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel7.setText("PENGEMBANGAN ALAT BANTU"); jLabel7.setName("jLabel7"); // NOI18N jLabel8.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel8.setText("ALGORITMA HIERARCHICAL DIVISIVE"); jLabel8.setName("jLabel8"); // NOI18N jLabel9.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel9.setText("PREDIKSI PENJUALAN HELM MENGGUNAKAN"); jLabel9.setName("jLabel9"); // NOI18N jLabel11.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel11.setText("Dibuat oleh :"); jLabel11.setName("jLabel11"); // NOI18N jLabel12.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel12.setText("ISIDORUS CAHYO ADI PRASETYO"); jLabel12.setName("jLabel12"); // NOI18N jLabel14.setFont(new java.awt.Font("Arial", 1, 12)); // NOI18N 161 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel14.setText("115314009"); jLabel14.setName("jLabel14"); // NOI18N jLabel15.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N jLabel15.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel15.setText("Yogyakarta"); jLabel15.setName("jLabel15"); // NOI18N jLabel17.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N jLabel17.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel17.setText("2015"); jLabel17.setName("jLabel17"); // NOI18N jLabel18.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N jLabel18.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel18.setText("Universitas Sanata Dharma"); jLabel18.setName("jLabel18"); // NOI18N jLabel19.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N jLabel19.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel19.setText("Program Studi Teknik Informatika"); jLabel19.setName("jLabel19"); // NOI18N jLabel20.setFont(new java.awt.Font("Arial", 1, 14)); // NOI18N jLabel20.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel20.setText("Fakultas Sains dan Teknologi"); jLabel20.setName("jLabel20"); // NOI18N kembaliButton.setText("KEMBALI"); kembaliButton.setName("kembaliButton"); // NOI18N kembaliButton.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { kembaliButtonActionPerformed(evt); } }); javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4); jPanel4.setLayout(jPanel4Layout); jPanel4Layout.setHorizontalGroup( jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel4Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) private void kembaliButtonActionPerformed(java.awt.event.ActionEvent evt) { 162 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI try { HalamanUtama awal = new HalamanUtama(); awal.setVisible(true); this.dispose(); } catch (SQLException ex) { Logger.getLogger(HalamanTentang.class.getName()).log(Level.SEVERE, null, ex); } } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { new HalamanTentang().setVisible(true); } }); } } Listing Program HalamanUtama.java /* * HalamanUtama.java * * Created on Jan 2, 2014, 1:58:00 PM */ package View; import Controller.controlRangeHarga; import Entity.DataObyek; import Entity.Graph; import Entity.KoneksiDB; import Entity.RangeHarga; import java.awt.Cursor; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.math.BigDecimal; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; 163 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI import java.sql.SQLException; import java.sql.Statement; import java.util.*; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JFileChooser; import javax.swing.JOptionPane; import javax.swing.JTable; import javax.swing.RowSorter; import javax.swing.SortOrder; import javax.swing.filechooser.FileNameExtensionFilter; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; /** * * @author Adiman */ public class HalamanUtama extends javax.swing.JFrame { private DefaultTableModel model; ArrayList<DataObyek> Objekdat = new ArrayList<>(); ArrayList<DataObyek> hasilPengelompokan = new ArrayList<>(); Vector coluomDataFix = new Vector(); Vector InputData = new Vector(); Vector FixDataPre = new Vector(); ArrayList<String> tipekelompok1 = new ArrayList<String>(); ArrayList<String> tipekelompok2 = new ArrayList<String>(); ArrayList<String> tipekelompok3 = new ArrayList<String>(); ArrayList<String> tipekelompok4 = new ArrayList<String>(); ArrayList<String> tipekelompok5 = new ArrayList<String>(); ArrayList<String> tes2 = new ArrayList<String>(); String url = "jdbc:mysql://localhost:3306/skripsi"; String userid = "root"; String password = "1234"; Connection con; Statement stm; /** * Creates new form HalamanUtama * * @throws java.sql.SQLException */ 164 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI public HalamanUtama() throws SQLException { KoneksiDB kon = new KoneksiDB(); controlRangeHarga ccrlRangeHarga = new controlRangeHarga(); initComponents(); lihatRangeHarga(); setTitle("Halaman Utama"); setLocationRelativeTo(this); //setResizable(false); submitButton.setEnabled(false); jButtonSimpan.setEnabled(false); jButton1.setEnabled(false); batalSeleksiButton.setEnabled(false); preprosesButton1.setEnabled(false); Objekdat.clear(); InputData.clear(); FixDataPre.clear(); hasilPengelompokan.clear(); FixDataPre.clear(); tipekelompok1.clear(); tipekelompok2.clear(); tipekelompok3.clear(); tipekelompok4.clear(); tipekelompok5.clear(); jTabbedPane1.setSelectedComponent(jPanel4); } public void lihatRangeHarga() { try { ResultSet rs1 = controlRangeHarga.tampilkanRangeNilai("I"); rs1.beforeFirst(); while (rs1.next()) { bawah1filed.setText(rs1.getString(1)); atas1filed.setText(rs1.getString(2)); } ResultSet rs2 = controlRangeHarga.tampilkanRangeNilai("II"); rs2.beforeFirst(); while (rs2.next()) { bawah2filed.setText(rs2.getString(1)); atas2filed.setText(rs2.getString(2)); } ResultSet rs3 = controlRangeHarga.tampilkanRangeNilai("III"); rs3.beforeFirst(); while (rs3.next()) { bawah3filed.setText(rs3.getString(1)); atas3filed.setText(rs3.getString(2)); } 165 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI ResultSet rs4 = controlRangeHarga.tampilkanRangeNilai("IV"); rs4.beforeFirst(); while (rs4.next()) { bawah4filed.setText(rs4.getString(1)); atas4filed.setText(rs4.getString(2)); } ResultSet rs5 = controlRangeHarga.tampilkanRangeNilai("V"); rs5.beforeFirst(); while (rs5.next()) { bawah5filed.setText(rs5.getString(1)); atas5filed.setText(rs5.getString(2)); } } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Nilai kategori kosong!", "" + "Pembaritahuan", JOptionPane.INFORMATION_MESSAGE); } } public void TampilLabel() { ArrayList columnNames = new ArrayList(); ArrayList data = new ArrayList(); String sql = "SELECT\n" + "sub_datacluster.cluster AS Cluster,\n" + "sub_datacluster.anggota AS Anggota\n" + "FROM\n" + "sub_datacluster\n" + "ORDER BY\n" + "Cluster ASC"; try (Connection connection = DriverManager.getConnection(url, userid, password); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { ResultSetMetaData md = rs.getMetaData(); int columns = md.getColumnCount(); for (int i = 1; i <= columns; i++) { columnNames.add(md.getColumnName(i)); } while (rs.next()) { ArrayList row = new ArrayList(columns); for (int i = 1; i <= columns; i++) { row.add(rs.getObject(i)); 166 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } data.add(row); } } catch (SQLException e) { System.out.println(e.getMessage()); } Vector columnNamesVector = new Vector(); Vector dataVector = new Vector(); for (int i = 0; i < data.size(); i++) { ArrayList subArray = (ArrayList) data.get(i); Vector subVector = new Vector(); for (int j = 0; j < subArray.size(); j++) { subVector.add(subArray.get(j)); } dataVector.add(subVector); } for (int i = 0; i < columnNames.size(); i++) { columnNamesVector.add(columnNames.get(i)); } DefaultTableModel tabelmodel1 = new DefaultTableModel(dataVector, columnNamesVector); DataLabel.setModel(tabelmodel1); DataLabel.setAutoCreateRowSorter(true); } public void TampilJML() { ArrayList columnNames = new ArrayList(); ArrayList data = new ArrayList(); String sql = "select `sub_datacluster`.`cluster` AS `Cluster`," + "count(`sub_datacluster`.`anggota`) AS `Jumlah Anggota Cluster` " + "from `sub_datacluster` group by `sub_datacluster`.`cluster` ORDER BY\n" + "sub_datacluster.id ASC"; try (Connection connection = DriverManager.getConnection(url, userid, password); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { ResultSetMetaData md = rs.getMetaData(); int columns = md.getColumnCount(); 167 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI for (int i = 1; i <= columns; i++) { columnNames.add(md.getColumnName(i)); } while (rs.next()) { ArrayList row = new ArrayList(columns); for (int i = 1; i <= columns; i++) { row.add(rs.getObject(i)); } data.add(row); } } catch (SQLException e) { System.out.println(e.getMessage()); } Vector columnNamesVector = new Vector(); Vector dataVector = new Vector(); for (int i = 0; i < data.size(); i++) { ArrayList subArray = (ArrayList) data.get(i); Vector subVector = new Vector(); for (int j = 0; j < subArray.size(); j++) { subVector.add(subArray.get(j)); } dataVector.add(subVector); } for (int i = 0; i < columnNames.size(); i++) { columnNamesVector.add(columnNames.get(i)); } DefaultTableModel tabelmodel1 = new DefaultTableModel(dataVector, columnNamesVector); DataJml.setModel(tabelmodel1); DataJml.setAutoCreateRowSorter(true); // jTabbedPane1.setSelectedComponent(DivisivePanel); // jTabbedPane1.setEnabledAt(1, true); } public void TampilSSE() { String sql = "SELECT SUM(mysum) FROM(SELECT DISTINCT sub_datacluster.sse AS " + " mysum FROM sub_datacluster GROUP BY sub_datacluster.cluster) AS bb;"; 168 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI try (Connection connection = DriverManager.getConnection(url, userid, password); Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { while (rs.next()) { TotalSSETextField1.setText(rs.getString("SUM(mysum)")); } } catch (SQLException e) { System.out.println(e.getMessage()); } } public void SimpanCluster() { JFileChooser fileChooser = new JFileChooser(new File("E:/")); fileChooser.setFileFilter(new FileNameExtensionFilter("Microsoft Excel (*.xls)", "xls")); 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 ext = fileChooser.getFileFilter().getDescription(); if (ext.equals("Microsoft Excel (*.xls)")) { File f; f = new File(filename + ".xls"); try { file_output_stream = new FileOutputStream(f); } catch (FileNotFoundException e) { e.printStackTrace(); return; } try { TableModel model = DataLabel.getModel(); FileWriter excel = new FileWriter(f); for (int i = 0; i < model.getColumnCount(); i++) { excel.write(model.getColumnName(i) + "\t"); } excel.write("\n"); for (int i = 0; i < model.getRowCount(); i++) { for (int j = 0; j < model.getColumnCount(); j++) { excel.write(model.getValueAt(i, j).toString() + "\t"); } excel.write("\n"); } excel.close(); 169 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } catch (IOException i) { JOptionPane.showMessageDialog(this, "Penyimpanan Gagal"); } } else if (ext.equals("Microsoft Word (*.doc)")) { File f; f = new File(filename + ".doc"); try { file_output_stream = new FileOutputStream(f); } catch (FileNotFoundException e) { e.printStackTrace(); return; } try { BufferedWriter bfw = new BufferedWriter(new FileWriter(f)); for (int i = 0; i < DataLabel.getColumnCount(); i++) { bfw.write(DataLabel.getColumnName(i)); bfw.write("\t"); } for (int i = 0; i < DataLabel.getRowCount(); i++) { bfw.newLine(); for (int j = 0; j < DataLabel.getColumnCount(); j++) { bfw.write(DataLabel.getValueAt(i, j).toString()); bfw.write("\t"); } } bfw.close(); } catch (IOException i) { JOptionPane.showMessageDialog(this, "Penyimpanan Gagal"); } } else if (ext.equals("Text Documents (*.txt)")) { File f; f = new File(filename + ".txt"); try { file_output_stream = new FileOutputStream(f); } catch (FileNotFoundException e) { e.printStackTrace(); return; } try { BufferedWriter bfw = new BufferedWriter(new FileWriter(f)); for (int i = 0; i < DataLabel.getColumnCount(); i++) { bfw.write(DataLabel.getColumnName(i)); bfw.write("\t"); } for (int i = 0; i < DataLabel.getRowCount(); i++) { 170 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI bfw.newLine(); for (int j = 0; j < DataLabel.getColumnCount(); j++) { bfw.write(DataLabel.getValueAt(i, j).toString()); bfw.write("\t"); } } bfw.close(); } catch (IOException i) { JOptionPane.showMessageDialog(this, "Penyimpanan Gagal"); } } JOptionPane.showMessageDialog(this, "Hasil Pengklasteran Telah Berhasil Disimpan di " + filename); } } public void cekInputRangeHarga() { RangeHarga nilaiRange = new RangeHarga(); controlRangeHarga crlharga = new controlRangeHarga(); boolean cekData = false; if (atas1filed.getText().equals("") || atas2filed.getText().equals("") || atas3filed.getText().equals("") || atas4filed.getText().equals("") || atas5filed.getText().equals("") || bawah1filed.getText().equals("") || bawah2filed.getText().equals("") || bawah3filed.getText().equals("") || bawah4filed.getText().equals("") || bawah5filed.getText().equals("")) { JOptionPane.showMessageDialog(null, "Data Harus Terisi Semua!", "Peringatan", JOptionPane.ERROR_MESSAGE); } else if ((Integer.valueOf(bawah2filed.getText())) <= (Integer.valueOf(bawah1filed.getText())) || (Integer.valueOf(atas2filed.getText())) <= (Integer.valueOf(atas1filed.getText()))) { JOptionPane.showMessageDialog(null, "Proses Kelompok 2 gagal, Silahkan cek kembali range nilai", "" + "Informasi", JOptionPane.INFORMATION_MESSAGE); } else if ((Integer.valueOf(bawah2filed.getText())) < (Integer.valueOf(atas1filed.getText())) || (Integer.valueOf(atas2filed.getText())) < (Integer.valueOf(bawah2filed.getText()))) { JOptionPane.showMessageDialog(null, "Proses Kelompok 2 gagal, Silahkan cek kembali range nilai", "" + "Informasi", JOptionPane.INFORMATION_MESSAGE); } else if ((Integer.valueOf(bawah3filed.getText())) <= (Integer.valueOf(bawah2filed.getText())) || (Integer.valueOf(atas3filed.getText())) <= (Integer.valueOf(atas2filed.getText()))) { 171 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI JOptionPane.showMessageDialog(null, "Proses Kelompok 3 gagal, Silahkan cek kembali range nilai", "" + "Informasi", JOptionPane.INFORMATION_MESSAGE); } else if ((Integer.valueOf(bawah4filed.getText())) <= (Integer.valueOf(bawah3filed.getText())) || (Integer.valueOf(atas4filed.getText())) <= (Integer.valueOf(atas3filed.getText()))) { JOptionPane.showMessageDialog(null, "Proses Kelompok 4 gagal, Silahkan cek kembali range nilai", "" + "Informasi", JOptionPane.INFORMATION_MESSAGE); } else if ((Integer.valueOf(bawah5filed.getText())) <= (Integer.valueOf(bawah4filed.getText())) || (Integer.valueOf(atas5filed.getText())) <= (Integer.valueOf(atas4filed.getText()))) { JOptionPane.showMessageDialog(null, "Proses Kelompok 5 gagal, Silahkan cek kembali range nilai", "Informasi", JOptionPane.INFORMATION_MESSAGE); } else { try { nilaiRange.setHargaBawah1(Double.parseDouble(bawah1filed.getText())); nilaiRange.setHargaAtas1(Double.parseDouble(atas1filed.getText())); nilaiRange.setHargaBawah2(Double.parseDouble(bawah2filed.getText())); nilaiRange.setHargaAtas2(Double.parseDouble(atas2filed.getText())); nilaiRange.setHargaBawah3(Double.parseDouble(bawah3filed.getText())); nilaiRange.setHargaAtas3(Double.parseDouble(atas3filed.getText())); nilaiRange.setHargaBawah4(Double.parseDouble(bawah4filed.getText())); nilaiRange.setHargaAtas4(Double.parseDouble(atas4filed.getText())); nilaiRange.setHargaBawah5(Double.parseDouble(bawah5filed.getText())); nilaiRange.setHargaAtas5(Double.parseDouble(atas5filed.getText())); cekData = crlharga.cekIsiData(); System.out.println(cekData); if (cekData == false) { crlharga.prosesUpdateRange(nilaiRange); JOptionPane.showMessageDialog(null, "Range Nilai Berhasil Disimpan", "Informasi", JOptionPane.INFORMATION_MESSAGE); jTabbedPane1.setEnabledAt(2, true); } else { crlharga.prosesInsertRange(nilaiRange); JOptionPane.showMessageDialog(null, "Range Nilai Berhasil Disimpan", "Informasi", JOptionPane.INFORMATION_MESSAGE); jTabbedPane1.setEnabledAt(2, true); } } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Proses Gagal, Silahkan cek kembali range 172 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI nilai", "Informasi", JOptionPane.INFORMATION_MESSAGE); } } } private void deleteRange() { controlRangeHarga ctrl = new controlRangeHarga(); try { // TODO add your handling code here: ctrl.deleteIsiData(); JOptionPane.showMessageDialog(null, "Range Nilai Berhasil Dihapus", "Informasi", JOptionPane.INFORMATION_MESSAGE); bawah1filed.setText(""); bawah2filed.setText(""); bawah3filed.setText(""); bawah4filed.setText(""); bawah5filed.setText(""); atas1filed.setText(""); atas2filed.setText(""); atas3filed.setText(""); atas4filed.setText(""); atas5filed.setText(""); } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "Range Nilai Gagal Dihapus", "Informasi", JOptionPane.INFORMATION_MESSAGE); Logger .getLogger(HalamanUtama.class .getName()).log(Level.SEVERE, null, ex); } } public void pilih() { JFileChooser fileChooser = new JFileChooser(); fileChooser.setVisible(true); int returnValue = fileChooser.showOpenDialog(null); if (returnValue == JFileChooser.APPROVE_OPTION) { String namaFile = fileChooser.getSelectedFile().getPath(); String[] cut_namafile = namaFile.split("\\."); if (cut_namafile[1].equals("csv")) { File csv = fileChooser.getSelectedFile(); Vector columnNameKeseluruhan = new Vector(); Vector dataKeseluruhan = new Vector(); String line; try { 173 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI BufferedReader br = new BufferedReader(new FileReader(csv)); StringTokenizer st = new StringTokenizer(br.readLine(), ","); while (st.hasMoreElements()) { columnNameKeseluruhan.add(st.nextToken()); } while ((line = br.readLine()) != null) { StringTokenizer st2 = new StringTokenizer(line, ","); Vector row = new Vector(); while (st2.hasMoreTokens()) { row.add(st2.nextToken()); } dataKeseluruhan.add(row); DefaultTableModel model = new DefaultTableModel(dataKeseluruhan, columnNameKeseluruhan); tabelInputData.setModel(model); // tabelInputData.setAutoCreateRowSorter(true); TableModel tablemodel = tabelInputData.getModel(); int jumlahDataSeleksi = tablemodel.getRowCount(); jumlahData.setText(" " + jumlahDataSeleksi); submitButton.setEnabled(true); } System.out.println("Input File Sukses"); pilihFileTextField.setText(csv.getPath()); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Format tidak sesuai"); } } } } public void InputPreprosesData(JTable tabel) { DefaultTableModel dtm = (DefaultTableModel) tabel.getModel(); int nRow = dtm.getRowCount(), col = dtm.getColumnCount(); Vector columnNameKeseluruhan = new Vector(); Vector dataKeseluruhan = new Vector(); double[][] tabelData = new double[nRow][col]; double[][] zScore = new double[nRow][col]; for (int i = 0; i < tabel.getColumnCount(); i++) { columnNameKeseluruhan.add(tabel.getColumnName(i)); } for (int i = 0; i < tabel.getRowCount(); i++) { ArrayList<String> tes = new ArrayList<>(); for (int j = 0; j < tabel.getColumnCount(); j++) { tes.add((String) dtm.getValueAt(i, j)); } DataObyek dob = new DataObyek(); 174 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI dob.setKodeBarang(tes.get(1)); dob.setNamaBarang(tes.get(2).substring(0)); dob.setHargaJual(tes.get(5)); dob.setQuantity(Double.parseDouble(tes.get(6))); dob.setTotal(tes.get(10)); dob.setArea(tes.get(19).substring(0)); dob.setKelompokHarga(tes.get(20).substring(1)); Objekdat.add(dob); } Double a1 = Double.parseDouble(bawah1filed.getText()); Double a2 = Double.parseDouble(bawah2filed.getText()); Double a3 = Double.parseDouble(bawah3filed.getText()); Double a4 = Double.parseDouble(bawah4filed.getText()); Double a5 = Double.parseDouble(bawah5filed.getText()); Double b1 = Double.parseDouble(atas1filed.getText()); Double b2 = Double.parseDouble(atas2filed.getText()); Double b3 = Double.parseDouble(atas3filed.getText()); Double b4 = Double.parseDouble(atas4filed.getText()); Double b5 = Double.parseDouble(atas5filed.getText()); for (int i = 0; i < Objekdat.size(); i++) { Double a = Double.parseDouble(Objekdat.get(i).getHargaJual()); if ((a >= a1) && (a < b1)) { Objekdat.get(i).setKelompokHarga("1"); } else if ((a >= a2) && (a < b2)) { Objekdat.get(i).setKelompokHarga("2"); } else if ((a >= a3) && (a < b3)) { Objekdat.get(i).setKelompokHarga("3"); } else if ((a >= a4) && (a < b4)) { Objekdat.get(i).setKelompokHarga("4"); } else if ((a >= a5) && (a < b5)) { Objekdat.get(i).setKelompokHarga("5"); } } for (int i = 0; i < Objekdat.size(); i++) { Vector sementara = new Vector(); sementara.add(Objekdat.get(i).getKodeBarang()); sementara.add(Objekdat.get(i).getNamaBarang()); sementara.add(Objekdat.get(i).getHargaJual()); sementara.add(Objekdat.get(i).getQuantity()); sementara.add(Objekdat.get(i).getTotal()); sementara.add(Objekdat.get(i).getArea()); sementara.add(Objekdat.get(i).getKelompokHarga()); InputData.add(sementara); 175 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } coluomDataFix.add(columnNameKeseluruhan.get(1)); coluomDataFix.add(columnNameKeseluruhan.get(2)); coluomDataFix.add(columnNameKeseluruhan.get(5)); coluomDataFix.add(columnNameKeseluruhan.get(6)); coluomDataFix.add(columnNameKeseluruhan.get(10)); coluomDataFix.add(columnNameKeseluruhan.get(19)); coluomDataFix.add(columnNameKeseluruhan.get(20)); DefaultTableModel model = new DefaultTableModel(InputData, coluomDataFix); kp.setModel(model); TableModel tablemodel = kp.getModel(); preprosesButton1.setEnabled(true); submitButton.setEnabled(false); batalSeleksiButton.setEnabled(true); } public void SubmitPreprosesing() { System.out.println("\nMulai Submite"); System.out.println("Prosesing pengelompokan tipe"); for (int i = 0; i < Objekdat.size(); i++) { StringTokenizer st = new StringTokenizer(Objekdat.get(i).getNamaBarang(), "\\s+"); ArrayList<String> a = new ArrayList<>(); while (st.hasMoreElements()) { a.add(st.nextToken()); } if (Integer.parseInt(Objekdat.get(i).getKelompokHarga()) == 1) { tipekelompok1.add(a.get(0).toString()); } else if (Integer.parseInt(Objekdat.get(i).getKelompokHarga()) == 2) { tipekelompok2.add(a.get(0).toString()); } else if (Integer.parseInt(Objekdat.get(i).getKelompokHarga()) == 3) { tipekelompok3.add(a.get(0).toString()); } else if (Integer.parseInt(Objekdat.get(i).getKelompokHarga()) == 4) { tipekelompok4.add(a.get(0).toString()); } else if (Integer.parseInt(Objekdat.get(i).getKelompokHarga()) == 5) { tipekelompok5.add(a.get(0).toString()); } } // Pengambungan HashShet tipe data di kelompok 1 HashSet<String> PenggambunganTipeKelompok1 = new HashSet<>(); PenggambunganTipeKelompok1.addAll(tipekelompok1); tipekelompok1.clear(); tipekelompok1.addAll(PenggambunganTipeKelompok1); // Pengambungan HashShet tipe data di kelompok 2 176 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI HashSet<String> PenggambunganTipeKelompok2 = new HashSet<>(); PenggambunganTipeKelompok2.addAll(tipekelompok2); tipekelompok2.clear(); tipekelompok2.addAll(PenggambunganTipeKelompok2); // Pengambungan HashShet tipe data di kelompok 3 HashSet<String> PenggambunganTipeKelompok3 = new HashSet<>(); PenggambunganTipeKelompok3.addAll(tipekelompok3); tipekelompok3.clear(); tipekelompok3.addAll(PenggambunganTipeKelompok3); // Pengambungan HashShet tipe data di kelompok 4 HashSet<String> PenggambunganTipeKelompok4 = new HashSet<>(); PenggambunganTipeKelompok4.addAll(tipekelompok4); tipekelompok4.clear(); tipekelompok4.addAll(PenggambunganTipeKelompok4); // Pengambungan HashShet tipe data di kelompok 5 HashSet<String> PenggambunganTipeKelompok5 = new HashSet<>(); PenggambunganTipeKelompok5.addAll(tipekelompok5); tipekelompok5.clear(); tipekelompok5.addAll(PenggambunganTipeKelompok5); double[][] z = new double[800][800]; for (int k = 0; k < tipekelompok1.size(); k++) { double jumlahQuantity = 0; for (int j = 0; j < Objekdat.size(); j++) { StringTokenizer st = new StringTokenizer(Objekdat.get(j).getNamaBarang(), "\\s+"); ArrayList<String> a = new ArrayList<>(); while (st.hasMoreElements()) { a.add(st.nextToken()); } String tipe = a.get(0).toString(); if (tipekelompok1.get(k).toString().equals(tipe)) { double quatity = Objekdat.get(j).getQuantity(); double datatampung = quatity; jumlahQuantity = datatampung; if (z[0][k] == 0) { z[0][k] = datatampung; } else { jumlahQuantity = z[0][k]; jumlahQuantity = jumlahQuantity + datatampung; z[0][k] = jumlahQuantity; } } 177 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } DataObyek dob = new DataObyek(tipekelompok1.get(k).toString(), "1", jumlahQuantity); hasilPengelompokan.add(dob); } for (int k = 0; k < tipekelompok2.size(); k++) { double jumlahQuantity = 0; for (int j = 0; j < Objekdat.size(); j++) { StringTokenizer st = new StringTokenizer(Objekdat.get(j).getNamaBarang(), "\\s+"); ArrayList<String> a = new ArrayList<>(); while (st.hasMoreElements()) { a.add(st.nextToken()); } String tipe = a.get(0).toString(); if (tipekelompok2.get(k).toString().equals(tipe)) { double quatity = Objekdat.get(j).getQuantity(); double datatampung = quatity; jumlahQuantity = datatampung; if (z[1][k] == 0) { z[1][k] = datatampung; } else { jumlahQuantity = z[1][k]; jumlahQuantity = jumlahQuantity + datatampung; z[1][k] = jumlahQuantity; } } } DataObyek dob = new DataObyek(tipekelompok2.get(k).toString(), "2", jumlahQuantity); hasilPengelompokan.add(dob); } for (int k = 0; k < tipekelompok3.size(); k++) { double jumlahQuantity = 0; for (int j = 0; j < Objekdat.size(); j++) { StringTokenizer st = new StringTokenizer(Objekdat.get(j).getNamaBarang(), "\\s+"); ArrayList<String> a = new ArrayList<>(); while (st.hasMoreElements()) { a.add(st.nextToken()); } String tipe = a.get(0).toString(); if (tipekelompok3.get(k).toString().equals(tipe)) { double quatity = Objekdat.get(j).getQuantity(); double datatampung = quatity; jumlahQuantity = datatampung; 178 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI if (z[2][k] == 0) { z[2][k] = datatampung; } else { jumlahQuantity = z[2][k]; jumlahQuantity = jumlahQuantity + datatampung; z[2][k] = jumlahQuantity; } } } DataObyek dob = new DataObyek(tipekelompok3.get(k).toString(), "3", jumlahQuantity); hasilPengelompokan.add(dob); } for (int k = 0; k < tipekelompok4.size(); k++) { double jumlahQuantity = 0; for (int j = 0; j < Objekdat.size(); j++) { StringTokenizer st = new StringTokenizer(Objekdat.get(j).getNamaBarang(), "\\s+"); ArrayList<String> a = new ArrayList<>(); while (st.hasMoreElements()) { a.add(st.nextToken()); } String tipe = a.get(0).toString(); if (tipekelompok4.get(k).toString().equals(tipe)) { double quatity = Objekdat.get(j).getQuantity(); double datatampung = quatity; jumlahQuantity = datatampung; if (z[3][k] == 0) { z[3][k] = datatampung; } else { jumlahQuantity = z[3][k]; jumlahQuantity = jumlahQuantity + datatampung; z[3][k] = jumlahQuantity; } } } DataObyek dob = new DataObyek(tipekelompok4.get(k).toString(), "4", jumlahQuantity); hasilPengelompokan.add(dob); } for (int k = 0; k < tipekelompok5.size(); k++) { double jumlahQuantity = 0; for (int j = 0; j < Objekdat.size(); j++) { StringTokenizer st = new StringTokenizer(Objekdat.get(j).getNamaBarang(), "\\s+"); ArrayList<String> a = new ArrayList<>(); 179 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI while (st.hasMoreElements()) { a.add(st.nextToken()); } String tipe = a.get(0).toString(); if (tipekelompok5.get(k).toString().equals(tipe)) { double quatity = Objekdat.get(j).getQuantity(); double datatampung = quatity; jumlahQuantity = datatampung; if (z[4][k] == 0) { z[4][k] = datatampung; } else { jumlahQuantity = z[4][k]; jumlahQuantity = jumlahQuantity + datatampung; z[4][k] = jumlahQuantity; } } } DataObyek dob = new DataObyek(tipekelompok5.get(k).toString(), "5", jumlahQuantity); hasilPengelompokan.add(dob); } for (int i = 0; i < hasilPengelompokan.size(); i++) { Vector sementara1 = new Vector(); sementara1.add(hasilPengelompokan.get(i).getNamaBarang()); sementara1.add(hasilPengelompokan.get(i).getKelompokHarga()); sementara1.add(hasilPengelompokan.get(i).getQuantity()); FixDataPre.add(sementara1); } Vector namakolom = new Vector(); namakolom.add("Nama Barang"); namakolom.add("Kelompok Harga"); namakolom.add("Total Quantity"); DefaultTableModel tabelmodel1 = new DefaultTableModel(FixDataPre, namakolom); dataKelompokHargaTable.setModel(tabelmodel1); TableRowSorter<TableModel> sorter = new TableRowSorter<>(dataKelompokHargaTable.getModel()); dataKelompokHargaTable.setRowSorter(sorter); List<RowSorter.SortKey> sortKeys = new ArrayList<>(); int columnIndexBarang = 1; sortKeys.add(new RowSorter.SortKey(columnIndexBarang, SortOrder.ASCENDING)); int columnIndexKelompok = 0; sortKeys.add(new RowSorter.SortKey(columnIndexKelompok, SortOrder.ASCENDING)); sorter.setSortKeys(sortKeys); 180 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI sorter.sort(); jumlahDataDivisiveTextField.setText("" + dataKelompokHargaTable.getRowCount()); //jTabbedPane1.setSelectedComponent(DivisivePanel); jButton1.setEnabled(true); preprosesButton1.setEnabled(false); jTabbedPane1.setEnabledAt(1, true); // } public void prosesclustering() throws SQLException { Graph graph; controlRangeHarga crlharga = new controlRangeHarga(); crlharga.deletePreproses(); setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); int decp = 2; float t1 = System.nanoTime(); graph = new Graph(dataKelompokHargaTable.getRowCount()); graph.inputData(dataKelompokHargaTable); crlharga.simpanPre(dataKelompokHargaTable); System.out.println("\n*********************************Proses Clustering*********************************"); graph.LostClustering(); float t2 = System.nanoTime(); double time = ((t2 - t1) * java.lang.Math.pow(10, -9)); BigDecimal bd = new BigDecimal(time); bd = bd.setScale(decp, BigDecimal.ROUND_DOWN); time = bd.doubleValue(); jTabbedPane1.setSelectedComponent(DivisivePanel); TampilLabel(); TampilJML(); TampilSSE(); lamaclusteriTextField.setText("" + time); setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR)); jButtonSimpan.setEnabled(true); jButton1.setEnabled(false); pop_tree(); graph.tampilMap(); } private void batalSeleksiButtonActionPerformed(java.awt.event.ActionEvent evt) { try { HalamanUtama utama = new HalamanUtama(); utama.setVisible(true); this.dispose(); } catch (SQLException ex) { Logger.getLogger(HalamanUtama.class .getName()).log(Level.SEVERE, null, ex); 181 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI } } private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) { InputPreprosesData(tabelInputData); // SubmitPreprosesing(); } private void pilihFileButtonActionPerformed(java.awt.event.ActionEvent evt) { pilih();// pilihFile(); } private void jButtonSimpanActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: SimpanCluster(); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { try { prosesclustering(); } catch (SQLException ex) { Logger.getLogger(HalamanUtama.class.getName()).log(Level.SEVERE, null, ex); } } private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) { HalamanTentang tentang = new HalamanTentang(); tentang.setVisible(true); this.dispose(); } private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) { HalamanBantuan bantuan = new HalamanBantuan(); bantuan.setVisible(true); this.dispose(); } private void jMenu1MenuSelected(javax.swing.event.MenuEvent evt) { int keluar = JOptionPane.showConfirmDialog(null, "Apakah anda yakin ingin keluar dari sistem?", "Konfirmasi", JOptionPane.YES_NO_OPTION); if (keluar == JOptionPane.YES_OPTION) { this.dispose(); } } private void preprosesButton1ActionPerformed(java.awt.event.ActionEvent evt) { 182 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI SubmitPreprosesing();// TODO add your handling code here: } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { } private void jButtonSimpanRangeActionPerformed(java.awt.event.ActionEvent evt) { cekInputRangeHarga(); } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { deleteRange(); } private void jButtonBatalActionPerformed(java.awt.event.ActionEvent evt) { bawah1filed.setText(""); bawah2filed.setText(""); bawah3filed.setText(""); bawah4filed.setText(""); bawah5filed.setText(""); atas1filed.setText(""); atas2filed.setText(""); atas3filed.setText(""); atas4filed.setText(""); atas5filed.setText(""); } public final void pop_tree() throws SQLException { KoneksiDB kon = new KoneksiDB(); try { try { con = kon.getConnection(); stm = con.createStatement(); } catch (Exception ex) { System.out.println("gagal 1"); ex.printStackTrace(); } ArrayList list = new ArrayList(); list.add("Cluster Tree Node"); String sql = "SELECT * from datacluster"; ResultSet rs = stm.executeQuery(sql); while (rs.next()) { Object value[] = {rs.getString(1), rs.getString(2)}; list.add(value); } Object hierarchy[] = list.toArray(); 183 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI DefaultMutableTreeNode root = processHierarchy(hierarchy); DefaultTreeModel treeModel = new DefaultTreeModel(root); jTree1.setModel(treeModel); } catch (Exception e) { System.out.println("gagal 2"); } } @SuppressWarnings("CallToThreadDumpStack") public DefaultMutableTreeNode processHierarchy(Object[] hierarchy) throws SQLException { KoneksiDB kon = new KoneksiDB(); DefaultMutableTreeNode node = new DefaultMutableTreeNode(hierarchy[0]); try { int ctrow = 0; int i = 0; try { try { con = kon.getConnection(); stm = con.createStatement(); } catch (Exception ex) { System.out.println("gagal 3"); ex.printStackTrace(); } String sql = "SELECT id, cluster from datacluster group by cluster"; ResultSet rs = stm.executeQuery(sql); while (rs.next()) { ctrow = rs.getRow(); } String L1Nam[] = new String[ctrow]; String L1Id[] = new String[ctrow]; ResultSet rs1 = stm.executeQuery(sql); while (rs1.next()) { L1Nam[i] = rs1.getString("cluster"); L1Id[i] = rs1.getString("id"); i++; } DefaultMutableTreeNode child, grandchild; for (int childIndex = 0; childIndex < L1Nam.length; childIndex++) { child = new DefaultMutableTreeNode(L1Nam[childIndex]); node.add(child);//add each created child to root String sql2 = "SELECT anggota, bobot from sub_datacluster where cluster= '" + L1Nam[childIndex] + "' "; ResultSet rs3 = stm.executeQuery(sql2); while (rs3.next()) { grandchild = new DefaultMutableTreeNode(rs3.getString("anggota")); 184 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI child.add(grandchild);//add each grandchild to each child } } } catch (Exception ex) { ex.printStackTrace(); } catch (Exception e) { } return (node); } } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { @Override public void run() { try { new HalamanUtama().setVisible(true); } catch (SQLException ex) { Logger.getLogger(HalamanUtama.class .getName()).log(Level.SEVERE, null, ex); } } }); } } 185