簡體   English   中英

如何在生物信息學上並行運行 python 腳本

[英]how to parallel running of python scripts on bioinformatics

我希望使用 python 讀取 fasta 序列文件並將其轉換為熊貓 dataframe。 我使用以下腳本:

from Bio import SeqIO
import pandas as pd

def fasta2df(infile):
    records = SeqIO.parse(infile, 'fasta')
    seqList = []
    for record in records:
        desp = record.description
        # print(desp)
        seq = list(record.seq._data.upper())
        seqList.append([desp] + seq)
        seq_df = pd.DataFrame(seqList)
        print(seq_df.shape)
        seq_df.columns=['strainName']+list(range(1, seq_df.shape[1]))
    return seq_df


if __name__ == "__main__":
    path = 'path/to/the/fasta/file'
    input = path + 'GISAIDspikeprot0119.selection.fasta'
    df = fasta2df(input)

'GISAIDspikeprot0119.selection.fasta' 文件位於https://drive.google.com/file/d/1F5Ir5S6h9rFsVUQkDdZpomiWo9_bXtaW/view?usp=sharing

該腳本可以在我的 linux 工作站上僅使用一個 cpu 內核運行,但是是否可以使用更多內核(多個進程)運行它以便運行得更快? 那將是什么代碼?

非常感謝!

在為您的問題投入更多 CPU 之前,您應該花一些時間檢查代碼的哪些部分運行緩慢。

在您的情況下,您在每次循環迭代中執行昂貴的轉換seq_df = pd.DataFrame(seqList) 這只是在浪費 CPU 時間,因為結果seq_df在下一次迭代中被覆蓋。

你的代碼在我的機器上用了 15 分鍾。 pd.DataFrame(seqList)print語句移出循環后,它下降到約 15 秒。

def fasta2df(infile):
    records = SeqIO.parse(infile, 'fasta')
    seqList = []
    for record in records:
        desp = record.description
        seq = list(record.seq._data.upper())
        seqList.append([desp] + seq)
    seq_df = pd.DataFrame(seqList)
    seq_df.columns = ['strainName'] + list(range(1, seq_df.shape[1]))
    return seq_df

事實上,幾乎所有的時間都花在seq_df = pd.DataFrame(seqList) ——對我來說大約是 13 秒。 通過將 dtype 顯式設置為 string,我們可以將其降低到 ~7 秒:

def fasta2df(infile):
    records = SeqIO.parse(infile, 'fasta')
    seqList = []
    for record in records:
        desp = record.description
        seq = list(record.seq._data.upper())
        seqList.append([desp] + seq)
    seq_df = pd.DataFrame(seqList, dtype="string")
    seq_df.columns = ['strainName'] + list(range(1, seq_df.shape[1]))
    return seq_df

有了這種新的性能,我非常懷疑您是否可以通過並行處理進一步提高速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM