Arsip Kategori: Pasca Sarjana

Basis Data di Matlab

Tahun 2000 merupakan tahun perkenalan saya dengan Matlab. Dosen pengajar pengenalan pengaturan (dulu namanya mekanisme servo dan kontrol) rencananya akan memberikan seminar khusus di kampus. Sayangnya ternyata acara itu karena satu lain hal di-cancel. Rencananya saya akan menggunakan software itu untuk tugas akhir saya dalam mensimulasikan sistem suspensi. Apa boleh buat, terpaksa belajar sendiri.

Setelah membuka-buka Matlab ternyata banyak fasilitas-fasilitas menarik yang bisa diexplore, apalagi waktu itu Matlab 6 sudah muncul. Versi ini jauh lebih menarik dibanding Matlab 5, versi sebelumnya. Dari kedokteran, sains, bahkan ekonomi pun bisa memanfaatkan Matlab, walaupun orang informatika waktu itu kurang menyukai karena “terlalu mudah” atau “hanya mengandalkan toolbox” dibanding dengan bahasa c++, visual basic, pascal (sekarang Delphi) yang lebih laris dipasaran dan banyak dipakai pengembang. Efeknya, buku-buku terbitan Matlab waktu itu masih amat langka, ditambah lagi waktu itu internet masih barang mahal dibanding sekarang. Tapi bagi pengembang metode (bukan terapan) Matlab sangat menarik karena dengan cepat bisa mengeksekusi metode-metode rumit buatannya, karena kelamaan jika terlalu berfokus ke coding. Salah satu kelemahan Matlab sehingga dijauhi pengembang waktu itu adalah sulit diterapkan ke sistem basis data (DBMS). Sempat membuka sampel penggunaan basis data ternyata basis data yang digunakan tersimpan dalam format “mat” khusus Matlab, tidak dengan Access, MySql, dan sejenisnya. Untuk menghubungkannya harus mengkonversi dari DBMS tersebut ke Excel atau “dat” file agar bisa dimanipulasi Matlab.

Dengan Matlab saya banyak menerima dana hibah penelitian dari DIKTI untuk mengutak-atik Soft Computing dengan metode-metode terbarunya baik penerapan atau memodifikasi metode tersebut. Dari Jaringan Syaraf Tiruan hingga Algoritma genetika sudah saya gunakan, hingga akhirnya saya dipaksa melibatkan DBMS karena data yang besar (big data) dengan ukuran dua giga byte ke atas. Apalagi jika data yang akan dimanipulasi real time yang harus berubah-ubah terus. Untungnya Matlab 7 sudah memberikan fasilitas menghubungkan Matlab dengan basis data, waktu itu saya menggunakan ruby on rail sebagai interface yang menampilkan hasil manipulasi genetic algorithms ke web lewat PostgreSQL

Karena banyak yang menanyakan cara menghubungkan Matlab dengan DBMS, plus pemrograman visualnya (GUI) akhirnya saya tulis ke dalam buku yang baru terbit Februari 2016 kemarin.

Entah sudah tersedia di toko-toko buku terdekat atau belum saat ini. Kebanyakan pembeli menggunakan situs online dari penerbit informatika, link-nya berikut ini. Ada beberapa contoh kasus seperti enkripsi sederhana terhadap database, pengolahan citra digital (digital image processing) dan clustering dengan Fuzzy C-Mean. Kali ini saya menambahkan dengan CD. DBMS yang saya gunakan adalah Microsoft Access sebagai perwakilan aplikasi desktop dan MySQL sebagai perwakilan aplikasi berbasis Web dengan ODBC sebagai jembatan penghubung dari Matlab ke DBMS lewat windows.

Untuk membuat buku yang sempurna mungkin membutuhkan waktu yang cukup panjang, sementara para mahasiswa yang sedang menyelesaikan tugas akhir/skripsi/tesis dikejar waktu, ada baiknya buku yang ringkas dan sesuai kebutuhan tersedia di pasaran. Semoga bermanfaat, Amiin.

Iklan

Algoritma Genetika dengan Toolbox Matlab

Genetic Algorithms (GAs) digunakan untuk mencari nilai optimal (maksimum atau minimum) suatu fungsi. Fungsi itu dikenal dengan istilah fitness function, atau ada juga yang menyebutnya fungsi objektif. Sebelumnya optimasi dilakukan dengan cara matematis, kalau kita inget-inget lagi pelajaran SMA dengan menurunkan suatu persamaan dan disamadengankan dengan nol. Tetapi masalah muncul jika persamaan itu memiliki banyak nilai optimal, karena nilai optimal akan terjebak dalam lokal optimum. Contohnya adalah fungsi rastrigin dari Matlab yang memiliki banyak jebakan local minimum dan hanya ada satu global optimum (kayak tempat telor ya).

