ADSP-01: Pendahuluan Algoritma, Struktur Data, & Pemrograman


Code Lesson ADSP-01

Algorithms, Data Structures, and Programming (ADSP)
Bagian dari Combined Module: Pendahuluan High Performance (Pemrograman Parallel) for Data Science (HPDS)

Outline ADSP-01:

  1. Video ADSP-01
  2. Bahasa Pemrograman Data Science
  3. Sejarah Python
  4. Filosofi Python
  5. Python Karakteristik/Properties
  6. Python Distros
  7. Installations
  8. IDE VS Jupyter Notebook
  9. Basic Syntax: print, input, if, for, while
  10. List, Tuple, Set, Dictionary
  11. Code Lesson ADSP-01
  12. Referensi Tambahan
  13. Beberapa Kelemahan Python
“Simplicity is prerequisite for reliability.” — Edsger Dijkstra

Code dari lesson ini dapat di akses di Link berikut (wajib login ke Google/Gmail): Code ADSP-01
Di link tersebut anda langsung bisa merubah code dan menjalankannya. Keterangan lebih lanjut di Video ADSP-01.
Sangat disarankan untuk membuka code dan video "side-by-side" untuk mendapatkan pengalaman belajar yang baik. SIlahkan modifikasi (coba-coba) hal lain, selain yang ditunjukkan di video untuk mendapatkan pengalaman belajar yang lebih mendalam. Tentu saja juga silahkan akses berbagai referensi lain untuk memperkaya pengetahuan lalu diskusikan di forum yang telah disediakan.

"Side-by-Side": Ilustrasi bagaimana menggunakan code dan video dalam pembelajaran di tau-data. untuk mendapatkan pengalaman belajar yang baik.

Video Lesson ADSP-01

https://youtu.be/vJE24B0kHRI
Link ke Video di youtube.

Bahasa Pemrograman Data Science & Big Data

Bahasa pemrograman adalah salah satu tools utama untuk dapat melakukan automatisasi penyelesaian masalah data science setelah kita optimasi penanganan data dan pembuatan model/algoritma. Menggunakan struktur data yang tepat dan paradigma pemrograman yang bersesuaian, sebuah program dapat menghasilkan sebuah solusi yang bermanfaat bagi banyak orang. Ada beberapa kriteria yang biasanya diperhatikan dalam memilih sebuah bahasa pemrograman, diantaranya:

  1. Learning Curve: Seberapa cepat kita bisa mempelajari bahasa pemrograman tersebut.
  2. Performa dan dukungan komunitas.
  3. Open Source (regularly updated and free).
  4. Acceptance (penerimaan) oleh Industri.
  5. Device & Cloud Development support.
  6. Efisiensi dan Scalability.

Dari beberapa kriteria ini untuk saat ini Python adalah salah satu bahasa pemrograman yang dipandang paling cocok, terutama di bidang data science dan Big Data. Sebagai contoh Gambar 1 adalah data dari Business Broadway yang merupakan hasil sebuah poll di Kaggle tentang bahasa pemrograman yang biasa di gunakan dalam Machine Learning atau Data Science.

Gambar 1. Popularitas Python sebagai bahasa pemrograman untuk Machine Learning dan Data Science.

Terlepas dari popularitas Python, beberapa sumber menyebutkan bahwa performa Python tidak mumpuni. tau-data melakukan sebuah benchmark sederhana (baca detail disini) untuk membandingkan/menguji performa beberapa bahasa pemrograman populer untuk data science. Gambar 2 memperlihatkan bahwa Python memiliki performa yang cukup baik dibandingkan bahasa pemrograman lain seperti R dan Matlab. Bahkan jika program Python di compile (yes we can do that, baca disini) performanya sebanding atau bahkan lebih baik jika dibandingkan dengan compiler lain.

Gambar 2. Perbandingan Python dengan beberapa bahasa pemrograman lain di beberapa operasi dasar.

Python digunakan untuk berbagai aplikasi ternama seperti Google, Facebook, Instagram, Netflix, dsb [sumber]. Namun demikian perlu diingat bahwa:

Tidak seperti apa yang biasanya terjadi di dunia akademis, dalam aplikasi dunia nyata (industri) hampir tidak pernah sebuah project data science atau big data hanya menggunakan sebuah bahasa pemrograman saja.

Sejarah Singkat Python

Python (versi 0.9) diperkenalkan pertama kali pada February 1991 oleh Guido van Rossum [Link]. Sedangkan Python versi 2.0 diperkenalkan pada October 2000 dan mendapat response positif dari komunitas developer. Python 2 cukup populer di berbagai Distro Linux dan website, dan baru saja mengakhiri "masa bakti"-nya di Juli 2020. Python 3 diperkenalkan mulai Desember 2008 dan hingga saat tulisan ini dibuat menjadi versi terkini Python. Gambar 3 mengilustrasikan sejarah python dari waktu ke waktu.

