Monday, 29 February 2016

, ,

A Reminder of Love, Passion, and the Harsh Truth


Beranjak usia, semakin sering kita melupakan how it feels to be passionate, how it feels to love, how it feels to have a dream. Entah pekerjaan, studi, atau kesibukan lainnya, tampaknya kita semakin sering tenggelam di dalamnya.

Mungkin hal tersebut yang saya rasakan di beberapa bulan terakhir ini, di suasana kuliah yang cukup padat. Tidak hanya itu, dari beberapa diskusi yang kami lakukan di kelas, beberapa peneliti dan dosen senior mulai memberikan pesan,

"Ideas are cheap, what hard is how to make it to the real world. And whether you accept it or not, it's all about who's going to make money out of it at the end. Trust me, I've been an idealist like all of you before"

A bold message. 

Wajah beliau tidak terlihat seakan mematahkan semangat kami, justru menantang kami untuk mengalahkan paradigma tersebut. Tapi, di tengah atmosfer akademisi yang selalu berusaha mencari cela dan celah di paper-paper yang kami baca, rasanya kami hanya menjadi robot untuk mencoba mengkritik ide dan mimpi orang lain.

A heartless robot with a sole purpose to give scrutiny to the work of others. Or is it?

Deep down in our hearts, we know its not true. We were just human. Makhluk ciptaan-Nya yang memiliki hati yang mudah dibolak-balikkan.

So I decided to do something new, a change of atmosphere. Saya belum pernah ke Japanese Film Festival sebelumnya, dan mereka akan screening sebuah film berjudul "5 Centimeter Per Second". Sebuah anime bergenre drama. I'm not a fan of drama, I can't remember the last time I watch a romance drama actually. Tapi, kenapa tidak? Mari kita coba sesuatu yang baru. Toh rating dan review film ini sangat bagus.

Ternyata saya tidak sendirian, ada 2 orang teman Indonesia yang juga tertarik untuk menonton screening film ini. Dan sebagai bonus, ada sushi dari konsulat jendral Jepang di akhir acara, hehe.

Acara dimulai dengan perkenalan dan sedikit penjelasan dari Japanese Literacy Club. "5 centimeter per second... the speed of a cherry blossom falls". Film ini mengambil filosofi dari bunga sakura, cantik dan indah, tapi hanya bisa dinikmati dalam waktu yang sangat singkat. Bangsa Jepang memaknai sakura sebagai simbol dari singkatnya kehidupan. Short and fragile.

Film ini terdiri dari 3 chapter. The first chapter is heartwarming, bagian kedua cukup slow, tapi semua orang menerima bahwa film ini adalah sebuah masterpiece. Bagian ketiga... hmm, this movie is so cruel. A cruel truth and so real, we can refer it to our real world.



