Analisis Data Rekomendasi Next-Solved Problems di Platform Kompetisi Pemrograman Menggunakan Recommendation Engine

BAB 3 METODOLOGI PENELITIAN

3.1. Analisis Data

3.1.1. Dataset overviews Ketersediaan Dataset Dataset UVa Online Judge ini tersedia dari API uHunt yang mengembalikan data dalam format JSON Halim, 2010. API ini memungkinkan pengembang aplikasi lainnya menciptakan berbagai complementary tools yang lebih kompleks dan sesuai dengan kebutuhan dan kreativitas yang diinginkan oleh masing-masing pengembang. Dalam penelitian ini, peneliti menggunakan ketersediaan data yang bisa diakses publik untuk pengembangan fitur untuk merekomendasikan berbagai soal di UVa Online Judge. Berikut detail API uHunt untuk keperluan penelitian. Konversi Nama Pengguna menjadi UserID UID URL http:uhunt.felix-halim.netapiuname2uid{ maestrofx} Deskripsi {maestrofx} merupakan nama pengguna yang akan dikonversi menjadi ID pengguna. Problem List URL http:uhunt.felix-halim.netapip Deskripsi Json Format Mengembalikan daftar problemset yang ada di platform UVa dalam format array Javascript. Setiap soal terdefinisi sebagai larik dengan 21 nilai: [[ 36,100,The 3n + 1 problem, 68010, 23, 1000000000, 0, 6642, 0, 0, 101746, 0, 57029, 131, 52588, 5209, 239064, 4447, 172221, 3000, 1], [37, 101, The Blocks Problem ,11617, 10, 1000000000 , 0, 908, 0, 0, 12231, 0, 19191, 6, 8419, 200, 20790, 5697, 17207, 3000, 1], Universitas Sumatera Utara [38, 102,Ecological Bin Packing, 21345, 33, 1000000000, 0, 1947, 0, 0, 11769, 0, 4349, 6, 2739, 72, 32232, 635, 33197, 3000, 1]..] Soal-Soal Spesifik URL http:uhunt.felix-halim.netapipid{problem-id} Deskripsi Json Format URL Deskripsi Json Format menampilkan soal tertentu dengan {problem-id} http:uhunt.felix-halim.netapipnum{problem-number} menampilkan soal tertentu dengan {problem-number} {pid:36, num:100, title:The 3n + 1 problem ,dacu:68010, mrun:23, mmem:1000000000, nover:0, sube:6642, noj:0, inq:0, ce:101746, rf:0, re:57029, ole:131, tle:52588, mle:5209, wa:239064, pe:4447, ac:172221, rtl:3000, status:1} Status Pengumpulan Solusi pada Soal Tertentu URL http:uhunt.felix-halim.netapipsubs{pids-csv}{start-sbt}{end-sbt} Deskripsi Menampilkan submission ke soal tertentu dengan rentang tanggal yang diberikan. {pid- csv} merupakan daftar identitas soal yang dikodekan dengan tanda koma dengan nilai terpisah. {start-sbt} dan {end-sbt} merupakan rentang tanggal dalam format unix. Perlu dicatat bahwa submission yang dikembalikan dalam urutan acak. API uHunt ini sangat cocok untuk membuat virtual contests yang berjalan pada rentang waktu tertentu pada sejumlah soal yang telah ditentukan. Peringkat Soal URL http:uhunt.felix-halim.netapiprank{pid}{rank}{count} Deskripsi Mengembalikan submission terhadap satu soal {pid} yang diranking dari {rank} sampai {rank} + {count} – 1. Peringkat Soal Pengguna URL http:uhunt.felix-halim.netapipranklist{pid}{uid}{nabove}{nbelow} Deskripsi Mengembalikan submission terdekat secara eksekusi waktu untuk submissions pengguna tertentu pada satu soal. {pid} adalah identitas soal. {uid} adalah identitas pengguna, {nabove} adalah jumlah submissions tercepat yang diranking di atas pengguna yang ditampilkan, {nbelow} adalah jumlah submissions terlama yang dirangking di bawah pengguna yang ditampilkan. Live Events URL http:uhunt.felix-halim.netapipoll{poll-id} Universitas Sumatera Utara Deskripsi Fitur ini menggunakan teknik long-polling. Fitur ini dapat menahan permintaan untuk paling tidak 1 menit untuk aktivitas baru. Fitur ini juga akan mengembalikan nilai dengan sesegera mungkin jika ada paling tidak satu aktivitas baru. Server hanya akan menampilkan preferensi 100 aktivitas terakhir. {poll-id} merupakan id minimal yang dipanggil. Untuk pemanggilan pertama kalinya, pengguna dapat menggunakan nilai 0 untuk mendapatkan 100 aktivitas terakhir. Setelah menerima aktivitas, perlu dicatatkan id terakhir dari aktivitas yang dikembalikan dan menggunakannya untku memanggil fiturnya lagi dengan {poll-id} = the_last_id untuk mendapatkan nilai aktivitas berikutnya, demikian seterusnya. Submissions Pengguna URL 1. http:uhunt.felix-halim.netapisubs-user{user-id} 2. http:uhunt.felix-halim.netapisubs-user{user-id}{min-sid} Deskripsi URL Deskripsi {user-id} merupakan identitas pengguna. {min-sid} bersifat opsional. Misalnya, jika sebelumnya telah ditentukan, nilai ini akan mengembalikan submissions dengan identitas aktivitas lebih besar dari nilai {min-sid}. Fitur ini mengembalikan objek dengan format JSON dengan 3 atribut: name name asli pengguna, uname username pengguna, dan subs aktivitas pengguna sebagai satu array. http:uhunt.felix-halim.netapisubs-user-last{user-id}{count} Fitur ini mengembalikan submission {count} terakhir dari pengguna {user-id} dalam format yang sama sebagai subs-user di atas. Panjang larik Subs sama dengan jumlah submissions pengguna. Setiap elemen merupakan satu submission dengan nilai: Submissions Pengguna Tertentu Terhadap Soal Tertentu URL http:uhunt.felix-halim.netapisubs-pids{user-ids-csv}{pids-csv}{min-subs-id} Deskripsi URL Deskripsi {user-ids-csv} merupakan identitas pengguna yang diwakilkan sebagai nilai yang dipisahkan dengan tanda koma. Sama halnya, {pids-csv} merupakan identitas soal yang diwakilkan dengan dengan nilai yang dipisahkan dengan tanda koma. Jumlah dikedua csv dibatasi hingga 100 aktivitas. {min-subs-id} merupakan identitas submission minimal yang akan dikembalikan. Hasilnya adalah dalam bentuk hash map dengan kuncinya adalah identitas pengguna dan nilainya adalah submission pengguna tersebut yang berkorelasi dengan satu identitas soal tertentu. Format submission identik dengan deskripsi tersebut. http:uhunt.felix-halim.netapisubs-nums{user-ids-csv}{nums-csv}{min-subs-id} fitur ini sama seperti fitur sebelumnya, kecuali soal yang diberikan di nomor soal, bukan identitas soal. Nilai Identitas bit-encoded-problem Yang Diselesaikan Oleh Beberapa Pembuat Soal URL http:uhunt.felix-halim.netapisolved-bits{user-ids-csv} Deskripsi Mengembalikan nilai larik yang terdiri dari {uid:id_pengguna, solved:[bit-encoded- solved-pids]}. Nilai bit-encoded-solved-pids ini merupakan nilai larik dimana bit ke-i dari elemen j basis 0 mewakilkan apakan pengguna tertentu telah menyelesaikan soal Universitas Sumatera Utara dengan pid = j32+i Ranking Pengguna URL http:uhunt.felix-halim.netapiranklist{user-id}{nabove}{nbelow} Deskripsi Mengembalikan peringkat pengguna dan pengguna lain terdekat dengan peringkat pengguna yang dicari. {nabove} merupakan sejumlah pengguna di atas {user-id} yang ingin ditampilkan. Sama halnya dengan {nbelow}. Keduanya, {nabove} dan {nbelow} dibatasi dengan banyak 100. hasil yang dikembalikan berupa larik berformat JSON dimana setiap elemen merupakan peringkat pengguna tunggal dengan atribut sebagai berikut: 1. rank → peringkat pengguna 2. old → nilai bukan 0 bila pengguna merupakan pengguna platform UVa yang belum migrasi 3. name → nama asli pengguna 4. username → username pengguna 5. ac → jumlah soal yang berstatus accepted 6. nos → jumlah submissions pengguna 7. activity → jumlah soal berstatus accepted dari pengguna dalam 2 hari, 7 hari, 31 hari, 3 bulan, dan 1 tahun mengembalikan peringkat pengguna dari posisi tertentu URL http:uhunt.felix-halim.netapirank{pos}{count} Deskripsi Mengembalikan nilai pengguna dengan peringkat {pos} ke {pos} + {count} – 1. 3.1.2. Datasets grabbing untuk keperluan data testing Datasets UVa Online Judge yang tersedia publik melalui API uHunt ini sangat kompleks dan dibagi berdasarkan spesifikasi pengguna tertentu, soal tertentu, dan history submissions serta seluruhnya bisa dikostumsasi berdasarkan kebutuhan penelitian. Datasets yang tersedia di platform UVa Online Judges terdiri dari dua juta lebih pengguna terdaftar dengan hampir 50000 pengguna unik aktif setiap bulannya. Berdasarkan statistik tahun 2014 pada Bab 2, terdapat 1784838 submissions, dengan rata-rata ~148000 submissions setiap bulannya UVA, 2014. 1 Speficic-User-Information-Retrieval Script Untuk keperluan data testing secara offline, penulis melakukan grabbing terhadap keseluruhan akun dengan keseluruhan informasi publik yang tersedia terhadap masing- Universitas Sumatera Utara masing pengguna. Karena datasets ini sangat besar large text documents dan memerlukan waktu yang cukup lama untuk proses grabbing, penulis membuatkan codes mini yang menarik data ini secara terpisah-pisah sehingga bisa dijalankan ratusan codes secara paralel dalam satu waktu. Seluruh data ini tersimpan dalam satu larik dengan format JSON dengan spesifikasi identitas pid pengguna. Berikut pseudocode untuk grabbing data pengguna dengan rentang identitas pengguna 60000 sampai 69999: mkdir user_60000 for i in {60000..69999}; do wget -c http:uhunt.felix-halim.netapisubs-useri mv i user_60000 done Berikut pseudocode untuk grabbing arsip soal dalam bentuk dokumen PDF: volume_range=seq 1 127; mkdir -p pdfs for volume in volume_range; do for serial in seq 0 99; do problem_id=100 volume + serial if [[ -f .pdfsvolumeproblem_id.pdf ]]; then wget http:uva.onlinejudge.orgexternalvolumeproblem_id.pdf fi done mkdir -p .pdfsvolume mv -n volume.pdf .pdfsvolume 2devnull done

3.2. Analisis Sistem