标签: bioinformatics

Python,巨大的迭代性能问题

我正在做3个单词的迭代,每个单词大约有500万个字符,我想找到20个字符的序列来识别每个单词.也就是说,我想在一个单词中找到长度为20的所有序列,这个序列对于该单词是唯一的.我的问题是我写的代码需要很长时间才能运行.我甚至没有完成一个单词来运行我的程序过夜.

下面的函数采用包含字典的列表,其中每个字典包含20个可能的单词,以及500万个单词之一的位置.

如果有人知道如何优化这个我会非常感激,我不知道如何继续......

这是我的代码示例:

def findUnique(list):
    # Takes a list with dictionaries and compairs each element in the dictionaries
    # with the others and puts all unique element in new dictionaries and finally
    # puts the new dictionaries in a list.
    # The result is a list with (in this case) 3 dictionaries containing all unique
    # sequences and their locations from each string.
    dicList=[]
    listlength=len(list)
    s=0
    valuelist=[]
    for i in list:
        j=i.values()
        valuelist.append(j)
    while s<listlength:
        currdic=list[s]
        dic={}
        for key …
Run Code Online (Sandbox Code Playgroud)

python iteration bioinformatics

9
推荐指数
1
解决办法
723
查看次数

你如何使用Ruby on Rails进行科学研究(如果适用)?

我们从事系统生物学研究.我们更喜欢使用现有的数据集,因为收集新的生物数据是昂贵的.因此,我们编写的许多脚本只不过是将一个数据集转换为另一个数据集.

最终,我们将结果放在网上 - 越来越多的期刊需要这样的东西.

因此,对我来说,尝试将Rails用于我的项目并不是一个很大的飞跃.我可以设置简单的可重复实验,逐步通过数据库表(例如使用rake)转换数据,并使用像flotomatic和gnuplot 这样的宝石显示结果.如果我需要的东西很快跑,我甚至可以用C编写自定义的宝石++使用水稻,或者使用并行八哥workling.

最后,我开始怀疑是否有其他人正在使用Rails进行生物信息学或科学研究.

我想,"如果我是一个科学研究Rails宝石,我该怎么办?"

这样的宝石有什么额外的功能?也许迁移适应了一个可以管理的管道?也许更高级的图形功能?内置后台工作?

ruby-on-rails bioinformatics

9
推荐指数
1
解决办法
1552
查看次数

'StringCut'使用Mathematica在定义位置的左侧或右侧

在阅读这个问题时,我认为以下问题很简单StringSplit

给定以下字符串,我想在每个"D"的左侧"剪切"它,以便:

  1. 我得到一个片段列表(序列不变)

  2. StringJoin@fragments返回原始字符串(但如果我必须重新排序片段以获得此字符串,则无关紧要).也就是说,每个片段中的序列很重要,我不想丢失任何字符.

(我感兴趣的例子是蛋白质序列(字符串),其中每个字符代表一个字母代码中的氨基酸.我想获得通过用已知在"D"之前分裂的酶处理获得的所有片段的理论列表. )

str = "MTPDKPSQYDKIEAELQDICNDVLELLDSKGDYFRYLSEVASGDN"
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的是在每个"D"之前插入一个空格StringReplace然后使用StringSplit.至少可以说,这似乎很尴尬.

frags1 = StringSplit@StringReplace[str, "D" -> " D"]
Run Code Online (Sandbox Code Playgroud)

作为输出:

{"MTP", "DKPSQY", "DKIEAELQ", "DICN", "DVLELL", "DSKG", "DYFRYLSEVASG", "DN"}
Run Code Online (Sandbox Code Playgroud)

或者,使用StringReplacePart:

frags1alt = 
 StringSplit@StringReplacePart[str, " D", StringPosition[str, "D"]]
Run Code Online (Sandbox Code Playgroud)

最后(更现实地),如果我想在"D"之前分裂,前提是它前面的残留物不是"P"[即PD,(Pro-Asp)键未被切割],我这样做:

StringSplit@StringReplace[str, (x_ /; x != "P") ~~ "D" -> x ~~ " D"]
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?

速度不一定是个问题.我不太可能处理大于500个字符的字符串.我正在使用Mma 7.

