Web Scraping

There are two terms in web searching, namely Web Crawling and Web Scraping. The two terms have a difference. If Web Crawling looks for the location/address of the site, Web Scrapping retrieves the content or site content.

Google for example, when searching, this engine will crawl sites around the world based on keywords. Next the user will get a list of sites suggested by Google based on their ranking. Furthermore, the content will be searched manually by the user from sites suggested by Google or other search engines. The combination of crawling and scraping results in a system that in addition to finding the location of sites based on keywords, also retrieves the content of these sites.

The following video is an example of how a simple application scrapes information from four sample sites based on keywords and then the results are stored in csv (Jurnal link). Stored results can be further utilized, for example for sentiment analysis (Jurnal link).

 

 

Big Data dengan Matlab

Tahun 2014 saya masih menjadi mahasiswa doktoral Information Management. Ada satu mata kuliah: Decision Support Technologies yang berisi bagaimana sistem informasi membantu pengambil keputusan, salah satunya dengan pemanfaatan Big Data.

Waktu itu saya satu grup dengan mhs dari Thailand dan Uzbekistan. Tugasnya cukup menarik, yaitu menggunakan data dari Kagel yang berisi jutaan record penulis artikel ilmiah yang masih kasar (raw). Targetnya adalah mengumpulkan penulis yang berserakan menjadi rapih, dimana tidak ada redundansi penulis. Terkadang ada nama penulis yang terbalik susunannya, tanpa nama tengah, dan lain-lain. Selain itu perlu deteksi untuk afiliasi dan bidang ilmunya. Yang tersulit adalah terkadang nama belakang perempuan yang mengikuti nama suami.

Kendala utamanya adalah data yang berukuran besar baik dari sisi kapasitas maupun jumlah record. Ketika dibuka dengan Excel, tidak seluruhnya terambil karena ada batas record Microsoft Excel yakni sebanyak 1,048,576 record dan 16,384 kolom. Terpaksa menggunakan sistem basis data, yang termudah adalah Microsoft Access. Waktu itu fasilitas Big Data pada Matlab masih minim, terpaksa ketika menjalankan pemrosesan paralel, secara bersamaan dibuka 3 Matlab sekaligus (lihat postingan saya tahun 2014 yang lalu).

Tipe Data Tall

Sekitar tahun 2016-an Matlab memperkenalkan tipe data Tall dalam menangani data berukuran besar. Prinsipnya adalah proses upload ke memory yang tidak langsung. Sebab kalau ketika impor data dengan cara langsung maka akibatnya memory akan habis, biasanya muncul pesan ‘out of memory‘. Oleh karena itu Matlab membolehkan mengupload dengan cara ‘mencicil’. Tentu saja untuk memperoleh hasil proses yang lengkap dengan bantuan fungsi gather.

Seperti biasa, cara mudah mempelajari Matlab adalah lewat fasilitas help-nya yang lengkap, maklum software ‘berbayar’. Lisensinya saat ini sekitar 34 jutaan, kalau hanya setahun sekitar 13 juta dan kurang dari 1 juta untuk pelajar. Pertama-tama ketik saja di Command Window: help tall. Pastikan muncul, jika tidak muncul, berarti Matlab Anda belum support fungsi Big Data tersebut. Walau mahal, tetapi Anda bisa mencoba sebulan secara gratis. Ok, jalankan saja help yang muncul.

Dengan fungsi datastore, pertama-tama sampel Big Data disiapkan. Di sini masih menggunakan Comma Separated Value (CSV). Perhatikan hasil proses fungsi tall yang berupa matriks berukuran Mx4. Nah, disini istilah M muncul yang berarti ‘beberapa’, karena yang ditarik belum seluruhnya.

Tampak paralel pool sudah terbentuk, dengan 4 worker. Di sini dibatasi 30 menit, jika idle/tidak digunakan akan di-shutdown. Terakhir, fungsi gather dibutuhkan untuk merekapitulasi hasil olah.

Tampak informasi pooling yang merupakan ciri khas pemrosesan paralel telah selesai dilakukan. Sekian, semoga informasi ini bermanfaat.

KMeans Clustering dengan Python

Pada postingan yang lalu telah dibahas klasterisasi dengan KMeans menggunakan bahasa Matlab. Kali ini kita coba menggunakan bahasa Python dengan GUI Jupyter notebook pada Google (Google Colab).

Sebelumnya kita siapkan terlebih dahulu file data sebagai berikut. Kemudian buka Google Colab untuk mengklasterisasi file tersebut. Sebagai referensi, silahkan kunjungi situs ini. Saat ini kita dengan mudah memperoleh contoh kode program dengan metode tertentu lewat google dengan kata kunci: colab <metode>.

Mengimpor Library