Ok, kita coba mengoptimasikan satu fungsi objektif dari penanya: y = 2*x(1)+3*x(2)+4*x(3)+4*x(4). Dengan constraint: 10<x(1)<20, 30<x(2)<40, 50<x(3)<60, 70<x(4)<80. Kayaknya susah. Sebelumnya, buat terlebih dahulu fungsinya di m-file. Praktisnya ketik saja edit fungsi jika kita mau membuat fungsi objektif itu bernama fungsi. Tekan “yes” jika ada pesan bahwa tidak ada m-file bernama “fungsi”. Berarti fungsi bernama fungsi itu tidak dimiliki oleh bahasa built-in bawan Matlab. Ketik fungsi y di atas di m-file editor yang baru saja terbuka.

Kok Cuma gitu? Ya iyalah, coba tes dengan x1, x2, x3, dan x4 berturut-turut 1,2,3, dan 4 di command window dengan mengetik y=fungsi([1 2 3 4]). Jawabannya harus 36 dan tidak ada pesan error. Oiya, ini harus benar, karena jika sampai sini tidak berhasil mengikuti ya dijamin ga bakal bisa terus ke algoritma genetik, tapi kalo hanya ingin membaca saja ya rapopo.

Seperti biasa, cara termudah mengoperasikan Matlab adalah dengan menggunakan toolbox yang tersedia. Untuk GAs, karena masuk dalam kategori optimization toolbox, gunakan fungsi optimtool di command window.

Setelah memilih jenis optimasinya (GAs), isi nama fungsi didahului @, jumlah variabel (4 variabel) dan perhatikan teknik mengisi bound yang sesuai persoalan. Di bagian kanan masih ada sebenarnya, tapi ga wajib. Centang pada isian plotting pada best fitness dan best individual sehingga ketika tombol “Start” ditekan, proses optimasi akan disertai pergerakan grafik yang interaktif. Oiya, tolong dicek benar atau tidak kalau itu nilai minimum. He he .. kayaknya ga perlu pake GAs saya juga bisa nebak, ya pasti batas bawah lah jawabannya (10, 30, 50, dan 70) soalnya fungsi kuadrat (membesar terus). Coba ganti fungsi yang lain.

Mengolah Data dengan Metode Analtytic Hierarchy Process (AHP)

Dulu sempat mengambil mata kuliah Decision Support System (DSS) dan memperoleh materi khusus AHP dan sekarang ternyata “butuh lagi”. Ketika membuka lagi folder-folder lama dan ternyata masih ada. Sayang softwarenya tidak bisa diinstal di laptop saya karena versi yang sekarang windows 64 bit. Untung ada yang “share” program aplikasi tersebut di internet, ya sudah saya “pinjam”.

AHP biasanya dipergunakan untuk memilih pilihan yang tepat dari kriteria-kriteria tertentu. Tetapi disertasi saya hanya membutuhkan berapa bobot yang tepat untuk menentukan goal-nya nanti, tidak dengan AHP melainkan algoritma tertentu. Oke lah, saya sebar kuesioner ke beberapa responden yang mengerti masalah urban, lingkungan, atau optimasi pengalokasian lahan. Kuesioner dibuat dengan menggunakan google form.

Buka expert choice dilanjutkan dengan memberi nama project yang akan dibuat di software tersebut. AHP ini idenya dicetuskan oleh Saaty dan Vargas tahun 2000, silahkan unduh sendiri jurnalnya. Berikutnya adalah kita masukan variabel-variabel pendukung keputusan di menu edit (Ctrl-H).

Setelah variabel-variabelnya dimasukan, isi data hasil kuesioner ke expert choice untuk mengetahui berapa bobot yang diperoleh berdasarkan jawaban dari responden. Berikutnya adalah mengisi data dari hasil kuesioner yang disebar. Tekan simbol 3:1 untuk mengisi pairwise comparison.

Isi satu persatu dengan hati-hati karena excel hasil jawaban dari google form kurang rapi dan dikhawatirkan jawaban tertukar. Biasanya agar tidak tertukar saya mengurutkan variabel dan tiap pergantian variabel saya batasi dengan warna.

Pilih responden yang mengisi kuesionar dengan benar sesuai dengan formatnya. AHP melarang nilai konsistensi yang kurang dari 0.1. Konsistensi bisa saja terjadi jika banyak variabel yang terlibat. Maksud dari konsistensi adalah misal jika A > B dan B > C maka C > A tentu saja tidak konsisten, walaupun bisa saja terjadi (wanita berani dengan kucing, kucing berani dengan tikus, tetapi wanita takut dengan tikus, misalnya). Klik simbol ABC, maka kita akan menemukan skala, dan sebaiknya kuesioner menyesuaikan dengan skala ini.

Jadi jika responden menjawab very strong, maka kita pilih nilai 7, equal nilainya satu, dan seterusnya. Jawab untuk satu responden hingga menghasilkan skor di bawah ini misalnya.

residential