Seperti kata teman saya, film ini tidak direkomendasikan bagi kamu yang sedang menjalani LDR. But, it is indeed a masterpiece. Makoto Shinkai telah berhasil membuat sebuah karya yang sangat indah secara grafis, dan sebuah emosi yang bisa kita rujuk di kehidupan kita. Meninggalkan sebuah rasa jengkel, kecewa, dan tanda tanya bagi penonton yang sudah selesai menonton film ini. Bukan karena ceritanya jelek (it's a good story, one of the best), tapi mungkin karena kita tidak mau menerima ending dari film ini, which is actually what we really experienced in our real life.

Nevertheless, it makes you think, and re-think about yourself.

Oke, no more spoiler. Selamat menonton!

  
Continue reading A Reminder of Love, Passion, and the Harsh Truth

Sunday, 28 February 2016

, ,

Practical System Biology Part 3: Belajar Membuat Plot dengan Matplotlib


Hai fellas, kali ini kita akan belajar membuat plot di python dengan menggunakan fitur dari matplotlib. Jika perlu, rekan-rekan bisa menilik lagi postingan saya sebelumnya:
Kali ini kita akan mencoba mengolah data sebuah eksperimen FISH (fluorescence in situ hybridization). Apa itu FISH? Mari kita bertanya pada wikipedia (opini saya tentang menggunakan wikipedia sebagai sumber ada di bawah):
Singkatnya, kita bisa menggunakan probe berupa potongan salah satu untai DNA yang nantinya akan menempel jika ada pasangan yang komplemen dengan si probe. Nah, dengan demikian, kita bisa mengetahui ada atau tidak sekuen yang kita cari dengan mengukur intensitas fluorosensi dari sel. Data fluorosensi ini diambil dengan menggunakan sensor dari alat seperti Spektrofluorometer (bayangin aja ada kamera lagi nge-video-in sel, terus kita ukur perubahan warnanya dari waktu ke waktu).

Selain bisa nempel di gen yang ada di inti sel (seperti di gambar dari wikipedia), kita juga bisa nempelin si probe ini ke mRNA yang diekspresikan oleh sel. Contoh aplikasi ini bisa dilihat dari video promosi (sumpah ane ga niat marketing) teknologi FISH dari Stellaris:


Dengan demikian, kita bisa mengambil data perubahan jumlah mRNA yang diproduksi sel dari waktu ke waktu.

Exercise Time!

Temen kamu sedang melakukan eksperimen untuk melihat perubahan ekspresi sebuah gen ketika dia memberikan si sel sebuah perlakuan. Untuk itu, temen kamu menggunakan FISH untuk menghitung jumlah mRNA pada sebuah populasi sel setiap enam menit sekali.
Ternyata, data yang dihasilkan dari si alat disimpan dalam format .pkl (pickle) yang merupakan salah satu format untuk bertukar data menggunakan program berbahasa Python. Kamu juga bisa mencari tahu lebih lanjut tentang pickle dengan memasukkan script pickle? di spyder.
Teman kamu meminta tolong untuk mengolah data tersebut menjadi sebuah plot yang mudah dipahami.

Loading data

Hal pertama yang kamu lakukan adalah membuka spyder dan meng-import library yang kita perlukan. Disini kita akan mengimport tiga library: Pickle, Numpy, dan Matplotlib:

import pickle
import matplotlib.pyplot as plt
import numpy as np

Untuk memudahkan mengetik kode, kita singkat matplotlib sebagai plt dan numpy sebagai np. Jadi, selanjutnya teman-teman tinggal menulis plt atau np untuk memanggil fungsi dari masing-masing library. Sementara, save dulu script mu di sebuah folder. 


Memanggil fungsi dari library yang sudah di import

Selanjutnya, kita akan nge-load data dari hasil eksperimen. Pertama, download data FISH, kemudian save di folder yang sama di tempat kamu nge-save script python-mu. Setelah file sudah siap, selanjutnya kita gunakan pickle (how to pickle disini):

d = pickle.load(open('mRNAdata.pkl', 'r'))

Disini, kita mendefinisikan variabel d sebagai data yang akan kita gunakan. 'r' setelah mRNAdata.pkl berarti kita memberikan perintah "read" dari objek pickle. Selanjutnya, yuk kita coba lihat raw data yang kita peroleh seperti apa dengan menulis:

print d

Dan kita peroleh hasilnya ternyata berupa Array yang berisi banyak angka. Di dalam array ini adalah hasil pengukuran intensitas fluorosensi dari 100 sel pada setiap time point. Nah, yg kita perlu lakukan adalah menghitung mean dari 100 sel tadi untuk setiap time point. Dengan demikian, kita bisa membuat plot dengan sumbu x = time points dan sumbu y = rata-rata intensitas fluorosensi dari 100 sel. 

Sek, bentar bro, kok bisa tahu ada 100 sel? Ngitung pake jari satu-satu? Lagian cuma bikin plot pake excel aja mah bisa!


Mencari tahu ukuran data


Nah, inilah kelebihan kita menggunakan Python, kita bisa lebih mudah untuk mengolah data yang berukuran besar. File .pkl yang kita buka tadi ukurannya cuma beberapa kilobyte saja, dan jika kita menghitung secara manual berapa banyak ulangan yang ada di data ini aja udah males :p. Bayangin kalo temen-temen mengolah data genomik yang ukurannya bisa sampai beberapa gigabyte. By the way, kalo filenya besar, fungsi print d tadi bisa membuat laptop kita kewalahan karena harus menampilkan semua data yang ada di dalamnya.

Tampilan data FISH, lingkaran merah menunjukkan sampel intensitas fluorosensi dari 100 sel untuk time point 1, 2, 3, dst. 
So, untuk menghitung ada berapa time points dan jumlah ulangan, kita bisa menggunakan fungsi yang sudah ada di dalam Python (hayo, buka lagi chapter 5!):

ntps= len(d)

atau bisa juga menggunakan modul dari NumPy: 

ntps= np.size(d, axis=0)

Disini kita mendefinisikan variabel ntps (singkatan dari number of time points, atau diberi nama apa aja terserah sih) dengan fungsi len atau np.size (lebih lanjut tentang NumPy). Coba gunakan fungsi print untuk melihat output dari ntps (output = 9).

Nah, untuk melihat ada berapa sampel di tiap time points (ndps = number of data points), kita bisa menggunakan:

ndps= np.size(d, axis=1)

Disini kita menggunakan np.size, tapi kita mengganti axis untuk melihat dimensi di dalam tiap time points.

Teman-teman juga bisa menggunakan fungsi len:

ndps= len(d[0])

Tapi ini hanya untuk melihat dimensi dari timepoints pertama. Coba gunakan fungsi print untuk melihat output dari ndps (output = 100).


Jumlah time points dan ukuran data points


Menghitung Mean dan Standar Deviasi

Untuk membuat plot, kita akan mengukur rata-rata (dm) dari intensitas fluorosensi di tiap time points:

dm= d.mean(axis=1)

dan untuk menghitung standar deviasi (sdm):

sdm= d.std(axis=1)

Dan kita lihat hasilnya:

Rata-rata fluorosensi (merah) dan standar deviasi (biru)

Membuat plot

Nah, data di sumbu Y udah siap nih, sekarang tinggal nyiapin sumbu X, yaitu time points. Dari data, kita sudah tahu bahwa ada 9 time points... artinya apa yak? Artinya, data diambil 9 kali setiap jeda beberapa waktu. Lah, emang jeda waktunya berapa? 6 Menit! (Scroll ke atas deh, yang di highlight dan di bold). Dengan demikian kita bisa tahu data untuk sumbu X:

t= np.arange(ntps)*6

dengan np.arange, kita membuat sebuah array [0, 1, 2, ..., 8], terus tinggal dikali 6 (jeda waktu). Dan kita peroleh:



Selanjutnya, kita akan menggunakan modul dari matplotlib untuk membuat plot. Kita akan menggunakan plt.errorbar() untuk membuat plot dengan error bar. Nah, value dari error bar disini adalah standar deviasi (sdm) dibagi dengan akar dari jumlah sampel (ndps). Kita akan menggunakan NumPy untuk mengakses fungsi square root (np.sqrt). Perhatikan di fungsi plt.errorbar(), t adalah input untuk sumbu X, dm adalah input untuk sumbu Y, dan yerr adalah error bar. Warna dan atribut lain bisa diubah dengan menambahkan argumen seperti ecolor dst. Lebih lengkap di www.matplotlib.org.

plt.figure()
plt.xlabel('time (minutes)')
plt.ylabel('mean mRNA')
plt.errorbar(t, dm, yerr= sdm/np.sqrt(ndps), ecolor= 'k', fmt= 'bo:')
plt.show()

Dan, inilah hasil dari eksperimen teman kita:


Selamat mencoba!
Ps: Error bar kecil jadi ga kelihatan, coba kalikan nilai sdm jadi beberapa kali lipat kalau penasaran.

Coming soon: Part 4 - Yuk belajar Entropi!





Continue reading Practical System Biology Part 3: Belajar Membuat Plot dengan Matplotlib

Friday, 26 February 2016

, ,

Practical System Biology Part 2: Python Introduction


Nah, bagi teman-teman yang baru pertama kali belajar programming, kita akan menggunakan buku karya Langtangen, “A primer on scientific programming with Python (3rd edition)”. Coba download buku ini dari perpustakaan kampusmu, atau bisa juga didowload dari github sang author (thanks Langtangen!): 
http://hplgit.github.io/primer.html/doc/pub/half/book.pdf.

Untuk belajar, cara paling cepat dan efektif adalah dengan mencoba mengerjakan beberapa exercise yang ada di buku. Kita akan menggunakan chapter 1, 2, 3, dan 5 untuk memahami dasar-dasar Python.

Sebagai panduan belajar, teman-teman bisa mencoba mengikuti saran berikut:

Chapter 1

Bacaan untuk chapter 1:

  • 1.1 Pengenalan Python
  • 1.2: istilah-istilah di computer science
  • 1.3: pembagian dengan integer dan obyek di Python
  • 1.4.1: menggunakan modul Python

Latihan untuk chapter 1:

Exercises 1.6 

  • Let p be a bank’s interest rate in percent per year. An initial amount A has then grown to:
  • after n years. Make a program for computing how much money 1000 euros have grown to after three years with 5 percent interest rate.
  • Solution to 1.6

Exercises 1.10

  • The bell-shaped Gaussian function, 
  • is one of the most widely used functions in science and technology. The parameters m and s > 0 are prescribed real numbers. Make a program for evaluating this function when m = 0, s = 2, and x = 1. Verify the program’s result by comparing with hand calculations on a calculator.
  • Solution to 1.10

Chapter 2

Bacaan untuk chapter 2:

  • 2.1: while loops
  • 2.2: lists dan for loops
  • 2.3.1 - 2.3.5: contoh list dan loops
  • 2.4: nested lists
  • 2.5: tuples
  • 2.6.2: contoh aplikasi
  • 2.6.3: cara mencari informasi dalam Python

Latihan untuk chapter 2:

Exercise 2.10

  • We want to generate x coordinates between 1 and 2 with spacing 0.01. The coordinates are given by the formula xi = 1 + ih, where h = 0.01 and i runs over integers 0, 1, . . . , 100. Compute the xi values and store them in a list (use a for loop, and append each new xi value to a list, which is empty initially).
  • Solution to 2.10

Exercise 2.12 

  • The following code is supposed to compute the sum function:
  • s = 0; k = 1; M = 100
  • while k < M:
    • s += 1/k
  • print s
  • This program does not work correctly. What are the three errors? (If you try to run the program, nothing will happen on the screen. Type Ctrl+c, i.e., hold down the Control (Ctrl) key and then type the c key, to stop the program.) Write a correct program.
  • Hint. There are two basic ways to find errors in a program: (1) read the program carefully and think about the consequences of each statement, (2) print out intermediate results and compare with hand calculations. First, try method 1 and find as many errors as you can. Thereafter, try method 2 for M = 3 and compare the evolution of s with your own hand calculations.
  • Solution to 2.12

Exercise 2.13

  • Rewrite the corrected version of the program in Exercise 2.12 using a for loop over k values instead of a while loop.
  • Solution to 2.13

Chapter 3

Bacaan untuk chapter 3:

  • 3.1.1 - 3.1.6: functions
  • 3.1.10: the main program
  • 3.2: branching and if statements
  • 3.3.1: using functions

Latihan untuk chapter 3:

Exercise 3.1


  • The the formula above is for converting Fahrenheit degrees to Celsius reads.
  • Write a function C(F) that implements this formula. To verify the implementation of C(F), you can convert a Celsius temperature to Fahrenheit and then back to Celsius again using the F(C) function from Chapter 3.1.1 and the C(F) function. That is, you can check that the boolean expression c == C(F(c)) is True for any temperature c (you should, however, be careful with comparing real numbers with ==, see Exercise 2.24).
  • Solution to 3.1

Exercise 3.4 

  • The standard Python function called sum takes a list as argument and computes the sum of the elements in the list:
  • >>> sum([1,3,5,-5])
  • 4
  • Implement your own version of sum. 
  • Solution to 3.4

Exercise 3.14 

  • Make a Python function gauss(x, m=0, s=1) for computing the Gaussian function 
  • Call gauss(x) and print out the result for x ∈ [−5, 5] (say for 11 uniformly spaced x values). 
  • Solution to 3.14

Exercise 3.23

  • Given a list a, the max function in Python’s standard library computes the largest element in a: max(a). Similarly, min(a) returns the smallest element in a. The purpose of this exercise is to write your own max and min function. Use the following technique: Initialize a variable max_elem by the first element in the list, then visit all the remaining elements (a[1:]), compare each element to max_elem, and if greater, make max_elem refer to that element. Use a similar technique to compute the minimum element. Collect the two pieces of code in functions.
  • Solution to 3.23

Exercise 3.34

  • Write a function count_pairs(dna, pair) that returns the number of occurrences of a pair of characters (pair) in a DNA string (dna). For example, calling the function with dna as ’ACTGCTATCCATT’ and pair as ’AT’ will return 2. 
  • Solution to 3.34

Chapter 5

Bacaan untuk chapter 5:

  • 5.3.1 - 5.3.2: plotting data
  • 5.6.1: arrays
  • 5.6.4: accessing elements of arrays
  • 5.6.7: manipulating the shape of arrays
  • 5.7.1 - 5.7.2: arrays with more than one dimension
Nah, setelah mencoba latihan-latihan diatas, teman-teman pasti sudah lebih familiar dengan Python.

Loh, ga ada latihan untuk Chapter 5 nih??

Jangan khawatir, di postingan selanjutnya, kita akan mencoba belajar membuat plot dengan menggunakan contoh Fluorescence In Situ Hybridization (FISH).



Continue reading Practical System Biology Part 2: Python Introduction
, ,

Practical System Biology Part 1: Installing Anaconda, platform untuk Scientific Python

The protein interaction network of Treponema pallidum, courtesy Wikipedia
Hai fellas, kali ini kita akan mencoba belajar Systems Biology dengan memodelkan interaksi gen dan protein di dalam sel.

Tutorial berseri ini mengadaptasi materi dari Prof. Peter Swain dari Center for Synthetic and System Biology (SynthSys) The University of Edinburgh. Penasaran dengan lab beliau? Silahkan cek di http://swainlab.bio.ed.ac.uk/ 

Jika ingin belajar lebih dalam, buku karya Brian P. Ingalls berjudul Mathematical Modeling in Systems Biology - An Introduction sangat bagus untuk dibaca. Jika kamu tidak memiliki akses dari perpustakaan kampus atau sekolah, bisa juga didownload dari website sang author di sini (thanks Prof Ingalls!): 

Ada beberapa platform yang bisa digunakan untuk melakukan modelling, tapi disini kita akan mencoba menggunakan bahasa pemrograman Python. Kenapa Python? Python adalah bahasa pemrograman yang cukup mudah dipelajari dan interaktif. Python memiliki kegunaan yang mirip dengan Matlab (but its free!), dan cukup baik untuk melakukan simulasi molecular pathway di dalam sel. Selain itu, karena sudah banyak digunakan oleh komunitas akademia dan peneliti sehingga sudah memiliki banyak library dan tools untuk melakukan pemodelan.

Oke, sakjane kita mau ngapain sih? Untuk lebih gampangnya, sebagai contoh, kita akan mencoba memodelkan chemotaxis pathway dari E. coli (Rao et al., 2004). Akses paper di:



Ketika si E. coli mendeteksi keberadaan suatu zat kimia (ligand), dia akan merespon dengan melakukan perubahan pergerakan (motilitas), apakah bergerak lurus (run), atau berputar-putar di tempat (tumble), tergantung dari apakah si ligand berupa attractant atau repellant). Ternyata, dua perilaku ini (run/tumble) dipengaruhi dari arah pergerakan flagel dari E. coli, apakah counter clockwise atau clockwise (Figure 1). Nah, arah pergerakan flagel ini dikontrol oleh fosforilasi protein Y, yang juga dipengaruhi oleh ligand. Pada E. coli, attractant akan menghambat protein A (CheA) dan mengakibatkan fosforilasi protein Y berkurang, sehingga jumlah Yp (protein Y yang terfosforilasi) menurun (Figure 2). Nah, kalo Yp berkurang, maka flagella akan berubah dari clockwise (tumble), menjadi counterclockwise (run). Kemudian, setelah beberapa kali gerakan acak, E. coli akan bergerak menuju ke arah dimana konsentrasi atraktan semakin tinggi. 