Library utama adalah Sklearn dengan alat bantu Pandas untuk pengelolaan ekspor dan impor file serta matplotlib untuk pembuatan grafik.

  • from sklearn.cluster import KMeans
  • import pandas as pd
  • from sklearn.preprocessing import MinMaxScaler
  • from matplotlib import pyplot as plt

Perhatikan di sini KMeans harus ditulis dengan K dan M berhuruf besar, begitu pula kelas-kelas yang lain seperti MinMaxScaler

Menarik Data

Perhatikan data harus diletakan di bagian file agar bisa ditarik lewat instruksi di bawah ini. Jika tidak maka akan muncul pesan error dimana data ‘beasiswa.csv’ tidak ada.

Selain itu tambahkan instruksi untuk mengeplot data. Tentu saja ini khusus data yang kurang dari 3 dimensi. Jika lebih maka cukup instruksi di atas saj.

  • plt.scatter(df[‘IPK’],df[‘Tingkat Kemiskinan (TM)’])
  • plt.xlabel(‘IPK’)
  • plt.ylabel(‘Tingkat Miskin’)

Prediksi

Ini merupakan langkah utama yang memanfaatkan pustaka ‘KMeans’ dari Sklearn.

  • km=KMeans(n_clusters=2)
  • y_predicted=km.fit_predict(df[[‘IPK’,‘Tingkat Kemiskinan (TM)’]])
  • y_predicted

Nah, hal terpenting adalah tidak hanya menghitung y_predicted saja melainkan melabel kembali datanya. Percuma saja jika kita tidak mampu memetakan kembali siapa saja yang masuk kategori klaster ‘0’ dan ‘1’.

  • df[‘klaster’]=y_predicted
  • print(df)

Finishing

Di sini langkah terpenting lainnya adalah kembali memvisualisasikan dalam bentuk grafik dan menyimpan hasilnya dalam format CSV.

  • df1=df[df.klaster==0]
  • df2=df[df.klaster==1]
  • plt.scatter(df1[‘IPK’],df1[‘Tingkat Kemiskinan (TM)’],color=‘red’)
  • plt.scatter(df2[‘IPK’],df2[‘Tingkat Kemiskinan (TM)’],color=‘black’)
  • plt.scatter(km.cluster_centers_[:,0],km.cluster_centers_[:,1],color=‘purple’,marker=‘*’,label=‘center’)
  • plt.xlabel=‘IPK’
  • plt.ylabel=‘Tingkat Miskin’
  • plt.legend()

Hasilnya adalah grafik dengan pola warna yang berbeda tiap klaster-nya.

Salah satu kelebihan Pandas adalah dalam ekspor dan impor data. Dalam hal ini kita akan menyimpan hasil klasterisasi dengan nama ‘klasterisasi.csv’. Lihat panduan lengkapnya di sini.

  • df.to_csv(‘klasterisasi.csv’)

Silahkan file hasil sempan diunduh karena Google Colab hanya menyimpan file tersebut sementara, kecuali kalau Anda menggunakan Google Drive (lihat caranya). Untuk mengujinya kita buat satu sel baru dan coba panggil kembali file ‘klasterisasi.csv’ yang baru terbentuk itu. df=pd.read_csv(‘klasterisasi.csv’)

  • df.head()

 

Note: ada field yang belum dinamai (Unnamed), bantu ya di kolom komentar caranya. Oiya, MinMaxScaler digunakan untuk jika data ‘jomplang’ misalnya satu dimensi, IPK dari 0 sampai 4 sementara misalnya penghasilan jutaan, tentu saja KMeans ‘pusing’. Oleh karena itu perlu dilakukan proses preprocessing. Sekian, semoga bermanfaat.

Mudah Membuat Aplikasi Web dengan Bootstrap

Saat ini membuat aplikasi web jadi lebih mudah dengan banyaknya alat bantu disain, salah satunya adalah bootstrap. Aplikasi ini memanfaatkan teknologi HTML, CSS dan JavaScript. Bootstrap sejatinya adalah template untuk mempercepat pembuatan program. Rekan-rekan dosen pasti kenal template, misalnya template jurnal tertentu ketika akan submit. Template harus diikuti dan penulis mengisi template dengan naskah jurnalnya. Begitu juga template dalam perancangan web yang digunakan untuk mengisi konten. File template ketika akan digunakan perlu dilakukan kustomisasi sesuai dengan proses bisnis baik frontend maupun backend. Kata bootstrap pertama kali saya dengar ketika kuliah web technology dimana seorang siswa asal Perancis mempresentasikan tugasnya dengan teknik praktis ini.

Salah satu situs penyedia template bootstrap terkenal adalah: https://startbootstrap.com/. Silahkan kunjungi situs tersebut dan masuk ke menu templateadmin & dashbord untuk melihat template yangt ersedia.

