dna

#fasta etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
#fasta etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

21 Mart 2023 Salı

Python ile BLAST uygulaması

BLAST (Basic Local Alignment Search Tools: Temel Yerel Hizalama Arama Aracı), nükleotit veya protein dizilerini bir dizi veritabanına göre karşılaştırmak ve hizalamak için yaygın olarak kullanılan bir biyoinformatik programıdır. BLAST, Stephen Altschul ve Ulusal Sağlık Enstitüleri'ndeki (NIH) meslektaşları tarafından 1990'ların başında geliştirildi ve o zamandan beri en yaygın kullanılan biyoinformatik araçlarından biri haline geldi.

BLAST algoritması, bir sorgu dizisi ile bir veritabanındaki diziler arasındaki yerel hizalamaları bularak ve ardından bu hizalamaları benzerlik derecesine ve hizalanmış bölgelerin uzunluğuna göre puanlayarak çalışır. Program daha sonra bulunan en iyi eşleşmeleri ve istatistiksel öneminin bir ölçüsünü bildirir. 

BLAST, biyoinformatikte çeşitli görevler için kullanılır, örneğin:

  • Bir veritabanındaki homolog dizileri tanımlama
  • Bilinen dizilere benzerliğe dayalı olarak yeni dizilere açıklama ekleme
  • Dizileri benzerliğe göre ailelere veya gruplara ayırma
  • Bir dizide biline motifleri veya alanları arama
  • BLAST, Ulusal Biyoteknoloji Bilgi Merkezi (NCBI) ve diğer kuruluşlar tarafından sağlanan web tabanlı bir hizmetin yanı sıra yerel bir bilgisayarda çalıştırılabilen bağımsız bir programdır.

Python ile BLAST uygulaması kodları:

1. İlk olarak Biopython Kütüphanesinden SeqIO, NCIWWW ve NCBIXML modüllerini import etme:
from Bio.Blast import NCBIWWW, NCBIXML
from Bio import SeqIO
NCBIWWW modülü ve NCBIXML modülü, Biopython'da web API'leri aracılığıyla NCBI (Ulusal Biyoteknoloji Bilgi Merkezi) veritabanlarıyla etkileşim kurmanıza izin veren iki modüldür.

NCBIWWW modülü, NCBI'nin web sunucusuna istek göndermek ve GenBank, PubMed ve BLAST gibi NCBI veritabanlarından veri almak için işlevler sağlar. NCBIWWW modülü ile sorgu gönderebilir, dizileri alabilir ve diğer işlemleri programlı olarak gerçekleştirebilirsiniz.

NCBIXML modülü, NCBI web hizmetleri tarafından döndürülen XML biçimli verileri ayrıştırmak için işlevler sağlar. Birçok NCBI veri tabanı, verileri bilgisayarlar tarafından kolayca ayrıştırılabilen yapılandırılmış bir metin biçimi olan XML biçiminde döndürür. NCBIXML modülü ile NCBI web servislerinin döndürdüğü XML verilerinden bilgi çıkarabilir, Python programlarınızda kullanabilirsiniz.

Birlikte, bu modüller, özellikle biyoinformatik ve genom araştırmaları için yararlı olan Python'u kullanarak NCBI'nin geniş biyolojik veri tabanları koleksiyonundan verilere erişmeyi ve verileri almayı kolaylaştırır.

2. FASTA Dosyalarını okutma:
# FASTA dosyalarını okuma
query = SeqIO.read("BRCA1.fasta", "fasta")
subject = SeqIO.read("BRCA2.fasta", "fasta")
3. BLAST araması yapma:
# Perform BLAST search
result_handle = NCBIWWW.qblast("blastn", "nt", query.seq,
descriptions=10,
alignments=10,
hitlist_size=10)
NCBIWWW.qblast() işlevini kullanarak bir BLAST araması gerçekleştirir. Spesifik olarak, sorgu dizisini (query.seq) kullanarak NCBI nükleotit veri tabanına (nt) karşı bir nükleotid-nükleotit BLAST araması (blastn) gerçekleştirir. İşlev ayrıca çıktının sırasıyla açıklamalar (descriptions), hizalamalar (alignments) ve hitlist_size (isabet) parametreleri kullanılarak en fazla 10 açıklama, 10 hizalama ve 10 isabet içermesi gerektiğini belirtir.