Perhatikan konsistensinya lebih besar dari 0.1, tetapi jangan khawatir, ini masih responden pertama, kita masukan responden yang lainnya. Tetapi dicatat saja, jika konsistensi akhir di atas 0.1 maka responden ini menjadi kandidat untuk tidak diikutsertakan. Jangan lupa, arah skornya ke kanan apa ke kiri (tulisan angka BERWARNA MERAH atau HITAM), karena salah geser, ke arah lawannya. Lanjutkan hingga seluruh responden dimasukan. Klik simbol participant terlebih dahulu (gambar dua orang) di bagian menu, tambahkan berapa responden yang akan dimasukan ke expert choice.

Pilih participant yang akan dimasukan skor hasil kuesionernya. Pilih P2 di bagian menu participant. Lanjutkan dengan mengisi data seperti langkah sebelumnya. Untuk responden kedua, nilai agak mendingan (konsistensi 0.17).

residential

Combine data Anda baik (both data and judgment) untuk menghasilkan total bobot seperti gambar di atas. Dan coba jangan sampai inconsistency di atas 0.1, jika lebih buang yang scor inconsistency-nya buruk (tapi jangan utak-atik data ya, karena melanggar prinsip riset ilmiah – namanya fabrikasi). Karena Expert choice, maka tidak perlu data sampel yang banyak, tetapi yang mengisi adalah pakar di bidangnya.

Prediksi dengan Jaringan Syaraf Tiruan (Dasar-dasar)

Jaringan Syaraf Tiruan (JST) merupakan metode komputasi yang meniru perilaku kerja otak makhluk hidup dalam merespon masukan. Dengan data berupa variabel-variabel masukan, JST memproses kemudian menghasilkan output tertentu sesuai dengan proses pembelajaran sebelumnya. JST telah banyak diterapkan di berbagai bidang antara lain:  kedokteran, keuangan, sistem kontrol, data mining, dan lain-lain. Lalu muncul pertanyaan, apakah bisa juga digunakan untuk prediksi?

Secara filosofis karena JST adalah usaha untuk meniru otak, maka tentu saja diharapkan dapat digunakan untuk prediksi karena otak kita juga bisa memprediksi sesuatu kan? Situs yang cukup baik menurut saya dalam menjelaskan peramalan dengan JST adalah berikut ini. Atau berikut penjelasannya bagi yang malas baca tulisan panjang ditambah bahasa Inggris pula.

Sebelumnya kita bahas terlebih dahulu JST yang tidak digunakan untuk meramal (forecast), misalnya penentuan harga baru berdasarkan jumlah penjualan dan pesanan. Jika penjualan meningkat dan pesanan meningkat sekian, maka harga baru naik sekian. Jika penjualan menurun dan pesanan menurun sekian maka harga baru turun sekian. Jadi JST akan menerima masukan jumlah penjualan periode tertentu dan berapa pesanan baru, maka JST akan menyarankan untuk menaikan atau menurunkan harga dengan prosentase tertentu berdasarkan informasi data yang lalu. Jadi jika perusahaan tersebut ditinggal oleh manajer pemasaran karena gaji kecil, ga dapet THR, ga dihargai, dll, manajer baru tinggal memakai data lama untuk mengambil keputusan ke depan.

Sementara itu peramalan menggunakan data lama sebagai variabel masukan, biasanya periodik, perbulan atau pertahun, yang tentu saja banyak (tidak hanya satu tahun/bulan). Untuk kasus penentuan harga barang, JST bisa digunakan untuk meramalkan kenaikan harga di masa yang akan datang. Termasuk variabel-variabel yang sebelumnya jadi masukan juga bisa diramal untuk ikut andil memprediksi yang dikenal dengan istilah variabel intervensi (intervening). Berikut satu ilustrasi yang cukup baik dari referensi yang disebutkan di awal.

Jika diperhatikan ada lima input untuk memprediksi satu keluaran. Tentu saja jumlah input harus tetap, jika ketika pelatihan ada lima tahun sebelumnya untuk memprediksi, maka JST akan error jika hanya empat atau tiga masukan yang tersedia. Salah satu kehebatan JST dibanding regressi yang lain adalah dengan mudah dapat ditambah variabel intervensi seperti gambar berikut. Kalau di kasus contoh sebelumnya misalnya jumlah penjualan dan pesanan baru yang masuk.

Disebutkan bahwa jumlah variabel intervensi (intervention indicator) jangan terlalu banyak karena akan mengganggu masukan yang lain yang utama (data history periode yang lampau). Untuk penerepannya dapat Anda lihat di postingan saya yang lain. Untuk yang lagi skripsi atau tesis tentang peramalan, tetap semangat !!!

Referensi:

Writing Genetic Algorithms in Matlab

Genetic Algorithms (GAs) toolbox is available when we install Matlab, but some cases need special treatment to our system. It may be related to constraint, and may be combination to other algorithms. Some students when doing their thesis or project need some manipulations to the algorithms. There are many books give additional source code for GAs. But the main source for me is an internet. We can find a lot of source code in Matlab by using a simple google. For example sivanandam in his book give a code in matlab but there are so many additional script that must be available first in order to make our code running well. One site that may be important to GAs user is here. One simple GAs may be need some m-file scripts like this.