Figure 2. (A) E. coli dan (B) B. subtilis chemotaxis pathway (Rao et al., 2004)

Nah, dengan melakukan pendekatan Systems Biology, kita bisa memodelkan interaksi dari komponen-komponen yang ada dari chemotaxis pathway di E. coli, dan bagaimana respon mereka ketika kita mengubah parameter konsentrasi ligand menjadi tinggi atau rendah. Jadi, harapan saya setelah selesai tutorial ini, temen-temen sekalian juga bisa membuat model tersebut dengan menggunkan Python (Figure 3). Tapi, alangkah baiknya jika kita mulai step by step belajar Python dari dasar dahulu J.


Figure 3. Menggunakan Python (dengan Spyder Environment) untuk memodelkan konsentrasi protein Y ketika parameter konsentrasi ligand kita ubah.

So, first thing first, kita akan mengginstall Anaconda, yang sudah ada di dalamnya paket Spyder (Scientific Python Development Environment) lengkap dengan NumPy, Matplotlib, dan SciPy.

1.       Installing Anaconda
Download dan install paket Python 2.7 dari https://www.continuum.io/downloads. Kamu juga bisa menggunakan Python 3.5, tapi di tutorial ini bahasa yang kita pakai adalah versi 2.7, yang sudah lebih sering digunakan oleh kebanyakan akademisi (karena lebih tua). Penasaran? Lebih lanjut bisa dibuka di:  https://wiki.python.org/moin/Python2orPython3.