4. BLAST sonuçlarını XML uzantılı dosyaya yazdırma:
# BLAST çıktılarını xml uzantılı dosyaya kaydetme
with open("blast_output.xml", "w") as out_handle:
out_handle.write(result_handle.read())
result_handle.close()
Bu satırlar, yazma modunda ("w") open() işlevini kullanarak BLAST çıktısını blast_output.xml adlı bir dosyaya kaydeder. result_handle.read() yöntemi, daha sonra out_handle.write() kullanılarak dosyaya yazılan BLAST aramasının çıktısını okumak için kullanılır. BLAST sunucusuna bağlantıyı kapatmak için result_handle.close() yöntemi kullanılır.

5. BLAST sonuçlarını saklama:
# BLAST sonuçlarını elinde tutma/saklama
blast_records = NCBIXML.parse(open("blast_output.xml"))
Bu satır, "blast_output.xml" dosyasına kaydedilen BLAST arama çıktısını okur ve bunu bir blast_records nesnesinde saklar.

6. BLAST sonuçlarını işleme:
# BLAST sonuçlarını işleme
for blast_record in blast_records:
for alignment in blast_record.alignments:
print("Alignment:", alignment.title)
for hsp in alignment.hsps:
print("Query start:", hsp.query_start)
print("Query end:", hsp.query_end)
print("Subject start:", hsp.sbjct_start)
print("Subject end:", hsp.sbjct_end)
print("Alignment length:", hsp.align_length)
print("Score:", hsp.score)
print("E-value:", hsp.expect)
print("Identity:", hsp.identities)
print("Gaps:", hsp.gaps)
  • for blast_record in blast_records: Bu, BLAST aramasının sonuçlarını içeren ayrıştırılmış bir XML dosyası olan blast_records nesnesindeki her bir blast_record üzerinde yinelenen bir döngü başlatır.
  • for alignment in blast_record.alignments: Bu, mevcut blast_record'un hizalamalar nesnesindeki her hizalama üzerinde yinelenen başka bir döngü başlatır. Her hizalama, BLAST veritabanında sorgu dizisiyle eşleşen bir diziyi temsil eder.
  • print("Alignment:", alignment.title): Bu, mevcut hizalamanın, tipik olarak hizalamanın temsil ettiği veritabanı sırasını tanımlayan başlığını yazdırır.
  • for hsp in alignment.hsps: Bu, geçerli hizalamanın hsps nesnesindeki her HSP (high- scoring segment pair-yüksek puan alan parça çifti) üzerinde yinelenen başka bir döngü başlatır. Bir HSP, yüksek bir puanla birbiriyle hizalanan sorgu ve konu dizilerinin bitişik bir bölümüdür.
  • print("Query start:", hsp.query_start): Bu, HSP'nin sorgu sırasındaki başlangıç konumunu yazdırır.
  • print("Query end:", hsp.query_end): Bu, HSP'nin sorgu sırasındaki bitiş konumunu yazdırır.
  • print("Subject start:", hsp.sbjct_start): Bu, HSP'nin Subject (veritabanı) sırasındaki başlangıç konumunu yazdırır.
  • print("Subject end:", hsp.sbjct_end): Bu, HSP'nin Subject dizisindeki bitiş konumunu yazdırır.
  • print("Alignment length:", hsp.align_length): Bu, HSP hizalamasının uzunluğunu yazdırır.
  • print("Score:", hsp.score): Bu, HSP'nin hizalama puanını yazdırır.
  • print("E-value:", hsp.expect): Bu, hizalamanın öneminin bir ölçüsü olan HSP'nin E-değerini yazdırır.
  • print("Identity:", hsp.identities): Bu, HSP'deki aynı kalıntıların sayısını yazdırır.
  • print("Gaps:", hsp.gaps): Bu, HSP'deki gap sayısını yazdırır.