Silahkan pilih, misalnya SB Admin dengan status “Free” dan diunduh jutaan kali. Selanjutnya klik template yang dituju untuk masuk ke menu download. Lanjutkan dengan menekan Free Download.

Setelah mengunduh, coba cek jalankan dengan terlebih dahulu mengekstrak file rar hasil unduhan. Jalankan file index.html untuk melihat template tersebut. Berikutnya silahkan mengkustomisasi file index.html tersebut, misal menghapus bagian-bagian tertentu, atau bisa mengganti nama misalnya index.php jika menggunakan bahasa PHP.

Oiya, untuk testing, misalnya dengan Github, karena jumlah file yang sedikit, memudahkan Anda upload ke Github online (non-desktop) karena per folder kurang dari 100 file.Sekian info singkat ini, semoga bermanfaat.

Relasi Antar Kelas – Komposisi

Komposisi merupakan relasi antar kelas yang lebih ketat dibanding agregasi (lihat pos yang lalu), sedikit berbeda dibanding inheritance yang bersifat generalisasi/spesialisasi. Masih dengan kasus yang sama berikut ini.

Diagram kelas Unified Modeling Language (UML) di atas memperlihatkan relasi antara kelas Dosen dan Mahasiswa “Membimbing”. Teknik di atas sering muncul di buku karangan Alan Denis (System Analysis & Design – an OO Approach with UML).

Karakteristik agregasi antara dua kelas adalah independen. Jika dihapus satu objek yang berelasi, objek lain masih ada, sementara komposisi tidak. Ada istilah Wadah (Container) dan Isi (Contain). Jika wadah dihapus maka isi ikut terhapus juga. Misalnya komputer yang memiliki komponen prosesor, ram, mainboard, dan lain-lain dihapus, maka komponen otomatis ikut terhapus.

Secara kode mirip dengan agregasi, hanya saja isi, dalam hal ini isi, misalnya dosen pembimbing, dibangkitkan dalam objek yang berperan sebagai wadah, misal mahasiswa.

Pada agregasi, objek mahasiswa y (si Wahyu) memiliki dosen pembimbing x (Rahmadya). Jika objek y dihapus (ketik saja “del y” di colab) x masih ada. Nah, untuk komposisi dosen pembimbing y (Ujang) diletakan di dalam y sebagai wadah. Jika y dihapus/delete dosen pembimbing pun terhapus, berbeda dengan agregasi yang masih ada x tersisa. Berikut secara UML bagaimana notasi agregasi dan komposisi.

Namun dalam implementasinya antara agregasi dan komposisi hanya garis saja seperti dalam buku Alan Dennis et al, kecuali jika ingin merinci diagram kelasnya. Untuk inheritance harus dicantumkan dalam diagram simbolnya, karena atribut dan metode ada di kelas induk. Jika tidak diberi simbol panah khawatir pembaca akan bingung kemana atribut dan metode lainnya yang berada di kelas induk. Untuk lebih jelasnya silahkan lihat video Youtube berikut ini.

 

Random Forests dengan Google Colab Python

Decision Tree (DT) merupakan metode machine learning klasik yang memiliki keunggulan dari sisi interpretasi dibanding Deep Learning (DL). Memang akurasi Deep Learning, terutama yang digunakan untuk mengolah citra sudah hampir 100% tetapi beberapa domain, misalnya kesehatan membutuhkan model yang dapat dilihat “isi” di dalamnya. Kita tahu bahwa DL sering dikatakan “black box” karena tidak dapat diketahui alur di dalamnya. Nah, di sinilah DT digunakan karena memiliki keunggulan dari sisi transparansi. Bahkan ketika DT terbentuk kita bisa memprediksi secara manual hasil akhir dengan melihat alur DT tersebut tanpa bantuan komputer. Silahkan lihat pos saya terdahulu tentang DT.

Nah, karena data yang besar terkadang DT sangat sulit terbentuk. Seorang peneliti dari IBM bernama Tin Kam Ho membuat algoritma DT di tahun 1995 (saya baru masuk S1 FT UGM waktu itu). Prinsipnya adalah membuat DT-DT kecil secara acak kemudian digunakan untuk memprediksi melalui mekanisme voting. Misalnya kita ingin memprediksi sesuatu dengan enam buah Trees di bawah ini.

Jika hasilnya 2 Yes dan 4 No maka secara voting hasil prediksinya adalah No karena yang terbanyak No. Oiya, Tree yang dibentuk di atas ketika memilih root dan node tidak perlu menggunakan kalkulasi njlimet seperti DT yaitu dengan Entropi dan Gain Information.