2.       Menggunakan spyder
Kalau sudah selesai menginstall Anaconda, yuk kita coba buka. Akan muncul window seperti di Figure 4. Kita akan menggunakan spyder-app (paling bawah), dan silahkan diupdate dulu jika perlu.

Figure 4. Tampilan Anaconda

Klik Launch untuk memulai spyder-app, dan teman-teman akan melihat window seperti di Figure 5. Yang teman-teman perlu perhatikan, di tampilan Spyder ada 2 layar utama, sebelah kiri (Lingkaran merah A) adalah tempat dimana teman-teman bisa menulis program (script) dan menyimpannya sebagai file dengan ekstensi .py. Program ini bisa dijalankan dengan klik tombol run (segitiga hijau), dan output program bisa dilihat di layar console (lingkaran merah B). Rekan-rekan juga bisa langsung menulis kode di layar console, tapi akan langsung dijalankan ketika kita menekan enter, dan tidak tersimpan.



Figure 5. Tampilan Spyder

Untuk mencoba apakah matplotlib dan numpy berjalan, coba copy script ini di layar A, kemudian klik run:

import matplotlib.pyplot as plt
import numpy as np
plt.plot(np.arange(1,10))
plt.show()

Lalu akan muncul output dari script tadi, berupa plot garis lurus.


Figure 6. Menggunakan matplotlib untuk menampilkan plot di Spyder

Kalau ada message seperti ini, coba klik di layar console (atau arahkan cursor di ln[1]:) dan coba jalankan script lagi.


Selamat mencoba!

Continue reading Practical System Biology Part 1: Installing Anaconda, platform untuk Scientific Python