Saturday, March 27, 2021

Simple rekomendasi dengan Formula IMDb Weighted Rating

Alhamdulillah setelah diskusi seputar penelitian bidang sistem rekomendasi dengan rekan-rekan di kampus, akhirnya ter inisialisasi group telegram untuk kolaborasi penelitian dan belajar bersama di bidang information retrieval dan sistem rekomendasi di url berikut: https://t.me/joinchat/CH_ihoMW7XdjZTA1

Oiyaa, siapapun yang ingin belajar bersama boleh koq join di group tersebut, semoga saja bisa bermanfaat. Semoga kita bisa konsisten sharing-sharing setiap akhir pekan.. mohon doanya ya.

Langsung aja degh, kita bahas kembali tentang metode yang sangat simple pada sistem rekomendasi yaitu dengan menggunakan rumus yang ada di IMDb (Internet Movie Database). Metode ini termasuk ke dalam konsep non-personalized, jadi setiap users/costumers akan mendapatkan suatu list item rekomendasi yang sama, tidak ada interferensi dari history atau kemiripan item atau pengguna.

Ide untuk menggunakan metode rekomendasi ini adalah:

  1. Film-film yang lebih populer akan memiliki kemungkinan yang lebih besar untuk disukai juga oleh rata-rata penonton.
  2. Model ini tidak memberikan rekomendasi yang personal untuk setiap tipe user. 
  3. Implementasi model ini pun juga bisa dibilang cukup mudah, yang perlu kita lakukan hanyalah mengurutkan film-film tersebut berdasarkan rating dan popularitas dan menunjukkan film teratas dari list film tersebut.
Berikut ini formula/rumus yang digunakan untuk mengenerate score pada IMDb Weighted rating:


Dimana:
v: jumlah votes untuk film tersebut
m: jumlah minimum votes yang dibutuhkan supaya dapat masuk dalam chart
R: rata-rata rating dari film tersebut
C: rata-rata jumlah votes dari seluruh semesta film
Formula ini digunakan IMDb untuk perhitungan Top Rated 250 titles, dengan perhitungan Bayesian estimate yang menghitung jumlah vote dari setiap judul, vote minimum untuk masuk ke dalam daftar, dan rata – rata vote dari keseluruhan judul.

Berikut ini contoh kode di python (Jupyter notebook) untuk perhitungannya, disini saya masih menggunakan dataset seperti pada artikel sebelumnya untuk rekomendasi dengan metode content-based filtering yaitu di domain hotel.

Code 


Untuk kode lengkap dan dataset yang saya gunakan bisa langsung meluncuuur di github berikut ini: https://github.com/ariflaksito/imdb-wr-recsys.

Untuk skripsi ataupun TA, metode ini terlalu sederhana untuk dijadikan topik/tema penelitian. Saran saya anda bisa menggabungkan dengan metode yang lainnya, misalnya di kombinasikan dengan content-based filtering atau dengan collaborative filtering.

Referensi

  1. DQLab Academy, Building Recommedner system, https://academy.dqlab.id/main/package/practice/212
  2. IMDb, Help, https://help.imdb.com/article/imdb/track-movies-tv/ratings-faq/G67Y87TFYYP6TWAV?ref_=helpms_helpart_inline#calculatetop
 




Monday, January 4, 2021

Menggunakan SQLite di Android

Alhamdulillah.. awal tahun ini dimulai dengan posting artikel tentang SQLite di Android, semoga bermanfaat untuk rekan-rekan mahasiswa yang sebentar lagi akan menghadapi ujian akhir semester.

Android telah menyediakan salah satu mekanisme penyimpanan database terstruktur dan berelasi dengan menggunakan SQLite. SQLite merupakan database yang bersifat open source yang mendukung operasi relasi standar yang umum terdapat pada engine database seperti sintaks SQL dan operasi transaksi. Meskipun berjalan seperti database, pada umumnya sqlite berukuran kecil dan mampu berjalan pada peranti dengan memori terbatas seperti smartphone.

Pada artikel kali ini kita akan membuat aplikasi Android untuk melakukan CRUD pada tabel student di SQLite dimana terdapat 3 field yaitu, id, nim dan nama.


Kita bisa mulai dengan membuat project baru bernama MyStudents dengan tipe Empty Activity bernama MainActivity dan target minimum API Level bisa kita pilih 21.

Langkah pertama adalah buat package baru dengan nama model, kemudian buat class di Java dengan nama Students.java seperti code berikut:

Pada class Student diatas kita perlu implement ke Serializable supaya nantinya saat proses edit data, object student tersebut dapat dikirimkan melalui intent ke activity UpdateActivity

Selanjutnya buat package baru kembali dengan nama db dan buat class baru dengan nama DbHelper.java, berikut codenya:

Code diatas merupakan Class bantuan untuk pengolahan database DDL(Data Definition Language) dan DML(Data Manipulation Language), dimana untuk proses DDL terdapat pada method onCreate dan onUpgrade, sedangkan proses DML pada method lainnya.

Tahapan selanjutnya adalah kita akan buat proses insert data ke database, disini akan digunakan MainActivity untuk implementasinya. Pertama kita siapkan terlebih dahulu layout di activity_main.xml dengan code dibawah ini:

Kemudian pada MainActivity kita lengkapi code nya seperti dibawah:

Pada code diatas sebelum proses insert ke database kita lakukan terlebih dahulu validasi untuk pengisian EditText nim dan nama, dimana tidak boleh kosong. Selanjutnya, jika validasi terpenuhi maka proses insert akan dilakukan dengan menggunakan object dari class DBHelper pada method addUserDetail( ).

Jika AndroidStudio dan versi Java anda sudah mendukung lambda, maka seperti pada code diatas, penulisan onClickListerner bisa kita sederhanakan dengan lambda. Pada blok code yang berwarna grey/abu-abu bisa anda select kemudian tekan tombol Alt+Enter, maka akan muncul pilahan "Replace with lambda". Sampai proses ini kita sudah bisa melakukan proses input data ke database, silahkan bisa anda ujicoba run aplikasi tersebut