Of course you can just type “optimtool” in command window, and choose GAs as your basis of optimization. But understanding something inside it I think very important, how selection, crossover, etc. so we can manipulate them for giving better efficiency, accuracy and speed.

Mencari Pareto Front dengan Kode Matlab

Lanjutan dari postingan terdahulu. Setelah surfing di internet, akhirnya ketemu juga program untuk menentukan titik pareto front di titik-titik hasil optimisasi di situs ini. Kode-nya dibuat oleh Yi Cao dari Cranfield University pada tahun 2007 yang lalu. Sayangnya gabungan hex file dengan m-file. Letakan dalam satu folder setelah diekstrak, dan jalankan kode ini di command window:

  • X = rand(100,2);
  • front = paretofront(X);
  • hold on;
  • plot(X(:,1),X(:,2),’.’);
  • plot(X(front, 1) , X(front, 2) , ‘r.’);
  • hold off
  • grid on
  • xlabel(‘X_1’);
  • ylabel(‘X_2’);
  • title(‘Pareto Front of a set of random points’);

Prinsipnya adalah, fungsi paretofront akan mencari titik-titik pareto dimana tidak ada titik lain yang kedua fungsi objektif lebih kecil dari titik tersebut (kalau hanya satu masih diperbolehkan). Pada grafik, titik-titik yang merupakan pareto front diplot berwarna merah.

Note: Untuk mencari optimasi maximum tinggal mengalikan X dengan -1 di fungsi paretofront

  • front = paretofront(X*-1);

Membuka Model yang Tersimpan di ArcGIS

Memang kalau sudah bermain di level aplikasi, banyak keanehan-keanehan yang terjadi yang memang disebabkan oleh keterbatasan manusia dalam membuat suatu aplikasi. Tidak mungkin aplikasi dibentuk dengan sempurna. Hanya tuhanlah yang sempurna, begitu juga dengan aplikasi ArcGIS. Tidak mungkin bisa memuaskan semua penggunanya. Salah satu servis terbaru di ArcGIS yang sangat membantu para perancang untuk mempresentasikan hasil olahnya adalah “MODEL”. Di sini tiap proses direpresentasikan dalam bentuk block diagram. Setelah dibentuk, model bisa dijalankan dengan menekan tombol run.

Tetapi karena masih awam, sudah capek-capek membuat model ketika di-close, saya kesulitan memanggilnya karena sudah terbiasa dengan mendobel klik file-nya. Repotnya lagi, terkadang kita tidak tahu dimana lokasi filenya. Oiya, ArcGIS memiliki aturan, kita harus memasukan direktori kerja kita via Arc Catalog, di sanalah file-file kita tersimpan, yang secara default di folder “user”, C:\Users\toshiba064\Documents\ArcGIS. Untuk membukanya dapat dilakukan dengan cara membuka arc catalog, cari file yang disimpan.

Setelah itu, jangan klik “Open” karena model tidak terlihat, melainkan pilih “Edit”. Di situlah yang menurut saya anehnya, biasanya sih klik open seperti pada Matlab. Tampak proses reclassify, clip serta raster to polygon dengan weighted sum untuk menghasilkan nilai optimal. Apa itu? Ya belajar pelan-pelan dulu ArcGIS untuk optimasinya.

Simple Pareto Front dengan Matlab (Multiobjective)

Kalau dulu multi objective diselesaikan dengan memberi bobot terhadap tiap-tiap fungsi objektif atau dengan hierarki, saat ini teknik tersebut mulai ditinggalkan dan diganti dengan non-dominate objectif atau dikenal dengan istilah pareto, yang diusulkan pertama kali oleh pareto pada tahun 1896. Jadi kita tidak memaksakan memberi bobot terhadap fungsi-fungsi objektif dan memberikan range tertentu terhadap hasil optimasi. Range tersebut makin luas makin baik (wide spread). Misalnya penjelasan yang dapat dilihat di situs ini, kita coba jalankan dengan Matlab.

Ada dua fungsi objektif yang akan dicari nilai optimalnya (biasanya nilai minimum). Perhatikan dua grafik ini yang memiliki dua nilai minimum tergantung fungsi mana yang digunakan.

Untuk melakukan optimasi terhadap dua objektif fungsi di atas (fungsi garis merah dan garis biru). Sebelumnya buka matlab editor untuk membuat satu fungsi baru dengan mengetik di command window:

>>edit simple_multiobjective

Ternyata Matlab sudah membuatkan fungsi tersebut, sepertinya untuk demonstrasi optimasi multiobjektif. Untuk mengoptimasinya, fungsi yang digunakan di Matlab adalah gamultiobj. Ketik atau copas kode ini ke command window:

  • FitnessFunction = @simple_multiobjective;
  • numberOfVariables = 1;
  • [x,fval] = gamultiobj(FitnessFunction,numberOfVariables);