Not: Bütün bunları 'blast_output.xml' dosyasına yazdırır ve kaydeder. kaydedilen yer ise python kodunu çalıştırdığınız dosya yoluna kaydeder.

Kodun tam hali:
from Bio.Blast import NCBIWWW, NCBIXML
from Bio import SeqIO


# FASTA dosyalarını okuma
query = SeqIO.read("BRCA1.fasta", "fasta")
subject = SeqIO.read("BRCA2.fasta", "fasta")

# BLAST üzerinden arama
result_handle = NCBIWWW.qblast("blastn", "nt", query.seq,
descriptions=10,
alignments=10,
hitlist_size=10)

# BLAST çıktılarını xml uzantılı dosyaya kaydetme
with open("blast_output.xml", "w") as out_handle:
out_handle.write(result_handle.read())
result_handle.close()

# BLAST sonuçlarını elinde tutma/saklama
blast_records = NCBIXML.parse(open("blast_output.xml"))

# BLAST sonuçlarını işleme
for blast_record in blast_records:
for alignment in blast_record.alignments:
print("Alignment:", alignment.title)
for hsp in alignment.hsps:
print("Query start:", hsp.query_start)
print("Query end:", hsp.query_end)
print("Subject start:", hsp.sbjct_start)
print("Subject end:", hsp.sbjct_end)
print("Alignment length:", hsp.align_length)
print("Score:", hsp.score)
print("E-value:", hsp.expect)
print("Identity:", hsp.identities)
print("Gaps:", hsp.gaps)
GUNDUZ M.F.

Referans:
  1. http://biopython.org/DIST/docs/tutorial/Tutorial.html#sec153

11 Mart 2023 Cumartesi

Python ile Fasta Formatında Gen İndirme İşlemi

NCBI'da (National Center for Biotechnology Information) genom, gen, protein, OMIM, SNP ve taksonomi gibi pek çok veri saklanmaktadır. Bu verileri Python kullanarak kendi bilgisayarınıza fasta formatında indirip, farklı araçlarla analiz yapabilirsiniz. 

Python ile fasta formatında gen indirme:

İlk önce bilgisayarımıza CMD üzerinden Python kütüphanesi olan Biopyton kütüphanesini indirmeliyiz:
>>>pip install biopython
1. Daha sonra PyCharm üzerinden Biopython kütüphanesinden Entrez, SeqIO import etmeliyiz:
from Bio import Entrez, SeqIO
Entrez ve SeqIO modülleri, biyolojik hesaplama için bir dizi Python aracı olan Biopython kitaplığının parçasıdır.

Entrez modülü, Gen ve Nükleotit veritabanları gibi NCBI (Ulusal Biyoteknoloji Bilgi Merkezi) veritabanlarına erişme ve biyolojik verileri alma işlevleri sağlar. NCBI veritabanlarından dizileri, ek açıklamaları ve diğer bilgileri aramak ve almak için işlevler içerir.

SeqIO modülü, biyolojik sekans verilerini FASTA, GenBank ve FASTQ gibi çeşitli formatlarda ayrıştırmak ve işlemek için işlevler sağlar. Bu formatlardaki dizileri okuyabilir, yazabilir ve bunlar arasında dönüştürebilir. Ayrıca dizi hizalaması ve manipülasyonu için işlevler içerir.

Birlikte, bu modüller, NCBI veritabanlarından biyolojik verilere erişmek ve analiz etmek için güçlü ve kullanışlı bir yol sağlar.

2. NCBI hesabınızla ilişkili e-posta adresini ayarlayın.
Entrez.email = "your.email@example.com"
Buraya kendi e-mailinizi yazmanız gerekir.