Proses insert data


Proses selanjutnya adalah menampilkan data menggunakan RecyclerView, disini kita perlu membuat class adapter dengan nama StudentAdapter yang bisa kita letakan di package adapter dan juga activity baru dengan nama ListStudentActivity. 

Untuk melengkapi adapter tersebut, kita buat terlebih dahulu layout untuk menampilkan data Student di file item_student.xml dan activity_list_student.xml dengan code berikut:

Berikutnya file StudentAdapter kita lengkapi seperti code dibawah ini:

Pada code diatas masih menampilkan notice error pada baris ke-36 dikarenakan kita belum membuat file UpdateActivity untuk proses edit data. Kita bisa comment terlebih dahulu baris ke-36, 37 dan 38 supaya tidak menyebabkan error, selanjutnya nanti bisa kita uncomment kembali untuk melanjutkan proses edit data.

Berikutnya pada file ListStudentActivity, kita tambahkan code dibawah ini untuk menampilkan data-data yang sudah ada di database ke dalam RecyclerView

Kita bisa melakukan ujicoba dengan menjalankan/run project tersebut, jika sesuai maka aplikasi tersebut akan menampilkan list data student dan bisa kita lakukan penghapusan dengan klik tombol delete pada list di masing-masing student. Sebelum data tersebut dihapus, aplikasi akan memunculkan alertDialog dimana untuk memastikan user benar-benar akan menghapus data tersebut. Proses ini dilakukan pada file AdapterStudent baris ke-41 sampai dengan baris ke-60.

Menampilkan data students


Sedangkan proses edit data belum bisa dilakukan, saat kita tekan tombol edit maka tidak akan terjadi action apapun. Untuk melengkai fitur edit, kita buat activity baru dengan  nama UpdateActivity. Berikut ini code untuk UpdateActivity dan layout nya yaitu activity_update.xml

Setelah code dari kedua file diatas lengkap, kita lakukan uncomment pada file StudentAdapter pada baris ke-36, 37 dan 38. Kemudian bisa kita jalankan aplikasi tersebut dan bisa kita ujicoba untuk melakukan edit pada data student.

Setelah proses edit berhasil maka akan ditampilkan list daftar student, supaya RecyclerView dapat update data terakhir maka perlu ditambahkan override method onResume di activity, seperti pada code di file ListStudentActivity pada baris ke-25 s/d baris ke-31

Silahkan anda coba untuk mempraktikan code diatas secara berurutan ya, dipahami masing-masing keterangan pada code tersebut. Jika ada pertanyaan lebih lanjut lagi bisa tulis di komentar, atau jika membutuhkan code lengkapnya bisa tulis di komentar juga alamat email anda, nanti saya kirim code project secara lengkap.

Video tutorial lengkap bisa disimak disini:



Referensi:

  1. Dicoding Acedemy - Belajar Fundamental Aplikasi Android, Codelab Aplikasi Catatan, https://www.dicoding.com/academies/14/tutorials/527
  2. Android SQLite Tutorial | CRUD Operation Example, https://demonuts.com/android-sqlite/#simple

Monday, November 23, 2020

Improvisasi Sistem Rekomendasi teknik Content-based

Diagram content-based filtering dengan metadata


Tulisan kali ini merupakan kelanjutan dari pembahasan sebelumnya yaitu bagaimana membangun sistem rekomendasi menggunakan teknik content-based filtering. Setelah kita perhatikan kembali pada hasil rekomendasi yang saya tulis di artikel sebelumnya tampak beberapa item yang tidak relevan, dimana saat merekomendasikan suatu item terpilih misalkan "Gunawangsa Manyar Hotel" yang berlokasi di Surabaya terdapat beberapa item hotel yang direkomedasikan berada di Jakarta atau Malang. 

Hal tersebut bisa terjadi karena teknik yang digunakan untuk pencarian kemiripan item hanya berdasarkan pada deskripsi hotel saja, jadi saat ada kemiripan text pada deskripsi hotel tersebut maka akan mendapatkan score yang bagus sebagai item yang muncul di rekomendasi tanpa memperhatikan lokasi hotel tersebut.

Untuk itu perlu adanya improvisasi dari teknik tersebut, salah satunya adalah dengan menambahkan beberapa properties/metada item untuk di mix dengan properties deskripsi hotel supaya meningkatkan kemiripan antara item hotel satu dengan lainnya.

Di python kita dapat menggunakan fungsi agg( ) dengan parameter join pada beberapa kolom dataframe yang akan digabungkan.

df[['col1 ','col2 ',' col3']].agg(' '.join, axis=1)

Analisis Metadata

Disini akan digunakan dataset dari review hotel dimana data tersebut mempunyai relasi dengan data hotel sebelumnya. Setelah kita melihat struktur data yang ada pada dataset review dan hotel, kita akan lakukan beberapa analisis untuk menambahkan metadata untuk membangun sistem rekomendasi.

Tahap pertama kita tambahkan informasi province dan city untuk setiap hotel.

Selanjutnya kita bisa juga tambahkan informasi dari harga hotel yang kita kelompokan menjadi beberapa bagian. Dalam hal ini akan dibagi menjadi 3 kategori yaitu "low", "medium", dan "high". Kita bisa gunakan fungsi cut( ) di pandas dataframe.

pd.cut(hotel_review_df['price_per_night'], 
            bins=3, labels=['low','medium','high'])

Berikutnya kita bisa juga menambahkan metadata untuk mengkategorikan hotel termasuk family room atau single room dengan menggunakan conditional dari informasi rata-rata children dan adults.

def set_family_room(x):
    if((x['children']>=1.0) | (x['adults']>1.0)):
        return "family room"
    else:
        return "single room"