Gambar 3. Sejarah singkat Python, klik image untuk melihat gambar dengan ukuran lebih besar. Image Source [1] [2]

Filosofi (Zen of) Python

Filosofi dasar Python, atau biasa disebut Zen of Python adalah:

  • Beautiful is better than ugly
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Flat is better than nested.
  • Sparse is better than dense.
  • Readability counts.
  • Special cases aren't special enough to break the rules.
  • Although practicality beats purity.
  • Errors should never pass silently.
  • Unless explicitly silenced.
  • In the face of ambiguity, refuse the temptation to guess.
  • There should be one -- and preferably only one -- obvious way to do it.
  • Although that way may not be obvious at first unless you're Dutch.
  • Now is better than never.
  • Although never is often better than *right* now.
  • If the implementation is hard to explain, it's a bad idea.
  • If the implementation is easy to explain, it may be a good idea.
  • Namespaces are one honking great idea -- let's do more of those!

Namespace adalah ruang yang digunakan oleh Python di memory untuk menyimpan koleksi symbolic names seperti nama-nama variable, fungsi, dan object lainnya yang di definisikan dalam code kita. Ada beberapa macam Namespace di Python, contoh dan jenisnya dapat dilihat pada Gambar 4.

Gambar 4. Python namespace [image source [1] & [2] ]

Karakteristik/Properties Python

Python disukai karena beberapa hal, diantaranya:

  • Multiplatform, artinya sebuah code dapat dijalankan di beberapa OS yang berbeda: Linux, Windows, atau Macintosh (tidak disarankan).
  • Open Source (baca disini) : diupdate lebih cepat ketimbang software komersil seperti Matlab/SAS/SPSS.
  • Dapat dijalankan di beberapa device: PC, IoT Devices/SBC (Small Board Computers).
  • Portable: dapat di copy-paste (pindahkan) tanpa harus registrasi ke system OS.
  • Secara umum merupakan interpreter (artinya eksekusi program dijalankan baris per baris seketika), namun dengan sangat mudah dirubah ke JIT (just-in-Time) compiled code, atau bahkan compiler ke executable!.
  • Dapat digunakan untuk aplikasi desktop, web, dan bahkan mobile application untuk android dan IOS!.
  • Memiliki library (module) yang lengkap, baik untuk Data Science, maupun driver ke beberapa database serta device. Misal koneksi ke NoSQL, sensor, dsb.
  • Modul/Library yang di gunakan di Python ada yang ditulis dengan bahasa pemrograman level rendah (hence sangat cepat), contohnya Numpy.
  • Jika dibutuhkan dapat meng-import module/library/package dari bahasa pemrograman lain seperti R dan Julia.

Distro Python

Installations

Menginstall Python jika menggunakan Distro Anaconda dan-atau WinPython sangat mudah sebagaimana menginstall program atau software lain. Misal di Windows cukup unduh versi yang diinginkan (misal WinPython64-3.6.8.0Qt5.exe ), lalu double click/run installer-nya dan ikuti instrukti instalasi hingga selesai. Tips dari saya, jika memang akan sering menggunakan Python, maka sebaiknya install Python ke "root folder" misal C:\WinPython atau D:\WinPython dan bukan C:\Program Files\WinPython. Jika ingin meng-install dari Python.org langsung, silahkan membaca keterangan lengkapnya disini.

Untuk pengguna Linux dapat menggunakan instalasi distro-nya atau menggunakan Anaconda (recommended). Jika anda bukan admin, maka instalasi dapat dilakukan di home directory menggunakan bash command (if you're a Linux user, you know what I mean :) ). Silahkan unduh anaconda for Linux disini, dan keterangan instalasinya disini. Berdasarkan pengalaman melakukan workshop (literally>50x) sayangnya dengan berat hati saya menyampaikan bahwa saya tidak menyarankan melakukan Data Science dari Mac. Walau menggunakan basis system Unix, namun Mac sering bermasalah ketika digunakan untuk berbagai project data science.

Catatan Penting dalam memilih versi Python adalah jangan tergoda untuk menginstall versi terkini. Mengapa? Karena biasanya tidak semua module kemudian dengan cepat mengadaptasi/update untuk Python versi terkini. Sehingga compatibility tidak terjamin. Itulah mengapa Google Colaboratory tidak menggunakan versi terkini Python. Jika memang tidak ada urgency untuk menggunakan versi terkini, disarankan menggunakan Python dengan versi yang paling banyak didukung oleh module yang diperlukan untuk project data science, machine learning, atau Big Data yang sedang dikerjakan. Tips dari saya ikuti saja versi Python dari Google Colaboratory .... :)

