美文网首页
xshell-7 本地构建blastp并快速计算POCP值202

xshell-7 本地构建blastp并快速计算POCP值202

作者: RashidinAbdu | 来源:发表于2022-01-13 19:20 被阅读0次

    *#### 目的: 进行保守蛋白相似性,即 percentage of conserved proteins (POCP) 从而区分属水平的距离。为此,首先需要构建本地blastp,并用现有的Python程序进行计算!

    1. 本地blastp的构建:

    • (注意:因为后续用的Python路径写的是E,所以必须是在E盘下!)

    • 在ncbi下载对应的ncbi-blast-2.10.0+-win64,文件,比如:选择64位的exe, 点击并在E盘构建一个POCP文件夹,其中建立database文件,并安装上述程序!

    • 下载地址:
    ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/
    
    • 原因如下:

    cd E:\POCP
    
    图片.png
    • 并创建三个文件夹:名称如下:

    • Rawdata
    • Database
    • Result
    • 不得错,区分大小写!

    图片.png
    • 把上面下载的exe安装到Database下:

    • 重点来了:安装时生成的bin文件下的所有文件都要拿出来,直接放在POCP文件夹下!

    图片.png image.png

    2. 下载和安装pocp计算程序:

    • 下载地址:
    https://github.com/2015qyliang/POCP/commit/f2adfb205fb6d91a28d7afe308f209c175f266da#diff-5124dfd2e4a9ae1bf5b439932a2b65892f0ba108d5643c346e62ccc125109c64
    
    • 或者:
    https://github.com/2015qyliang/POCP
    
    
    • 重点来了:改动的代码都是那个615py里的!其中的最终代码为:

    print("hello world")
    import os
    import pandas as pd
    from collections import OrderedDict
    
    def Total(filename):
        os.chdir(rawFilePath)
        file = open(filename)
        text = file.read()
        proteinTotal = text.count('>')
        file.close()
        return proteinTotal
    
    
    def aaTotal(filename):
        os.chdir(rawFilePath)
        file = open(filename)
        text = file.read()
        file.close()
        ltsp = text.split('>')
        aaDict = OrderedDict()
        for line in ltsp:
            if line != '':
                firstBreakIndex = line.index('\n')
                key = line[:firstBreakIndex].split(' ')[0]
                aaDict[key] = len(line[firstBreakIndex:])
            else:
                pass
        return aaDict
    
    
    def creatdb():
        os.chdir(scriptPath)
        proc1 = r'.\makeblastdb.exe -dbtype prot -parse_seqids -in .\Rawdata\\'
        proc2 = r' -out .\Database\\'
        for fn in fnlist:
            process = proc1 + fn + proc2 + fn.split('.')[0]
            print('='*10,process)
            os.system(process)
    
    # 定义流程化blastp函数
    def blast():
        proc1 = r'.\blastp.exe -evalue 1e-5 -max_target_seqs 1 -outfmt 6'
        proc2 = r' -query .\Rawdata\\'
        proc3 = r' -db .\Database\\'
        proc4 = r' -out .\Result\\'
        for fn in fnlist:
            os.chdir(scriptPath)
            index = fnlist.index(fn)
            if index != len(fnlist)-1:
                A = fn
                B = fnlist[index + 1]
                # A2B
                processAB = proc1 + proc2 + A + proc3 + B.split('.')[0] + proc4 + A.split('.')[0] + 'TO' + B.split('.')[0] + '.tab'
                # B2A
                processBA = proc1 + proc2 + B + proc3 + A.split('.')[0] + proc4 + B.split('.')[0] + 'TO' + A.split('.')[0] + '.tab'
                print('='*10,processAB)
                os.system(processAB)
                print('='*10,processBA)
                os.system(processBA)
                os.chdir(resultPath)
                resultFileName1 = A.split('.')[0] + 'TO' + B.split('.')[0] + '.tab'
                resultFileName2 = B.split('.')[0] + 'TO' + A.split('.')[0] + '.tab'
                dframe1 = pd.read_csv(resultFileName1, sep = '\t')
                dframe2 = pd.read_csv(resultFileName2, sep = '\t')
                D1 = aaTotal(A)
                for i in range(dframe1.shape[0]):
                    dframe1.iloc[i,11] = (dframe1.iloc[i,3])/(D1[dframe1.iloc[i,0]])
                cdframe1 = dframe1[dframe1.iloc[:,2] > 40]
                cdframe11 = cdframe1[cdframe1.iloc[:,11] > 0.5]
                C1 = cdframe11.shape[0]
                D2 = aaTotal(B)
                for i in range(dframe2.shape[0]):
                    dframe2.iloc[i,11] = (dframe2.iloc[i,3])/(D2[dframe2.iloc[i,0]])
                cdframe2 = dframe2[dframe2.iloc[:,2] > 40]
                cdframe22 = cdframe2[cdframe2.iloc[:,11] > 0.5]
                C2 = cdframe22.shape[0]
                T1 = Total(A)
                T2 = Total(B)
                POCP = round((((C1 + C2)/(T1 + T2))*100),2)
    
                pocpResult.append(A.split('.')[0] + '\t' + B.split('.')[0] + '\t' + str(POCP) + '\n')
            else:
                pass
    
    
    rawFilePath = r'D:\POCP\Rawdata'
    scriptPath = r'D:\POCP'
    resultPath = r'D:\POCP\Result'
    fnlist = os.listdir(rawFilePath)
    pocpResult = []
    creatdb()
    blast()
    os.chdir(scriptPath)
    
    
    
    
    from datetime import datetime
    
    with open('POCP_Result_'+datetime.now().date().isoformat()+'.txt', 'w')as file:
        for line in pocpResult:
            file.write(line)
        file.close()
    print('='*50)
    
    
    • 下载后解压到POCP文件下,打开后20180615.py那个文件里的路径是默认E盘的,所以需要改路径!是r下的路径,改为D开头的,然后再处理!

    rawFilePath = r'D:\POCP\Rawdata'
    scriptPath = r'D:\POCP'
    resultPath = r'D:\POCP\Result'
    
    • 改行代码,只保留两位小数:一行只保留两位小数的代码:用round函数,先乘以100,再取2位小数:
    POCP = round((((C1 + C2)/(T1 + T2))*100),2)
    
    • 其中,文件名那行,我是已经写了代码,即输出结果的时候,可以直接输出为POCP-带当天日期!

    from datetime import datetime
    
    with open('POCP'+datetime.now().date().isoformat()+'.txt', 'w')as file:
        for line in pocpResult:
            file.write(line)
        file.close()
    print('='*50)
    
    图片.png

    3. 下载细菌基因组对用的蛋白质序列!注意是蛋白质序列!!!!

    • 比如:先到NCBI,搜索基因组,点击出来的基因组后的protein,下载后解压,得到faa文件,将其后缀改为fasta,即可!
    • 注意:文件名之间不得有空格!所以最简单的方法就是命名如:strain1.fasta
    • 同样的方法将两个想要比较的基因组的蛋白质序列进行比较,然后再进行最后一步,进行比较!
    https://www.ncbi.nlm.nih.gov/genome/?term=Blautia+faecis
    

    图片.png

    4. 进行pocp的计算:

    • 在Windows上,打开powershell: 将鼠标点击Windows窗口处,然后输入powershell即可,然后运行如下:
    图片.png
    • 运行之后进入上面的设置的路径:
    1. 进入路径:
     cd E:\POCP\
    
    1. 运行里面放着的程序(注意:事先确保电脑上装过Python,如果没有安装过,可以点击最下面那个下载并安装即可):
    • 计算pocp值:(计算可能需要五分钟左右,计算完了这一组就得删除这一组蛋白质序列,放上新的一对,才能进行下一组的计算!)
    python .\pocpPipeline.py
    
    • 运行结束页面:


      图片.png
    • 修改后的代码给出的结果在如下txt文件下:

    • 然后就在pocp文件夹下看到一个TXT结果,请注意:不是在result!


      图片.png
    • 查看结果:0.4866850321395776,即48.67%
    图片.png
    • 改好的代码输出的结果氏这样的:

    image.png

    相关文章

      网友评论

          本文标题:xshell-7 本地构建blastp并快速计算POCP值202

          本文链接:https://www.haomeiwen.com/subject/hrxzcrtx.html