我有一些问题需要对Python进行分析。
所以我有一个CSV文件(tab sep)。我有几个序列。对于每个序列,我可以拥有相同的基因。但是一个不同的价值(这里是TPM,即每百万翻译 - >生物学的东西)。
对于相同的序列,我想保留具有最低TPM值的基因。
我的数据示例:
geneschr start end Log2_TPM_DM_Moyenne
Cd74 chr18 60949182 60949365 4.253037
GAP6 chr18 60949182 60949365 10.590838
Rps14 chr18 60949182 60949365 12.590838
Mynn chr3 30500160 30500343 3.409878
Cd74 chr16 96205452 96205635 6.105927
例如:
3个第一序列相同但具有不同的注释基因(具有不同的TPM)。
对于这个序列,我想保留具有最低TPM值的序列。
有时候我有一个不同的序列,具有相同的最接近的注释基因(Cd74)。其中有相同的TPM。在这里,我想用2个TPM值保存两个序列,因为它们是不同的序列。
期望的输出:
基因 chr start end Log2_TPM_DM_Moyenne
Cd74 chr18 60949182 60949365 4.253037
Mynn chr3 30500160 30500343 3.409878
Cd74 chr16 96205452 96205635 6.105927
对于3个第一序列,只有Cd74是保守的,因为对于这个序列,它是具有最低TPM值的基因。
坐标是我序列的坐标,而不是基因的坐标。该序列用最接近的基因注释。 每个基因都具有TPM值。所以我可以使用相同的最接近的基因和相同的TPM值来获得独特的序列,我想保留它们。但对于具有不同注释基因的相同序列,我希望保持基因具有最低的TPM值。
我希望我很清楚,并且谢谢你。
最佳
答案 0 :(得分:0)
不确定我明白你想要什么。但是你尝试了什么?你在等我们做作业吗?这就是为什么这个问题被低估了?
无论如何,我可能会从这样的事情开始,虽然这对于内存和CPU都没有优化。如果您的数据集有数百万行,这将不适合。
算法: 1.保持“开始”的所有不同值。并且'结束' ; 2.什么时候开始'并且'结束'是相同的,保持最低的TPM
import csv
#initiazing
columns = ['start','end','TPM','chr','genes']
keptValues = {}
for c in columns:
keptValues[c]=[]
################
def add(k,r):
for c in columns:
form = determineFormat(c)
k[c].append(form(r[c]))
##################
def replace(i,k,r):
#print('debug: ',i,k,r)
for c in columns:
form = determineFormat(c)
k[c][i] = form(r[c])
#################
def determineFormat(s):
if s=='start' or s=='end':
form = int
elif s=='TPM':
form = float
else:
form = str
return form
#################
with open('bioinfo.csv', 'r') as f:
reader = csv.DictReader(f)
for row in reader:
if int(row['start']) in keptValues['start'] :
ind = keptValues['start'].index(int(row['start']))
if keptValues['end'][ind]==int(row['end']):
if keptValues['TPM'][ind]>float(row['TPM']):
replace(ind,keptValues,row)
else:
add(keptValues,row)
else:
add(keptValues,row)