3 Ağustos 2014 Pazar

Python’da index, join ve split metodu

Herkese Merhabalar

Python bildiğiniz gibi biyoinformatik için oldukça önemli bir dil. Bu hafta önceki yazımda bahsettiğim kodların yazılışını göstereceğim ve daha sonra yine ufak ama önemli bir kaç bilgi vereceğim. Ama bunlara geçmeden önce size kısaca geçirdiğim haftadan biraz bahsetmek istiyorum. Biliyorsunuz ki GenKök' de biyoinformatik üzerine bir yaz stajı yapıyorum ve biyoinformatik girişimim böyle başladı. Bu hafta bayram nedeniyle staja yaklaşık 10 günlük bir ara verdik. Peki 10 gün tatil yapıp dinlendik mi? Tabiki de hayır. Bir şeyler öğrenmek için emek vermek gerekiyor. Bu yüzden tatilimin büyük kısmını çalışarak geçirdiğimi söyleyebilirim. Yazılarımda Codecademy' nin programla öğrenmek için oldukça yararlı olduğunu söylemiştim ve ben de oradan HTML&CSS ve JavaScript çalışarak zamanımı harcadım. Gördüğüm şey şu oldu bir programlama dili öğrenmek yani bir kez mantığı kavramak diğerlerini öğrenirken zamanı çok hızlandırıyor. Tabi hızlı bir şekilde yenileri öğrenebiliyorsunuz fakat bir süre sonra birbirine karışmaya başladığını hissediyorsunuz. Çünkü hepsi birbirine çok benziyor. Ama bunun da zamanla hepsine hakim oldukça geçeceğini düşünüyorum. Şimdi lafı fazla uzatmadan bu hafta anlatacağım konulara geçelim.


"ACGATTTGAGCGTCGCGGTGTGAGTCCGCGTGACGCGTGACGCGTGATGGTGAGCGAGCGCCCTGAGTGTGCGACTAGCGATTGGGTCCCATTAGCATCGTAGCATCGATCGAGCTAGAACGTACGATCGATCGACTGACTACGATCGGATCGATCGATCGATCGATCCGATCGATCGATCAGATCGATCGTAGCATGCTAGCATGCTACGATGCGATCGATGCATGCTAGGCTAGCTAGCATCGATCGATGATCGGATGCATCGATGCATCGGATCGATCGATGCTACGATCGTAGCTAGACTAGGATCGATCGATCGACTAGATGCAATCGTAGATCGATCGATCGTAA"
  • Bu dizi içerisinde kaç "A", "T", "G" ve "C" olduğunu veren bir kod yazınız. Cevap;
a_sayisi = 0
t_sayisi = 0
g_sayisi = 0
c_sayisi = 0
seq= "ACGATTTGAGCGTCGCGGTGTGAGTCCGCGTGACGCGTGACGCGTGATGGTGAGCGAGCGCCCTGAGTGTGCGACTAGCGATTGGGTCCCATTAGCATCGTAGCATCGATCGAGCTAGAACGTACGATCGATCGACTGACTACGATCGGATCGATCGATCGATCGATCCGATCGATCGATCAGATCGATCGTAGCATGCTAGCATGCTACGATGCGATCGATGCATGCTAGGCTAGCTAGCATCGATCGATGATCGGATGCATCGATGCATCGGATCGATCGATGCTACGATCGTAGCTAGACTAGGATCGATCGATCGACTAGATGCAATCGTAGATCGATCGATCGTAA"
for base in seq: # seq içerisinde her elemana işlem yaptırabilmek için for döngüsüne almalıyız.
    if (base == "A"): # eğer eleman A' ya eşitse alttaki işlemi yap anlamına geliyor.
        a_sayisi = a_sayisi + 1 # a_sayisi'na +1 ekle. Yukarıda hepsini 0' a eşitleme sebebimiz bu.
    elif (base == "T"):
        t_sayisi = t_sayisi + 1
    elif (base == "G"):
        g_sayisi = g_sayisi + 1
    elif (base == "C"):
        c_sayisi = c_sayisi + 1 
print "A sayısı " + "= " +  str(a_sayisi)#a_sayisi integer olduğu için string ile toplarken hata verebilir. Bu yüzden string'e çeviriyoruz.
print "T sayısı " "= " +  str(t_sayisi)#(Not;Toplama string de tan yana yazmak için kullanılır.)
print "G sayısı " "= "  str(g_sayisi)
print "C sayısı " "= " +  str(c_sayisi)
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
>>>
A sayısı = 84
T sayısı = 81
G sayısı = 104
C sayısı = 82
  • Yani tüm bazların yüzde kaçı G veya C' dir? Bunu bulmak için yukarıdaki kodun altına şunları eklemek yeterli olacaktır.
total = a_sayisi + t_sayisi + g_sayisi + c_sayisi    
print "GC oranı " + "= " +str(100*(g_sayisi+c_sayisi)/float(total)) #tam olarak küsüratlı bir sayı yazmak için sayının birinı ondalık olarak yazmamız gerek. Bu yüzden float kullanıyoruz.
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
>>>
A sayısı = 84
T sayısı = 81
G sayısı = 104
C sayısı = 82
GC oranı = 52.9914529915
  • Kodonlarına ayırıp listeye ekleme.