更新

我添加了生物信息学标签,我认为从该领域添加一个例子可能会引起兴趣.

以下使用eutilsNCBI数据库中导入蛋白质序列(牛血清白蛋白,登录号3336842),然后产生(理论上的)胰蛋白酶消化物.假设A2不是"R","K"或"P",我认为当A1是"R"或"K"时,酶tripin在残基A1-A2之间切割.如果有人有任何改进建议,请随时提出修改建议.

使用sakra方法的修改('db ='之后的回车可能需要删除):

StringJoin /@ 
   Split[Characters[#], 
    And @@ Function[x, …
Run Code Online (Sandbox Code Playgroud)

string wolfram-mathematica bioinformatics

9
推荐指数
2
解决办法
337
查看次数

使用python查找频繁的字符串模式

所以我试图解决这个问题,我必须在python的某些行中找到最常用的6个字母的字符串,所以我意识到可以做这样的事情:

>>> from collections import Counter
>>> x = Counter("ACGTGCA")
>>> x
Counter({'A': 2, 'C': 2, 'G': 2, 'T': 1})
Run Code Online (Sandbox Code Playgroud)

现在,我使用的数据是DNA文件,文件的格式如下:

> name of the protein
ACGTGCA ... < more sequences> 
ACGTGCA ... < more sequences> 
ACGTGCA ... < more sequences> 
ACGTGCA ... < more sequences> 

> another protein 
AGTTTCAGGAC ... <more sequences>
AGTTTCAGGAC ... <more sequences>
AGTTTCAGGAC ... <more sequences>
AGTTTCAGGAC ... <more sequences>
Run Code Online (Sandbox Code Playgroud)

我们可以从一次运行一个蛋白质开始,但是如何修改上面的代码块来搜索最常见的6个字符的字符串模式?谢谢.

python string bioinformatics

9
推荐指数
1
解决办法
3017
查看次数

如何使用R删除具有0值的行

您正在使用基因表达矩阵,片段计数来计算差异表达的基因.我想知道如何删除值为0的行.然后我的数据集将是紧凑的,并且我将使用此矩阵为下游分析提供更少的虚假结果.

输入

gene    ZPT.1   ZPT.0   ZPT.2   ZPT.3   PDGT.1  PDGT.0
XLOC_000001 3516    626 1277    770 4309    9030
XLOC_000002 342 82  185 72  835 1095
XLOC_000003 2000    361 867 438 454 687
XLOC_000004 143 30  67  37  90  236
XLOC_000005 0   0   0   0   0   0
XLOC_000006 0   0   0   0   0   0
XLOC_000007 0   0   0   0   1   3
XLOC_000008 0   0   0   0   0   0
XLOC_000009 0   0   0   0   0   0
XLOC_000010 7   1   5   3   0   1
XLOC_000011 …
Run Code Online (Sandbox Code Playgroud)

r bioinformatics

9
推荐指数
1
解决办法
3万
查看次数

具有仿射空位罚分的Smith-Wateman算法中的回溯

我正在尝试使用仿射空位罚函数实现用于局部序列比对的Smith-Waterman算法.我想我理解如何启动和计算计算校准分数所需的矩阵,但我不知道如何追溯以找到对齐.要生成所需的3个矩阵,我有以下代码

for j in range(1, len2):
    for i in range(1, len1):
        fxOpen = F[i][j-1] + gap
        xExtend = Ix[i][j-1] + extend
        Ix[i][j] = max(fxOpen, xExtend)

        fyOpen = F[i-1][j] + gap
        yExtend = Iy[i-1][j] + extend
        Iy[i][j] = max(fyOpen, yExtend)

        matchScore = (F[i-1][j-1]  + simMatrixDict[seq1[i-1]+seq2[j-1]])
        xScore = Ix[i-1][j-1] + simMatrixDict[seq1[i-1]+seq2[j-1]]
        yScore = Iy[i-1][j-1] + simMatrixDict[seq1[i-1]+seq2[j-1]]
        F[i][j] = max(0, matchScore, xScore, yScore)
Run Code Online (Sandbox Code Playgroud)

我不确定我是否需要一个矩阵用于追溯,或者只需要1?任何关于如何从F中的最大分数追溯的澄清将非常感激.

python bioinformatics biopython sequence-alignment

9
推荐指数
1
解决办法
6751
查看次数

将SNP ID映射到基因组坐标

我有几个SNP ID(即rs16828074,rs17232800等),我想在UCSC基因组网站的Hg19基因组中找到它们的坐标.

我更愿意用它R来实现这个目标.怎么做?

r bioinformatics genetics bioconductor genome

9
推荐指数
1
解决办法
6205
查看次数

WinError 2系统找不到指定的文件(Python)

我有一个Fortran程序,并希望在python中为多个文件执行它.我有2000个输入文件,但在我的Fortran代码中,我一次只能运行一个文件.我应该如何在python中调用Fortran程序?

我的剧本:

import subprocess
import glob
input = glob.glob('C:/Users/Vishnu/Desktop/Fortran_Program_Rum/*.txt')
output = glob.glob('C:/Users/Vishnu/Desktop/Fortran_Program_Rum/Output/')
f = open("output", "w")
for i in input:
    subprocess.Popen(["FORTRAN ~/C:/Users/Vishnu/Desktop/Fortran_Program_Rum/phase1.f", "--domain "+i])
f.write(i)
Run Code Online (Sandbox Code Playgroud)

错误:

runfile('C:/Users/Vishnu/Desktop/test_fn/test.py', wdir='C:/Users/Vishnu/Desktop/test_fn')
Traceback (most recent call last):

   File "<ipython-input-3-f8f378816004>", line 1, in <module>
runfile('C:/Users/Vishnu/Desktop/test_fn/test.py', wdir='C:/Users/Vishnu/Desktop/test_fn')

  File "C:\Users\Vishnu\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)

  File "C:\Users\Vishnu\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/Vishnu/Desktop/test_fn/test.py", line 30, in <module>
subprocess.Popen(["FORTRAN ~/C:/Users/Vishnu/Desktop/Fortran_Program_Rum/phase1.f", "--domain "+i])

  File "C:\Users\Vishnu\Anaconda3\lib\subprocess.py", line 707, in __init__
restore_signals, start_new_session)

  File "C:\Users\Vishnu\Anaconda3\lib\subprocess.py", line …
Run Code Online (Sandbox Code Playgroud)

python bioinformatics f2py python-2.7 python-3.x

9
推荐指数
2
解决办法
6万
查看次数

大规模图中的拓扑排序示例

我有兴趣找到一些需要拓扑排序的真实世界海量数据集(> = 1M).也许与生物信息学相关的东西?

bioinformatics topological-sort directed-acyclic-graphs

9
推荐指数
1
解决办法
154
查看次数

在Django和Django REST Framework中使用保留字"class"作为字段名称

问题描述

分类学是在共同特征的基础上定义和命名生物有机体群的科学.生物被组合成分类群(单数:分类单元),这些组被赋予分类等级.现代使用的主要等级是领域,王国,门,阶级,秩序,家庭,属和物种.有关维基百科中的分类分类排名的更多信息.

按照维基百科文章分类排名中的红狐狸示例,我需要创建一个这样的JSON输出:

{
    "species": "vulpes",
    "genus": "Vulpes",
    "family": "Canidae",
    "order": "Carnivora",
    "class": "Mammalia",
    "phylum": "Chordata",
    "kingdom": "Animalia",
    "domain": "Eukarya"
}
Run Code Online (Sandbox Code Playgroud)

由于Django REST Framework基于字段名称创建密钥,因此问题出现在分类等级(示例中为粗体),因为它是Python中的保留字,不能用作变量名.

我试过了什么

在Django中创建的模型类看起来像这样:

class Species(models.Model):
    species = models.CharField()
    genus = models.CharField()
    family = models.CharField()
    # class = models.CharField() - class is reserved word in Python
    # class_ = models.CharField() - Django doesn't allow field names
    # ending with underscore. That wouldn't be either …
Run Code Online (Sandbox Code Playgroud)

python django bioinformatics python-3.x django-rest-framework

9
推荐指数
4
解决办法
1545
查看次数