Di sini disebutkan jumlah variabel 1, yaitu x saja. Kemudian di sebelah kiri sama dengan ada x dan fval sebagai hasil dari optimasinya. Untuk melihat isinya dapat kita ketik di command window x dan fval tersebut. Apa hasilnya?

Hasilnya adalah matlab memberikan beberapa hasil optimasi (berupa range) kombinasi dari cenderung optimal di fungsi satu hingga ke optimal di fungsi dua. Ketik di command window untuk melihat grafiknya:

>> plot(fval(:,1),fval(:,2),’*’)

Hasilnya berupa grafik pareto dari nilai optimal dua fungsi tersebut. Di sini bobot bervariasi dari kecenderungan ke fval pertama hingga ke fval kedua. Fval adalah nilai optimal fungsi-fungsi fitness nya.

Bagaimana jika tiga fungsi objektif? Tentu saja kalau ingin divisualisasikan nanti berupa grafik tiga dimensi. Bagaimana jika empat objektif? Seperti disertasi saya, tentu saja sulit digambarkan. Matlab juga menyediakan visualisasi yang bagus (running ketika program berjalan) dengan memasukan kode di command windows sebagai berikut:

  • A = []; b = [];
  • Aeq = []; beq = [];
  • lb = -1.5;
  • ub = 0;
  • x = gamultiobj(FitnessFunction,numberOfVariables,A,b,Aeq,beq,lb,ub);
  • options = gaoptimset(‘PlotFcns’,{@gaplotpareto,@gaplotscorediversity});
  • gamultiobj(FitnessFunction,numberOfVariables,[],[],[],[],lb,ub,options);

 

Bikin Buku Lagi .. “Pemrograman Database dengan Matlab”

Menganggur saat bulan puasa ternyata enak juga buat menulis. Saat berada di “dunia” sendiri tiba-tiba adzan maghrib pertanda waktu berbuka puasa. Setelah berbuka, refresh lagi, dan siap meracik tulisan lagi. Setelah lebaran, jadilah satu buku “Pemrograman Basis Data dengan Matlab”. Belum tentu itu judulnya karena terkadang penerbit menyarankan untuk mengganti judul dengan judul yang menarik dari sisi pemasaran. Begitulah, harus terjadi kerjasama yang baik antara penulis dengan pemasaran, jika tidak, sudah dapat dipastikan buku tersebut tidak laku.

Sebenarnya buku yang sedang direview oleh penerbit (semoga lolos) tersebut berawal dari pertanyaan-pertanyaan di blog ini. Lalu muncul ide bagaimana jika dibuat dalam satu paket buku beserta contoh-contoh aplikasinya. Apalagi banyak yang masih sangsi bahwa Matlab bisa menghasilkan aplikasi yang terhubung dengan basis data seperti bahasa-bahasa yang lain seperti visual basic, java, dan bahasa pemrograman visual lainnya. Matlab selama ini dipuji karena tangguh di sisi komputasi. Bukan tangguh sih sebenarnya, tetapi mudah dan user friendly. Jadi jika bisa mengelola database, maka perancang bisa dengan baik menghubungkan komputasi teknis, soft computing, data mining, dengan basis data yang dimiliki. Database Management System (DBMS) yang dipilih adalah Microsoft Access sebagai perwakilan DBMS desktop dan MySQL untuk DBMS berbasis web. Sepertinya cukup karena keduanya merupakan DBMS yang paling banyak digunakan saat ini, terutama mahasiswa.

Untuk contoh aplikasi, dipilih kasus-kasus yang sering dijadikan tugas akhir (skripsi atau thessis) para mahasiswa yaitu data mining dengan clustering, enkripsi database, pengolahan citra, yang dirakit tentu saja dengan GUI. Tulisan diakhiri dengan lampiran-lampiran yaitu pembuatan executable program dan teori dasar struktur data di Matlab yang sangat penting karena proses perpindahan dari DBMS ke Matlab untuk diproses dan sebaliknya.

Seperti biasa, operasi dasar pada pemrograman basis data dipelajari yang dikenal dengan istilah CRUID (create, read, update, insert, dan delete). Pembuatan grafik setelah proses clustering dan pengolahan citra digital yang kemudian disimpan ke database dibahas dengan sederhana. Jika tombol “clustering” ditekan maka tiap record di database data langsung terupdate masuk kluster yang mana (kluster 0 atau 1). Tentu saja Anda bisa mengembangkan menjadi lebih dari dua kluster. Tanda tangan yang tadinya image kini dirubah menjadi biner (0 dan 1) yang bermanfaat untuk mengurangi kapasitas penyimpanan (dibandingkan penyimpanan dalam bentuk image utuh) yang biasanya diterapkan di perbankan.

Sepertinya pengolahan data dengan notepad atau excel yang bersifat offline dari database sudah mulai diganti dengan sistem yang online karena perubahan data terjadi secara cepat dengan jumlah yang besar (big data). Semoga buku seharga beberapa bungkus rokok tersebut segera terbit (whee lah …). Amiin.

How to Draw a Diagram using Draw IO?