Bagaimana menerapkan lewat bahasa pemrograman? Python memiliki library Scikit Learning untuk Random Forests. Oiya, jika ingin melihat kode di dalam library tersebut silahkan buka saja Source di Github yang disediakan oleh Scikit Learning. Jika ingin memodif silahkan tiru-amati-modifikasi source code tersebut, khususnya para mahasiswa doktoral yang fokus ke metode. Untuk lebih jelasnya silahkan lihat link Video saya di Youtube berikut ini. Sekian, semoga bermanfaat.

Support Vector Regression Untuk Prediksi Sebaran COVID-19

Support Vector Regression (SVR) merupakan metode klasik yang memanfaatkan teori matematika dan statistik untuk regresi dengan model Support Vector Machine (SVM). Jadi SVM ternyata bukan hanya untuk klasifikasi melainkan juga untuk regresi dan deteksi outliers.

Silahkan gunakan Scikit Learning untuk bahasa Python. Postingan ini mengilustrasikan penggunaannya dengan Google Colab. Data COVID dapat kita temukan di internet, atau silahkan gunakan file Excel link ini. Pilih negara yang ingin Anda prediksi kemudian simpan dalam bentuk file. Berikut kira-kira kode programnya.

#impor pustaka svm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVR
from google.colab import files
import io
#data latih
upload_files = files.upload()
for filename in upload_files.keys():
x=upload_files[filename].decode(‘utf-8’)
data1 = pd.read_csv(io.StringIO(x), header=None)
#print(data1.head())
X1=np.asarray(data1)
x_train=X1[0:,0:1]
y_train=X1[0:,1:2]
#membuat model (classifier)
clf = SVR(kernel=‘poly’, C=100, gamma=‘auto’, degree=2, epsilon=.1,
oef0=1)
clf.fit(x_train,y_train)
#prediksi data
test=x_train.reshape(-1,1)
y_pred=clf.predict(test)
y_next=np.array([[457],[465],[470],[471],[480]])
prednext=clf.predict(y_next)
print(prednext)
#Visualisasi Data
absis=[x_train]
ordinat=[y_train]
#ordinat2=np.concatenate([x_train],[prednext])
plt.scatter(absis, ordinat, cmap=‘flag’, marker=‘o’)
plt.scatter(absis, y_pred, cmap=‘flag’, marker=‘x’)
plt.scatter(y_next, prednext, cmap=‘flag’, marker=‘x’)
#Label
plt.xlabel(“Day”)
plt.ylabel(“Number of infected People”)
plt.title(“Projection Pattern of COVID-19 Spread in India”)
plt.grid()

Jika dijalankan, masukan saja data CSV yang Anda ingin prediksi dan tunggu beberapa saat, agak lama karena 400-an hari (lebih dari setahun). Jika selesai pastikan hasil prediksi muncul.

Tampak garis biru merupakan data asli dari Excel sementara garis oranye merupakan hasil fitting berdasarkan kernel polinomial (kuadratik). Lima tanggal prediksi tampak di ujung kanan berwarna hijau. Silahkan lihat video lengkapnya di chanel saya. Sekian, semoga bisa menginspirasi.

P.S. Tulisan di atas sebagian diambil dari publikasi kami di https://ieeexplore.ieee.org/document/9415858

Relasi Antar Kelas – Agregasi

Relasi antar kelas pada Pemrograman Berorientasi Objek (PBO) dikenal dengan nama Asosiasi, yang terdiri dari agregasi dan komposisi, selain dari pewarisan/inheritance yang merupakan ciri khas PBO. Postingan kali ini akan membahas agregasi, merupakan relasi/asosiasi yang dikenal dengan istilah “Is – a”. Perhatikan diagram kelas berikut ini:

Di sini kita akan mengintegrasikan konsep pewarisan (kelas Unisma memiliki anak Dosen, Mahasiswa, dan Satpam) dan agregasi (mahasiswa memiliki dosen pembimbing dari kelas Dosen). Atribut mahasiswa di sini antara lain:

  • Nama
  • Status
  • Jurusan
  • NPM
  • Pembimbing

Atribut nama, status, dan jurusan berasal dari kelas induk (Unisma) sementara NPM dan Pembimbing dari kelas Mahasiswa (kelas anak). Agregasi digambarkan dengan garis, terkadang ada panah disertai penjelasan relasi tersebut, misalnya “membimbing”. Berikut kelas Unisma.

class Unisma(object):
  def __init__(self,nama,status,jurusan):
      self.nama=nama
      self.status=status
      self.jurusan=jurusan
  def Salam(self):
      print(‘Selamat Hari Raya Idul Fitri 1442H’)
  def Info(self):
      print(“INFO”)
      print(“Nama    : “ + self.nama)
      print(“Jurusan : “ + self.jurusan)

