12 Mart 2013 Salı

Biyoinformatik Projelerinde Programlama - 2 (Hesaplama)

İlk yazımda metin işleme kaabiliyetlerine göre ve kendi deneyimlerim doğrultusunda programlama araçlarından bahsetmiştim. 

Bu yazıda, sayısal hesaplamaların yoğun olduğu durumlarda kullanılabilecek araçlardan  yine kendi deneyimlerim doğrultusunda bahsedeceğim. Bu arada, atladığım veya kaçırdığım her türlü detaya ilişkin önerilere de açığım :)

Hesaplama

Yüksek çıktılı [high throughput] sayısal veri üreten mikrodizi ve yeni nesil sekanslama gibi  teknolojilerin yaygınlaşmasıyla büyük verinin işlenmesi gittikçe önem kazanıyor; hatta tüm odak neredeyse bu verinin analizinde (teknoloji geliştiren ülkeleri kastediyorum).

Özetle, sayısal verilerin neredeyse tamamen istatistiksel yöntemlerle analizinde kullanılan araçlardan bahsedeceğim. Hazır yazılımların şahıyla başlayalım.

Excel
Günümüzde yaygın olarak kullanılan Excel programının uzun bir geçmişi var; birçok sayısal işlemi kolaylıkla yapabileceğiniz hazır fonksiyonlarıyla basit işleri zorlaştırmadan yapabilmeyi sağlıyor. Bunun yanısıra sahip olduğu metin tabanlı fonksiyonları da yine birçok basit işi kolayca yapabilmeyi sağlıyor.

Örneğin, elinizde işlenmiş bir mikrodizi verisi var ve deney ve kontrol gruplarını içeriyor. Yapmak istediğiniz şey, hızlı bir şekilde, kontrole göre değişiklik gösteren gen veya transkriptleri tespit etmek. TTEST fonksiyonuyla bir dakika içerisinde anlamlı farklılık gösteren genleri bulabilir ve bu genleri filtreleme fonksiyonuyla hızlı bir şekilde görüntüleyebilirsiniz.

Diğer bir durumda ise, iki farklı gen listesindeki ortak genleri tespit edelim. İNDİS [INDEX] ve KAÇINCI [MATCH] fonksiyonlarının kombinasyonuyla yine bir dakikadan kısa bir süre içerisinde ortak gen listesini belirleyebilirsiniz. İşin doğası gereği kolay olan bir problem, kolay bir şekilde çözülüyor.


Sayısal veriler, ve özellikle en az iki boyutlu sayısal verilerle kolayca başa çıkabilmek için hem hız, hem geliştirme, hem de kullanıcı kitlesinin yaygınlığını göz önünde bulundurarak temel iki programlama dilinden, Matlab ve R'dan bahsedeceğim. Son olarak da C'ye kısaca değineceğim.

Matlab
Matlab ticari bir programlama dili ve bunun hem artıları, hem de eksileri. En büyük artısı, ortaya konan yazılımın kalitesinin oldukça yüksek olması ve problemlerinize çözüm bulabileceğiniz profesyonel bir desteğe sahip olması. Hız ve hafıza problemleri neredeyse yok (en azından benim uğraştığım problemlerde) ve birçok farklı biçimdeki veri Matlab'da kullanılmak üzere aktarılabiliyor. Geniş bir biyoinformatik araç kutusu var ve biyoinformatik dünyasının ihtiyaçları doğrultusunda göreceli olarak hızlı bir şekilde güncelleniyor. Matlab'a alıştıktan sonra bazı orta zorluktaki problemlerin de kolayca çözülebildiğini görüyorsunuz. Son olarak, gayet kullanışlı bir şekilde hazırlanan dökümantasyondan söz etmeliyim. Bu dökümantasyonu kullanmaya alıştıktan sonra başka hiç bir kaynağa ihtiyacınız kalmayacağını rahatlıkla söyleyebilirim; Matlab programlama dilini öğrenmek için de bu dökümantasyona ve demolara başvurabilirsiniz. 

