Praktek Basis Data dengan Google Colab

Google Colab merupakan media pembelajaran pemrograman yang praktis karena baik bahasa pemrograman maupun mesin/harware disediakan oleh Google. Dengan mengandalkan laptop jadul atau handphone bisa dilaksanakan, asal memiliki koneksi internet. Bahasa yang digunakan adalah bahawa Python yang sangat cocok untuk machine learning. Bagaimana untuk pengolahan basis data?

SQLite

SQLite disediakan dalam satu library yang harus diinstal terlebih dahulu sebelum diimpor. Data diletakan baik dengan koneksi ke Google Drive atau diletakan secara temporal di folder pada Google Colab.

# CREATING THE TABLE
import sqlite3
conn = sqlite3.connect(‘unisma.db’)
print(“Opened database successfully”);
conn.execute(”’
CREATE TABLE IF NOT EXISTS data_siswa(nama text,
matkul text,
dosen text,
nilai integer);”’)
conn.commit()
print(“Table created successfully”);
conn.close()

Setelah Tabel terbentuk, silahkan dimasukan data-datanya misalnya sebagai berikut. Pastikan terisi dengan baik.

# INSERTING VALUES
conn = sqlite3.connect(‘unisma.db’)
conn.execute(“INSERT INTO data_siswa VALUES(‘wahyu’, ‘matematika’, ‘malikus’, 72);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘budi’, ‘bahasa’, ‘amin’, 90);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘linda’, ‘matematika’, ‘malikus’, 91);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘wahyu’, ‘bahasa’, ‘amin’, 75);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘linda’, ‘bahasa’, ‘amin’, 90);”)
conn.execute(“INSERT INTO data_siswa VALUES(‘budi’, ‘matematika’, ‘malikus’, 60);”)
conn.commit()

Untuk menggunakan query silahkan menggunakan instruksi SELECT untuk mengetahui isi dari data/tabel yang ada. Bahasa standar SQL dapat diterapkan pada SQLite. Tentu saja untuk implementasi diharapkan menggunakan Python di lokal komputer kita. Google colab cukup baik untuk media pembelajaran atau sebagai penguji algoritma yang akan diterapkan pada system.

conn.close()
conn = sqlite3.connect(‘unisma.db’)

cursor = conn.execute(”’ SELECT nama
                          FROM data_siswa
                          WHERE matkul=’matematika’;”’)

for row in cursor:
  print(row)
conn.close()

Hasil:

  • (‘wahyu’,)
  • (‘linda’,)
  • (‘budi’,)

Untuk lebih jelasnya silahkan lihat video saya berikut, sekian semoga bisa membantu.

 

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.

Library & Toolbox .. Haramkah?

Belajar ilmu komputer, khususnya coding, bagi mahasiswa milenial sedikit membingungkan, apalagi ketika perkembangan teknologi saat ini yang super cepat. Jika mengikuti alur normal, maksudnya dari dasar yang paling dasar .. terkadang membuat mereka stres, ditambah lagi godaan medsos, game, dan youtube.

“Untuk apa belajar itu Pa?”, merupakan pertanyaan yang sudah muncul sejak jaman batu mungkin. Bahkan De Morgan sempat dianggap gila di jamannya. Maklum penerapannya belum ada saat itu, yaitu komputer. Jawab saja sebisanya pertanyaan itu, toh nanti akhirnya mengerti juga, yang penting mengikuti kuliah hingga selesai, minimal sebelum lulus sudah mengerti .. mudah-mudahan.

Begitu juga dengan pemrograman, atau dalam bahasa kekiniannya, Coding. Jika mempelajari dari dasarnya, misalnya bahasa C++ atau bahasa rakitan, baik dosen dan mahasiswa akan lelah, belum lagi mencari pengajar bahasa tersebut yang mulai langka. Kalau untuk belajar algoritma dan struktur data mungkin oke lah. Tapi jika untuk tugas akhir/skripsi, untuk membuat aplikasi paling sederhana pun butuh waktu lama dengan bahasa pembuat bahasa dan sistem operasi tersebut.

Beberapa dosen, cerita dari teman, banyak yang melarang menggunakan Toolbox pada Matlab atau Library di Python. Alasannya seperti biasa, mahasiswa jadi kurang berfikir mendasar, mengingat dengan library dan toolbox, mahasiswa tinggal pakai. Ada benarnya juga.