seq= "ACGATTTGAGCGTCGCGGTGTGAGTCCGCGTGACGCGTGACGCGTGATGGTGAGCGAGCGCCCTGAGTGTGCGACTAGCGATTGGGTCCCATTAGCATCGTAGCATCGATCGAGCTAGAACGTACGATCGATCGACTGACTACGATCGGATCGATCGATCGATCGATCCGATCGATCGATCAGATCGATCGTAGCATGCTAGCATGCTACGATGCGATCGATGCATGCTAGGCTAGCTAGCATCGATCGATGATCGGATGCATCGATGCATCGGATCGATCGATGCTACGATCGTAGCTAGACTAGGATCGATCGATCGACTAGATGCAATCGTAGATCGATCGATCGTAA"
c=0
b = 3
kodonSayisi= len(seq)/ 3 #kodon sayısı toplam baz sayısının 3'de biri olacağı için 3'e bölüyoruz.
kodonlist = [] # kodonları ekleyebileceğimiz boş bir liste oluşturuyoruz.
for kodons in range(0,kodonSayisi):#kodon sayısı kadar işlemin tekrarlanmasını istediğimiz için for döngüsü kullanıyoruz.
    kodon = seq[c:b] #Her döngüde c ile b arasını kodon olarak kabul etmesini istiyoruz.
    c = c + 3 #Her döngüde c ve b sayılarını 3'er artırarak bir sonraki kodonu almasını sağlıyoruz.
    b = c + 3
    kodonlist.append(kodon) #son olarak bulduğu kodonu listeye eklemesini sağlıyoruz. 
print kodonlist
  • 4 basamaklı abcd sayısı nedir? Bu soruyu çözmek bizler için oldukça kolay peki ya çözümü bilgisayara anlatmak? İşte bu biraz zor gibi görünüyor. Aslında her şeyi çok basit düşünmek ve ayrıntıları bilgisayara söylemek yeterli. İşin iyi yanı bilgisayar bunu bir kez öğrendiğinde sizin için sürekli yapabilir. Şimdi gelelim bunu bilgisayara nasıl anlattığımıza. Buyurun işte bu da cevabı;
abcd= range(999,10000) #abcd sayısı için bir aralık belirlememiz gerek.Çünkü abcd 4 basamaklı bir sayı.
for i in abcd: #Bu aralıktaki tüm sayıları kontrol etmek için for döngüsüne aldık.
    c = str(i) #Her bir sayının tersini bulurken abcd sayısını string' e çevirmeliyiz. 
    a = c[::-1] #abcd sayısının string olarak tersini bulduk.
    b = int(a)  #Strin olan sayıyı işlem yapabilmek için integer' e çevirdik.
    if b*4 == i: # Aralarındaki ilişkiyi tanımlayarak bu ilişkiye uyan sayıyı bulduğunda yapacağı işlemi tanımladık.
        print i
Unutmayalım ki bir kodu yazmanın birden fazla yolu vardır. Bunlar benim yazdıklarım fakat siz daha farklı şekillerde yazabilirsiniz. Bu arada kırmızı "#" ile başlayan kısımlar Python' da değerlendirilmez. Yazdığınız kodlar üzerinde notlar tutmak için kullanabilirsiniz.

Bu hafta size özel bir kaç özel fonksiyondan bahsedeceğim. Aslında bu tarz çok sayıda fonksiyon var ama ben yine size önemli gördüklerimden kısaca bahsedeceğim.

  • Bunlardan birincisi index. Oldukça kullanışlı bir fonksiyon. Eğer bir listede ki elemanın kaçıncı sırada olduğunu merak ediyorsanız tam olarak bunu kullanabilirsiniz. Bir örnek ile daha kolay anlaşılacaktır.
a = "biyoinformatik"
print a.index("n")
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
>>>
5
Eğer içerisinde arattığımız eleman sayısı 1'den fazlaysa o zaman ilk olanı veriyor fonksiyon. Aynı zamanda bu fonksiyonu liste için de kullanabilirsiniz
a = ["b","i","y","o","i","n","f","o","r","m","a","t","i","k"]
print a.index("i")
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
>>>
1
  • Bu hafta anlatmak istediğim başka bir fonksiyon join. Özellikle listeyi string' e çevirmek istediğim zaman oldukça kullanışlı bir yöntem. Bir iki örnek ile çok daha iyi anlaşılacaktır.
a = "biyoinformatik"
print ",".join(a)
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
>>>
b,i,y,o,i,n,f,o,r,m,a,t,i,k
a = ["b","i","y","o","i","n","f","o","r","m","a","t","i","k"]
print "".join(a)
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
>>>
biyoinformatik
Gördüğünüz gibi listeyi string'e çevirdik. join fonksiyonunun başındaki tırnak işaretinin içine ne koyarsanız iki eleman arasına onu ekler.

  • Anlatmak istediğim son metod split. Yine çok önemli ve çok kullanışlı bir yöntemdir. Aslında mantık olarak join ile zıt çalışıyor diyebiliriz.
a =  ["b","i","y","o","i","n","f","o","r","m","a","t","i","k"]
b = ",".join(a)
print b
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
>>>
b,i,y,o,i,n,f,o,r,m,a,t,i,k
Yukarıdaki kodun altına eğer şunu eklersek bakalım neler oluyor.
print b.split(",")
Bu kodu yazdığınızda çıktısı şu şekilde olacaktır:
>>>
['b', 'i', 'y', 'o', 'i', 'n', 'f', 'o', 'r', 'm', 'a', 't', 'i', 'k']
Aslında split fonksiyonunu kullandığımızda tırnak içindeki elemandan string' i bölüyor ve hepsini listeye atıyor.

Umarım anlaşılabilir bir şekilde yazmışımdır. Bu haftalık benden bu kadar. Haftaya yeni yazımda görüşmek üzere.

Bilgi paylaştıkça güzelleşir. Paylaşarak öğrenmek dileğiyle.

Osman

Hiç yorum yok:

Yorum Gönder