Python 这种格式数据的香农熵(DNA基序)?
我的“DNA基序”由职位权重矩阵(PWMs)或职位特定评分矩阵(PSSM)表示,采用transfac格式: transfac格式:Python 这种格式数据的香农熵(DNA基序)?,python,format,bioinformatics,python-2.6,entropy,Python,Format,Bioinformatics,Python 2.6,Entropy,我的“DNA基序”由职位权重矩阵(PWMs)或职位特定评分矩阵(PSSM)表示,采用transfac格式: transfac格式: 主题名称显示在“DE”后面的行中 每个编号的行代表在整个DNA基序序列的给定位置观察到的四个可能的DNA碱基(“字母”):A、G、T和C的频率(这些位置由第一列显示) 第0行是DNA基序序列的第一个字母,“XX”之前的一行是DNA基序序列的最终位置 最右边的一栏根据观察到的频率,显示了序列中该位置最具代表性的字母;如果没有特定字母具有代表性,则可以给出模糊代码(不
- 主题名称显示在“DE”后面的行中
- 每个编号的行代表在整个DNA基序序列的给定位置观察到的四个可能的DNA碱基(“字母”):A、G、T和C的频率(这些位置由第一列显示)
- 第0行是DNA基序序列的第一个字母,“XX”之前的一行是DNA基序序列的最终位置
- 最右边的一栏根据观察到的频率,显示了序列中该位置最具代表性的字母;如果没有特定字母具有代表性,则可以给出模糊代码(不是A、G、C、T)
- 最后,“XX”界定了多个DNA基序
DE SRF
0 0.0435 0.0217 0.8478 0.0870 G
1 0.1957 0.7174 0.0435 0.0435 C
2 0.0000 0.9782 0.0217 0.0000 C
3 0.0217 0.9782 0.0000 0.0000 C
4 0.6956 0.0217 0.0000 0.2826 A
5 0.0652 0.0217 0.0000 0.9130 T
6 1.0000 0.0000 0.0000 0.0000 A
7 0.0217 0.0000 0.0000 0.9782 T
8 0.9348 0.0000 0.0000 0.0652 A
9 0.3261 0.0217 0.0000 0.6522 T
10 0.0435 0.0000 0.9565 0.0000 G
11 0.0435 0.0217 0.9348 0.0000 G
XX
DE HMG-1
0 0.0000 0.3846 0.6154 0.0000 G
1 0.0000 0.0000 0.2308 0.7692 T
2 0.0000 0.3077 0.0000 0.6923 T
3 0.0000 0.1539 0.7692 0.0769 G
4 0.0000 0.0769 0.0000 0.9230 T
5 0.4615 0.0769 0.2308 0.2308 N
6 0.2308 0.3846 0.0000 0.3846 N
7 0.0000 0.0769 0.1539 0.7692 T
8 0.0000 0.6154 0.0769 0.3077 C
XX
问题:如何计算Python中每个DNA基序的香农熵?有没有针对此类数据的Python包(我不知道这些数据结构的非生物学术语)?,或者有人可以提供一个简洁的Python函数?有一个与注释相关的警告(见下文),但我提出了一个处理您提供的文本文件的小代码:
import numpy as np
import sys
def compute_entropy(motif):
arr = np.array(motif)
H = (arr[arr > 0] * np.log2(arr[arr > 0])).sum(axis=1)
print 'entropy:', -H.mean(), 'bits'
motif = []
for line in sys.stdin:
line = line.strip().lower()
if line.startswith('de'):
print line
elif line == 'xx':
if motif:
compute_entropy(motif)
motif = []
else:
motif.append(map(float, line.split()[1:-1]))
需要注意的是,对于从不同分布中提取的多元值序列,目前还不清楚哪种方法是定义熵的正确方法——或者,至少有几种方法,每种方法都有不同的基本统计模型
我假设生物信息学的人已经决定了一个正确的方法,但我的方法是将序列中的每个字母视为序列位置处多项式的独立抽取,然后平均每个抽取的熵
你可能会争辩说,你需要对各个熵值求和(或以任何其他方式组合它们),这样决定就取决于你了。这里有一点背景噪音: 基本上,生物学模型和代码相距太远,目前还不能做很多事情。有意义的遗传密码是,需要有用的机器幻影让我们越过巴比伦
多元值可以以某种方式压缩。我们的目标是一个现实的递归机器画面,有足够的分形真理来支撑我们的世俗事物。你们找到了秘诀吗?python fiddle可能也很有用。为@creimers的帮助干杯,但我以前确实看到过这些,恐怕两者都不合适:(~我的数据格式不太“原始”而不是一串字母……它已经有了观察到的字符串中每个字母的十进制频率,字母表严格限制为AGCT@hello_there_andy如果两者都不合适,则可能您无法将其应用于您的特定任务。请向我们说明您在修改代码以满足您的需要时遇到的问题n我会考虑帮助你。两个结果都显示了如何计算香农熵。很好!你的假设与(大多数)生物学家一致:)~但我们知道它困扰着我们。。。非常感谢@lmjohns3Hi@lmjohns3,顺便说一下,您的“compute_entropy()”函数出现了一个错误:
回溯(最近一次调用):文件“”,第1行,在ValueError:axis(=1)中超出范围
,因为在函数中有sum(axis=1)我将其更改为axis=0,但这可能是错误的?compute\u entropy
函数需要传递一个列表列表,即二维数字数组。如果您在stdin上提供输入,则函数下面的代码将解析您提供的示例输入中的列表列表列表。尝试将代码保存在名为entropy.py
的文件中,然后使用:cat my-gene-data.txt | python entropy.py
(在linux或mac上)运行它。