Permasalahannya tidak semua mahasiswa ilmu komputer fokus ke pemrograman. Apalagi ada banyak jenis programmer, dari web, android/iOS, game, disain, dan lain-lain. Saya pernah mengajar teknik kompilasi dengan bahasa Lex and Yacc yang berbasis C++, untuk membuat bahasa dengan dasar-dasar teknik automata. Hasilnya, mahasiswa kalang kabut. Apalagi untuk mahasiswa sistem informasi atau jurusan non komputer yang butuh bantuan ilmu komputasi.

Halal .. asalkan

Untuk pengguna Toolbox Matlab, ada baiknya Anda daftar gratis di forum Mathworks. Di sana banyak share m-file yang berupa kode-kode untuk fungsi tertentu. Jadi kita bisa belajar bagaimana algoritma bekerja untuk menyelesaikan kasus tertentu. Atau sebenarnya di program Matlab bisa dilihat kode program sebuah fungsi dengan mengetik “edit <nama fungsi>”.

Yang kurang tepat adalah, siswa hanya menggunakan Toolbox atau fungsi yang tersedia tanpa memahami alur programnya.

Nah, saat ini Python merupakan bahasa yang sedang trendy, silahkan lihat dengann Google Trend. Bahasa ini mengalahkan bahasa-bahasa lain dari sisi pencarian di Google.

Python yang di tahun 2012 terbawah, secara perlahan menjadi yang pertama, menyalib bahasa lainnya, bahkan bahasa terkenal, Java. Hal ini karena Python banyak memiliki Library yang sangat membantu mempercepat pembuatan aplikasi.

Seperti pada Matlab, yang kurang baik adalah jika mahasiswa menggunakan Library saja, tanpa memahami prinsip dasar metode/algoritmanya, misalnya Scikit Learning. Dan untuk melihat struktur program, Library pada Python mudah diperoleh. Tetapi untuk memahaminya, dasar-dasar pemrograman di Python harus dikuasai terlebih dahulu, ditambah dengan pemahaman class dan objek. Hal ini karena Library menggunakan class, parameters, dan def, ciri khas pemrograman objek (kelas, atribut, dan metode/operasi).

Untuk mahasiswa ilmu komputer, penggunaan aplikasi seperti Rapidminer, Weka, dan sejenisnya sebenarnya boleh saja, namun untuk mahasiswa S1 dan D3 yang dituntut menghasilkan aplikasi, menurut saya tidak bisa dijadikan tugas akhir/skripsi. Minimal untuk materi mata kuliah. Tapi mubazir juga sih, dipelajari di kuliah tapi tidak bisa dipraktekan/digunakan untuk tugas akhir/skripsi.

Postingan ini sekedar pendapat pribadi ya, untuk bagaimana melihat kode sumber dari library yang ada, silahkan lihat video Youtube saya berikut ini. Isinya membandingkan penggunaan K-Nearest Neighbors dengan Scikit Learning dan tanpa library Machine Learning.

Membuat Tensor Sederhana dengan TensorFlow pada Google Colab

Istilah tensor dijumpai dalam matematika, khususnya dalam aljabar. Tensor sebenarnya bentuk umum dari besaran, jika dimensinya nol berarti skalar dan jika berdimensi satu ke atas, maka disebut vektor dan matriks. Istilah tensor digunakan juga oleh Google dalam library python “TensorFlow”. Istilahnya mirip tensor, terutama ketika mengelola vektor dan matriks.

Dalam penerapannya, TensorFlow sedikit membingungkan karena memiliki dua fase: konstruksi dan eksekusi. Tensor ketika digunakan berupa graph yang berisi nodes dan edges. Jika nodes berisi operasi, edges berisi tensor. Sementara itu, fase eksekusi membutuhkan session.

Untuk lebih jelsnya silahkan buka Google Colab. Buat satu notebook baru, beri nama misalnya FirstTensor.ipynb. Disini kita akan membuat satu tensor sederhana yang berisi satu variabel konstant 30. Operasi yang dilakukan adalah mencetak (print) konstanta tersebut. Masukan kode berikut dalam sel colab tersebut.