hotel_review_df.apply(lambda x : set_family_room(x), axis=1)

Membangun Sistem rekomendasi

Setelah kita mendapatkan metadata dari dataset hotel dan review, kita dapat membangun sistem rekomendasi menggunakan cara sebelumnya yaitu TF-IDF dan Cosine similarity yang sudah dibahas secara singkat di artikel berikut ini.

Sebelum kita ubah dokumen text ke dalam vektor menggunakan TF-IDF, kita lakukan join masing-masing metadata tersebut ke dalam satu kolom menggunakan fungsi agg( ) seperti yang telah dibahas diatas.

Berikut ini code detail di python yang dapat dijalankan di Jupyter notebook

Jika kita perhatikan hasil dari rekomendasi saat ini lebih relevan dibandingkan sebelumnya, dimana saat kita menampilkan rekomendasi dari hotel "Gunawangsa Manyar Hotel" makan akan muncul beberapa hotel yang berlokasi di Surabaya dengan kategori harga yang sama dan juga kategori family room.

Semoga bermanfaat tulisan ini, inshaAllah selanjutnya akan saya bahas tentang Sistem rekomendasi menggunakan weight rating yang bisa kita gabungkan dengan teknik content-based sebagai hybrid sistem rekomendasi.

Referensi

  1. Saket Garodia, Metadata-based Recommender Systems in Python, https://medium.com/analytics-vidhya/metadata-based-recommender-systems-in-python-c6aae213b25c
  2. JCOp Untuk Indonesia, Course 9 -Recommendation System, https://www.youtube.com/playlist?list=PLGn1wRmlR3MvcgYgTp71QXnJaFNUsQga2

Monday, November 16, 2020

Menggunakan Python di Jupyter notebook

Python merupakan bahasa pemrograman yang diciptakan pada tahun 1991 oleh Guido van Russom dimana akhir-akhir ini merupakan bahasa pemrograman yang banyak dicari dan dipelajari bagi mereka yang fokus mendalami dunia data.

Python merupakan salah satu bahasa pemrograman yang berkembang dengan cepat, selain dari perkembangan library yang semakin kuat karena banyaknya library dan framework seperti scikit-learn, Tensorflow, Pytorch, dan lainnya yang membuat para pencinta Artificial Intelligence, Machine Learning, dan Deep Learning lebih memilih Python sebagai tools untuk mengembangkan riset dan penelitian mereka.

Di artikel ini akan dibahas cara singkat instalasi Python dan juga Jupyter notebook sebelum nanti akan kita pelajari lagi detail dasar-dasar pemrograman di Python khususnya untuk Data science atau Machine learning.

File instalasi Python bisa di download dari web python.org yang saat ini terdapat 2 versi yaitu 2.7.x dan versi 3.x, sebaiknya kita pilih saja yang versi 3.x 

www.python.org

Ikuti petunjuk instalasinya dan aktifkan fitur “Add python.exe to Path” saat pemilihan check fitur instal supaya perintah python dapat dapat dijalankan di command prompt nantinya. Setelah berhasil melakukan instalasi, kita dapat mencoba dengan menjalankan perintah python dan pip dari command di windows. 

The Python Package Index (PyPI) merupakan repository untuk library/paket di Python yang berada di pypi.org. Dengan menggunakan perintah pip kita bisa melakukan menajemen paket tersebut di local environment.

Jupyter notebook

Jupyter notebook merupakan tool yang populer untuk mengolah code di python. Jupyter notebook memungkinkan untuk mengintegrasikan antara kode dengan output di dalam satu dokumen secara interaktif.

Jupyter notebook dapat di install melalui command dengan perintah: 

pip install jupyter

Selain itu jupyter notebook juga dapat di install menggunakan platform Anaconda, selengkapnya bisa dibaca disini https://docs.anaconda.com/anaconda/install/

Cara menjalankan Jupyter notebook adalah dengan menuliskan perintah jupyter notebook di terminal atau command. Selanjutnya Jupyter notebook dapat diakses melalui browser. Saat servis dijalankan anda akan diarahkan ke halaman browser pada alamat http://localhost:8888/tree

Tampilan awal saat membuka Jupyter notebook

Untuk membuat notebook baru, bisa dilakukan dengan memilih menu [New] pada bagian kanan atas, kemudian bisa pilih tipenya Python3. Halaman notebook baru akan tampil seperti dibawah ini:

Tampilan notebook di browser


Hal penting yang perlu diperhatikan adalah bagian Cell, dimana nantinya kita akan menuliskan code Python atau Markdown text. Untuk judul notebok bisa kita ganti dengan cara double klik pada tulisan Untitled, kemudian tuliskan nama/judul dari notebook tersebut.

Selanjutnya kita akan gunakan beberapa shortcut di Jupyter notebook untuk mempercepat dan memudahkan dalam melakukan editing code/text di cell. Bisa perhatikan saat cell aktif akan berwarna hijau, sedangkan cell yang tidak aktif berwarna biru. Untuk keluar dari aktif cell, tekan tombol [Esc] dan kembali mengaktifkan cell tekan [Enter]. 

Untuk melihat beberapa tombol shortcut yang ada kita bisa keluar dari aktif cell kemudian tekan tombol [H].

Beberapa tombol shortcut di Jupyter notebook

Berikut beberapa shortcut yang sering digunakan: merubah ke mode code [Y] dan merubah ke mode markdown [M]. Menulis heading di Markdown dengan tombol [1] untuk heading 1, tombol [2] heading 2 dan tombol [3] heading 3. Menambahkan cell diatasnya dengan tombol [A] dan tombol [B] untuk menambah cell dibawahnya. Menghapus cell klik 2x tombol [D].

Pastikan saat menjalankan kondisi tersebut tidak berada di aktif cell, kita bisa tekan terlebih dahulu tombol [Esc]. Dan untuk menjalankan cell/Run kita lakukan dengan menekan tombol [Shift+Enter].