R
R ile tanışmam çok acılı olmuştu; öğrenmek için resmen direnmiştim. Özellikle hafıza sorunları ve geriye dönük uyumluluk problemleri (geliştirdiğiniz bir programın yeni R versiyonunda çalışmaması gibi) bir de öğretim yaklaşımındaki sorunlarla birleşince benim için kaçılması gereken bir programlama dili haline gelmişti. 3 kez R'la ilgili ders aldım ve hiç birinde de bu dili sevemedim, ta ki iki ay öncesine kadar. R, sayısal verilerle oynayabilmek gayet güzel bir şekilde tasarlanmış bir dil, geriye dönük uyumluluk problemleri de oldukça azalmış. Hepsinden önemlisi, herhangi bir analiz problemine ilişkin bir fonksiyon kütüphanesini (örneğin BioconductoR) kolaylıkla bulabiliyorsunuz; bu açıdan bakıldığında Perl dilindeki gibi yaygın bir kullanıcı desteğinden bahsedebiliriz. Ayrıca akademik camianın da bu dili benimsemesi büyük bir artı. 

Öğrenmek için birçok kaynak mevcut, ancak nasıl öğrenilmemesi gerektiği bence daha önemli. Veri tiplerini (data frame, vector vb.) tam olarak anlamadan ve sadece problemi hızlıca çözmek adına hazır kodlarla çalışmak çoğu zaman farkına varılmayan hatalara neden oluyor; R dilini öğrenirken bu tür bir yaklaşımdan uzak durmanızı kuvvetle öneririm. Birkaç saatinizi ayırın ve veri tipleri ile bunlar arasındaki ilişkileri tam olarak anlamaya çalışın; birçok teferruatlı veri analizi problemini kolaylıkla çözebilir hale geleceksiniz. Bu arada, RStudio iyi bir editör.

C
C deyince aslında C türevlerini kastediyorum. Matlab ve R'da kullanılan bazı fonksiyonlar ve nesneler C tabanlı olarak kodlanmış durumda ve bu nedenle çoğu zaman C ile yazılım geliştirmeye ihtiyacınız olmayacaktır. Yine de sayısal hesaplamalarda özellikle yüksek hız gerektiren büyük verinin analizinde C'ye başvurmak bazı durumlarda kaçınılmaz hale gelebiliyor (örneğin, BLAST). Yine de bu durumlarda bile önerim, C'de geliştirilmiş bir programı bulmanız ve bunu günlük olarak kullandığınız programlama dili içerisinden çağırarak kullanmanız. Böylelikle sadece performans gerektiren kısımlarda C'nin hızından yararlanabilir ve diğer kısımlarda ise programınızı daha hızlı bir şekilde geliştirebilirsiniz.


Sözün Özü:
Sayısal hesaplamanın yoğun olduğu projelerde R'ın gücünden kesinlikle faydalanılmalı; alternatif yaklaşımlar için de Matlab'a aşina olunmalı diye düşünüyorum. C ise sadece performans gerektiren ve başka bir alternatifin bulunmadığı program parçalarında kullanılmalı.



Proje:
Her biri 3'er örnekli deney ve kontrol gruplarına sahip bir mikrodizi verisi oluşturalım (değerleri kendimiz verelim), toplam 5 gen için. Elimizde 5 x 6 'lık iki boyutlu sayısal bir veri olmalı. Bu veride anlatımı deney ve kontrol gruplarında istatistiksel açıdan anlamlı olarak farklı olan genleri Excel'de ve R ve/veya Matlab'da tespit edelim. 

Meraklısına:
Matlab, R, Excel ve benzeri araçların kıyaslaması için Google'da "Matlab vs R" sorgusuna bir göz atın; bildiğim kadarıyla Türkçe bir karşılaştırma dökümanı yok ancak İngilizce metinler gayet faydalı.