Installation is easy, u'll get help from a wizard :)

IDE VS Jupyter Notebook

Program Python sebenarnya hanyalah Text biasa, sehingga program python dapat ditulis di sembarang Text editor, walau se-sederhana sebuah NotePad. Pada dasarnya kita tidak membutuhkan software khusus untuk menulis program di Python, namun IDE (integrated development environment) seperti Spyder atau PyCharm biasanya akan jauh lebih memudahkan dalam melakukan pemrograman di Python. Spyder biasanya sudah automatis terinstall ketika seseorang menginstall WinPython atau Anaconda. Jupyter Notebook, PyCharm dan Spyder adalah IDE paling populer, walau akhir-akhir ini (ketika tulisan ini dibuat) visual studio mulai trending sebagai IDE Python (Gambar 5).

Gambar 5. Popularitas Python (Source Kaggle) dan beberapa contoh interface IDE Python.

Untuk Data Analyst dan pemrograman level awal hingga medium, kami menyarankan Jupyter Notebook. Namun untuk level advance dan ketika membuat analytic engine, maka disarankan menggunakan IDE seperti PyCharm/Spyder. Bagian pertama modul ini kita akan mainly menggunakan Jupyter notebook, sedangkan pada bagian kedua kita akan lebih banyak menggunakan Spyder.

Basic Syntax Python

Sesuai dengan filosofi dasarnya, Python termasuk salah satu bahasa pemrograman yang paling mudah dipelajari dan penulisan code-nya terstruktur dengan baik. Beberapa hal yang mendukung hal ini:

  1. Tidak perlu mendeklarasikan variable sebelum pemakaian.
  2. Tidak membutuhkan ";" di akhir setiap baris.
  3. Tidak membutuhkan kurung kurawal {} di beberapa instruksinya.
  4. Banyak modul pendukung untuk berbagai task dasar hingga menengah.
  5. Menggunakan indent (tab/spasi x4) yang membuat penulisan program tertata dengan rapih.

Untuk demonstrasi dan penjelasan lebih lanjut tentang syntax dasar Python akan di demonstrasikan di video lesson ADSP-01 ini. Link ke video dan Code terdapat di bagian bawah tulisan ini.

Struktur Data Dasar Python

Struktur Data yang sederhana (primitive) di Python meliputi:

  • Atomic: Boolean, integer, float, string.
  • Non-Atomic: Tuple, List, Set, Dictionary

Struktur data diatas dibahas dalam video lesson ADSP-01 ini. Struktur Data lain biasanya terkait dengan modul:

  • Numpy (real) Array.
  • SciPy Sparse Matrix
  • Pandas Dataframe
  • Numpy memMap (for Large Data), etc

Rekomendasi Referensi lain untuk belajar Python

Beberapa Kelemahan Python

Tentu saja tidak ada gading yang tak retak, Python juga memiliki beberapa kelemahan. Beberapa kelemahan berikut dijelaskan di video yang disertakan bersama video ini:

  1. Reference to Variabel (can be a good thing - older version).
  2. Dependensi dan Versi Module.
  3. Dependensi Compiler C yang spesific dan terkadang tidak konsisten.
  4. Message Parsing (process locked) - di pemrograman paralel terdistribusi yang membutuhkan sinkronisasi kompleks.
Lebih sulit melakukan pemrograman pada permasalahan yang tidak "embarassingly parallel" di Python (misal Message Parsing pada pemrograman terdistribusi).

Karena tulisan ini sudah terlalu panjang kita lanjutkan ke Lesson berikutnya ya. Silahkan klik tautan dibawah. Jangan lupa kolom komentar bukan untuk berdiskusi/bertanya, untuk keperluan tersebut silahkan klik tautan untuk menuju Forum terkait modul ini. Anda juga bisa menguji pemahaman anda dalam membaca materi diatas dengan memilih tautan ke Latihan Soal.

Warning, you need to login (to tau-data & Google) to view the quiz.

(Registration is free and easy: click here)

What's Next?

[Latihan Soal][Diskusi][Next Lesson][Kembali ke Kurikulum]

Referensi ADSP:

  1. Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to algorithms. MIT press.
  2. Zelle, J. M. (2004). Python programming: an introduction to computer science. Franklin, Beedle & Associates, Inc..
  3. Peter, CV, (2019). Algorithms Notes for Professionals, GoalKicker
  4. Barendregt, H. P. (1984). The lambda calculus(Vol. 3). Amsterdam: North-Holland.
  5. Yang, X. S. (2019). Introduction to Algorithms for Data Mining and Machine Learning. Academic Press.

Tidak ada komentar:

Posting Komentar

Relevant & Respectful Comments Only.