PENDETEKSIAN KEMIRIPAN KODE PROGRAM C DENGAN ALGORITME K-MEDOIDS
RADEN FITYAN HAKIM
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENG ETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2014
PERNYATAAN MENGENAI SKRIPSI DAN SUMBER INFORMASI SERTA PELIMPAHAN HAK CIPTA Dengan ini saya menyatakan bahwa skripsi berjudul Pendeteksian Kemiripan Kode Program C dengan Algoritme K-medoids adalah benar karya saya dengan arahan dari komisi pembimbing dan belum diajukan dalam bentuk apa pun kepada perguruan tinggi mana pun. Sumber informasi yang berasal atau dikutip dari karya yang diterbitkan maupun tidak diterbitkan dari penulis lain telah disebutkan dalam teks dan dicantumkan dalam Daftar Pustaka di bagian akhir skripsi ini. Dengan ini saya melimpahkan hak cipta dari karya tulis saya kepada Institut Pertanian Bogor. Bogor, September 2014 Raden Fityan Hakim NIM G64070032
ABSTRAK RADEN FITYAN HAKIM. Pendeteksian Kemiripan Kode Program C dengan Algoritme K-medoids. Dibimbing oleh IMAS SUKAESIH SITANGGANG. Aksi penjiplakan terhadap kode program lebih sering dan lebih mudah dilakukan. Pendeteksian manual terhadap penjiplakan memakan banyak waktu maupun tenaga. Pendeteksian dapat dilakukan dengan mengelompokkan kode program yang mirip berdasarkan strukturnya. Penelitian ini bertujuan untuk menerapkan algoritme K- medoids pada 4 dataset kode program C untuk menentukan kemiripan dari kode-kode program tersebut dan menganalisis hasil pengelompokan yang diperoleh. Hasil percobaan menunjukkan clustering terbaik pada dataset1 (Kondisi If- Else dan Pengulangan While) diperoleh pada k=10 dengan rataan dissimilarity 2.655, dan sebanyak 18.9% tugas mahasiswa memiliki kelompok yang sama. Pada dataset2 (Pengulangan While), clustering terbaik diperoleh pada k=9 dengan rataan dissimilarity 2.227, dan 32.6% tugas mahasiswa memiliki kelompok yang sama. Untuk dataset3 (Pengulangan For Bersarang dan Kondisi If), tugas mahasiswa terbagi menjadi dua buah cluster dengan rataan dissimilarity 0.719, dan sebanyak 87% tugas mahasiswa berada pada cluster yang sama. Hasil clustering terbaik pada dataset4 (Kondisi If- Else dan Pengulangan For) diperoleh pada k=6 dengan rataan dissimilarity 3.199, dan sebanyak 61% tugas mahasiswa berada pada kelompok yang sama. Nilai akurasi dari hasil pengclusteran mencapai 93.28%. Kata kunci: algoritme K-medoids, clustering, pendeteksian kemiripan
ABSTRACT RADEN FITYAN HAKIM. C Source Code Similarity Detection using KMedoids Algorithm. Supervised by IMAS SUKAESIH SITANGGANG. Practice of plagiarism on program codes is more common and easier to do. Manual detection of plagiarism takes a lot of time and effort. The detection can be done by grouping program codes that have similar structures. This study intends to apply K-medoids algorithm on 4 C code program datasets to find similarities of code program and analyze clustering results. The experimental results show that the best clustering in dataset1 (If- Else Condition and Looping While) was obtained at k=10 with an average of dissimilarity 2.655, and 18.9% of students have the same group. In dataset2 (Looping While), the best clustering was obtained at k=9 with an average of dissimilarity 2.227, and 32.6% student assignments are in the same group. For dataset3, the assignments are divided into two clusters with an average of dissimilarty 0.719, and 87% of students assignments are in the same cluster. The best clustering result on the dataset4 was obtained at k=6 with an average of dissimalrity 3.199, and 61% of students assignments are in the same group. The accuracy rate from clustering results is 93.28%. Keywords: clustering, K-Medoids algorithm, similarity detection
PENDETEKSIAN KEMIRIPAN KODE PROGRAM C DENGAN ALGORITME K-MEDOIDS
RADEN FITYAN HAKIM
Skripsi sebagai salah satu syarat untuk memperoleh gelar Sarjana Komputer pada Departemen Ilmu Komputer
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENG ETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2014
Judul Skripsi : Pendeteksian Kemiripan Kode Program C dengan Algoritme KMedoids Nama : Raden Fityan Hakim NIM : G64070032
Disetujui oleh
Dr Imas Sukaesih Sitanggang, SSi MKom Pembimbing
Diketahui oleh
Dr Ir Agus Buono, MSi MKom Ketua Departemen
Tanggal Lulus:
PRAKATA Puji dan syukur penulis panjatkan ke hadirat Allah Subhanahu wa Ta’ala atas rahmat, hidayah, dan nikmat-Nya sehingga penulis dapat menyelesaikan penelitian ini sebagai tugas akhir untuk memperoleh gelar Sarjana Komputer. Banyak pihak yang telah memberikan bantuan baik yang bersifat materi maupun moral kepada penulis dalam penyelesaian tugas akhir ini. Oleh karena itu, penulis ingin menyampaikan rasa terima kasih yang sebesar-besarnya kepada: 1 Ayahanda Tjatja Sudarsa dan ibunda Nenden Malihah serta Kakak penulis Elva Munawwaroh, Vera Farohatul Mardiah, Irvaanulhakim, Maftuh Hasan Harkoni, Euis YP Harun, dan Miftah Suritho yang senantiasa mendoakan, memotivasi dan memberikan kasih sayangnya kepada penulis. 2 Ibu Dr.Imas Sukaesih Sitanggang S.Si, M.Kom selaku dosen pembimbing yang senantiasa membimbing dan mengarahkan dengan sabar serta memberi saran dan motivasi yang membangun. 3 Bapak Hari Agung Adrianto, S.Kom, M.Si dan Bapak Aziz Kustiyo S.Kom, M.Si selaku dosen penguji. 4 Seluruh staff Departemen Ilmu Komputer yang senantiasa membantu penulis. 5 Teman-teman Ilmu Komputer 44 yang selalu sabar berbagi ilmu, membantu, dan mengajarkan penulis dalam proses menyelesaikan tugas akhir. 6 Sahabat-sahabat penulis: Rilan, Adi Gunarso, Dipta, Yanta, Abi, serta Arizal, yang selalu ada menemani, mendukung, mengingatkan, membantu, dan memberi semangat serta motivasi kepada penulis. Akhir kata, Penulis berharap semoga tulisan ini dapat berma nfaat bagi para pembaca.
Bogor, Agustus 2014 Raden Fityan Hakim
DAFTAR ISI DAFTAR TABEL
v
DAFTAR GAMBAR
v
DAFTAR LAMPIRAN
v
PENDAHULUAN
1
Latar Belakang
1
Perumusan Masalah
2
Tujuan Penelitian
2
Manfaat Penelitian
2
Ruang Lingkup Penelitian
2
METODE
3
Data Penelitian
3
Tahapan Penelitian
3
Pengelompokan Data Manual
4
Praproses Data
4
Penerapan Algoritme K- medoids
6
Algoritme K-medoids
7
Analisis Hasil Cluster
8
Evaluasi Hasil Clustering
8
HASIL DAN PEMBAHASAN
9
Pengelompokan Manual
9
Praproses Data
10
Penerapan Algoritme K- medoids
12
Analisis Hasil Cluster
14
Evaluasi Hasil Clustering
19
SIMPULAN DAN SARAN
20
Simpulan
20
Saran
20
DAFTAR PUSTAKA
20
RIWAYAT HIDUP
34
DAFTAR TABEL 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Komposisi data penelitian Contoh aturan konversi kode program Dataset awal Dataset setelah pengelompokan manual Term frequency Hasil clustering untuk DataSet1 Hasil clustering untuk DataSet2 Hasil clustering untuk DataSet3 Hasil clustering untuk DataSet4 Hasil cluster terbaik untuk DataSet1 Hasil cluster terbaik untuk DataSet2 Hasil cluster terbaik untuk DataSet3 Hasil cluster terbaik untuk DataSet4 Nilai akurasi setiap dataset
3 5 9 10 12 13 13 13 14 14 16 17 18 19
DAFTAR GAMBAR 1 2 3 4 5 6 7 8
Tahapan penelitian Praproses data Contoh penyederhanaan kode program Algoritme K-medoid Hasil pembuangan preprocessor directives Hasil proses tokenisasi Hasil Penyederhanaan token stream N-gram dengan nilai N=4
3 4 5 8 10 11 11 11
DAFTAR LAMPIRAN 1
Contoh kode program dari masing- masing set data yang digunakan dalam penelitian 2 Hasil pengelompokan manual 3 Tabel aturan konversi kode program menjadi token sederhana 4 Hasil clustering untuk DataSet1 5 Hasil clustering untuk DataSet2 6 Hasil clustering untuk DataSet3 7 Hasil clustering untuk DataSet4 8 Hasil evaluasi untuk DataSet1 9 Hasil evaluasi untuk DataSet2 10 Hasil evaluasi untuk DataSet3 11 Hasil evaluasi untuk DataSet4
22 24 25 26 27 28 29 30 31 32 33
PENDAHULUAN Latar Belakang Pada era globalisasi yang serba cepat dan instan saat ini, mahasiswa cenderung menginginkan segala sesuatunya dapat dilakukan dengan cepat, mudah, dan praktis. Kemajuan teknologi yang terjadi malah disalahgunakan oleh kebanyakan orang untuk melakukan kecurangan, salah satunya adalah tindak penjiplakan atau plagiarism. Hal itu dapat terlihat pada saat para siswa mengerjakan tugas sekolah maupun tugas matak uliah. Mereka cenderung berkeinginan untuk dapat sesegera mungkin menyelesaikan tugas mereka tanpa perlu bersusah payah, cukup dengan menjiplak dari tugas teman yang telah selesai ataupun mengambilnya dari internet. Dengan begitu tugas sekolah, kantor, maupun tugas kuliah dapat selesai dengan cepat dan mudah. Mata kuliah Algoritme dan Pemrograman merupakan salah satu mata kuliah yang memberikan penugasan berupa kode program yang umumnya dikumpulkan dalam bentuk berkas digital. Hal ini menyebabkan tugas kode program rentan terhadap tindak penjiplakan. Saat ini pendeteksian penjiplakan semakin sulit dilakukan. Hal ini disebabkan bertambahnya jumlah mahasiswa dan semakin mudahnya mahasiswa untuk saling berbagi hasil pekerjaan baik melalui internet ataupun media lainnya. Selain itu, pendeteksian semakin sulit dengan adanya modifikasi berupa penambahan atau penghapusan baris komentar, merubah nama variabel atau fungsi, maupun merubah susunan struktur kode programnya. Sehingga, pendeteksian secara manual sangatlah memakan banyak biaya dan juga tenaga. Oleh karena itu dibutuhkan suatu cara ataupun sistem yang dapat membantu pendeteksian penjiplakan secara otomatis. Pendeteksian kemiripan kode program secara otomatis oleh Burrows (2004) ialah dengan mengindeks semua kode program yang terkumpul, kemudian melakukan query terhadap hasil indexing tersebut untuk mendapatkan kode-kode program yang mirip. Burrows (2004) menggunakan cara pendeteksian penjiplakan structure-oriented code-based system. Sistem ini membuat representasi sederhana dari kode program. Sistem ini sengaja mengabaikan elemen yang mudah dimodifikasi seperti komentar, whitespace, dan nama variabel. Sistem berorientasi struktur ini juga tidak rentan terhadap penambahan kode program yang bersifat redundant. Gumilang (2013) menggunakan structure-oriented code-based system untuk pendeteksian penjiplakan kode program C dengan clustering. Proses pengelompokan pada penelitian Gumilang (2013) dilakukan dengan menggunakan algoritme K-means. Pada penelitian ini, Gumilang (2013) melakukan iterasi Kmeans secara otomatis. Iterasi K-means otomatis yaitu melakukan clustering menggunakan K- means dengan nilai K bertambah secara otomatis pada setiap iterasinya. Iterasi berhenti apabila anggota-anggota clusters hasil sudah cukup dekat dengan centroid- nya. Notyasa (2013) juga menggunakan structure-oriented code-based system untuk pendeteksian penjiplakan kode program C dengan clustering. Proses pengelompokan pada penelitian ini dengan menggunakan salah satu metode clustering HDC yaitu bisecting K-means yang menggunakan pendekatan top-
2 down, dimana seluruh dokumen dimasukkan ke dalam satu cluster awal kemudian dipisahkan berdasarkan kemiripannya dengan menggunakan K- means dengan jumlah iterasi sebanyak 5 kali. Salah satu teknik clustering adalah K-medoids. Algoritme K-medoids merupakan penyempurnaan dari algoritme K-means yang sangat sensitif terhadap nilai outlier atau titik terjauh. K-medoids mengambil sebuah objek aktual untuk merepresentasikan sebuah cluster, dengan menggunakan sebuah objek untuk setiap clusternya (Han dan Kamber 2011). Pendeteksian kemiripan pada penelitian ini menggunakan dataset yang berupa sejumlah N-gram dari kode program. Dataset ini kemudian diproses dengan menggunakan WEKA untuk mendapatkan tabel term frequency dari masing masing kode program dan selanjutnya dikelompokkan dengan menggunakan algoritme K-medoids. Perumusan Masalah Perumusan masalah dalam penelitian ini adalah 1 Bagaimana menerapkan algoritme K-medoids dalam pendeteksian kemiripan kode program. 2 Apakah algoritme K-medoids dapat menghasilkan cluster yang baik? 3 Bagaimana pola kemiripan kode program yang dihasilkan algoritme Kmedoids pada setiap dataset tugas algoritme dan pemrograman. Tujuan Penelitian Tujuan dari penelitian ini adalah menerapkan algoritme K-medoids untuk menentukan tingkat kemiripan kode program C sehingga dapat membantu pendeteksian penjiplakan pada kode program. Serta mengevaluasi dan menganalisis hasil dari pengelompokan kode program. Manfaat Penelitian Manfaat dari penelitian ini adalah untuk membantu mempermudah pendeteksian penjiplakan kode program C dengan mencari tingkat kemiripan dari struktur kode program, sehingga efisiensi kerja tenaga pendidik dapat meningkat dan tindak penjiplakan yang dilakukan mahasiswa dapat berkurang . Ruang Lingkup Penelitian Dalam penelitian ini akan digunakan empat buah dataset, dengan jumlah data sebanyak 307 buah kode program C. Untuk dataset1 dengan jenis tugas Kondisi If- Else dan Pengulangan While merupakan dataset yang dipilih untuk melengkapi penelitian ini. Sedangkan untuk dataset2 yaitu jenis tugas Pengulangan While, penelitian ini menggunakan dataset yang dipakai oleh Gumilang (2013), dan untuk dataset3 dengan jenis tugas Pengulangan For Bersarang dan Kondisi If serta dataset4 dengan jenis tugas Kondisi If-Else dan Pengulangan For merupakan dataset yang digunakan oleh Notyasa (2013). Untuk data N-gram dari setiap data tugas pemrograman C diperoleh dari hasil penelitian
3 sebelumnya yang dilakukan Notyasa (2013). Tabel 1 menunjukkan komposisi dari data yang digunakan pada penelitian ini. Tabel 1 Komposisi data penelitian Dataset dataset1 dataset2 dataset3 dataset4
Kode Tugas pjj0210 pjj0302 pjj0307 pjj0309
Keterangan Kondisi If-Else dan Pengulangan While Pengulangan While Pengulangan For Bersarang dan Kondisi If Kondisi If-Else dan Pengulangan For
METODE Data Penelitian Data yang digunakan pada penelitian ini merupakan kode program yang diambil dari Bagian Komputasi Terapan Departemen Ilmu Komputer. Data penelitian ini adalah kumpulan berkas digital kode program bahasa C yang merupakan tugas mata kuliah Algoritme dan Pemrograman yang diberikan kepada mahasiswa Program S1 Ilmu Komputer. Kode program bahasa C tersebut dibagi ke dalam empat kelompok berdasarkan jenis tugas, yaitu DataSet1 untuk jenis tugas pjj0210, DataSet2 untuk pjj0302, DataSet3 untuk pjj0307 dan DataSet4 untuk jenis tugas pjj0309 dengan total data yang digunakan sebanyak 307 buah kode program tugas pemrograman bahasa C. Keempat buah jenis tugas yang dipakai untuk dataset pada penelitian ini memiliki tingkat kesulitan menengah. Hal ini dikarenakan tugas yang terlalu mudah akan memiliki variasi algoritme pemecahan yang sedikit, sedangkan tugas yang terlalu sulit cenderung memiliki jumlah kode program yang sedikit karena banyak mahasiswa yang tidak mengumpulkan tugas. Tahapan Penelitian Secara garis besar tahapan penelitian yang dilakukan dalam penerapan algoritme K-medoids ini memiliki 4 tahapan. Tahapan pada penelitian ini dapat dilihat pada Gambar 1. Mulai
Pengelompokan Manual
Selesai
Analisis Cluster
Praproses Data
Penerapan Algoritme K-medoids
Gambar 1 Tahapan penelitian
4 Pengelompoka Data Manual Pada tahapan ini dilakukan pemilihan sampel tugas dan pengelompokan tugas secara manual. Setiap sampel diperiksa satu persatu dan melalui 2 tahap pemeriksaaan. Tahap pertama adalah pemeriksaan nilai output kode program dan tahap kedua adalah pemeriksaan struktur dan algoritme kode program. Pada tahap pertama setiap kode program dijalankan dan diperiksa nilai output-nya, kemudian kode-kode program yang memiliki nilai output yang sama akan dikelompokkan ke dalam satu cluster yang sama. Selanjutnya pada tahap kedua, kode-kode program tiap cluster tersebut diperiksa strukturnya. Kode-kode program dengan struktur dan algoritme yang memiliki tingkat kemiripan tinggi dikelompokkan ke dalam cluster yang sama dan kode program yang berbeda dipisah ke dalam cluster yang berbeda. Praproses Data Praproses data dilakukan untuk mengubah data mentah, yaitu data yang berupa kode-kode program C, ke format yang dapat diproses dalam clustering, yaitu tabel term frequency. Praproses data pada penelitian ini terbagi ke dalam 4 tahapan. Gambar 2 menunjukkan alur tahapan praproses data.
Tabel term frequency
Kumpulan kode program
Pembuangan preprocessor directives
Tokenisasi
Penyederhanaan
N-gram
Gambar 2 Praproses data Pembuangan Preprocessor Directives Pada penelitian ini diasumsikan tidak adanya penggunaan makro pada kode program. Oleh karena itu pada tahap pertama ini dilakukan tahap pembuangan preprocessor directives. Preprocessor directives merupakan sejumlah baris pada awal program yang diawali dengan karakter “#”. Tokenisasi Proses tokenisasi dilakukan untuk mendapatkan keywords dan special characters dari kode program. Pada proses tokenisasi ini, karakter whitespace dibuang semua sehingga didapat term atau string uniknya saja (Manning et al. 2008). Baris komentar pada kode program juga dibuan. Karakter “;” juga dibuang karena merupakan karakter umum yang selalu digunakan di setiap akhir baris kode program C. Setelah itu untuk semua karakter pada program dilakukan perubahan uppercase menjadi lowercase.
5 Penyederhanaan Selanjutnya pada proses penyederhanaan, keywords dan special characters kode program diubah menjadi token sederhana agar lebih ringkas dan mudah dalam pembentukan term. Kode program yang telah diubah menjadi sebuah string panjang token sederhana disebut dengan token stream (Burrows 2004). Konversi kode program menjadi token sederhana dilakukan berdasarkan aturan konversi seperti pada Tabel 2. Tabel 2 Contoh aturan konversi kode program Keywords
Token sederhana
Int For Return ( ) { } = < + , ALPHANUM STRING
A M R h i k l o m a j N 5
Tabel 1 memperlihatkan contoh aturan konversi beberapa keywords dan special characters kode program C menjadi token sederhana. ALPHANUM adalah nama fungsi, nama variabel, atau nilai variabel. STRING adalah sederetan karakter yang diapit oleh tanda "" (kutip ganda). Contoh proses penyederhanaan kode program menjadi sebuah token stream dapat dilihat pada Gambar 3. 1 2 3 4 5 6 7 8
#include <stdio.h> int main (){ int var; for (var=0; var<5; var++){ printf("%d\n", var); } return 0; }
Token stream: ANhikANMhNoNNmNNaaikNh5jNilRNl Gambar 3 Contoh penyederhanaan kode program N-gram Tahap selanjutnya adalah proses N-gram. N-gram adalah potongan sejumlah N karakter dari sebuah string. N-gram merupakan sebuah metode yang diaplikasikan untuk pembangkitan kata atau karakter. Pada penelitian ini metode N-gram digunakan untuk mengambil potongan-potongan karakter huruf sejumlah N dari suatu token stream.
6 N-gram dibedakan berdasarkan jumlah potongan karakter sebesar N (Cavnar dan Trenkle 1994). Pengambilan potongan-potongan kata berupa karakter huruf tersebut ditambahkan dengan padding karakter blank untuk membantu pembentukan N-gram di awal dan akhir string. Sebagai contoh kata ”TEXT” dapat diuraikan ke dalam beberapa N-gram berikut (penggunaan karakter „_‟ merepresentasikan blank): uni-grams : T, E, X, T bi-grams : _T, TE, EX, XT, T_ tri-grams : _TE, TEX, EXT, XT_ quad-grams : _TEX, TEXT, EXT_ quint-grams : _TEXT, TEXT_ N-gram memiliki keunggulan yang lebih dalam pendeteksian penjiplakan. Hal ini dikarenakan dalam pencocokan stream, metode N-gram ini semua string dipecah menjadi beberapa substring, sehingga pada saat terjadi perubahan atau modifikasi pada kode program, kesalahan yang terjadi pada suatu string cenderung hanya berpengaruh pada N-gram yang berdekatan atau substring-nya saja. Oleh karena itu, kode program yang dimodifikasi akan tetap memiliki sebagian besar N-gram yang sama dengan kode program aslinya dan pendeteksian penjiplakan semakin mudah dilakukan (Borrows 2004). Lebih jelasnya berikut contoh 2-gram dari kata “Text” dan “Teext”: Text : _T Te ex xt t_ Teext : _T Te ee ex xt t_ Modifikasi hanya menyebabkan munculnya kesalahan pada substring N-gram “ee” pada string “Teext”, sedangkan N-gram sisanya sama dengan N-gram pada string “Text”. Pada penelitian ini, proses N-gram dilakukan pada token stream dengan ukuran N=4. N dipilih 4 karena merupakan nilai N yang terbaik untuk pendeteksian penjiplakan pada kode program (Chawla 2003 dalam Burrows 2004). Pada bagian akhir penelitian ini juga akan dilakukan percobaan pendeteksian dengan menggunakan nilai N yang berbeda. Hal ini dilakukan untuk melihat pengaruh nilai N yang lebih kecil dan lebih besar terhadap hasil pendeteksian pada penelitian ini. Selanjutnya kemunculan setiap N-gram untuk setiap dokumen dihitung jumlahnya untuk memperoleh tabel term frequency. Tabel term frequency merupakan tabel yang menyimpan statistik kemunculan term atau N-gram dari masing- masing dokumen yang diperiksa, yang kemudian akan digunakan untuk memebentuk vektor-vektor dokumen pada proses clustering. Penerapan Algoritme K-medoids Pada tahapan penelitian ini, akan diterapkan algoritme K- medoids terhadap setiap dataset. Tahapan ini dilakukan dengan mengimplementasikan algoritme Kmedoids dengan menggunakan tool data mining R. Pengolahan data dengan Kmedoids ini mengelompokan data yang berupa kode program C menjadi beberapa cluster, dimana setiap anggota dari masing- masing cluster memiliki kemiripan satu sama lainnya.
7 Algoritme K-Medoids Algoritme K-means sangatlah sensitif terhadap keberadaan nilai outlier dari sebuah cluster karena beberapa objek memiliki posisi yang jauh dari mayoritas data, dan ketika data tersebut dimasukkan ke dalam cluster dapat menyebabkan perubahan secara dramatis terhadap nilai rata-rata dari sebuah cluster. Selain menggunakan nilai rata-rata objek dalam cluster sebagai titik acuan, kita dapat mengambil sebuah objek untuk mewakili cluster, dimana sebuah objek dari masing- masing cluster dipilih untuk menjadi objek representatif. Dengan demikian metode partisi masih bisa dilakukan berdasarkan prinsip meminimalkan jumlah ketidakmiripan antarobjek dan titik referensi yang sesuai. Konsep ini menjadi sebuah dasar dari metode K-medoids (Han & Kamber 2006). Strategi yang mendasar dari algoritme K-medoids adalah untuk menemukan sejumlah k cluster dari n buah objek dengan terlebih dahulu menentukan objek perwakilan (medoids) untuk setiap cluster. Setiap objek yang tersisa kemudian dikelompokkan dengan medoids yang paling mirip. Algoritme K-medoids menggunakan objek representatif sebagai titik acuan, bukan menggunakan nilai rata-rata dari setiap objek dalam sebuah cluster. Algoritme ini mengambil input parameter k, yaitu jumlah cluster yang akan dipartisi antara himpunan n objek. Prinsip dari algoritme ini adalah untuk meminimalkan nilai dissimilarity antara setiap objek dengan titik representatifnya. Algoritme K-medoids secara acak memilih k objek didalam dataset sebagai objek representatif awal yang disebut sebagai medoids. Sebuah medoid dapat didefinisikan sebagai objek di dalam cluster yang memiliki nilai rata-rata dissimilarity antarobjek dalam cluster paling minimal. Algoritme ini meminimalkan absolute error pada saat pengelompokan n buah objek ke dalam k cluster (Han dan Kamber 2011). 𝑘
𝐸=
𝑑𝑖𝑠𝑡(𝑝, 𝑜𝑖 ) 𝑖=1 𝑝∈𝐶𝑖
dimana E merupakan jumlah total nilai absolute error dari semua objek p dalam dataset, oi adalah objek representative dari Ci dan dist(p,oi) merupakan ukuran jarak kemiripan objek p terhadap objek representative oi dengan menggunakan jenis penghitungan jarak euclidean distance. 𝑛
(𝑥 𝑖 − 𝑦𝑖 )2
𝑑𝑖𝑠𝑡 𝑝, 𝑜𝑖 = 𝑖=1
dengan xi dan yi merupakan objek dalam dataset. Gambar 4 menunjukkan algoritme K- medoids.
8 Algorithm : k-medoids, PAM, a k-medoids algorithm for partioning based on medoid or central object Input : k: the number of cluster, D: a data set containing n objects. Output : A set of k cluster. Method : 1. arbitrary choose k object in D as the initial representative object or seeds; 2. repeat 3. Assign each remaining object to the cl uster with the nearest representative object; 4. Randomly select a nonrepresentative object, orandom; 5. Compute the total cost, S,of swapping representative object, oj, with orandom; 6. If S < 0 then swap oj with orandom to form the new set of k representative object; 7. Until no change
Gambar 4 Algoritme K- medoids (Han dan Kamber 2011) Analisis Hasil Cluster Pada tahapan ini diperoleh hasil akhir berupa sejumlah cluster untuk setiap jenis dataset, jumlah anggota setiap cluster beserta daftar anggota dari masingmasing cluster, yang ditampilkan dalam bentuk NRP mahasiswa dan juga nilai huruf mutu akhir mata kuliah Algoritme dan Pemrograman dari masing anggota cluster. Evaluasi Hasil Clustering Pada tahapan ini dilakukan proses validasi dari hasil clustering. Tahapan ini dilakukan untuk mengukur seberapa baik hasil clustering yang didapatkan. Validasi dilakukan dengan cara membandingkan hasil cluster otomatis menggunakan metode clustering dengan hasil cluster secara manual. Evaluasi hasil clustering dilakukan dengan menggunakan perhitungan akurasi. Formula untuk mencari nilai akurasi ditunjukan sebagai berikut
Akurasi =
jumlah kode program yang berada pada cluster yang sama total kode program
Jumlah kode program yang berada pada cluster yang sama adalah jumlah kode program hasil pengelompokan dengan algoritme K- medoid yang sama dengan cluster hasil pengelompokan secara manual, sedangkan total kode program merupakan jumlah total kode program dari sebuah dataset yang dievaluasi.
9 Alat Penelitian dilakukan dengan menggunakan perangkat keras dan perangkat lunak sebagai berikut: Perangkat keras berupa komputer personal dengan spesifikasi: Processor Intel Core i5-3210M 2.50 GHz, Read Access Memory 4 GB, dan Hard disk 500 GB.
Perangkat lunak: Sistem Operasi Windows 7 Professional 64-bit, Notepad ++ 6.6.8 sebagai text editor, Microsoft Excel 2007 untuk pengolahan data, Server control panel XAMPP 3.1.0 bitNami copyright, Web browser Mozilla Firefox 19.0.2. Tool data mining WEKA 3.7 Tool statistika R x64 3.0.2
HASIL DAN PEMBAHASAN Pengelompokan Manual Pemilihan sampel data tugas yang digunakan berdasarkan tingkat kesulitan dari tugas tersebut. Sampel ini dipilih dengan tujuan agar mendapatkan beberapa kelompok dengan anggota yang memiliki kemiripan kode program supaya bisa dilakukan analisis. Data yang digunakan pada penelitian ini adalah kode-kode program dari tugas pemrograman berbahasa C. Jumlah data sebanyak 307 buah kode program yang dipilih dari 4 buah jenis tugas dengan kesulitan menengah. Masing- masing tugas tersebut kemudian dijadikan dataset pada penelitian ini. Tabel 3 menunjukkan komposisi dataset yang digunakan pada penelitian ini. Kode program dari masing- masing dataset penelitian ini dapat dilihat pada Lampiran 1. Tabel 3 Dataset awal Set data DataSet1 DataSet2 DataSet3 DataSet4 DataSetAll
Jumlah dokumen 95 92
60 60 307
10 Pengelompokan data secara manual dilakukan dalam dua tahap, yang pertama pemeriksaan output dari masing- masing program dan pada tahap kedua dilakukan dengan memeriksa struktur dari program tersebut. Pada DataSet1 dilakukan pengelompokan secara manual dengan membandingkan struktur kode programnya dan menghasilkan 10 buah cluster. Untuk DataSet2 penelitian ini menggunakan hasil pengelompokan manual yang digunakan pada penelitian yang sudah dilakukan Gumilang (2013), dari 92 dokumen didapatkan 9 buah cluster. Untuk DataSet3 dan DataSet4 pada penelitian ini menggunakan hasil pengelompokan manual yang digunakan pada penelitian yg sudah dilakukan oleh Notiyasa (2013), yaitu 2 buah cluster untuk DataSet3 dan 6 buah cluster untuk DataSet4. Namun dari semua cluster yang dihasilkan tersebut, terdapat cluster yang hanya berisi 1 atau 2 buah kode program. Cluster yang memiliki anggota yang terlalu sedikit tersebut kemudian dihilangkan. Untuk Hasil pengelompokan manual pada DataSet1, DataSet2, DataSet3, dan juga DataSet4 dapat dilihat pada Lampiran 2. Hasil pengelompokan manual dari keempat dataset dapat dilihat pada Tabel 4. Tabel 4 Dataset setelah pengelompokan manual Set data DataSet1 DataSet2 DataSet3 DataSet4 DataSetAll
Jumlah dokumen 95
Clusters manual 10
92
9
60 60 307
2 6 27
Praproses Data Pada bagian praproses data terbagi menjadi beberapa tahapan, yaitu: pembuangan preprocessor directives, tokenisasi, penyederhanaan dan N-gram. Tahapan pembuangan preprocessor directives dilakuakan karena pada penelitian ini diasumsikan tidak adanya makro pada kode program. Gambar 5 merupakan salah satu contoh pembuangan preprocessor directives dari salah satu kode program pada DataSet1: 1 2 3 4 5 6 7 8 9 10 11
main() { unsigned long int a,n=0; long int b=0; scanf("%lu", &a); //baca input while ((pow(10,n++))<=a) b+=1; printf("%lu\n", b); //cetak hasil return 0; }
Gambar 5 Hasil pembuangan preprocessor directives
11 Tahap berikutnya adalah melakukan pemilihan keyword dan special charcter pada kode program yang disebut dengan proses tokenisasi. Keyword dan special character didapatkan setelah memilah tiap term dengan membuang whitespace, baris komentar dan pembuangan karakter “;” karena merupakan karakter umum yang di gunakan di setiap akhir baris kode program C. Selanjutnya dilakukan perubahan semua huruf dari uppercase menjadi lowercase. Gambar 6 adalah contoh kode program yang telah melalui proses tokenisasi 1 2 3 4 5 6 7 8 9 10 11
main() { unsigned long int a,n=0 long int b=0 scanf("%lu", &a) while ((pow(10,n++))<=a) b+=1 printf("%lu\n", b) return 0 }
Gambar 6 Hasil proses tokenisasi Proses selanjutnya adalah tahap penyederhanaan, yaitu mengubah keyword dan special character yang didapatkan dari hasil tokenisasi menjadi deretan token sederhana yang diurutkan berdasarkan struktur kode programnya. Namun sebelumnya dilakukan pengecekan dan penambahan spasi di awal dan di akhir keyword atau special character tersebut, untuk memastikan tidak terjadinya kesalahan konversi yang diakibatkan adanya keyword dan special character yang berhimpitan satu sama lainnya. Perubahan/konversi keyword dan special character dilakukan dengan mengikuti aturan konversi yang dapat dilihat pada lampiran 3. Hasil dari proses penyederhanaan ini berupa string panjang token sederhana yang sering disebut dengan token stream. Gambar 7 adalah contoh dari token stream hasil penyederhanaan pada salah satu kode program pada Gambar 6. NhikHFANjNoNFANoNNh5jfNiKhhNhNjNaaiimoNiNaoNNh5jNiRNl
Gambar 7 Hasil penyederhanaan token stream Setelah token stream dari hasil penyederhanaan di dapatkan, lalu dilakukan proses N-gram pada token stream tersebut. Proses N-gram dilakukan untuk membangkitkan term dengan cara mengambil atau memotong sebuah string panjang sebanyak N buah huruf. Pada penelitian ini digunakan N=4. Gambar 8 adalah sebuah contoh N-gram dari token stream pada Gambar 7. _Nhi Nhik hikH ikHF
NjNo jNoN NoNF oNFA
oNNh NNh5 Nh5j h5jf
iKhh KhhN hhNh hNhN
Naai aaii aiim iimo
iNao NaoN aoNN oNNh
jNiR NiRN iRNl RNl_
12 kHFA HFAN FANj ANjN
NFAN FANo AnoN NoNN
5jfN jfNi fNiK NiKh
NhNj hNjN NjNa jNaa
imoN moNi oNiN NiNa
NNh5 Nh5j h5jN 5jNi
Gambar 8 N-gram dengan nilai N=4 Selanjutnya setelah dilakukan N-gram dengan nilai N=4, frequency jumlah kemunculan setiap N-gram dari masing- masing kode program dihitung dengan menggunakan tool data mining WEKA, yaitu menggunakan fungsi filter unsupervised attribute dengan sub fungsi string to word vector yang kemudian akan diperoleh sebuah tabel term frequency, yang selanjutnya dapat digunakan untuk membentuk vektor-vektor dokumen pada proses clustering. Tabel 5 merupakan sebuah contoh term frequency dari N-gram pada Gambar 8 Tabel 5 Term frequency Dok
_Nhi Nhik dok1 1 1 dok2 1 1 dok3 1 1 ....
....
....
Term hikH ikHF kHFA HFAN FANj AnjN 1 1 1 1 1 1 1 0 0 2 1 1 1 1 1 3 2 1 ....
....
....
....
....
....
NjNo 1 2 2
.... .... .... ....
....
....
Penerapan Algoritme K-medoids Dari term frequency masing masing dataset yang didapatkan pada tahap praproses data, kemudian dilakukan pengclusteran. Proses clustering pada penelitian ini menggunakan algoritme K-medoids. K-medoids dapat dikatakan merupakan penyempuranaan dari algoritme K-means yang sangat sensitif terhadap nilai outlier. Algoritme K-medoids diaplikasikan kepada masing- masing dataset dengan mengunakan sebuah aplikasi, yaitu aplikasi R. Tabel term frequency dalam bentuk format CSV (Comma Separated Values) dipanggil ke dalam tool R yang kemudian dilakukan pengclusteran dengan menggunakan fungsi PAM (fungsi K-medoids dalam R) dan dilakukan serangkaian percobaan clustering dengan jumlah cluster K dari 2 sampai dengan 10 dan kemudian di hitung nilai rata-rata dissimilarity masing- masing cluster untuk setiap dataset. Hasil clustering dengan menggunakan algoritme K- medoids yang diterapkan dengan menggunakan aplikasi R untuk DataSet1, DataSet2, DataSet3 dan DataSet4 dapat dilihat berturut turut pada Tabel 6, 7, 8, dan 9. Untuk Hasil lengkap dari percobaan clustering untuk DataSet1, DataSet2, DataSet3, dan DataSet4 untuk setiap nilai K dapat dilihat berturut-turut pada Lampiran 4, 5, 6, 7.
13 Tabel 6 Hasil clustering untuk DataSet1 K 2 3 4 5 6 7 8 9 10 11
Max.Diss 11.560 11.234 10.928 10.711 9.642 9.645 8.988 8.479 8.508 8.170
Nilai Rata-Rata Avg.Diss Diameter 6.447 14.433 4.877 13.095 3.935 12.335 3.629 11.984 3.640 10.932 2.916 10.553 3.163 9.763 2.797 9.255 2.655 9.037 2.348 8.577
Separation 6.000 6.516 7.067 7.109 7.472 7.332 6.816 7.218 7.182 9.371
Tabel 7 Hasil clustering untuk DataSet2 K 2 3 4 5 6 7 8 9 10
Max.Diss 8.215 7.379 5.966 5.748 5.890 5.536 5.395 5.338 5.338
Nilai Rata-Rata Avg.Diss Diameter 5.516 8.489 4.939 7.817 3.926 6.803 4.037 6.327 3.381 6.747 2.718 6.194 2.446 6.366 2.227 6.170 2.060 5.971
Separation 4.123 5.517 5.374 5.269 5.207 5.148 5.130 4.960 5.012
Tabel 8 Hasil clustering untuk DataSet3 K 2 3 4 5 6 7 8 9 10
Max.Diss 3.741 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Nilai Rata-Rata Avg.Diss Diameter 0.719 3.741 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Separation 16.703 8.062 10.222 10.222 3.741 3.741 3.741 3.741 3.741
14 Tabel 9 Hasil clustering untuk DataSet4 K Max.Diss 19.766 14.307 12.603 10.165 8.744 8.944 0.000 0.000 0.000
2 3 4 5 6 7 8 9 10
Nilai Rata-Rata Avg.Diss Diameter 4.712 19.984 3.971 15.680 5.520 12.603 3.410 15.667 3.199 8.744 2.981 8.944 0.000 0.000 0.000 0.000 0.000 0.000
Separation 13.341 17.359 16.819 15.987 15.837 12.793 12.251 12.654 12.653
Kolom K merupakan inputan yang dimasukkan untuk menentukan jumlah cluster yang diinginkan, sedangkan Max.dissimilarty merupakan nilai ketidakmiripan antar cluster, Avg.dissimilarty menunjukkan nilai ketidakmiripan antar object di dalam cluster yang sama. Semakin kecil nilai avg.dissimilarty, semakin baik cluster yang terbentuk. Kemudian kolom diameter menunjukkan panjang diameter dari masing- masing cluster. Analisis Hasil Cluster Menurut hasil percobaan yang dilakukan pada tahap penerapan algoritme K-medoids dengan menggunakan program R dapat diketahui pada saat nilai K berapa pengclusteran terbaik terjadi. Pemilihan nilai K terbaik dalam percobaan ini dapat dilihat dari nilai rata-rata keseluruhan nilai dissimilarty antar objek maupun antar cluster-nya, dan jumlah anggota dalam sebuah cluster dengan syarat jumlah anggota untuk sebuah cluster tidak kurang dari tiga anggota. Nilai K terbaik untuk masing masing dataset serta NRP mahasiswa mana saja yang memiliki kemiripan dalam struktur kode programnya untuk DataSet1, DataSet2, DataSet3, dan juga DataSet4 dapat dilihat berturut-turut pada Tabel 10, 11, 12, dan 13. Tabel 10 Hasil cluster terbaik untuk DataSet1 ada pada K=10 Cluster Ukuran
NRP
1
6
_001,_ 077,_ 082, _125, _128, _132
2
13
_003, _011,_ 017,_ 019,_ 020,_ 022, _033,_ 044,_ 065,_ 070, _071, _101, _126
Huruf Mutu Mata Kuliah Algoritme dan Pemrograman A = 0 orang B = 0 orang C = 3 orang D = 2 orang E = 1 orang A = 1 orang B = 5 orang C = 4 orang D = 3 orang E = 0 orang
15
Cluster Ukuran
NRP
3
18
_005,_ 006,_ 013,_ 016,_ 042,_ 045, _059,_ 075,_ 076, _079,_ 083,_ 087, _100, _107, _109, _122, _133, _8001
4
8
_008,_ 053,_ 060, _062, _103, _117, _120, _124
5
8
_009, _030, _037, _054, _057, _068, _074, _092
6
18
_012, _021, _023, _025, _026, _027, _036, _038, _047, _049, _063, _081, _088, _093, _099, _113, _118, _129
7
7
_015, _029, _043, _050, _055, _080, _105
8
3
_024, _104, _106
9
10
_032, _040, _041, _046, _048, _066, _069, _072, _108, _114
10
4
_058, _102, _112, _131
Huruf Mutu Mata Kuliah Algoritme dan Pemrograman A = 1 orang B = 4 orang C = 9 orang D = 3 orang E = 1 orang A = 0 orang B = 2 orang C = 3 orang D = 1 orang E = 2 orang A = 0 orang B = 3 orang C = 5 orang D = 0 orang E = 0 orang A = 3 orang B = 5 orang C = 7 orang D = 2 orang E = 0 orang A = 1 orang B = 3 orang C = 2 orang D = 1 orang E = 0 orang A = 1 orang B = 0 orang C = 2 orang D = 0 orang E = 0 orang A = 1 orang B = 5 orang C = 4 orang D = 0 orang E = 0 orang A = 0 orang B = 3 orang C = 1 orang D = 0 orang E = 0 orang
16 Pada DataSet1 yaitu dengan kode tugas pjj0210 cluster terbaik terjadi pada K=10 karena berdasarkan hasil percobaan untuk nila K=2 sampai dengan K=10 untuk DataSet1 yang dicantumkan pada Tabel 6, pada nilai K=10 memiliki ratarata nilai dissmilarity yang paling kecil yaitu 2.65 dan rata-rata max.dissimilarity sebesar 8.508. Dan ketika K=11 terdapat salah satu anggota cluster yang hanya memiliki jumlah anggota sebanyak satu buah sehingga cluster terbaik di ambil pada saat K=10. Pada Tabel 8 dapat terlihat jumlah anggota cluster beserta NRP mahasiswa yang membuat kode program pada cluster tertentu dan juga nilai mutu mata kuliah algoritme pemrograman masing- masing mahasiswa. Dilihat dari persebaran anggota clusternya, pada jenis tugas ini penyebaran nilai mutu disetiap cluster merata antara yang nilai mutunya baik maupun yang kurang baik. Tabel 11 Hasil cluster terbaik untuk DataSet2 ada pada K=9
Cluster Ukuran
NRP
1
7
_001, _082, _101, _126, _128, _132, _133
2
14
_003, _006, _016, _020, _021, _042, _046, _058, _072, _075, _080, _100, _106, _122
3
12
_005, _008, _009, _011, _012, _015, _026, _063, _076, _104, _109, _113,
4
5
_013, _017, _045, _049, _053
5
30
_019, _022, _023, _029, _030, _032, _036, _037, _041, _043, _044, _047, _048, _055, _059, _060, _062, _065, _070, _083, _087, _093, _103, _107, _114, _117, _118, _120, _125, _131
6
7
_024, _033, _069, _092, _102, _105, _124
Huruf Mutu Mata Kuliah Algoritme dan Pemrograman A = 0 orang B = 0 orang C = 4 orang D = 2 orang E = 0 orang A = 1 orang B = 6 orang C = 4 orang D = 2 orang E = 0 orang A = 3 orang B = 5 orang C = 4 orang D = 0 orang E = 0 orang A = 1 orang B = 1 orang C = 1 orang D = 1 orang E = 1 orang A = 1 orang B = 5 orang C = 17 orang D = 6 orang E = 1 orang A = 0 orang B = 5 orang
17
Cluster Ukuran
NRP
7
4
_025, _054, _074, _088
8
4
_027, _040, _066, _079
9
9
_038, _050, _071, _081, _099, _108, _112, _129, _8001
Huruf Mutu Mata Kuliah Algoritme dan Pemrograman C = 2 orang D = 0 orang E = 0 orang A = 0 orang B = 2 orang C = 2 orang D = 0 orang E = 0 orang A = 0 orang B = 2 orang C = 1 orang D = 0 orang E = 1 orang A = 1 orang B = 3 orang C = 3 orang D = 1 orang E = 1 orang
Pada Tabel 11 diperlihatkan jumlah anggota beserta NRP anggota cluster yang saling mirip satu sama lainnya. Pemilihan nilai K terbaik untuk DataSet2 dengan kode tugas pjj0302 adalah pada saat K=9 dimana nilai rata-rata dissimilarity anggota clusternya paling kecil yaitu 2.227. Namun dari Tabel 7 terlihat bahwa nilai rata-rata dissimilarity untuk K=10 lebih kecil tetapi kenapa nilai tersebut tidak dipilih dikarenakan ada salah satu cluster-nya yang hanya beranggotakan 2 buah objek data, sehingga nilai K=9 yang dipilih sebagai cluster terbaik. Dari tabel hasil mutu terlihat persebaran huruf mutu untuk setiap cluster merata, sehingga dapat diprediksi pola kemiripannya. Tabel 12 Hasil cluster terbaik untuk DataSet3 ada pada K=2 Cluster Ukuran
1
52
NRP
_003, _006, _008, _011, _019, _020, _022, _023, _024, _026, _027, _029, _030, _032, _036, _037, _038 ,_041, _043, _044, _045, _047, _048, _054, _059, _060, _062, _065, _070, _071, _072, _076, _083, _087, _099, _103, _104, _105, _106, _107, _108, _109, _114, _117, _118, _120, _125, _126, _128, _131, _132, _133
Huruf Mutu Mata Kuliah Algoritme dan Pemrograman A = 4 orang B = 10 orang C = 27orang D = 9 orang E = 1 orang
18 Cluster Ukuran
2
8
NRP
_017, _053, _069, _081, _101, _124, _129, _8001
Huruf Mutu Mata Kuliah Algoritme dan Pemrograman A = 0 orang B = 2 orang C = 4 orang D = 0orang E = 2 orang
Untuk DataSet3 dengan kode tugas pjj0307 cluster terbaik berada pada saat K=2. Hal itu dikarenakan nilai rata-rata dissimilarity antar objeknya sudah kecil, yaitu sevesar 0.719 dan ketika niali K ditambah menjadi 3, 4 dan seterusnya ada anggota cluster yang sudah sangat mirip dengan nilai rata-rata disimilarity = 0.000 dikelompokan kemabali sehingga nilai K terbaik berada pada saat K=2. Tabel 13 Hasil cluster terbaik untuk DataSet4 ada pada K=6
Cluster
Ukuran Cluster
NRP
1
3
_005, _053, _129
2
7
_006, _021, _046, _058, _075, _106, _122
37
_008, _009, _019, _020, _022, _023, _030, _036, _037, _041, _043, _044, _045, _047, _048, _055, _059, _060, _062, _065, _070, _071, _072, _076, _083, _087, _103, _104, _105, _107, _108, _114, _117, _120, _128, _132, _133
3
4
5
_013, _015, _016, _027, _092
5
5
_017, _033, _081, _118, _124
Huruf Mutu Mata Kuliah Algoritme dan Pemrograman A = 0 orang B = 0 orang C = 2 orang D = 0 orang E = 1 orang A = 1 orang B = 0 orang C = 4 orang D = 1 orang E = 0 orang A = 2 orang B = 7 orang C = 19 orang D = 7 orang E = 1 orang A = 3 orang B = 1 orang C = 0 orang D = 1 orang E = 0 orang A = 0 orang B = 2 orang
19
Cluster
6
Ukuran Cluster
3
Huruf Mutu Mata Kuliah Algoritme dan Pemrograman C = 2 orang D = 1 orang E = 0orang A = 1 orang B = 1 orang C = 1 orang D = 0 orang E = 0 orang
NRP
_063, _069, _101
Begitu pula untuk DataSet4 dengan kode tugas pjj0309 nilai K terbaik adalah pada saat K=6 dengan alasan yang sama seperti dataset sebelumnya, dengan nilai rata-rata dissimilarty paling kecil adalah 3.199 dan tidak memiliki cluster yang beranggotakan lebih kecil dari 3 buah objek. Apabila dibandingkan dengan nilai huruf mutu mata kuliah Algoritme dan Pemrograman setiap mahasiswa dapat dilihat pola dari alur kemiripan yang terjadi dimana di setiap cluster terdapat mahasiswa dengan huruf mutu tinggi dan rendah. Evaluasi Hasil Clustering Evaluasi hasil clustering dilakukan dengan cara membandingkan hasil cluster yang dihasilkan dengan menggunakan penerapan K-medoids dengan hasil cluster yang dihasilkan pada tahap pengelompokan manual. Tabel 14 menunjukan nilai akurasi untuk masing- masing dataset serta nilai akurasi rata-rata dari semua dataset yang digunakan pada penelitian ini. Tabel 14 Nilai akurasi setiap dataset Jenis DataSet DataSet1 (pjj0210) DataSet2 (pjj0302) DataSet3 (pjj0307) DataSet4 (pjj0309)
Akuraasi 89.4 % 83.7 % 100 % 100 %
Rata-rata akurasi
93.28 %
Perbandingan hasil pengelompokan manual dengan hasil pengelompokan dengan menggunakan algoritme K- medoids untuk setiap dataset secara lengkap dapat dlihat pada Lampiran 8, 9, 10, 11 Berdasarkan Tabel 13 dapat dinyatakan bahwa algoritme K- medoids dinilai efektif untuk mengelopokan dataset yang berupa kode program C untuk mendeteksi kemirirpan, dengan nilai akurasi rata-rata untuk seluruh dataset mencapai 93.28 %.
20
SIMPULAN DAN SARAN Simpulan Penelitian ini menerapkan algoritme K- medoid untuk mengelompokkan dataset kode program C sebagai tugas mata kuliah Algoritme dan Pemrograman. Sehingga dapat diketahui mahasiswa mana saja yang tugasnya memiliki kemiripan. Dari Hasil penelitian ini didapatkan hasil bahwa algoritme K- medoids dapat menghasilkan cluster yang baik, serta dengan membandingkan nilai huruf mutu untuk mata kuliah Algoritme dan Pemrograman dari masing- masing mahasiswa dapat dilihat atau diprediksi pola kemiripan dari kode program tersebut. Jenis tugas yang memiliki tingkat kemiripan pa ling banyak adalah pada DataSet3 yaitu tugas mengenai Pengulangan For Bersarang dan Kondisi If dengan sebanyak 87% dari total mahasiswa yang mengumpulkan kode programnya memiliki struktur kode program yang mirip. Nilai akurasi yang dihasilkan dari penerapan algoritme K-medoid mencapai 93.28%. Saran Untuk penelitian selanjutnya perlu ditambahkan data nilai mata kuliah lainnya yang terkait dengan pemrograman serta data diri mahasiswa untuk melihat karakteristik mahasiswa yang memiliki kemiripan pada kode program C nya dengan orang lain. Selain itu perlu ditambahkan pola jumlah cluster dalam pengerjaan tugas Algoritme Pemrograman dari tahun ke tahun dan juga memperhitungkan persentase kemiripan struktur kode program dalam setiap cluster.
DAFTAR PUSTAKA Bowyer K, Hall L. Experience using MOSS to detect cheating on programming assignments. Di dalam: 29th ASEE/IEEE Frontiers in Education Conference : 1999 Nov 10-13; San Juan, Puerto Rico. Champaign (US): Stipes Publishing LLC. hlm 18-22. Burrow S. 2004. Efficient and effective plagiarism detection for large code repositories [tesis]. Melbourne (AU): RMIT University. Chawla M. 2003. An indexing technique for efficiently detecting plagiarism in large volume of source code [tesis]. Melbourne (AU): RMIT University. Gumilang AP. 2013. Pendeteksian penjiplakan kode program C dengan K-means [skripsi]. Bogor (ID): Fakultas Matematika dan Ilmu Pengetahuan Alam, Institut Pertanian Bogor. Han J, Kamber M, Pei J. 2011. Data Mining : Concept and techniques, third edititon, Morgan Kaufmann, San Francisco. Manning CD, Raghavan P, Schütze H. 2008. An Introduction to Information Retrieval. Cambridge (UK): Cambridge University Press. Notyasa A. 2013. Pendeteksian penjiplakan kode program C dengan bisecting Kmeans [skripsi]. Bogor (ID): Fakultas Matematika dan Ilmu Pengetahuan Alam, Institut Pertanian Bogor.
21
Prechelt L, Malpohl G, Philippsen M. 2002. Finding plagiarisms among a set of programs with JPlag. Universal Computer Science. 8(11):1016–1038. Steinbach M, Karypis G, Kumar V. 2000. A comparison of document clustering techniques [laporan teknis]. Minneapolis (US): Department of Computer Science and Engineering. University of Minnesota. No laporan: 00-0034.
22
Lampiran 1 Contoh kode program dari masing- masing set data yang digunakan dalam penelitian DataSet1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#include <stdio.h> main(){ int x, kurang=0, lebih=0, temp; scanf(“%d”, &x); if(x==(-99)){ printf(“%d %d”, kurang, lebih); } else{ temp=x; while(x!=(99)){ scanf(“%d”, &x); if(x<=temp){ kurang++; } else{ lebih++; } } printf(“%d %d”, kurang, lebih); } return 0; }
DataSet2 1 2 3 4 5 6 7 8 9 10 11
#include <stdio.h> main() { unsigned long int a,n=0; long int b=0; scanf("%lu", &a); //baca input while ((pow(10,n++))<=a) b+=1; printf("%lu\n", b); //cetak hasil return 0; }
23
DataSet3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#include <stdio.h> #define size 100000 main() { unsigned long int a,b,g,f,j,d,i,n[size],k,z[size]; scanf("%lu",&a); for(i=1;i<=a;i++) { scanf("%lu",&b); n[i] = b + n[(i-1)]; } scanf("%lu",&d); for(j=1;j<=d;j++) { k=0; scanf("%lu",&g); for (f=1;k<1;f++) { if (((g/n[f])==0) || (((g%n[f])==0)) && ((g/n[f])== 1)) {z[j]=f;k=1;} } } for(i=1;i<=d;i++) { printf("%lu\n",z[i]); } return 0; }
DataSet4 1 2 3 4 5 6 7 8 9 10 11 12 13 14
#include <stdio.h> main() { unsigned long int a,b,c,i,x,y,z; scanf("%lu %lu",&a,&x); scanf("%lu %lu",&b,&y); c=(a*y)+(b*x); z=x*y; for(i=2;(i<=c)||(i<=z);i++) { if((c%i==0)&&(z%i==0)) } {c/=i;z/=i;i=1;} printf("%d %d",c,z); return 0; }
24
Lampiran 2 Hasil Pengelompokan manual Pengelompokan Manual DataSet1 Kelompok 1 Kelompok 2 Kelompok 3 Kelompok 4 Kelompok 5 Kelompok 6 Kelompok 7 Kelompok 8 Kelompok 9 Kelompok 10
001,077,082,125,128,132 003,011,017,019,020,022,033,044,065,070,071,101,126 005,006,013,016,042,045,059,075,076,079,087,100,107,109, 122,133,8001 008,053,060,062,103,117,120,124 009,012,030,036,037,048,054,057,068,074,092 026,027,038,047,049,081,093,099,113,118,129 015,021,023,029,043,050,055,080,083,102,105 024,104,106 025,032,040,041,046,063,066,069,072,088,108,114 058,112,131 Pengelompokan Manual DataSet2
Kelompok 1 Kelompok 2 Kelompok 3 Kelompok 4 Kelompok 5 Kelompok 6 Kelompok 7 Kelompok 8 Kelompok 9
Kelompok 1 Kelompok 2
001,082,101,126,128,132,133 003,006,016,020,021,027,040,042,046,058,066,071,075,079, 100,106,122 005,008,011,012,015,063,072,076,113,124 013,017,045,049,053 019,022,023,029,030,032,036,037,041,043,044,047,048,055, 059,060,062,065,070,083,087,093,103,107,114,117,118,120, 125,131 009,024,038,050,080,092,102,105 025,054,074,088 033,069 026,081,099,104,108,109,112,129,8001 Pengelompokan Manual DataSet3 003,006,008,011,019,020,022,023,024,026,027,029,030,032, 036,037,038,041,043,044,045,047,048,054,059,060,062,065, 070,071,072,076,083,087,099,103,104,105,106,107,108,109, 114,117,118,120,125,126,128,131,132,133 017,053,069,081,101,124,129,8001 Pengelompokan Manual DataSet4
Kelompok 1 Kelompok 2 Kelompok 3 Kelompok 4 Kelompok 5 Kelompok 6
005,053,129 006,021,046,058,075,106,122 008,009,019,020,022,023,030,036,037,041,043,044,045,047, 048,055,059,060,062,065,070,071,072,076,083,087,103,104, 105, 107,108,114,117,120,128,132,133 013,015,016,027,092 017,033,081,118,124 063,069,101
23
25
Lampiran 3 Tabel aturan konversi kode program menjadi token sederhana Keyword / special character + * / % & | ( ) , { } < > = . ! : Int Float Char Double
Token sederhana a b c d e f g h i j k l m n o p q r A B C D
Keyword / special character short long signed unsigned if else while do for ALPHANUM goto case break return switch const continue sizeof struct enum typedef "STRING"
Token sederhana E F G H I J K L M N O P Q R S T U W X Y Z 5
26
Lampiran 4 Hasil Clusterng Untuk DataSet1 K 2 Mean 3
Mean 4
Mean 5
Mean 6
Mean 7
Mean
Cluster 1 2
Size 65 30
1 2 3
52 16 27
1 2 3 4
7 16 27 45
1 2 3 4 5
6 16 19 9 45
1 2 3 4 5 6
6 16 25 13 27 8
1 2 3 4 5 6 7
6 16 18 8 13 26 8
Max.Diss 12.165 10.954 11.560 12.165 10.908 10.630 11.234 11.357 10.908 10.630 10.816 10.928 0.000 10.908 10.630 10.488 10.816 10.711 0.000 10.908 10.630 6.480 10.148 10.045 9.642 0.000 10.908 10.630 8.660 6.480 10.148 11.045 9.645
Avg.Diss 8.158 4.735 6.447 7.624 2.963 4.044 4.877 1.622 2.963 4.044 7.110 3.935 0.000 2.963 2.317 2.127 7.110 3.629 0.000 2.963 3.592 2.979 6.535 2.130 3.640 0.000 2.963 1.928 1.082 2.979 6.414 2.130 2.916
Diameter 15.264 13.601 14.433 15.264 10.908 13.114 13.095 11.357 10.908 13.114 13.962 12.335 0.000 10.908 12.247 10.816 13.964 11.984 0.000 10.908 11.704 7.483 13.341 11.224 10.932 0.000 10.908 11.704 8.660 7.483 13.341 11.224 10.553
Separation 6.000 6.000 6.000 6.000 7.549 6.000 6.516 8.717 7.549 6.000 6.000 7.067 8.717 7.549 6.000 7.281 6.000 7.109 8.717 7.549 8.660 5.830 5.830 8.246 7.472 8.717 7.549 7.874 7.280 5.830 5.830 8.246 7.332
K 8
Mean 9
Mean 10
Mean
Cluster 1 2 3 4 5 6 7 8
Size 6 16 18 8 8 22 7 10
1 2 3 4 5 6 7 8 9
6 13 18 8 8 22 7 3 10
1 2 3 4 5 6 7 8 9 10
6 13 18 8 8 18 7 3 10 4
Max.Diss 0.000 10.908 10.630 8.660 6.324 10.148 6.000 10.246 8.988 0.000 7.348 10.630 8.660 6.324 10.148 6.000 0.000 10.246 8.479 0.000 7.348 10.630 8.660 6.324 9.746 6.000 0.000 10.246 9.110 8.508
Avg.Diss 0.000 2.963 1.928 1.082 0.790 6.356 0.857 3.487 3.163 0.000 1.130 1.928 1.082 0.790 6.356 0.857 0.000 3.487 2.797 0.000 1.130 1.928 1.082 0.790 6.027 0.857 0.000 3.487 2.277 2.655
Diameter 0.000 10.908 11.704 8.660 6.324 13.341 6.000 11.401 9.763 0.000 7.348 11.704 8.660 6.324 13.341 6.000 0.000 11.407 9.255 0.000 7.348 11.704 8.660 6.324 11.747 6.000 0.000 11.401 9.110 9.037
Separation 8.771 7.549 7.874 7.280 6.324 4.242 8.246 4.242 6.816 8.717 7.549 7.874 7.280 6.324 4.242 8.246 10.488 4.242 7.218 8.717 7.549 7.874 7.280 6.324 4.242 8.246 10.488 4.242 6.855 7.182
27
Lampiran 5 Hasil Clustering Untuk DataSet2 K 2 Mean 3
Mean 4
Mean 5
Mean 6
Mean 7
Mean
Cluster 1 2
Size 59 33
1 2 3
7 52 33
1 2 3 4
7 21 34 30
1 2 3 4 5
7 27 22 6 30
1 2 3 4 5 6
7 20 18 12 5 30
1 2 3 4 5 6 7
7 20 14 12 5 30 4
Max.Diss 9.797 6.633 8.215 0.000 8.124 6.633 7.379 0.000 5.916 7.741 4.242 5.966 0.000 5.916 7.937 4.898 4.242 5.748 0.000 5.916 5.656 7.745 0.000 4.242 5.890 0.000 5.916 5.656 7.745 0.000 4.242 4.1213 5.536
Avg.Diss 5.516 0.731 5.516 0.000 4.939 0.731 4.939 0.000 2.895 4.956 0.141 3.926 0.000 3.355 4.718 0.816 0.141 4.037 0.000 2.749 4.403 2.991 0.000 0.141 3.381 0.000 2.749 4.103 2.991 0.000 0.141 1.030 2.718
Diameter 10.344 6.633 8.489 0.000 9.000 6.633 7.817 0.000 7.280 8.888 4.242 6.803 0.000 7.280 8.888 4.898 4.242 6.327 0.000 7.280 7.280 8.185 0.000 4.242 6.747 0.000 7.280 7.141 8.185 0.000 4.242 4.123 6.194
Separation 4.123 4.123 4.123 8.306 4.123 4.123 5.517 8.306 3.316 3.316 6.557 5.374 8.306 3.741 3.741 4.000 6.557 5.269 8.306 3.741 3.741 4.000 4.898 6.557 5.207 8.306 3.741 3.741 4.000 4.898 6.557 4.795 5.148
K 8
Mean 9
Mean 10
Mean
Cluster 1 2 3 4 5 6 7 8
Size 7 15 15 5 30 7 4 9
1 2 3 4 5 6 7 8 9
7 14 12 5 30 7 4 4 9
1 2 3 4 5 6 7 8 9 10
7 14 12 5 30 5 4 4 2 9
Max.Diss 0.000 5.916 7.549 0.000 4.242 5.744 4.123 4.795 5.395 0.000 5.916 7.549 0.000 4.242 5.744 4.123 5.000 4.795 5.338 0.000 5.916 7.549 0.000 4.242 5.744 4.123 5.000 0.000 4.795 5.338
Avg.Diss 0.000 2.144 4.101 0.000 0.141 2.974 1.030 1.983 2.446 0.000 1.932 4.191 0.000 0.141 2.974 1.030 1.250 1.983 2.227 0.000 1.932 4.191 0.000 0.141 1.973 1.030 1.250 0.000 1.983 2.060
Diameter 0.000 7.280 8.774 0.000 4.242 7.141 4.123 6.633 6.366 0.000 7.280 8.774 0.000 4.242 7.141 4.123 5.000 6.633 6.170 0.000 7.280 8.774 0.000 4.242 5.744 4.123 5.000 0.000 6.633 5.971
Separation 8.306 4.242 4.000 4.898 6.557 4.242 4.795 4.000 5.130 8.306 4.358 3.741 4.898 6.557 4.242 4.795 3.741 4.000 4.960 8.306 4.358 3.741 4.898 6.557 4.242 4.795 3.741 5.477 4.000 5.012
28
Lampiran 6 Hasil Clustering Untuk DataSet3 K 2 Mean 3
Mean 4
Mean 5
Mean 6
Mean 7
Cluster 1 2
Size 52 8
1 2 3
51 8 1
1 2 3 4
50 8 1 1
1 2 3 4 5
49 8 1 1 1
1 2 3 4 5 6
49 7 1 1 1 1
1 2 3 4 5 6 7
48 7 1 1 1 1 1
Max.Diss 3.741 0.000 3.741 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Avg.Diss 0.0719 0.000 0.719 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Diameter 3.741 0.000 3.741 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Separation 16.703 16.703 16.703 3.741 16.703 3.741 8.062 0.000 16.703 3.741 0.000 10.222 0.000 16.703 3.741 0.000 0.000 10.222 0.000 0.000 3.741 0.000 0.000 0.000 3.741 0.000 0.000 3.741 0.000 0.000 0.000 0.000
K Mean 8
Mean 9
Mean 10
Mean
Cluster
Size
1 2 3 4 5 6 7 8
47 7 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9
46 7 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9 10
46 6 1 1 1 1 1 1 1 1
Max.Diss 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Avg.Diss 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Diameter 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Separation 3.741 0.000 0.000 3.741 0.000 0.000 0.000 0.000 0.000 3.741 0.000 0.000 3.741 0.000 0.000 0.000 0.000 0.000 0.000 3.741 0.000 0.000 3.741 0.000 0.000 0.000 0.000 0.000 0.000 0.000 3.741
29
Lampiran 7 Hasil Clustering Untuk DataSet4 K 2 Mean 3
Mean 4
Mean 5
Mean 6
Mean 7
Cluster 1 2
Size 48 12
1 2 3
45 12 3
1 2 3 4
40 12 5 3
1 2 3 4 5
40 7 5 5 3
1 2 3 4 5 6
3 7 37 5 5 3
1 2 3 4 5 6 7
3 7 37 2 3 5 3
Max.Diss 26.115 13.416 19.766 15.198 13.416 0.000 14.307 11.789 13.416 0.000 0.000 12.603 11.789 0.000 8.540 0.000 0.000 10.165 8.944 0.000 0.000 8.544 0.000 0.000 8.744 8.944 0.000 0.000 0.000 0.000 0.000 0.000
Avg.Diss 3.903 5.520 4.712 2.422 5.520 0.000 3.971 0.825 5.520 0.000 0.000 5.520 0.825 0.000 3.410 0.000 0.000 3.410 2.981 0.000 0.000 3.417 0.000 0.000 3.199 2.981 0.000 0.000 0.000 0.000 0.000 0.000
Diameter 26.551 13.416 19.984 17.944 13.416 0.000 15.680 11.789 13.416 0.000 0.000 12.603 22.789 0.000 8.544 0.000 0.000 15.667 8.944 0.000 0.000 8.544 0.000 0.000 8.744 8.944 0.000 0.000 0.000 0.000 0.000 0.000
Separation 13.341 13.341 13.341 13.341 13.341 25.396 17.359 13.341 13.341 15.198 25.396 16.819 13.341 13.000 13.000 15.198 25.396 15.987 9.433 13.000 9.433 13.000 15.198 25.396 15.837 9.433 13.000 9.433 8.544 8.544 15.198 25.396
K Mean 8
Mean 9
Mean 10
Mean
Cluster
Size
1 2 3 4 5 6 7 8
1 7 37 2 3 5 2 3
1 2 3 4 5 6 7 8 9
1 7 36 2 3 5 2 3 1
1 2 3 4 5 6 7 8 9 10
1 7 35 2 3 5 2 3 1 1
Max.Diss 8.944 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Avg.Diss 2.981 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Diameter 8.944 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000 0.000
Separation 12.793 8.944 13.000 9.433 8.544 8.544 15.198 8.949 25.396 12.251 8.944 13.000 0.000 8.544 8.544 15.198 8.949 25.396 0.000 12.654 8.944 13.000 0.000 8.544 8.544 15.198 8.944 25.396 0.000 0.000 12.653
30
Lampiran 8 Hasil evaluasi DataSet1 NRP _001 _003 _005 _006 _008 _009 _011 _012 _013 _015 _016 _017 _019 _020 _021 _022 _023 _024 _025 _026 _027 _029 _030 _032 _033 _036
Kmedoids 1 2 3 3 4 5 2 6 3 7 3 2 2 2 6 2 6 8 6 6 6 7 5 9 2 6
Manual
NRP
1 2 3 3 4 5 2 5 3 7 3 2 2 2 7 2 7 8 9 6 6 7 5 9 2 5
_037 _038 _040 _041 _042 _043 _044 _045 _046 _047 _048 _049 _050 _053 _054 _055 _057 _058 _059 _060 _062 _063 _065 _066 _068 _069
Kmedoids 5 6 9 9 3 7 2 3 9 6 9 6 7 4 5 7 5 10 3 4 4 6 2 9 5 9
Manual
NRP
5 6 9 9 3 7 2 3 9 6 5 6 7 4 5 7 5 10 3 4 4 9 2 9 5 9
_070 _071 _072 _074 _075 _076 _077 _079 _080 _081 _082 _083 _087 _088 _092 _093 _099 _100 _101 _102 _103 _104 _105 _106 _107 _108
Kmedoids 2 2 9 5 3 3 1 3 7 6 1 3 3 6 5 6 6 3 2 10 4 8 7 8 3 9
Manual
NRP
2 2 9 5 3 3 1 3 7 6 1 7 3 9 5 6 6 3 2 7 4 8 7 8 3 9
_109 _112 _113 _114 _117 _118 _120 _122 _124 _125 _126 _128 _129 _131 _132 _133 _8001
Kmedoids 3 10 6 9 4 6 4 3 4 1 2 1 6 10 1 3 3
Manual 3 10 6 9 4 6 4 3 4 1 2 1 6 10 1 3 3
31
Lampiran 9 Hasil evaluasi DataSet2 NRP _001 _003 _005 _006 _008 _009 _011 _012 _013 _015 _016 _017 _019 _020 _021 _022 _023 _024 _025 _026 _027 _029 _030 _032 _033 _036
Kmedoids 1 2 3 2 3 3 3 3 4 3 2 4 5 2 2 5 5 6 7 3 8 5 5 5 6 5
Manual
NRP
1 2 3 2 3 6 3 3 4 3 2 4 5 2 2 5 5 6 7 9 2 5 5 5 8 5
_037 _038 _040 _041 _042 _043 _044 _045 _046 _047 _048 _049 _050 _053 _054 _055 _058 _059 _060 _062 _063 _065 _066 _069 _070 _071
Kmedoids 5 9 8 5 2 5 5 4 2 5 5 4 9 4 7 5 2 5 5 5 3 5 8 6 5 9
Manual
NRP
5 6 2 5 2 5 5 4 2 5 5 4 6 4 7 5 2 5 5 5 3 5 2 8 5 2
_072 _074 _075 _076 _079 _080 _081 _082 _083 _087 _088 _092 _093 _099 _100 _101 _102 _103 _104 _105 _106 _107 _108 _109 _112 _113
Kmedoids 2 7 2 3 8 2 9 1 5 5 7 6 5 9 2 1 6 5 3 6 2 5 9 3 9 3
Manual
NRP
3 7 2 3 2 6 9 1 5 5 7 6 5 9 2 1 6 5 9 6 2 5 9 9 9 3
_114 _117 _118 _120 _122 _124 _125 _126 _128 _129 _131 _132 _133 _8001
Kmedoids 5 5 5 5 2 6 5 1 1 9 5 1 1 9
Manual 5 5 5 5 2 3 5 1 1 9 5 1 1 9
32
Lampiran 10 Hasil evaluasi DataSet3 NRP _003 _006 _008 _011 _017 _019 _020 _022 _023 _024 _026 _027 _029 _030 _032 _036 _037 _038 _041 _043
Kmedoids 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Manual 1 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
NRP _044 _045 _047 _048 _053 _054 _059 _060 _062 _065 _069 _070 _071 _072 _076 _081 _083 _087 _099 _101
Kmedoids 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2
Manual 1 1 1 1 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2
NRP _103 _104 _105 _106 _107 _108 _109 _114 _117 _118 _120 _124 _125 _126 _128 _129 _131 _132 _133 _8001
Kmedoids 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 2
Manual 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 2
33
Lampiran 11 Hasil evaluasi DataSet4 NRP _005 _006 _008 _009 _013 _015 _016 _017 _019 _020 _021 _022 _023 _027 _030 _033 _036 _037 _041 _043
Kmedoids 1 2 3 3 4 4 4 5 3 3 2 3 3 4 3 5 3 3 3 3
Manual 1 2 3 3 4 4 4 5 3 3 2 3 3 4 3 5 3 3 3 3
NRP _044 _045 _046 _047 _048 _053 _055 _058 _059 _060 _062 _063 _065 _069 _070 _071 _072 _075 _076 _081
Kmedoids 3 3 2 3 3 1 3 2 3 3 3 6 3 6 3 3 3 2 3 5
Manual 3 3 2 3 3 1 3 2 3 3 3 6 3 6 3 3 3 2 3 5
NRP _083 _087 _092 _101 _103 _104 _105 _106 _107 _108 _114 _117 _118 _120 _122 _124 _128 _129 _132 _133
Kmedoids 3 3 4 6 3 3 3 2 3 3 3 3 5 3 2 5 3 1 3 3
Manual 3 3 4 6 3 3 3 2 3 3 3 3 5 3 2 5 3 1 3 3
34
RIWAYAT HIDUP Penulis dilahirkan di Garut pada tanggal 20 Juni 1989, merupakan anak terakhir dari pasangan Bapak Tjatja Sudarsa dan Ibu Nenden Malihah. Pada Tahun 1996 sampai 2002 penulis memulai pendidikan di sekolah dasar SD Negeri Sukasono 1, yang kemudian pada tahun 2002 sampai 2004 dilanjutkan dengan menempuh pendidikan sekolah menengah pertama di SMP Negeri 1 cibatu, lalu penulis melanjutkan pendidikannya di SMA Negeri 1 Garut pada tahun 2004 sampai 2007. Lulus dari sekolah menengah atas, penulis diterima di Departemen Ilmu Komputer Fakultas Matematika dan Ilmu Pengetahuan Alam Institut Pertanian Bogor melalui jalur Undangan Seleksi Masuk IPB (USMI) pada tahun 2007. Selain itu, penulis juga aktif dalam organisasi kampus sebagai anggota komunitas HIMALKOM. Penulis juga seringkali menjadi panitia pada acara-acara yang diadakan oleh Himpunan Mahasiswa Ilmu Komputer. Penulis melaksanakan praktik kerja lapangan pada tanggal 28 juni 2010 hingga tanggal 20 agustus 2010 di PT. Interlab Sentra Solution Indonesia.
34