3. İstediğimiz geni NCBI'da bulmamız için istenilen verileri girmeliyiz. Ben örnek olarak Beta Globin (Hemoglobin subunit beta) genini arattırdım.
#İnsan genomunda HBB genini arayın
handle = Entrez.esearch(db="gene", term="Homo sapiens[horgn]"
"AND HBB[gene]",retmax=1)
record = Entrez.read(handle)
gene_id = record['IdList'][0]
Gen veritabanında Homo sapiens organizması ve HBB geni aramak için Entrez.esearch() işlevini kullanılır. Arama, eşleşen gen kimliklerinin bir listesini döndürür. Retmax parametresi, sonuçları ilk eşleşen genle sınırlamak için 1'e ayarlanır. (Farklı bir geni bulmak için 'HBB' yerine istediğiniz gen ismini yazabilirsiniz.)

record['IdList'] değişkeni, arama sorgusuyla eşleşen gen kimliklerinin bir listesini saklar. Bu durumda, Entrez.esearch() işlev çağrısında retmax parametresini kullanarak arama sonuçlarını bir genle sınırlıyoruz. Bu nedenle, liste yalnızca bir gen kimliği içerecektir ve ona 0 indeksini kullanarak erişebiliriz.

Böylece, gene_id = record['IdList'][0], arama sorgusu tarafından döndürülen gen kimlikleri listesinden ilk (ve tek) gen kimliğini alır ve onu gene_id değişkenine atar.

4. İlk eşleşen gen ID sini almak için:
#HBB geni için mRNA dizisini al
handle = Entrez.efetch(db="nucleotide", id=gene_id, rettype="fasta",
retmode="text")
record = SeqIO.read(handle, "fasta")
handle.close()

Bulunan gen kimliği için nükleotit dizisini almak üzere Entrez.efetch() işlevini kullanırız. Diziyi FASTA formatında almak için rettype parametresi "fasta" olarak ayarlanır.

5. Bulunan gen ID'sindeki nükleotid dizisini Fasta formatına yazdırmak için:
#mRNA dizisini "HBB.fasta" adlı bir dosyaya kaydetmek için.
with open("HBB.fasta", "w") as output_handle:
SeqIO.write(record, output_handle, "fasta")

print("Done!")

SeqIO.read() işlevini kullanarak alınan FASTA biçimli diziyi ayrıştırır.

Alınan mRNA dizisini SeqIO.write() işlevini kullanarak "HBB.fasta" adlı bir dosyaya yazdırır.

Not: Fasta dosyasını kodu çalıştırdığınız dosya yoluna kaydeder. 

Kodun tam hali:
from Bio import Entrez, SeqIO

#Buraya kendi Entrez emailinizi yazmanız gerekir.
Entrez.email = "your.email@example.com"

#İnsan genomunda HBB genini arayın
handle = Entrez.esearch(db="gene", term="Homo sapiens[horgn] "
"AND HBA1[gene]", retmax=1)
record = Entrez.read(handle)
gene_id = record['IdList'][0]

#HBB geni için mRNA dizisini al
handle = Entrez.efetch(db="nucleotide", id=gene_id, rettype="fasta",
retmode="text")
record = SeqIO.read(handle, "fasta")
handle.close()

#mRNA dizisini "HBB.fasta" adlı bir dosyaya kaydetmek için.
with open("HBA1.fasta", "w") as output_handle:
SeqIO.write(record, output_handle, "fasta")

print("Done!")

Referans: 
  1. https://biopython.org/
  2. http://biopython.org/DIST/docs/tutorial/Tutorial.html

Pan-Genom: Yaşamın Genetik Karmaşıklığının Kilidini Açmak

Genomik alanında, bilim adamları uzun zamandır farklı türler arasındaki genetik bilginin çeşitliliği ve karmaşıklığından büyülenmişlerdir. G...