ich habe gerade mit der Python Programmierung angefangen und habe gleich ein Performance Problem.
Ich habe eine riesige Datei mit mehr als 18.526.903 Zeilen. Nun möchte ich diese Datei aufschlüsseln und auszählen.
In dieser Datei sind Basen, Chromosomnamen und die Coverage der Base festgehalten. Ich möchte nun ein Histogramm für die Coverage erstellen, die Verteilung der Basen und die Verteilung der Basen pro Chromosom.
Die gute Nachricht ist das es soweit funktioniert nur leider ewig dauert. Das Programm läuft später auf einem Clusterserver und es könnten daher auch mehrere Prozessoren benutzt werden.
Ich hoffe das jemand von euch vielleicht eine Idee hat wie es besser/schneller geht.
Vielen Dank für eure Hilfe!
Nork
Code: Alles auswählen
class Count(object):
def __init__(self,vcfFile):
#threading.Thread.__init__(self)
self.vcfFile = vcfFile
def count(self):
print(self.vcfFile)
fileOne = open(self.vcfFile,'rb')
fileOneOne = open(self.vcfFile,'rb')
#Den Header in der VCF Datei auslassen
iSetRowOne = int(SetFirstRow(fileOneOne))
#Die Spaltennamen aus der VCF Datei holen
readerVCF = csv.reader(fileOne, delimiter="\t")
for i in range(iSetRowOne):
strTitlesFirst = readerVCF.next()
readerVCFtoDict = csv.DictReader(fileOne, strTitlesFirst, delimiter="\t")
#VCF Datei Zeile für Zeile durchgehen.
try:
for rowBase in readerVCFtoDict:
#Die Zeile Info enthält mehrere Informationen und diese Spalte ich auf
dictData = rowBase['INFO'][:].strip()
if rowBase['ALT'] == 'X':
if rowBase['REF'] != 'N':
#Statistiken in die jeweiligen Dict schreiben
ddRowBaseInfo = constructStrToDict(dictData,';','=')
dictHistBase[rowBase['REF']] += 1
dictHistCoverage[int(ddRowBaseInfo['DP'])] += 1
dictHistCoveragePerChr[rowBase['#CHROM']][int(ddRowBaseInfo['DP'])] += 1
iMergeTrue += 1
finally:
print("Statistik generiert!")
Code: Alles auswählen
def constructStrToDict(strInput,seperatorOne,seperatorTwo):
ddInfoRow = {}
strItems = strInput.split(seperatorOne)
for item in strItems:
#print(item)
a = 0
a = item.find(seperatorTwo)
if a > 0 :
key,value = item.split(seperatorTwo)
else:
key,value = item.split('I')
ddInfoRow[key] = value
return ddInfoRow