Share notebook

Setelah kita menuliskan code-code di notebook, kita bisa membagikan file tersebut secara statis ataupun dinamis. Kita bisa gunakan github untuk share notebook secara statis, dimana code dan hasilnya sudah ready pada file .ipynb dan bisa kita push ke repository di github. Sedangkan secara dinamis kita bisa gunakan Google colab, dengan cara upload file .ipynb dan selanjutnya kita bisa jalankan pada Google colab code-code tersebut.

Silahkan di eksplore lebih jauh lagi untuk penggunaan Jupyter notebook, semakin sering anda menggunakan maka akan semakin paham fitur-fitur didalamnya. Semoga bermanfaat..

Referensi

  1. Guntur Wicaksono, “Pengenalan Pemrograman Python Untuk Data Science”, https://medium.com/@gunturwicaksono/pengenalan-pemrograman-python- untuk-data-science-aa18ca6ff995
  2. Ahmad Muhardian, Belajar Pemrograman Python: Cara Install Python di Windows, https://www.petanikode.com/python-windows/
  3. Belajar Python Dasar : Memahami Jupyter Notebook dan cara menggunakannya, https://ngodingdata.com/memahami-jupyter-notebook- dan-cara-menggunakannya/
  4. IndoML,Pengenalan dan Panduan Jupyter Notebook untuk Pemula,https://indoml.com/2019/09/29/pengenalan-dan-panduan-jupyter-notebook-untuk-pemula/

Sunday, November 1, 2020

Membangun Sistem Rekomendasi dengan teknik Content-based Filtering

Di artikel ini kita akan belajar lebih detail lagi bagaimana membangun sistem rekomendasi menggunakan teknik Content-based filtering dengan menggunakan python. Pada artikel sebelumnya, telah kita pelajari apa itu sistem rekomendasi atau recommender system dan beberapa teknik  yang digunakannya.

Teknik Content-based filtering di Sistem rekomendasi

Content-based filtering(CB)

Ide dasar dari teknik CB adalah melakukan tag pada suatu produk dengan kata kunci tertentu, memahami apa yang pengguna sukai, mengambil data berdasar kata kunci di database dan memberikan rekomendasi kepada pengguna berdasarkan kesamaan atribut.

Sistem rekomendasi CB bekerja menggunakan data yang tersedia di pengguna, apakah itu data explisit(rating) atau implisit(klik pada link). Berdasarkan data tersebut, profile pengguna akan dibentuk, kemudian akan digunakan untuk memberikan produk rekomendasi. 

Sebagai contoh pada aplikasi Google Play, ketika seorang pengguna menginstall aplikasi tertentu(kategori Entertainment apps) yang diterbitkan oleh Science R Us, maka sistem akan menyimpan informasi tersebut dan selanjutnya sistem akan memberi rekomendasi berdasarkan kategori atau publisher yang sama. Pada teknik ini produk/item atribut yang dijadikan sebagai referensi kesamaan untuk hasil rekomendasi, model tidak memperhatikan informasi dari user lainnya.

TF-IDF dan Cosine similarity

Bagaimana kita dapat mengetahui kemiripan suatu produk/item? 

Secara umum, kemiripan dokumen didapatkan dari deskripsi suatu dokumen tersebut dengan konsep TF-IDF. TF-IDF merupakan sub-area dari Natural Language Processing(NLP) yang digunakan dalam information retrievel dengan tujuan untuk ekstrasi data. Sederhananya, bagaimana menghitung kemunculan setiap kata dalam dokumen dan memberi bobot pada setiap kata, dan menghitung skor untuk dokumen itu.

TF (term frequency) suatu kata adalah berapa kali kata itu muncul dalam dokumen.

TF(t) = (banyaknya term t muncul di dokumen) / (jumlah total terms di suatu dokumen)

IDF (inverse document frequency) dari sebuah kata adalah ukuran seberapa signifikan istilah tersebut di seluruh korpus.

IDF(t) = log_e(jumlah dari dokumen / jumlah dokumen dengan term t didalamnya)


Di python, kita dapat menggunakan library scikit-learn dengan pre-built function TF-IDF vectorizer yang akan menghitung score dari setiap deskrispi document.

Untuk menghitung kemiripan dari vector yang telah terbentuk, kita dapat menggunakan beberapa metode yaitu:

  1. Cosine similarity
  2. Euclidean distance
  3. Pearson's correlation
Setelah score kemiripan dari matrix dokumen terbentuk, kita bisa melakukan sorting berdasarkan score tersebut untuk dijadikan item rekomendasi.

Berikut ini contoh kode di jupyter notebook untuk domain data hotel description yang diperoleh dari challenge pada platform ecourse data science di DQLab dengan menggunakan TF-IDF dan cosine similarity untuk model sistem rekomendasinya.

Dari code python di jupyter notebook tersebut, hasil rekomendasi hotel beserta score-nya adalah seperti di bawah ini:

 
 ['Gunawangsa Manyar Hotel - 1.000000000000000',
 'Midtown Hotel Surabaya - 0.17992312860891296',
 'Aria Gajayana Hotel - 0.14461427726403756',
 'GP Mega Kuningan Hotel - 0.12367390420720603',
 'Le Polonia Medan managed by Topotels - 0.12049561758006845',
 'Swiss-Belinn Manyar Surabaya - 0.11731929279752672',
 'Hotel Santika Premiere Dyandra Hotel & Convention - 0.11442553936688896',
 'Best Western Plus Kemayoran Hotel - 0.10975989716138217',
 'Swiss-Belinn Malang - 0.09085670933358225',
 'Quest Hotel Darmo - Surabaya by ASTON - 0.08833161676427399',
 'Narita Classic Hotel Surabaya - 0.08833161676427399',
 'Premier Place Surabaya Airport - 0.08833161676427399',
 'Zoom Hotel Jemursari - 0.08833161676427399',
 'Cleo Hotel Basuki Rahmat - 0.0749975275102063',
 'Grand Darmo Suite by AMITHYA - 0.07174383261974006',
 'Varna Culture Hotel Surabaya - 0.06823993211613247']
 

