そのため、このコードを使用して、マスター シーケンス内の SOURCE として示されるサブシーケンスの開始位置と停止位置を出力しています。マスター シーケンスは GENE によって識別されます。GENE には + と - の 2 つの DIRECTION 成分を持つシーケンスがあり、これらは一意のシーケンスとして扱われます。しかし、私が気付いていなかったのは、最初にデータセットを生成する際に (多くの SOURCE シーケンスのファイルを GENE シーケンスに対して整列させることによって)、SOURCE シーケンスの複数の「有効な」整列が存在するインスタンスがいくつかあることです。 GENE配列に対して。SOURCE シーケンスの数が等しい場合、GENE シーケンス内で出現回数が最も少ない、または POS1 から最終 POS2 までの最小範囲で、SOURCE シーケンスからエントリを削除する方法が必要です。明確な例を含む出力例を以下に示します。
ここに私のPythonコードがあります:
import pandas
import pandas as pd
import sys
import csv
##sys.stdout = open("Sampletest2d.txt", "w")
##data = pd.read_csv('Sampletest2.txt', sep='\t')
sys.stdout = open("ExonFileTry1Part3.txt", "w")
data = pd.read_csv('ExonFileTry1.txt', sep='\t')
groups = data.groupby(['GENE', 'DIRECTION'])
fixedgroups = []
for (gene_id, strand), group in groups:
#print gene_id, strand
if strand == '+':
group['POS-1'] = group.POS1
group['POS-2'] = group.POS2
else:
group['POS-1'] = group.POS2
group['POS-2'] = group.POS1
#print group
fixedgroups.append(group)
print fixedgroups
データセット (タブ区切り)
GENE DIRECTION POS1 POS2 SOURCE
TT-1 + 1 16 A1
TT-1 + 130 289 A1
TT-1 + 353 438 A1
TT-1 + 519 580 A1
TT-1 + 665 742 A1
TT-1 + 813 864 A1
TT-1 + 931 975 A1
TT-1 + 1053 1166 A1
TT-1 + 1 16 B2
TT-1 + 130 289 B2
TT-1 + 353 438 B2
TT-1 + 519 580 B2
TT-1 + 665 742 B2
TT-1 + 813 864 B2
TT-1 + 931 975 B2
TT-1 + 1053 1161 B2
BB-2 + 3 659 C3
BB-2 + 3 640 D4
BB-2 - 1093 426 E5
BB-2 - 1093 508 F6
EE-3 + 1 95 G7
EE-3 + 155 377 G7
EE-3 + 439 513 G7
EE-3 + 577 840 G7
EE-3 + 1 95 H8
EE-3 + 155 377 H8
EE-3 + 439 513 H8
EE-3 - 840 577 I9
EE-3 - 513 439 I9
EE-3 - 377 155 I9
EE-3 - 840 577 J10
EE-3 - 513 458 J10
GENE に複数の SOURCE 配列があり、ある SOURCE からの配列が別の SOURCE よりも多い場合があります。ただし、2 つの異なる SOURCE から同数のシーケンスが存在する場合があります。この場合、その SOURCE の最初の POS1 と最後の POS2 の間の値の範囲が最大の SOURCE を維持する必要があります。
たとえば、+ DIRECTION の GENE TT-1 には、2 つの SOURCE セット A1 と B2 があり、どちらも 8 つのエントリがあります。ただし、SOURCE A1 の最終 POS2 は 1166 ですが、B2 の最終 POS2 は 1161 であるため、B2 の範囲はより小さく、削除する必要があります。
私がすでに行ったことを行う方法を理解するだけで、信じられないほどの時間がかかりました。それは、同様のコードに基づいていました。ここでやりたいことはわかった気がしますが、コンピューター サイエンスの知識が非常に限られているため、構文がわかりません。事前に助けてくれてありがとう!