Draw IO is a free web-based tool for drawing a model such as Entity Relation Diagram (E-R Diagram), Flow chart, Data Flow Diagram (DVD), Unified Modeling Language (UML), etc. You can access it at www.draw.io in start using it without installation. Immediately you will be asked the location for saving the xml file, for example you use your harddrive, so yo have to choose Device.

And please click the “create a new diagram” or “open existing diagram” if you want to open a xml file of your diagram that have drawn before. Before drawing, this application will ask you to create the name of your diagram.

And let your creativity flows, and for exercise, try to draw E-R diagram like this.

Save your figure by clicking the menu save and if you want to capture for your document (word, power point, etc) you have to download it into image, xml, and other file support. So far, I like to download as GIF than JPEG or others. Because it give a good resolution that you can see below. Ok .. good luck.

Georeferencing dengan Matlab – bagian 2

Untuk memastikan bahwa hasil Georeferencing kita sesuai dengan koordinat latitude dan longitude, kita bandingkan hasil optimasi dengan google map. Pertama-tama buat koneksi dengan database WebGIS, misalnya dengan nama ODBC ‘aphb’. Lihat cara-cara buat ODBC di postingan yang lalu.

Di baris 131 dan 132 diperoleh titik optimum yang berhasil dihitung dengan algoritma genetik. Selanjutnya di baris 133 dikonversi menjadi koordinat global latitude dan longitude yang akan dikirim ke database postgreSQL. Baris 135 membuat koneksi yang dilanjutkan dengan mempersiapkan lokasi field yang akan di-insert. Terakhir di baris 140 dilakukan proses inserting ke database.

Perhatikan hasil running optimasi di DesktopGIS dengan Algoritma Genetik, diperoleh beberapa titik optimum. Di sini kita baru mengkonversi satu titik optimum karena belum diketahui akurasinya. Jika sudah akurat, baru diterapkan di seluruh titik optimum.

Di sini diperlukan kejelian mata untuk mengarahkan lokasi google map dengan lokasi di DesktopGIS. Setelah itu diketahui akurasinya. Perhatikan gambar di bawah, tampak titik di google map sedikit meleset dari lokasi optimum hasil hitungan di desktopGIS dan ini harus diperbaiki dengan mengeset kembali fungsi konversi.

Jika diperhatikan, sepertinya base latitude dan longitude terlalu jauh sehingga harus digeser kekiri dan ke bawah agar tepat di lokasi yang ditunjukkan oleh panah merah di atas. Lihat video di bawah ini untuk lebih jelasnya:

Ok .. done.

Instruksi SELECT pada SQL – Bagian 2

WHERE Clause

Seperti pada tulisan sebelumnya (bagian 1), jika kita akan melakukan query terhadap nama belakang dimana huruf keduanya ‘a’ maka dapat kita lakukan dengan bantuan garis bawah ‘_’. Gunakan WHERE dengan kata LIKE untuk lebih spesifik lagi.

Kita juga bisa menambahkan logika boolean seperti AND atau OR untuk dua kondisi LIKE seperti misalnya nama belakang di huruf kedua ‘a’ dan nama depan diawali ‘r’.

query_where

CONCATENATION

Syntax ini berfungsi untuk menggabungkan beberapa kolom menjadi satu kolom. Simbol yang digunakan adalah ||. Misalnya kita akan menggabungkan nama pertama dengan nama belakang dari tabel student.

GROUP BY dan COUNT()

Syntax ini untuk melakukan proses agregasi dari aksi filter sebelumnya. Misalnya kita ingin mengetahui berapa banyak Course yang diambil oleh seorang siswa, misalnya siswa dengan ID ‘st115996’.

HAVING Clause

Jika hasil proses GROUP BY ingin difilter lagi dapat kita gunakan klausa HAVING. Misalnya kita diminta menarik data jumlah Course yang memiliki jumlah kredit = 3. Jadi setelah yang punya kredit = 3 diperoleh dilakukan proses ‘count’ berapa jumlah course-course tersebut.

SUB-QUERY

Sub query adalah query di dalam query, biasanya dalam klause:

  1. WHERE
  2. FROM
  3. SELECT

Kata kunci yang digunakan adalah IN. Misal kita ingin mengetahui student_ID yang mengambil course. Dengan kata lain yang tidak mengambil course tidak kita ambil.

Ada satu soal latihan nih,

EXERCISE

  • A student is required to take 2 courses (4 credits) in the field of Technology
  • Management and should be offered by SET or SOM only.
  • Typically the courses for Technology Management have the word Management or
  • Technology or Technologies mentioned in the course name.
  • What choices does the student have? List Department, CourseName, Credits.
  • Use group by and having clause

Selamat Mencoba !

Delete SQL dengan Matlab

Mudah-mudahan mas yang menanyakan masalah DELETE data dengan Matlab sudah menemukan jawaban. Kalau belum, semoga postingan ini bermanfaat.