Jika anda membutuhkan dataset hotel dan kode lengkap dalam file ipynb silahkan bisa download di github dengan alamat url berikut ini: https://github.com/ariflaksito/tfidf-cb-recsys

Referensi

  1. https://medium.com/@bindhubalu/content-based-recommender-system-4db1b3de03e7
  2. https://www.analyticsvidhya.com/blog/2015/08/beginners-guide-learn-content-based-recommender-systems/
  3. https://developers.google.com/machine-learning/recommendation/content-based/basics
  4. https://towardsdatascience.com/introduction-to-two-approaches-of-content-based-recommendation-system-fc797460c18c

Monday, October 26, 2020

Tutorial mudah membuat RecyclerView di Android

Sejak google meluncurkan pendekatan material design, penggunaan ListView disarankan untuk beralih ke RecyclerView. Dengan kemampuan yang lebih baik dari pendahulunya, RecyclerView ini lebih fleksible dan mampu menampung jumlah data besar.

Artikel sebelumnya tentang tutorial ListView bisa di cek pada link berikut ini: Tutorial ListView di Android.

Konsep kode program untuk membuat RecyclerView kurang lebih sama pada Custom ListView seperti yang sudah dibahas pada artikel sebelumnya pada link diatas.

Adapun tahapan yang dilakukan dalam membuat RecyclerView yaitu:

  1. Menambah dependency di gradle
  2. Membuat Class model
  3. Membuat layout untuk item list
  4. Membuat Adapter untuk binding data
Berikut detail dari tahapan-tahapan diatas:

Menambah dependency di file gradle

Setelah kita melakukan perubahan pada file gradle maka Android Studio akan meminta anda melakukan sinkronisasi untuk update library yang dibutuhkan.

Selanjutnya pada file xml di layout activity, gunakan juga elemen RecyclerView seperti pada kode dibawah ini:

Membuat Class model

Class model disini kita perlukan untuk mempresentasikan setiap item data menjadi sebuah objek ketika digunakan pada Adapter di RecyclerView. Class model disini akan menggunakan Players yaitu object pemain Juventus FC seperti pada contoh di ListView sebelumnya.

Untuk generate constructor dan method getter setter bisa digunakan shortcut di Android Studio (Win: Alt + Insert, Mac: Cmd + N) untuk mempercepat pembuatannya.

Layout item list

Pada layout ini akan digunakan juga CardView dimana pada item ini akan ditampilkan 3 buah TextView untuk menampung data nama pemain, posisi dan nomer punggung.

Membuat Adapter

Selanjutnya kita perlu buat class Adapter yang merupakan extends/turunan dari RecyclerView.Adapter dengan kode seperti berikut ini:

Dan pada bagian terakhir ini kita akan mengimplementasikannya di Activity dimana data yang akan kita gunakan dalam bentuk String JSON. Kita akan gunakan method setData( ) untuk melakukan parse data JSON ke dalam ArrayList<Players> supaya bisa di-binding oleh Adapter untuk di tampilkan ke layar. 

Setelah tahapan tersebut selesai kita implementasikan, kita dapat menjalankan pada Android Studio dan hasil akhirnya adalah seperti tampilan berikut ini

RecyclerView menggunakan CardView


Jika anda membutuhkan file project lengkap untuk ListView sederhana ataupun RecyclerView seperti pada contoh diatas bisa tuliskan alamat email di komentar, selanjutnya akan saya share kode tersebut untuk anda.

Monday, October 5, 2020

Menyusun latar belakang skripsi yang baik


Latar belakang merupakan bagian pertama yang sangat penting dalam menyusun karya ilmiah/skripsi. Latar belakang yang baik dan menarik akan membuat orang yang mempelajari/membaca semakin mudah memahami maksud dari penelitian yang kita lakukan. Selain itu memudahkan juga anda(para mahasiswa) dalam menghadapi pertanyaan-pertanyaan dosen penguji di ujian akhir nantinya. 

Syarat mutlak dan wajib untuk dapat menulis latar belakang yang baik dengan banyak membaca literature (paper dari penelitian sebelumnya). Dengan banyak membaca literature, maka akan semakin jelas arah penelitian yang akan kita lakukan dan menyusun latar belakang menjadi lebih mudah dan terarah.

Berikut ini beberapa tahapan dalam menuliskan latar belakang:

  1. Tuliskan masalah yang dihadapi oleh objek penelitian. Atau masalah yang sudah pernah dihadapi peneliti sebelumnya dan belum ada solusinya. Untuk masalah-masalah di objek penelitian sampaikan secara detail bukan bersifat general.
  2. Sampaikan gambaran umum tentang metode/teknologi/solusi yang anda rencanakan untuk mengatasi masalah diatas. Gunakan beberapa referensi terkait metode/solusi yang akan anda gunakan tersebut.
  3. Jawab semua pertanyaan WHY di judul skripsi
Dibawah ini adalah contoh penulisan latar belakang pada paper berjudul IMPLEMENTASI ALGORITMA REGRESI LINEAR BERGANDA UNTUK MEMPREDIKSI PRODUKSI PADI DI KABUPATEN BANTUL" oleh Ervan Triyanto yang dapat didownload pada url: http://jurnal.univrab.ac.id/index.php/rabit/article/view/666

Sesuai pada poin ke-3 diatas, maka yang perlu dijawab pada pertanyaan WHY judul adalah:
  • Mengapa prediksi produksi padi?
  • Mengapa di kabupaten Bantul?
  • Mengapa menggunakan Algoritam Regresi linear berganda?