Berikut ini kode kelas Dosen. Perhatikan kata kunci “super” yang berarti dosen merupakan pewarisan dari kelas Unisma. Jadi Dosen mewarisi atribut-atribut nama, status, dan jurusan, berikut juga metode/operasi Salam() dan Info().

class Dosen(Unisma):
  def __init__(self,nama,status,jurusan,nip):
      super().__init__(nama,status,jurusan)
      self.nip=nip
  def SalamDosen(self):
      print(‘Kami {}  {} mengucapkan’.format(
          self.status,self.jurusan))
      self.Salam()

Berikut ini kode kelas Mahasiswa dengan tambahan satu atribut “pembimbing” yang nantinya akan direlasikan dengan objek Dosen selaku pembimbing.

class Mahasiswa(Unisma):
  def __init__(self,nama,status,jurusan,npm,pembimbing):
      super().__init__(nama,status,jurusan)      
      self.npm=npm
      self.pembimbing=pembimbing
  def SalamSiswa(self):
      print(‘Hai teman-teman, kami {} {} mengucapkan’.format(
          self.status,self.jurusan))
      self.Salam()
  def GetInfo(self):
      print(“Pembimbing : “ + self.pembimbing.nama)

Jalankan dengan kode-kode berikut untuk mengeceknya.

x=Dosen(“Rahmadya”,“Dosen”,“Teknik Komputer”,123)
y=Mahasiswa(“Wahyu”,“Mahasiswa”,“Teknik Mesin”,1111123,x)
y.Info()
y.GetInfo()

Untuk lebih jelasnya silahkan lihat video penjelasannya berikut ini. Sekian, semoga bermanfaat.

Public, Private, dan Protected Pada Python

Public, Private, dan Protected dikenal dengan nama Visibility. Istilah ini telah lama dikenal oleh bahasa pemrograman C++ dan Java. Python, merupakan bahasa baru secara default mendefinisikan suatu atribut atau metode bersifat public. Diagram kelas UML mendefinisikan public dan private dalam bentuk simbol positif dan negatif.

Untuk membuat private dengan menggunakan simbol garis bawah dimana untuk protected satu garis bawah (“_”) dan untuk private dua garis bawah (“__”).

Berikut contoh kelas Unisma sebagai induk dan kelas Dosen dan Mahasiswa sebagai anak yang diambil dari materi sebelumnya tentang inheritance/pewarisan. Silahkan gunakan editor Python, misalnya Google Colab untuk menjalankan kode berikut.

class Unisma(object):
  def __init__(self,nama,status,jurusan):
      self.__nama=nama
      self.__status=status
      self.__jurusan=jurusan
  def Salam(self):
      print(‘Selamat Hari Raya Idul Fitri 1442H’)
  def Info(self):
      print(“INFO”)
      print(“Nama    : “ + self._Unisma__nama)
      print(“Jurusan : “ + self._Unisma__jurusan)

Berikutnya untuk kelas Mahasiswa:

class Mahasiswa(Unisma):
  def __init__(self,nama,status,jurusan,npm):
      super().__init__(nama,status,jurusan)      
      self.__npm=npm
  def SalamSiswa(self):
      print(‘Hai teman-teman, kami {} {} mengucapkan’.format(
          self._Unisma__status,self._Unisma__jurusan))
      self.Salam()

Berikutnya coba jalankan dengan instruksi pengaksesan kelas-kelas di atas.

y=Mahasiswa(“Wahyu”,“Mahasiswa”,“Teknik Mesin”,123)
y.SalamSiswa()
y.Info()

Berikut video youtube untuk lebih jelasnya.

Naïve Bayes – Kalkulasi secara Manual dan dengan Komputer

Saat ini tidak dapat dipungkiri bahwa Deep Learning paling banyak diteliti dan digunakan dalam aplikasi-aplikasi artificial intelligence. Beberapa pengguna tidak menyukai metode tersebut karena karakteristiknya yang tidak dapat dilihat logika di dalam modelnya atau sering diistilahkan dengan black box walaupun akurasinya saat ini dengan model terbarunya hingga mendekati 100%. Selain itu, deep learning membutuhkan kinerja prosesor yang tinggi, terutama ketika proses pelatihan (learning).

Jika ingin membuat model yang dapat dilihat alur logikanya, naïve bayes merupakan salah satu pilihan yang baik. Walaupun kinerjanya menurut beberapa penelitian kalah dengan metode terkini seperti misalnya support vector machine (SVM), metode ini memiliki karakteristik statistik yang kental, yaitu probabilistik. Ada istilah confidence dalam metode ini.