Berbeda dengan instruksi INSERT dan SELECT yang memasukkan data dan menampilkannya, instruksi DELETE harus didefinisikan dengan jelas record yang akan didelete. Untuk instruksi INSERT dan SELECT telah diuraikan pada postingan saya yang lalu ‘Koneksi Matlab dengan Sistem Basis Data‘. Berikutnya kita coba dengan instruksi DELETE.

Pastikan Anda sudah mengkoneksikan ODBC dengan tabel yang berisi X, dan Y yang berisi bilangan numerik.

Jika masih kosong, tambahkan tabel tersebut dengan instruksi ini:

>> insert(Conn,’lokasi’,data,[1,3])

>> insert(Conn,’lokasi’,data,[1,4])

>> insert(Conn,’lokasi’,data,[2,4])

>> insert(Conn,’lokasi’,data,[3,4])

>> Results=fetch(Conn,’select * from lokasi’)

Results =

[1] [3]

[1] [4]

[2] [4]

[3] [4]

Saya menggunakan tabel ini untuk menyimpan koordinat longitude dan latitude suatu lokasi. Dengan instruksi SELECT diketahui data sebagai berikut:

Database membutuhkan lokasi mana yang ingin dihapus. Misal kita ingin menghapus data pada tabel lokasi yang memiliki field x = 1, maka kita membutuhkan instruksi SQL Query ini:

>> deleteQuery = [‘delete from ‘,Conn.Instance,’ where’,’ x’,’ =’,’1′,’;’];

Dilanjutkan dengan mengeksekusinya:

>> hapus=exec(Conn,deleteQuery);

Jika Anda melihat isi dari lokasi diperoleh data bahwa seluruh record dengan field x =1 hilang.

>> Results=fetch(Conn,’select * from lokasi’)

Results =

[2] [4]

[3] [4]

Bagaimana jika field y yang dihapus? Mudah saja ganti saja ‘x’ dengan ‘y’, misal y=4 akan dihapus.

>> deleteQuery = [‘delete from ‘,Conn.Instance,’ where’,’ y’,’ =’,’4′,’;’];

Dilanjutkan dengan mengeksekusinya:

>> hapus=exec(Conn,deleteQuery);

>> Results=fetch(Conn,’select * from lokasi’)

Results =

[]

Tampak data dengan y=4 terhapus. Bagaimana jika ingin mengosongkan seluruh isi tabel? Gunakan Query: DELETE FROM <nama_tabel>;

 

 

Instruksi SELECT pada SQL – Bagian 1

Hari kedua tutorial Oracle membahas tentang instruksi SELECT untuk mengambil data dari database yang telah dibuat lewat mekanisme Data Definition Language (DDL). Instruksi SELECT sendiri masuk dalam kategori Data Manipulation Language (DML). Untuk yang belum meninstal SQL dapat dilihat pada tulisan sebelumnya untuk instalasi dan juga cara mengoperasikan DDL.

Perlu diketahui Oracle Database versi Express hanya memiliki satu database saja, oleh karena itu kita bersihkan terlebih dahulu tabel-tabel yang telah dibuat pada praktek sebelumnya. Gunakan erase_table untuk membersihkannya. Jangan jalankan semua, melainkan perblock dengan cara setelah copy-paste, sorot/blok instruksi yang baru saja dipindahkan, klik tombol atau dengan menekan F5.

Instruksi SELECT *

Jika sudah lanjutkan dengan membuat tiga tabel yaitu Student, Course, dan Student_Course add_tables_and_records Perhatikan setiap menjalankan instruksi SQL pastikan berjalan dan tanpa pesan kesalahan. Jika sudah maka Anda telah berhasil membuat tiga tabel yang akan kita utak-atik dengan instruksi terkenal SQL SELECT. Untuk melihat isi seluruh tabel, gunakan instruksi SELECT *;

  • SELECT * from Student;
  • SELECT * from Course;
  • SELECT * from Student_Course;

Jika tidak ingin seluruh Field ditampilkan, pada instruksi SELECT, ganti * dengan field-field yang Anda inginkan dengan disekat koma.

SELECT Student_ID, Last_name FROM Student;

CONDITIONAL CLAUSE

Terkadang kita ingin menampilkan yang lebih spesifik lagi, tidak hanya sekedar field-fieldnya. Oleh karena itu kita memerlukan Conditional Clause yang tersedia di SQL yakni:

  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

Berikut ini kita akan mengambil data dari tabel Student yang memiliki nama belakang diawali ‘W’ dan memiliki nama tengah (Middle Initial).

SELECT * FROM Student WHERE (Last_Name LIKE ‘W%’) AND (MI IS NOT NULL);

Cek apakah ada error, oiya, jangan lupa gunakan tanda petik satu (‘) dari keyboard Anda, entah mengapa jika copas dari blog dianggap bukan tanda petik satu oleh SQL. Gunakan teknik garis bawah untuk menentukan letak huruf ke berapa dari field yang kita inginkan.

(Bersambung).

Many to Many Relationship Example