Ketersediaan pangan yang cukup dan merata merupakan salah satu pilar perwujudan ketahanan pangan. Salah satu inti pokok dari ketahanan pangan adalah tersedianya makanan pokok bagi masyarakat. Salah satu makanan pokok yang dikonsumsi adalah nasi. Nasi adalah hasil dari pengolahan hasil pertanian yaitu padi. Padi (Oryza Sativa) adalah salah satu dari jenis tanaman pertanian yang bernilai ekonomis, di Bantul sendiri padi tergolong sebagai tanaman pangan pokok yang banyak dibudidayakan.
Kabupaten Bantul sendiri merupakan salah satu kabupaten di Provinsi Daerah Istimewa Yogyakarta. Kabupaten Bantul memiliki luas wilayah 50.810 hektare, dengan pemanfaatan lahan pertanian berupa sawah sebesar 15.183 ha dan lahan bukan sawah sebesar 12.742 ha. Luas lahan sawah yang cukup luas ini dimanfaatkan untuk pertanian padi. Produksi padi di Bantul pada tahun 2014 sebesar 192.847 ton, pada tahun 2015 sebesar 199.141 ton, dan pada tahun 2016 sebesar 180.593 ton [1].  

Paragraf 1 dan 2 diatas merupakan jawaban dari "Mengapa di kabupaten Bantul?" 

Karena produksi padi di kabupaten Bantul setiap tahun selalu berubah – ubah, maka sebuah prediksi perlu dilakukan untuk mengetahui gambaran masa depan apakah hasil produksi padi di kabupaten Bantul akan mengalami kenaikan ataupun penurunan. Hasil prediksi ini dapat digunakan sebagai tolak ukur untuk mengetahui ketahanan pangan di kabupaten bantul khususnya padi. Penelitian ini memanfaatkan data panen atau produksi padi di dinas pertanian kabupaten Bantul sebagai data acuan untuk melakukan prediksi hasil panen padi di kabupaten Bantul. Selain itu prediksi ini juga mempertimbangkan beberapa faktor yang dapat mempengaruhi hasil prodiksi yang berupa luas lahan, curah hujan, serangan hama, hasil produksi sebelumnya, serta pengetahuan petani tentang penanaman padi. 

Paragraf 3 adalah jawaban dari "Mengapa prediksi produksi padi?"

Untuk melakukan prediksi tentunya harus menggunakan sebuah algoritma, salah satu algoritma untuk melakukan prediksi yaitu menggunakan Algoritma Regresi Linear Berganda. Algoritma Regresi Linear Berganda merupakan salah satu teknik analisis data yang sering digunakan untuk mengkaji hubungan antar beberapa variabel dan meramal satu variable [1]. Algoritma ini dapat dilakukan untuk memprediksi beberapa hal seperti prediksi kelayakan operasional mesin rivet produksi [2] atau prediksi konsumsi bahan bakar [3].

Paragraf 4 diatas yaitu jawaban dari "Mengapa menggunakan Algoritam Regresi linear berganda?"

Dari beberapa penjelasan diatas disimpulkan bahwa metode Regresi Linear Berganda dapat digunakan untuk meprediksi sesuatu di masa depan dengan menggunakan lebih dari 2 faktor atau variabel yang memiliki pengaruh terhadap apa yang akan diprediksi, oleh karena itu peneliti akan menggunakan metode ini untuk melakukan prediksi produksi padi di kabupaten Bantul.

Paragraf ke 5 merupakan rangkuman dari penelitian yang akan dilakukan.

Selain anda ikuti ketiga tips tersebut, selalu konsultasikan naskah anda dengan dosen pembimbing dan sekali lagi, banyak membaca paper yang berkaitan dengan area penelitian yang diambil. Untuk penelitian di level Skripsi (S1) sebaiknya membaca paper terkait minimal 30 paper. Semoga bermanfaat artikel penulisan latar belakang di skripsi berikut dan bagi para #PejuangSkripsi semakin menemukan titik terang dan terarah penelitian skripsi anda.

Wednesday, September 2, 2020

5 Hal penting ketika mengirim email ke Dosen

Meskipun telah banyak artikel, postingan Instagram ataupun video di Tiktok yang membahas etika atau aturan dalam mengirimkan email ke dosen, namun ternyata masih banyak mahasiswa yang belum tau atau belum paham hal penting ini. Terbukti masih ada beberapa email yang masuk ke inbox saya tanpa memperhatikan hal-hal penting tersebut.

Contoh email yang kurang tepat

Untuk itu saya ingin membagikan 5 hal penting berikut ini yang perlu anda perhatikan jika ingin berkomunikasi dengan dosen melalui email:

1. Tuliskan Subject

Subject ini sangat penting dalam komunikasi email, karena penerima akan mengetahui secara cepat maksud dari si pengirim email tersebut sebelum membukanya dan membaca secara detail. Kesalahan fatal jika anda mengirimkan email tanpa menuliskan subject/topik, bahkan beberapa email filter akan menkategorikan email anda masuk ke folder spam.

Tuliskan subject email dengan singkat dan jelas. Misal anda akan mengumpulkan tugas melalui email jangan hanya menuliskan "Tugas" lebih baik diganti dengan "Tugas matakuliah ABC", atau saat anda ingin melakukan konfirmasi nilai ujian jangan menuliskan "Nilai" lebih baik ditulis "Konfirmasi nilai ujian akhir matakuliah XYZ". Hal ini akan memudahkan dosen anda untuk memahami maksud dari email yang anda kirimkan. 

2. Kata pembuka

Gunakan kata pembuka yang sopan dan baik, misalnya: Assalamualaikum pak, Selamat pagi bu, Dear pak XYZ, dll. Jangan gunakan bahasa percakapan sehari-hari dalam menuliskan kata pembuka ini, contohnya berikut ini yang harus anda hindari: Halo dab, Hi bro, Halo pak, dll. 

3. Identitas anda

Anda harus pahami bahwa dosen tidak bisa menghapal satu-persatu nama mahasiswa yang begitu banyak, apalagi hanya tulisan di email, maka identitas ini sangat penting ketika anda berkomunikasi dengan email. Perkenalkan diri anda setelah menuliskan salam pembuka, sebutkan nama, nomer identitas dan hubungan anda dengan dosen tersebut. Misalkan: Nama saya ABC dengan nim 123, saya adalah mahasiswa bapak di kelas XX pada matakuliah ABC. 

4. Isi email

Tuliskan isi email dengan jelas sesuai maksud anda. Gunakan bahasa resmi dan sopan, hindari penggunaan bahasa sehari-hari dan jangan menyingkat kata-kata. Gunakan kata ganti Saya, dan jangan menggunakan kata ganti aku, akuh, gue, atau yang sejenisnya. 

Hal lain yang perlu anda perhatikan adalah jangan memerintah "dosen", misalkan: tolong diperiksa, tolong disetujui, tolong dibalas, dll. Kalaupun anda memerlukan dosen untuk segera melakukan sesuatu hal, maka sampaikan secara tidak langsung, misalkan: Jika ada ada suatu hal yang perlu diperbaiki, mohon kiranya bapak memberitahu saya. Hal ini lebih nyaman bagi dosen untuk melakukan sesuatu hal untuk anda.

5. Pahami kesibukan dosen

Anda perlu pahami bahwa dosen tidak menerima email dari anda saja, dan berbagai macam kesibukan yang lain. Anda jangan terlalu berharap email akan dibalas dengan segera, kalaupun dosen segera membalas dengan cepat maka itulah keberuntungan anda. Waktu normal bagi dosen untuk membalas email adalah 3-4 hari kerja, jika lebih dari 5 hari anda belum mendapatkan balasan, anda bisa mengingatkan kembali dengan melakukan reply pada email sebelumnya.

Hal penting diatas tidak hanya dilakukan dalam mengirimkan email ke dosen, tetapi anda juga perlu perhatikan ketika mengirimkan email untuk lamaran pekerjaan, berkomunikasi dengan atasan ataupun komunikasi dengan rekan kerja.

Hal yang sama juga perlu diperhatikan jika anda menggunakan WA, Telegram, Line atau aplikasi messenger lainnya dalam berkomunikasi dengan dosen, yaitu: gunakan salam pembuka, perkenalkan diri anda dan tuliskan hal yang akan anda tanyakan. Untuk aplikasi chat ini anda tidak perlu menggunakan subject. Cukup mudah khan?

Beberapa tulisan diambil dari artikel:


Friday, August 7, 2020

Membuat Github profile README

Ketika sedang mencari inspirasi atau tutorial code di Github, saya sering melihat beberapa profile-profile di halaman utama Github yang menarik, seperti:

Untuk membuat tampilan profile seperti beberapa akun diatas, bisa kita lakukan dengan membuat repository baru dengan nama sama seperti username kita di Github. Misalkan username saya adalah ariflaksito, maka saya akan buat repository baru dengan nama ariflaksito, kemudian check kolom [ ] "Initialize this repository with a README" supaya otomatis akan tercreate template untuk profile kita. Dan satu lagi, pastikan repository anda mempunyai akses public bukan private.

Special repository message dari Github

Selanjutnya silahkan berkreasi untuk memperindah profile anda, siapa tau yang berkunjung ke repository anda untuk explore kode-kode jadi lebih betaah 😉

Untuk menuliskan beberapa text formating di Github menggunakan markdown khusus, bisa dilihat panduannya berikut ini: Github Flavored Markdown. Sedangkan untuk beberapa icon/emoji yang bisa digunakan bisa di cek juga disini: Github markdown Emoji.

Saya sendiri menggunakan badge info dari Pufler Git-badges dan menampilkan statistik dari Github Readme Stats.

Seperti ini tampilan profile saya di Github

Wassalam, semoga bermanfaat 🙏

Wednesday, July 22, 2020

Belajar Data Science dimana ya sebaiknya?

Menjawab pertanyaan dari judul diatas secara sedarhana yaitu kuliah aja di kampus dimana terdapat prodi/jurusan computer science, informatika, atau bidang-bidang komputer. Ternyata kenyataannya tidak semua prodi/jurusan komputer tersebut mengajarkan data science loh. Nah, sebaiknya gimana donk??

Data Science Diagram
source: https://intellipaat.com/blog/what-is-data-science/

Tren pekerjaan yang banyak diminati oleh para lulusan bidang komputer saat ini yaitu data science, dimana anda bisa cek sendiri rentang gaji untuk pekerjaan ini di google degh. Bidang ilmu data science ini merupakan lintas ilmu dari programming, database dan statistika seperti pada ilustrasi gambar diatas. Selain itu ilmu machine learning juga diperlukan pada pekerjaan ini.

Sayangnya tidak semua kampus di prodi komputer mengajarkan ilmu ini, seperti di prodi kampus tempat saya mengajar hanya 2 sks saja untuk belajar data mining, lebih baik dari pada tidak ada sama sekali khan. Selanjutnya bagaimana cara nya supaya kita bisa mendapat ilmu tentang data science tersebut?

Investasi waktu, pikiran dan uang
Disini uang saya tuliskan di bagian akhir, karena yang paling penting adalah waktu dan fokus pada pikiran. Bisa juga koq kita tanpa uang mempelajari ilmu tersebut.

Nah.. dimasa pandemi ini sangat banyak online course atau webinar yang gratis atau berbayar yg bisa kita ikuti. Pada artikel kali ini saya akan share 2 course online yang bagus untuk anda ikuti dalam mempelajari data science ini, dimana saya sendiri sudah mencoba nya, yaitu: Dqlab dan Sanbercode

DQLab

