Supposons que le fichier bedgraph suivant soit lu et que certains traitements ne soient effectués que dans la zone spécifiée.
example.bedgraph
chr1 10084 10104 2
chr1 10104 10124 4
chr1 10124 10164 6
chr1 10164 10184 11
chr1 10184 10204 14
chr1 10204 10224 16
chr1 10224 10244 14
chr1 10244 10264 15
chr1 10264 10284 14
chr1 10284 10304 17
Par exemple, pour calculer la valeur moyenne dans la zone, le script suivant est appliqué.
averageBedgraph.py (version corrigée)
#!/usr/local/bin/python3
# -*- coding: utf-8 -*-
"""
Calculez la valeur moyenne de la zone spécifiée à partir du fichier Bedgraph.
"""
__version__ = "1.00"
__date__ = "7 Jun 2017"
import sys
def averageBedgraph(filename, chromosome, start, end):
"""
@function averageBedgraph();
Calculez la valeur moyenne de la zone spécifiée à partir du fichier Bedgraph.
@param {string} filename :Nom du fichier d'entrée
@param {string} chromosome :Numéro de chromosome
@param {int} start :Position de départ
@param {int} end :Position finale
"""
total = 0
with open(filename) as lines:
for line in lines:
c, s, e, v = line.split()
if c != chromosome:
continue
s, e, v = int(s), int(e), int(v)
if s <= start and end <= e:
total += (end - start) * v
elif s <= start < e:
total += (e - start) * v
elif start < s and e <= end:
total += (e - s) * v
elif s < end <= e:
total += (end - s) * v
elif end < s:
break
print('average : %s' % (total / (end - start)))
print('done')
if __name__ == '__main__':
argvs = sys.argv
argc = len(argvs)
if (argc != 5): # Checking input
print("USAGE : python3 averageBedgraph.py <INPUT_FILE> <CHROMOSOME> <START> <END>")
quit()
averageBedgraph(str(argvs[1]),str(argvs[2]),int(argvs[3]),int(argvs[4]))
quit()
Exemple d'exécution
Calculer la valeur moyenne de la zone spécifiée de la litière
$ python3 averageBedgraph.py example.bedgraph chr1 10150 10250
Sortie standard
average : 12.74
done
C'est une méthode boueuse qui n'a pas besoin d'être mentionnée, mais si vous ne voulez pas l'assembler, veuillez l'utiliser.
Aussi, si vous avez un outil qui est bon pour le traitement tel que le bedgraph, je vous serais reconnaissant si vous pouviez m'apprendre. Il ne sert à rien de réinventer les roues ... Je vous remercie.
c'est tout. Merci beaucoup.
2017/06/09 postscript Le code qui a été publié a été corrigé. Nous tenons à exprimer notre profonde gratitude à shiracamus pour avoir apporté la correction.
Recommended Posts