Sunday, September 22, 2019

Banyak Tahu itu Tidak Baik

Pada suatu jamuan makan malam (sekitar akhir 2017) setelah konferensi, saya bercakap-cakap dengan orang Jepang. Beliau bertanya tentang riset saya, dan saya menceritakannya. Saya balik bertanya, untuk bidang "ini", dimana yang terbaik di Jepangnya ya? Sambil menyebutkan nama-nama sensei (professor) yang saya ketahui di bidang tersebut. Dia menjawabnya, sambil menimpali: "Kamu banyak tahu ya...".

Di situlah tersadar, banyak tahu itu tidak baik. Orang Jepang, hanya mengurusi yang menjadi urusannya. Mereka hanya mengetahui apa yang digelutinya. Saya perhatikan teman-teman saya orang Jepang, tidak ada satupun yang mentweet tentang politik, pun urusan lainnya. Bisa jadi, nama menteri nya sendiri pun mereka tidak hafal. Bahkan saya pernah bercakap dengan orang Jepang yang nama kaisarnya sendiripun dia tidak ingat.

Kemudian saya mencari (googling) dengan kata kunci: "Know everything is bad", dan menemukan artikel cukup bagus di link ini:
http://davidsearson.com/2015/11/14/why-knowing-everything-is-a-bad-idea/

Di situ dijelaskan juga, banyak tahu itu merupakan ide yang buruk. Kenapa ide yang buruk? Karena tidak ada artinya, tidak ada maknanya (untuk masa depan). Contoh kasus saya diatas, kalaupun saya tahu nama-nama professor di bidang saya tersebut, apa untungnya buat saya? Untuk mencari tempat postdoc? untuk mencari kerjaan/lowongan? Kalau dicari-cari, pembenaran selalu ada. Dalam link artikel bahasa inggris tersebut, sebenarnya bukan pengetahuan yang lebih penting, tapi hikmah (untuk merencanakan masa depan). Jadi urutannya adalah,

Dari diagram alir diatas, yang kita butuhkan adalah tapis, atau filter. Kita menapis banyak (big) data menjadi pengetahuan, dan menggunakannya untuk merencanakan masa depan menjadi hikmah. Jadi kalau ada kebingungan ketika mengambil sebuah keputusan karena banyaknya pilihan atau informasi, sesungguhnya bukan kebanyakan informasi yang salah, tapi kegagalan filter kita untuk menyaring informasi tersebut.

Bukan karena kebanyakan informasi, tapi karena kegagalan filter.


Implementasi

Lalu bagaimana mengimplementasikan "filter" untuk menapis banyaknya informasi/pengetahuan disekitar kita?
Tombol "unfollow", "unsubscribe", "I don't like this (ads)", adalah beberapa yang saya sukai. Bayangkan kalau kita follow/subscribe 1000 akun (youtube, twitter, fb, dll), dan setiap akun memposting 1 tweet/video/status dalam setiap hari, maka dalam sehari kita menerima 1000 posting, diluar iklan. Jika satu jam dari tiap akun tersebut memposting/share video/status/twitter baru, maka kita akan menerima informasi sejumlah:

24000

Setiap jamnya, diluar iklan.

Aturan saya dalam memfollow/subscribe akun cukup sederhana: "Follow/Subscribe" yang bermanfaat, lainnya: abaikan. Sekalipun itu akun orang terkenal, orang berpengaruh ataupun pejabat. Masa depan, kita tentukan sendiri, dari informasi yang kita dapatkan, dan kita filter.

Banyak mencari tahu juga tidak baik