Saya sudah join ecourse yang beralamat di https://dqlab.id/ ini sejak agustus 2019, dan materi yang dipelajari cukup lengkap, yaitu SQL for data science, R for data science dan Python for data science. Content materi sangat beragam, dari level pemula sampai level lanjut/advance. Selain itu di paltform ini menggunakan live code yang sudah support ke-3 bahasa tersebut, jadi kita tidak perlu menyiapkan environment di local PC/Laptop untuk belajar data science, cukup browser dan koneksi internet saja.

Menurut saya ecourse di DQLab menyiapkan membernya untuk menjadi data engineering, data analyst ataupun data science (perbedaan ke-3 bidang ini saya kurang paham detail, bisa explore sendiri ya), disini materi-materinya fokus di pengolahan data, transformasi, data analisis, cleaning, wrangling, dsb.

DQLab juga menyediakan beberapa challenge yang dipandu oleh beberapa pakar dari dunia industri, seperti traveloka, tokopedia, efishery, xeratic, dll. Challenge ini seperti mini project yang bisa kita kerjakan dengan range waktu tertentu, dimana kasusnya memang sesuai dengan dunia industri, jadi jika kita mengikutinya akan punya pengalaman yang sangat berharga.

Untuk materi-materi tentang modeling machine learning atau data mining ada juga di DQLab pada project challenge yang biasanya setiap bulan 1x atau 2x akan diinfokan di dashboard kita.

Modul challenge Dqlab
Modul challenge DQLab

Beberapa modul dasar di DQLab di sediakan gratis, selanjutnya kita bisa berlangganan dengan harga yang cukup terjangkau. Saat artikel ini diposting terdapat promo untuk berlangganan seharga Rp. 179.400,- untuk 6 bulan. Cek berkala web dan IG Dqlab yang biasanya share informasi promo untuk berlangganan.

Dengan jumlah modul saat ini lebih dari 30 dan akan terus bertambah lagi dengan materi-materi terupdate, saya rasa biaya berlangganan sebesar angka diatas layak dengan apa yang nantinya akan kita dapatkan.

Beberapa modul juga menawarkan reward yaitu extend berlangganan 1 bulan jika kita bisa menyelesaikannya dengan batas waktu yang ditentukan. Saya sendiri pernah mendapatkan reward challenge ini dan juga reward 6 bulan gratis ketika tim DQLab meminta tetimoni.

Challenge dengan Reward di DQLab
Challenge dengan Reward di DQLab

Sanbercode

Sanbercode merupakan ecourse kedua yang akan saya bahas disini, dimana terdapat juga kelas di bidang programing dan design yang ditawarkan selain kelas data science.  Beralamatkan di https://sanbercode.com/, saya mengikuti kegiatan bootcamp dari sanbercode untuk kelas python data science pada bulan Juni 2020 dan sangat puas dengan metode yang diterapkan di event ini.

Event bootcamp tersebut bernama "Bootcamp online 2020 by SanberCode.. From Zero to Hero". Program ini intensif selama 1 bulan atau 4 pekan yang diselenggarakan setiap bulan (kegiatan bisa berubah sewaktu-waktu, cek IG Sanbercode untuk info lebih lanjut). 

Terdapat 2 level pada bootcamp ini yaitu kelas dasar dan kelas lanjutan. Kelas dasar ini gratis dengan syarat yaitu membayar uang komitmen Rp 200,000 dan mendapatkan score bootcamp 80 atau lebih. Saya mengikuti kelas dasar dan Alhamdulillah mendapatkan score 88 dan uang kembali masuk rekening 😄.

Informasi bootcamp bulan Juli 2020


Kurikulum dari bootcamp tersebut kurang lebih seperti berikut ini:
Minggu 1
  • Hello Python
  • Functions, Method and Getting Help
  • Logic Control Flow and Loop
  • Python List dan Dictionary
  • Statistika Deskriptif Untuk Data Science
Minggu 2
  • Pandas Introduction
  • Akses/Indexing dan Transformasi Data
  • Reshaping Data
  • Grouping Data
  • Merging DataFrame
Minggu 3
  • Pengenalan Matplotlib
  • Custom Visualisasi
  • Multiple Plots
  • Perbandingan Kuantitatif
  • Seaborn dan Altair
Minggu 4
  • Pengenalan Machine Learning
  • Algoritma KNN dan Model Regresi Linear
  • Evaluasi Performa dan Memilih Model
  • Preprocessing Data
Setiap materi tersebut akan ada tugas harian yang dikerjakan pada jupyter notebook atau google colab dan disubmit untuk dilakukan penilaian. Selanjutnya pada akhir pekan (hari sabtu) teradapat quiz sampai minggu ke-3 dan minggu terakhir akan ada final project. Dan untuk final project ini akan dibuka kaggle competition dimana kita disediakan data untuk diolah dan kemudian dilakukan prediksi dengan akurasi terbaik sebagai rangking dari beberapa peserta bootcamp.

Dengan cara pembelajaran intensif seperti ini saya rasa pemahaman materi yang akan didapatkan akan lebih cepat karena kita akan dipakasa fokus selama 1 bulan penuh. 

Jika anda ingin mendapatkan file-file tugas dan quiz dari sanbercode yang pernah saya kerjakan sebelumnya bisa akses github berikut: https://github.com/ariflaksito/sanbercode-data-science

Kesimpulan

Dari kedua ecourse yang saya bahas tersebut, kesimpulan menurut saya yaitu:
1) DQLab
- Kasus-kasus di bidang industri terkini
- Bisa mempelajari 3 bahasa penting di data science(R, python, SQL)
- Materi sangat banyak dan terus bertambah, bisa dipelajari sesuai kebutuhan

2) Sanbercode
- Waktu singkat hanya 4 minggu
- Sesuai bagi pemula untuk belajar cepat
- Gratis dengan syarat

Semoga bermanfaat yaa, selamat belajar data science!