Di sini tensorflow versi 1.x digunakan. Secara default Colab menyediakan versi 2.x. Perhatikan sel pertama berisi impor library tensorflow. Line pertama merupakan instruksi standar penggunaan tensorflow versi 1. Sel kedua berisi konstruksi variabel konstan x=30. Selain itu dibuat satu session dengan nama “sess” yang kemudian dioperasikan berupa fungsi print.

Sepertinya agak ribet karena untuk mencetak konstanta 30 saja butuh beberapa line. Namun mengingat satu sesi bisa diterapkan untuk satu prosesor (GPU) maka komputasi bisa dilakukan dengan banyak prosesor yang bekerja secara paralel. Jadi walau agak sedikit merepotkan di awal tetapi ketika diterapkan dengan banyak prosesor, hasilnya lebih cepat. Biasanya diterapkan dalam sebuah framework deep learning. Sebagai ilustrasi, tensor dalam graph di bawah ini.

Hasil perkalian a dan b akan dikurangi hasil penjumlahan b dan c. Instruksi pythonnya adalah sebagai berikut menlanjutkan dari instruksi sebelumnya.


import numpy as np
a = tensorflow.constant(np.array([5, 7, 10]))
b = tensorflow.constant(np.array([2, 3, 21]))
c = tensorflow.constant(np.array([3, 5, 7]))
d = a * b  # tensorflow.multiply(a,b)
e = c + b  # tensorflow.add(c,b)
f = d - e  # tensorflow.subtract(d,e)
sess = tensorflow.Session()
outs = sess.run(f)
sess.close()
outs

Jalankan dan hasilnya harus sama dengan gambar di atas [5,13,182]. Selamat mencoba tensor dalam tensorflow.

Ref:

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.

Belajar Membuat Game dengan Python

Ternyata Python tidak hanya digunakan untuk Machine Learning, melainkan juga untuk membuat game. Banyak sumber-sumber belajar di internet, baik di Github maupun penjelasannya di Youtube. Nah, bagi Anda yang pemula ada baiknya membaca postingan ini bagaimana menggunakan dua metode dalam menjalankan Python yaitu konsol dan Jupyter Notebook.

Konsol

Di sini kita ambil contoh dua game terkenal yang dibuat dengan Python yaitu Flappy Bird dan Space Invaders. Install Python di laptop Anda terlebih dahulu, disarankan menggunakan cara yang paling gampang walau agak berat, yaitu paket Anaconda.

Menggunakan konsol sangat dianjurkan bagi Anda yang mahir dan cepat dalam mengetik. Di sini harus dipahami terlebih dahulu cara menangani virtual environment
di Python. Selain itu library-library pendukung harus diinstall juga, terutama pygame karena di sini kita coba menggunakan library tersebut.

Untuk mengedit bisa menggunakan IDLE, Sublime Text, Notepad, atau text editor lainnya. Langkah pertama dalam belajar adalah mencoba menjalankan (running) program tersebut, dilanjutkan dengan mengedit fungsi-fungsi tertentu, misal mengganti gambar/image tokoh, background, atau memindah fungsi tombol naik/turun/kiri/kanan dengan tombol baru.

Jupyter Notebook

Jika Anda pengguna Google Colab, ada baiknya menggunakan Jupyter Notebook karena memang IDE-nya yang tidak jauh berbeda. Ekstensi filenya pun sama (*.ipynb) yang berbeda dengan Python konsol (*.py). SIlahkan membuka Jupyter Notebook lewat Anaconda atau konsol. Untuk lebih cepat sepertinya konsol lebih cepat dan ringan. Arahkan folder kerja ke lokasi game dan ketik “jupyter notebook”. Pastikan fasilitas jupyter notebook tersedia di environment kita (di sini contohnya ‘base’) yang jika belum ada gunakan > pip install jupyter.

Mengingat jenis filenya yang berbeda maka terlebih dahulu kita membuat new file dilanjutkan dengan mengkopi isi file *.py ke dalam file Jupyter Notebook yang baru tersebut. Jalankan file sample, pastikan game berjalan dengan baik.

Coba mengganti beberapa fungsi game tersebut, misalnya tombol bergeraknya pesawat, atau mengganti background dan bentuk pesawatnya. Berikut video penjelasannya, semoga bermanfaat.