Internet memudahkan kita untuk mencari tahu. Cukup duduk manis di depan laptop, mengetikkan kata kunci dari apa yang ingin kita ketahui dan whoala! apa yang kita cari tahu kita dapatkan. Ini tidak baik. Pencarian terhadap satu kata kunci akan memicu pencarian-pencarian kata kunci lainnya. Begini logikanya. Dari hasil pencarian satu kata kunci, anda mendapatkan informasi tentang kata kunci A dalam suatu halam internet (web page). Di laman tersebut anda kemudian menemukan istilah lain. Bisa juga anda penasaran apa agama si A, siapa istri si A, siapa mantan si A, dimana A dilahirkan, dst. Memiliki pengetahuan atas pencarian tersebut menyenangkan, sebagaimana makan camilan atau memiliki uang. Begitu kata hasil penelitian [1]. Bahkan, kesenangan mendapatkan atas jawaban dari apa yang kita cari tersebut bisa disetarakan dengan uang [1]. Inilah tantangannya: meredam kesenangan kita mencari tahu dari sesuatu yang tak penting.

Terakhir, less is more, dan diam itu emas (tapi sedikit orang yang bisa melakukannya). Sedikit tahu akan menjadikan kita ahli dan pro di bidang kita masing-masing.

Referensi
[1] Kobayashi, Kenji, and Ming Hsu. "Common neural code for reward and information value." Proceedings of the National Academy of Sciences 116, no. 26 (2019): 13061-13066.

Thursday, September 19, 2019

Numpy Array: merubah nilai tertentu (NaN) menjadi nilai lain

