Python:通过多列中的值解析数据

2024-04-20 15:38:15 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是一个非常简单的问题,但我希望有人能给我一个快速有效的答案。。。我试图把染色体数据输入数据库,同时稍微改变一下格式。当前数据如下所示:

chrom   = chr1
txStart = 134212702 
exonCount = 8
exonStarts = 134212702,134221529,134222782,134224273,134224707,134226534,134227135,134227897,
exonEnds=   134213049,134221650,134222806,134224425,134224773,134226654,134227268,134229870,

我正在创建一个数据库,上面有所有的数据,包括启动子,外显子和内含子位置的信息。每一组数据(来自一行,如上面的示例)都对应于一个转录本。我将启动子定义为txStart(例如134212702)-2000。每个转录本都有一个固定数量的外显子,如外显子计数所示(例8)。较大的转录本中每个外显子的开始和结束由外显子和外显子列表中的匹配值指定。例如,本例中的第一个外显子范围为134212702到134213049。内含子位于外显子之间,因此第一个外显子从134213050到134221528。我成功地做到了:

PromoterStart = int(TxStart) - 2000
PromoterEnd = int(TxStart) -1
ExonStart = map(int, ExonStart[:-1].split(","))
ExonEnd = map(int, ExonEnd[:-1].split(","))
i = 0
while i < int(ExonCount):
    ExonCount = i +1
    if i != int(ExonCount) -1:
        IntronStart[i] = ExonEnd[i] +1
        IntronEnd[i] = ExonStart[i+1] -1
    i += 1

使用这个方法,我将所有的数据插入一个数据库,以便以后比较。我现在想用一个从TxStart-2000到TxStart+2000的启动子定义来重做这个分析。然而,似乎使用这个代码在外显子和启动子之间有大量的重叠,仅仅将启动子末端改为=int(TxStart)+2000,就大大减慢了我的下游分析。我想找到一种方法,如果一个区域被认为是从txStart-2000到txStart+2000的启动子,那么这个区域就不会被认为是外显子区域。你知道吗


Tags: 数据方法答案数据库区域map定义int
1条回答
网友
1楼 · 发布于 2024-04-20 15:38:15

像这样的?你知道吗

NewExonStart,NewExonEnd = zip(*filter(lambda y:not(y[0]>=PromoterStart and y[1]<=PromoterEnd),zip(ExonStart,ExonEnd)))

压缩ExonStart,ExonEnd对,并丢弃ExonStart,ExonEnd位于PromoterStart,PromoterEnd之间的任何条目。然后解压缩压缩列表以获取新值

示例

>>> TxStart = 134212702 
>>> PromoterStart = int(TxStart) - 2000
>>> PromoterEnd = int(TxStart) + 2000
>>> PromoterStart
134210702
>>> PromoterEnd
134214702
>>>
>>> ExonStart
[134212702, 134221529, 134222782, 134224273, 134224707, 134226534, 134227135, 134227897]
>>> ExonEnd
[134213049, 134221650, 134222806, 134224425, 134224773, 134226654, 134227268, 134229870]
>>>
>>> NewExonStart,NewExonEnd = zip(*filter(lambda y:not(y[0]>=PromoterStart and y[1]<=PromoterEnd),zip(ExonStart,ExonEnd)))
>>>
>>> NewExonStart
(134221529, 134222782, 134224273, 134224707, 134226534, 134227135, 134227897)
>>> NewExonEnd
(134221650, 134222806, 134224425, 134224773, 134226654, 134227268, 134229870)

ExonStartExonEnd的第一个条目都被删除,因为它位于PromoterStartPromoterEnd之间

相关问题 更多 >