Untuk perhitungan, naïve bayes lebih mudah menurut saya dibanding decision tree yang mengharuskan membuat model tree dengan konsep entropy dan gain informationnya. Pada naïve bayes, kita hanya menghitung probabilitas ketika menghitung confidence tiap-tiap kelas prediksi.

Plus Minus

Metode naïve bayes, dalam Scikit Learn diisitilahkan dengan Gaussian Naïve Bayes, karena dalam mengkonversi tabel kategorikal lewat pendekatan fungsi Gauss. Walaupun akurasinya kurang dibanding metode lain, sifat probabilistiknya sangat membantu penjelasan ke pengguna dalam aplikasinya. Misalnya dalam memprediksi sebuah sentimen dalam sentiment analysis, metode ini tidak hanya menjelaskan positif, negatif, atau netral saja, melainkan berapa kadar positif dan negatifnya dalam bentuk probabilitas. Terkadang jika dalam sistem dashboard menunjukan negatif dengan probabilitas yang tinggi bisa saja digambarkan dengan warna merah yang artinya warning, sehingga eksekutif segera mengambil tindakan yang perlu dalam manajemen.

Statistik merupakan bidang yang paling banyak dimanfaatkan dalam machine learning. Belakangan beberapa ahli machine learning enggan disebut ahli statistik karena belakangan metode-metode terbaru tidak terlalu mengadopsi konsep statistik, misalnya tensorflow yang cenderung ke arah tensor dan matriks dalam aljabar. Silahkan lihat penjelasan slide di atas dalam video youtube berikut ini, semoga bermanfaat.

Pseudocode

Bahasa pemrograman sangat beragam dari yang sulit seperti bahasa rakitan hingga yang paling mudah dengan bantuan Integrated Development Environment (IDE) yang interaktif. Hanya dengan drag and drop mouse, sebuah aplikasi terbentuk. Karena tiap programmer memiliki bahasa pemrograman sendiri, terkadang untuk berkomunikasi membutuhkan bahasa universal tentang sebuah algoritma. Di sinilah peran pseudocode, dimana sebuah alur algoritma dibuat dalam bahasa umum yang dimengerti manusia.

Dalam perjalanannya, pseudocode memiliki kompromi antara bahasa yang mudah dimengerti manusia dengan yang mudah diimplementasikan programmer. Cornel University menawarkan saran dalam pembuatan pseudocode sebagai berikut.

  • Dibuat menyerupai bahasa manusia dan kode program.
  • Hindari detil yang tidak perlu.
  • Jangan menulis yang sudah jelas.
  • Gunakan beberapa sintax program yang lebih ringkas dari bahasa, misal struktur if-then-else.
  • Perhatikan konteks-nya. Terkadang “use quicksort” pada pseudocode cukup jika audiens mengerti. Namun “quicksort” perlu dijabarkan pada kasus tertentu.
  • Jangan melupakan algoritma yang mendasari algoritma yg sedang dibuat pseudocodenya.
  • Seimbangkan antara pemahaman user dan programmer.

Buku-buku referensi internasional, terutama yang membahas metode-metode komputasi memiliki style terntentu dalam pembuatannya. Jurnal-jurnal ilmiah pun memiliki patokan-patokan dasar dalam pembuatan pseudocode. Ada yang merepresentasikan pseudocode dalam Figure/Gambar, ada pula yang menyamakan dengan naskah teks. Masing-masing ada kekurangan dan kelebihannya.

Thomas Cormen dalam buku Algoritma-nya kebanyakan merepresentasikan sebuah pseudocode dalam format fungsi dimana variabel input dimasukan dalam tanda kurung “()”. Selain itu, sebuah penomoran diberikan di tiap baris perintahnya.

Terkadang pembaca awam pun harus memahami seluk-beluk pemrograman, misalnya konsep rekursif yang unik dimana satu fungsi memanggil dirinya sendiri di dalam alur algoritmanya. Contoh sederhana adalah fungsi faktorial berikut.

Untuk lebih jelasnya silahkan simak video youtube berikut, yang masuk dalam materi kuliah logika dan algoritma.

Pohon Keputusan (Decision Tree)

Pohon keputusan merupakan satu metode klasik dalam prediksi/klasifikasi. Tekniknya adalah dengan menggunakan pertanyaan di suatu atribut (disebut test attribute) kemudian mengarahkan ke cabang mana sesuai dengan jawabannya. Tugas utama dalam metode ini adalah model membuat pohon/tree berdasarkan informasi dari data yang menjadi rujukan.

Perhitungan Manual

Pada slide di bawah, perhitungan manual dijelaskan yang diambil dari buku Data Mining karya Han and Kamber.

Beberapa kesalahan hitung terjadi ketika menghitung expected information dan entropi di tiap-tiap fitur/atribut. Untuk yang sedang mengambil kuliah ini ada baiknya berlatih soal-soal agar ketika ujian tidak terjadi salah hitung.