Keterangan ada pada komen (#) di dalam screencast.
TL;DR (too long; didn't read):
 a_without_nan = np.nan(a_with_nan, nan=0) # change NaN to 0


Lebih lengkapnya: 

https://bagustris.blogspot.com/2020/06/menghapus-dan-mengganti-data-nan-pada.html

Sunday, September 15, 2019

Memahami size dan shape NumPy array

NumPy mirip dengan Matlab, jika kita menguasai bentuk matrik yang kita proses, maka akan mudah memahami proses komputasinya.

Langsung saja, perhatikan gambar berikut.



Sehingga, bentuk-bentuk matriks dapat dibagi sebagai berikut:
  1. 1D array, contohnya matrik berbentuk (2, ), (3, ), (4, ).
  2. 2D array, contohnya matrik berbentuk (3, 1), (2,3), (3,3).
  3. 3D array, contohnya matrik berbentuk (3, 1, 1), (3, 2, 3), (4,3,2).
  4. ND array, contohnya matrik berukuran (n, 4, 3, 2), (n, n, 4, 3, 2).
Jika a adalah sebuah NumPy array (disingkat: np array), maka beberapa atribut (perintah) penting dari a adalah:
  • a.ndim: untuk mengetahui banyaknya dimensi dari variabel np array (1D, 2D, dll).
  • a.shape: untuk mengetahui bentuk/shape dari variabel np array (misal (2,3)).
  • a.size : untuk mengetahui total elemen matriks.
  • len(a): untuk mengetahui panjang (baris/axis 0) dari np array, sama dengan a.shape[0].

Perhatikan screen cast berikut untuk implementasinya dengan Python.

Sesuai dengan judul artikel ini, size dan shape merujuk pada ukuran dan bentuk. Ukuran bernilai skalar, yakni banyaknya elemen, sedangkan bentuk bernilai matriks (baris, kolom). Namun kedua istilah tersebut kadang disamakan. Contohnya berikut.
In [1]: a = np.random.randint(0,10, size=(4, 3))                                

In [2]: a.shape                                                                 
Out[2]: (4, 3)

In [3]: a.size                                                                  
Out[3]: 12

In [4]: b = np.zeros(shape=(3, 2))                                              

In [5]: b.shape                                                                 
Out[5]: (3, 2)

In [6]: b.size                                                                  
Out[6]: 6
Jadi sebagai attribut kelas, shape dan size berbeda, sedangkan sebagai argumen keduanya sampai saat ini masih disamakan. Mungkin karena pengaruh bahasa C seperti yang didiskusikan pada forum ini

Untuk memahami pengubahan bentuk matriks pada NumPy array, silahkan baca artikel saya di SainsHack berikut: pengubahan bentuk matriks pada NumPy arrah.

Friday, September 13, 2019

Menghapus data NaN pada Pandas DataFrame

Pada data yang kita gunakan, umumnya ada data yang tidak ada, alias kosong, alias null, atau None, atau umum ditandai dengan NaN pada Python.

Untuk menghapus data NaN, beserta baris pada data nan tersebut perintah dasarnya adalah,

df.dropna()

dimana "df" adalah pandas dataframe. By default, perintah di atas akan menghapus baris yang mana ada data NaN. Jadi yang dihapus adalah barisnya, axis=0. Untuk menghapus kolom yang berisi Nan, gunakan argumen `axis=1`.

df.dropna(axis=1)

Jika kita syaratkan, baris yang dihapus adalah baris yang semuanya berisi nan, tambahkan argumen "how='all'". Sehingga perintahnya menjadi

df.dropna(axis=0, how='all')  # untuk menghapus baris jika semua adalah nan
df.dropna(axis=1, how='all')   # untuk menghapus kolom jika semua isinya adalah nan


Jadi by default, perintah df.dropna() sama dengan df.dropna(axis=0, how='any').
Silakan lihat screencast di bawah ini untuk prakteknya.

By default juga, hasil penghapusan data NaN tidak disimpan (tidak embedded), jadi perlu disimpan dalam variabel baru, misal b = df.dropna(). Jika ingin langsung, gunakan argumen `inplace=True`. Perhatikan screencast di bawah ini untuk lebih jelasnya.



Jika anda lebih suka menggunakan Numpy untuk menghapus data NaN, caranya ada disini: Menghapus dan mengganti data NaN pada Numpy.<

Monday, September 09, 2019

Beberapa shortcut penting Byobu

Saya menggunakan "ssh" untuk mengakses desktop, dimana hampir semua proses komputasi saya lakukan di PC tersebut, bukan di laptop. Keuntungannya, selama saya bisa konek ke jaringan kampus (apato, perpus, dll) saya tetap bisa mengakses desktop, menjalankan simulasi, merubah variabel, dll. Jika berada diluar kampus, saya menggunakan TeamViewer. Untuk memudahkan menggunakan terminal dengan ssh, saya menggunakan perangkat "byobu", sebuah utilitas yang dibuat untuk menjembatani tmux atau screen, perangkat lain untuk memudahkan menggunakan terminal di Linux yang "membisakan" penggunaan terminal dalam beberapa sesi, beberapa jendela, dan menutupnya tanpa harus menghentikan proses yang sedang berjalan (ini penting ketika mengeksekusi perintah di terminal).

Berikut beberapa shortcut penting ketika menggunakan byobu via ssh:

  1. Ctrl A, D : keluar dari ssh tanpa menghentikan proses (=F6)
  2. F2: membuat jendela baru
  3. Alt + Panah Kanan/Kiri: berpindah jendela
  4. Ctrl + F6: keluar dari jendela, split
  5. Fn + F7: enable scroll
  6. Ctrl + C: keluar (dari enable scroll)
  7. Alt + F6: menghentikan ssh dari komputer lain kecuali yang dipakai
  8. F9: menampilkan help (gunakan tab untuk berpindah menu, =Shift+F1)
  9. ketik 'exit': keluar dari sesi

Beberapa shortcut lainnya seperti "Shift+F2" (membagi jendela secara horizontal), "Ctrl + F2" (membagi jendela secara vertikal), tidak saya masukkan karena saya jarang membagi jendela terminal menjadi beberapa bagian (kecuali terpaksa). Jika itu dilakukan, maka untuk berpindah fokus ke jendela samping atau atas/bawah gunakan "Shift+Panah". Selain shortcut di atas saya menggunakan perintah berikut:

byobu-enable: membisakan byobu disetiap koneksi ssh
byobu-disable-prompt: agar prompt lebih singkat (set di bashrc)

Berikut screenshot byobu saya ketika mengetik tulisan ini.


n.b: 
- Byobu tidak terinstall by default pada Ubuntu maupun OS lainnya, untuk menginstall byobu pada turunan debian, gunakan `sudo apt-get install byobu`.
Related Posts Plugin for WordPress, Blogger...