After installing oracle database and oracle sql developer (https://rahmadya.com/2014/09/05/instal-oracle11g/), now we try to use it. Many to many relationship sometimes said M:N is happened if every member of an entity has many members related to other entity. For example we have relation Student and Course. We have relationship Student with Course that every student could take more than one courses and every course has a lot of student who take it.

Open your SQL Developer to practice how to create that kind of relation. First create the Student and Course entity respectively. Use CREATE table:

  • CREATE TABLE Student(
  • Student_ID CHAR(10) CONSTRAINT StudentID_PK PRIMARY KEY,
  • First_Name CHAR(20) NOT NULL,
  • MI CHAR(1) NULL,
  • Last_Name CHAR(20) NOT NULL);

This will create a Student table with attribute/field Student_ID, First_Name, and Last_Name. The number inside the bracket “(” is number of character (look at Middle Name that only limited to one character). There some constraint such as PRIMARY KEY and NOT NULL. Add some record using INSERT statement:

  • INSERT INTO Student (Student_ID, First_Name, MI, Last_Name) VALUES (‘st115995’, ‘Rahmadya’,’T’,’Handayanto’);
  • INSERT INTO Student (Student_ID, First_Name, MI, Last_Name) VALUES (‘st115996′,’James’,’D’,’Brynt’);
  • INSERT INTO Student (Student_ID, First_Name, MI, Last_Name) VALUES (‘st115997’, ‘John’,”,’Travis’);
  • INSERT INTO Student (Student_ID, First_Name, MI, Last_Name) VALUES (‘st115998′,’Brian’,’L’,’Walk’);
  • INSERT INTO Student (Student_ID, First_Name, MI, Last_Name) VALUES (‘st115999’, ‘Susan’,”,’Tarson’);

If we want to retrieve the record that we have just insert, try to use SELECT * from Student;

Use the similar SQL Command to create a Course table with attribute Course_ID, CourseName, Credit, and Department. Use Course_ID as a primary key.

  • CREATE TABLE Course(
  • Course_ID CHAR(10) CONSTRAINT CourseID_PK PRIMARY KEY,
  • CourseName Char(50) NOT NULL,
  • Credits INTEGER NOT NULL,
  • Department CHAR(20) NOT NULL);

Then, Add some records e.g:

  • INSERT INTO Course (Course_ID, CourseName, Credits, Department) VALUES (‘AT72.01′,’Database Management System’, 3,’CSIM’);
  • INSERT INTO Course (Course_ID, CourseName, Credits, Department) VALUES (‘AT72.03′,’E-Business Development’, 3,’CSIM’);
  • INSERT INTO Course (Course_ID, CourseName, Credits, Department) VALUES (‘AT72.04′,’Decision Support Technologies’, 3,’CSIM’);

Because M:N relationship, when we convert from ER-Diagram into Relational Table we have to create one relation that connect the student to course, for example we name it Student_Course table.

  • CREATE TABLE Student_Course (Student_ID CHAR(10), Course_ID CHAR(10));
  • INSERT INTO STUDENT_COURSE (Student_ID, Course_ID) VALUES (‘st115996′,’AT72.01’);
  • INSERT INTO STUDENT_COURSE (Student_ID, Course_ID) VALUES (‘st115996′,’AT72.03’);
  • INSERT INTO STUDENT_COURSE (Student_ID, Course_ID) VALUES (‘st115997′,’AT72.01’);
  • INSERT INTO STUDENT_COURSE (Student_ID, Course_ID) VALUES (‘st115997′,’AT72.04’);

We have a simple Student_Course table with four students who enroll the class. This table has not used relation between student and course. Therefore we have to add foreign key from Student and Course table using ALTER statement.

  • ALTER TABLE Student_Course ADD CONSTRAINT CourseID_FK FOREIGN KEY (Course_ID) REFERENCES Course (Course_ID);
  • ALTER TABLE Student_Course ADD CONSTRAINT StudentID_FK FOREIGN KEY (Student_ID) REFERENCES Student (Student_ID);

Do we been allowed to insert duplicate foreign key? For example a student takes many courses? Test using this INSERT example:

  • INSERT INTO STUDENT_COURSE (Student_ID, Course_ID) VALUES (‘st115996′,’AT72.01’);
  • INSERT INTO STUDENT_COURSE (Student_ID, Course_ID) VALUES (‘st115996′,’AT72.04’);

We need a primary key to identify the transaction of student who make an enrollment.

ALTER TABLE Student_Course ADD CONSTRAINT Student_ID_Course_ID_PK PRIMARY KEY (Student_ID, Course_ID);

The unique attribute sometimes needed if we avoid the similar record that different primary key. For example we make the course_name unique.

  • ALTER TABLE Course ADD CONSTRAINT CourseName_uk UNIQUE(CourseName);

For example we add record that violate this Unique constraint.

  • INSERT INTO Course (Course_ID, CourseName, Credits, Department) VALUES (‘AT72.10′,’Database Management System’, 3,’CSIM’);

You will see an error on it. That’s it.