Perhitungan dengan Program

Berikutnya disertakan pula bagaimana mengimplementasikannya dengan Python, dalam hal ini menggunakan Google Colab. Saran untuk mahasiswa S1 dan D3 ada baiknya mengetik langsung kode (tanpa copas) agar bisa melatih skill/keterampilan. Sekaligus juga debug ketika ada error terjadi. Silahkan lihat video lengkapnya di youtube berikut ini. Semoga bermanfaat.

Inheritance/Pewarisan dengan Python

Salah satu konsep terkenal pada pemrograman berorientasi objek adalah inheritance/pewarisan. Istilah ini identik dengan generalisasi dan spesialisasi dimana seorang induk akan mewariskan sifat-sifat ke seorang anak yang general dan seorang anak memiliki sifat khusus yang spesifik. Gambar di bawah ini contoh diagram UML dalam menggambarkan relasi generalisasi yang menggambarkan konsep pewarisan.

Kotak menggambarkan kelas dengan tiga kompartemen/ruang yaitu nama, atribut dan metode/operasi. Kelas Unisma di atas merupakan kelas induk yang akan mewariskan tiga buah atribut (nama, status, dan jurusan) dan dua buah operasi/metode (salam dan Info). Di sini simbol minus berarti private (tidak bisa diakses dari luar kelas) dan plus berarti publik (bisa diakses di luar kelas). Silahkan lihat slide berikut.

Kelas Dosen dan Mahasiswa berturut-turut memiliki atribut unik NIP dan NPM, juga metode SalamDosen() dan SalamSiswa(). Perhatikan jangan lupa menulis “()” setelah nama metode/operasi, yang merupakan standar/konvensi internasional. Silahkan buat satu sel yang berisi kelas Unisma yang merupakan kelas Induk.

https://colab.research.google.com/drive/1T19eiVktOrMQzXqZLD3jV4I0fbbQZ6oA?usp=sharing

Kode di atas juga mengilustrasikan pembuatan dua kelas anak yaitu kelas Dosen dan kelas Mahasiswa. Di sini kita menggunakan IDE Google Colab yang dapat diakses tanpa perlu instalasi karena hanya menggunakan browser dengan network ke internet.

Perlu diperhatikan bahwa pemrograman berorientasi objek memiliki konsep Konstruktor dalam tiap pembuatan kelas. Karena tiap kelas harus mampu menciptakan satu objek. Tanpa konstruktor maka kelas tersebut tidak bisa membentuk objek. Istilahnya adalah kelas abstrak, terkadang diperlukan juga kelas jenis ini pada penerapannya. Silahkan lihat video berikut, semoga bermanfaat.

Bahasa Untuk Pemrograman Berorientasi Objek

Tiap kampus ternyata berbeda-beda awal perkuliahannya, termasuk kampus tempat saya mengajar yang baru mulai pertemuan pertama semester genap. COVID-19 memang membuat beberapa agenda perkuliahan berubah. Faktor perkuliahan online dan kesiapan kampuslah yang membuah pergeseran dan perubahan sistem, dari yang tatap muka menjadi online. Terutama kesiapan dalam menangani praktikum.

Untuk bidang komputer, khususnya materi pemrograman dapat dilakukan praktik secara online. Problem utama hanyalah di sisi mahasiswa yang terpaksa memindahkan komputer lab ke dalam laptop sendiri, sekaligus sarana network berupa pulsa/paket internet. Nah, untuk mahasiswa yang pas-pasan, tentu saja agak kesulitan ketika memiliki laptop dengan spesifikasi minim. Oleh karena itu perlu difikirkan bagaimana menyiapkan sarana yang murah-meriah.

Java

Java dan C++ sudah sejak lama menjadi sarana belajar pemrograman berorientasi objek. Silahkan lihat postingan saya tentang DB4O untuk basis data objek. Sebelumnya, bahasa ini menjadi andalah saya untuk praktik pemrograman berorientasi objek, tetap kondisi online sangat menyulitkan mahasiswa, sehingga perlu sarana murah-meriah lainnya.

Python

Bahasa yang paling banyak diminati saat ini adalah Python. Banyak paket yang tersedia dari Python berbasis konsol hingga paket Anaconda yang gratis diunduh. Hanya saja paket ini membutuhkan sumber daya yang besar untuk mengaktifkan fasilitas-fasilitas seperti Jupyter Notebook atau Spyder.

Untungnya Google menyediakan sarana programming hanya dengan browser dan mempersilahkan orang menggunakan servernya, termasuk Graphic Processing Unit (GPU) yang cukup ampuh dalam menangani Deep Learning. Bagaimana untuk pemrograman berorientasi objek?

