8 Mart 2013 Cuma

Biyoinformatik Projelerinde Programlama - 1 (Metin İşleme)

Bu konuda herkes farklı bir şey söylüyor ancak bence bu durum, aslında bir problemi çözebilmek için elimizde ne kadar çok seçenek olduğunun göstergesi. Yine de biyoinformatik dünyasında çeşitli nedenlerden ötürü bazı programlama dilleri diğerlerine göre daha popüler ve kullanışlı. Kişisel deneyimlerime dayanarak bir karşılaştırma yapmak istiyorum.

İhtiyaca göre üç ayrı kategori olduğunu düşünüyorum ancak bu üç kategoriyi de iki ayrı çatı altında değerlendireceğim; programlama dilleri ve hazır programlar. Bu yazıda metin işleme üzerinde duracağım.

Metin İşleme

Günümüzdeki moleküler biyoloji ve genetik paradigması, DNA'nın ve RNA'nın doğrusal moleküller olduğunu varsayıp bu verilere de aynı şekilde yaklaşıyor. Böyle olunca da genomik veriler eninde sonunda uzun bir metne dönüşüyor; tek bir farkla: bu metinde ne yazdığını bilmiyoruz. Metinde yazanları anlayabilmek adına bir tür yaklaşımdan bahsetmiştim eski bir yazımda

Birçok detay var ancak bu kategoride bahsettiğim şey, içeriği ne olursa olsun bir metnin analiz edilmesi; hatta buna metin madenciliği [text mining] de deniyor. Bu konunun detaylarına girmeden ilgili programlama dillerinden bahsedeceğim.

Vi

Herhangi bir programlama dili bilmiyorsanız, veya amacınız basit işlemler yapmaksa (metinde bazı motifleri bulabilmek, veya bazı harfleri/karakterleri başkalarıyla değiştirmek vb.), Vi bu iş için biçilmiş kaftan. Öğrenmek için biraz zaman ayırmak gerekiyor, ancak bir kere kullanmaya alışınca bazı işlemlerin ne kadar da kolay olduğunu farkediyorsunuz.

Örneğin, elinizde FASTA formatında bir DNA dizilimi dosyası var ve bu dosyadaki muhtemel genleri hızlı bir şekilde görmek istiyorsunuz. Bunun bir yolu, TATA kutularını tespit etmek ancak  "TATA" motifini MS Word gibi bir kelime işlemciyle her zaman tespit edemezsiniz; bu motif bazen karşınıza "TAATA" olarak çıkabilir, bazen de "TATTA" olarak. Vi kullanarak komut satırı modundayken (Esc tuşuna basmanız yeterli) /T+A+T+A+ yazıp Tamam [Enter] tuşuna bastığınızda tüm motiflerin sarı arkaplan rengiyle gösterildiğini keşfedeceksiniz. Daha birçok kullanımı var; Windows, Mac OS ve Linux işletim sistemleri için farklı sürümlerini bulabilirsiniz.




Herhangi bir konuda bir programlama dilini seçmek  söz konusu olduğunda, birkaç faktörün diğerlerine göre daha önemli olduğunu düşünüyorum. Bunlardan biri geliştirilen programın hızı, bir diğeri  programı geliştirme hızı ve son olarak da çevrimiçi destek verebilecek kullanıcı kitlesinin yaygınlığı. Bu üç faktörü birden sağlayan iki programlama dili olduğunu söyleyebiliriz; Perl ve Python.

Perl

Öğrenmesi ve uygulama geliştirmesi çok kolay olan ve biyoinformatik dünyasında yaygın bir kullanıcı kitlesine sahip çok pratik bir programlama dili. Özellikle gelişmiş metin işleme kabiliyeti ve yazılım geliştirme hızıyla ön plana çıkan bu programlama dili için geliştirilmiş  ve neredeyse her tür ihtiyaca cevap verebilecek 100 binin üzerinde fonksiyon kütüphanesi (modül) var. Learning Perl ve Perl ve MySQL ile CGI Programlama öğrenmeye başlamak için en uygun kaynaklar.

Python
Perl'e göre daha genç ve daha nesne tabanlı [object oriented] bir programlama dili; özellikle veri analizi problemlerini çözmek için büyük oranda kullanılıyor ve teknik avantajlarından ötürü Google tarafından büyük oranda benimsenmesi de yaygınlığını fazlasıyla arttırıyor. Geliştirilen kodun okunabilir ve sürdürülebilir olması takım halinde geliştirilen yazılımlarda tercih edilmesini sağlıyor; ayrıca geniş bir biyoinformatik fonksiyon kütüphanesi mevcut. Öğrenmek için Bioinformatics Programming Using Python adlı kitabı öneririm.

Eleştiriler
C tabanlı dillerde program geliştirmeyi sevenler, Perl ve Python benzeri dillerin yavaşlığından şikayet eder ancak burada atlanılan bir şey olduğunu düşünüyorum. Evet, C tabanlı dillerde geliştirilen yazılımlar çok hızlı; ancak bunları geliştirmesi ve sonrasında da hata tespiti oldukça zaman alan ve büyük oranda deneyim gerektiren mevzular. Bunlara ek olarak, geliştirilen yazılımların sürdürülebilirliğinin zorluğu da ayrı bir konu. Ayrıca, eğer konu sadece yazılım dilinin hızıysa, en uygun seçim Assembly olmalı; burada dengeyi kurmanın önemli olduğunu düşünüyorum.



Sözün Özü:

Metin işleme söz konusu olduğunda biyoinformatik dünyasında kendine yer bulan en popüler iki dil olarak Perl ve Python'dan söz edebiliriz. Bu dilleri öğrenmek için de geniş bir kaynak yelpazesi mevcut. Programlama gerektirmeyen metin işleme ihtiyaçları içinse Vi editörü isabetli bir seçim olacaktır.




Proje:
Perl, Python ve kıyaslama yapabilmek için de C (C++, Objective C) dillerinde kullanılabilmek için geliştirilmiş biyoinformatik fonksiyon kütüphanelerinin sayısını ve yaygınlığını araştıralım ve karşılaştıralım.

Meraklısına:
Perl dilinin İnsan Genom Projesi'ndeki hayati rolünü Lincoln D. Stein'ın makalesinde bulabilirsiniz.