Saat ini Python memiliki pesaing kuat, suatu bahasa pemrograman secepat C++, sedinamis Ruby, dan semudah Python, yaitu Julia. Namun bahasa ini tidak ditujukan untuk pemrograman berorientasi objek, berbede dengan Python yang dari awal memang untuk objek.

Mencoba Pemrograman Objek Sederhana

Baik untuk praktik awal, silahkan buka Google Colab Anda (lihat tata cara di post yang lalu). Copy paste saja kode berikut ini sebagai ilustrasi bagaimana sebuah kelas dengan method yang tersedia.


import math
class Point:
    'Represents a point in two-dimensional geometric coordinates'
    def __init__(self, x=0, y=0):
        '''Initialize the position of a new point. The x and y
        coordinates can be specified. If they are not, the point
        defaults to the origin.'''
        self.move(x, y)
    def move(self, x, y):
        "Move the point to a new location in two-dimensional space."
        self.x = x
        self.y = y
    def reset(self):
        'Reset the point back to the geometric origin: 0, 0'
        self.move(0, 0)
    def calculate_distance(self, other_point):
        """Calculate the distance from this point to a second point
        passed as a parameter.
        This function uses the Pythagorean Theorem to calculate
        the distance between the two points. The distance is returned
        as a float."""
        return math.sqrt((self.x - other_point.x)**2 + (self.y - other_point.y)**2)

Kelas di atas tidak menghasilkan output karena belum dihidupkan objeknya. Berikut cara mencoba method yang direpresentasikan dalam keyword “def” di atas.

point=Point(3,5)
print("point awal = ",point.x, point.y)
point2=Point(5,5)
jarak=point.calculate_distance(point2)
print("jarak dari point awal =",jarak)

Pastikan hasilnya tampak seperti di bawah ini, selamat mencoba.

Menggunakan Algoritma Genetika dengan Python

Algoritma Genetika (GA) merupakan salah satu nature-inspired optimization yang meniru evolusi makhluk hidup. Gampangnya, generasi terkini merupakan generasi yang terbaik yang adaptif terhadap lingkungan. Prinsip seleksi, kawin silang, dan mutasi diterapkan ketika proses optimasi secara pemilihan acak (random) dilakukan. Karena adanya unsur pemilihan acak, GA masuk dalam kategori metaheuristik bersama particle swarm optimization (PSO), simulated annealing (SA), tabu search (TS), dan lain-lain.

Bagaimana algoritma tersebut bekerja dalam suatu bahasa pemrograman saat ini dengan mudah kita jumpai di internet, dari youtube, blog, hingga e-learning gratis. Saat ini modul-modul atau library dapat dijumpai, misalnya di Matlab. Nah, dalam postingan ini kita akan mencoba dengan bahasa pemrograman Python. Sebelumnya perlu sedikit pengertian antara pembuatan program dari awal dengan pemrograman lewat bantuan sebuah modul atau library.

Beberapa pengajar biasanya melarang mahasiswa untuk langsung menggunakan library karena memang peserta didik harus memahami konsep dasarnya terlebih dahulu. Untungnya beberapa situs menyediakan kode program jenis ini yang dishare misalnya ahmedfgad, datascienceplus, pythonheatlhcare, dan lain-lain. Saya dulu menggunakan Matlab, dan ketika beralih ke Python karena pernah dengan bahasa lain maka dengan mudah mengikuti kode dengan bahasa lainnya. Oiya, saat ini GA, PSO, TS, dan lain-lain lebih sering disebut metode dibanding dengan algoritma karena tingkat kompleks dan ciri khas akibat mengikuti prinsip tertentu (makhluk hidup, fisika, biologi, dan lain-lain).

Selain memahami prinsip dasar, dengan kode python GA yang murni berisi langkah-langkah dari seleksi, kawin silang dan mutasi, jika Anda mengambil riset doktoral terkadang perlu menggabungkan dengan metode-metode lain, misalnya riset saya dulu, mutlak harus memodifikasi seluruh kode yang ada, jadi agak sulit jika menggunakan library yang tinggal diimpor.

Nah, jika Anda sudah memahami, dan sekedar menggunakan atau membandingkan metode satu dengan lainnya, penggunaan library jauh lebih praktis. Misal Anda menemukan metode baru dan harus membandingkan dengan metode lain, maka metode lain pembanding itu dapat digunakan, bahkan karena karakternya yang dishare maka orang lain (terutama reviewer jurnal) yakin keabsahannya (bisa dicek sendiri). Untuk GA bisa menggunakan library dari situs-situs berikut antara lain geneticalgorithms, pygad, pydea, dan lain-lain. Sebagai ilustrasi silahkan melihat video saya berikut yang menggunakan Google Colab.