This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Calculate cumulative gc skew in python

I want to write a python function that calculates the cumulative gc skew along a entire bacterial genome.

I have no problem implementing GC skew (G-C)/(G+C) but what would I need to change to calculate the cumulative GC skew?

Thank you.

genome

You want to do something like calculate the GC skew across a window of desired size, then slide that window accross the genome? Why cumulative, out of interest?

Do you need to write this from scratch (e.g. for homework), or are tools such as BioPython's implementation an option?

I thought this is the method for finding the origin of replication?

1 answer

Maybe this will give you something to work with...

Given a fasta input sequence,

from Bio import SeqIO, SeqUtils

rec = SeqIO.read('/path/to/seqs.fasta', 'fasta')
gc = SeqUtils.GC_skew(rec.seq, 100)

>>> gc
[-0.2682926829268293, -0.05660377358490566, -0.6363636363636364, -0.2, -0.20689655172413793, -0.2682926829268293, 0.01818181818181818, -0.7222222222222222, -0.3333333333333333, -0.44, -0.2558139534883721, -0.37254901960784315, -0.35714285714285715, -0.3877551020408163, -0.52, -0.44, -0.4583333333333333, -0.44680851063829785, -0.6666666666666666, -0.5636363636363636, -0.24, -0.07692307692307693, -0.19148936170212766, -0.12280701754385964, -0.30434782608695654, -0.5121951219512195, -0.23636363636363636, -0.48, 0.0, -0.10204081632653061, -0.09433962264150944, -0.19047619047619047, -0.40540540540540543, -0.2413793103448276, -0.13636363636363635, -0.37254901960784315, -0.25, -0.2571428571428571, -0.375, -0.3333333333333333, -0.20689655172413793, -0.19298245614035087, -0.3488372093023256, -0.36363636363636365, -0.14285714285714285]

# There's also a graphical output

SeqUtils.xGC_skew(rec.seq, 100)

Which produces (not that it's the most useful plot in the world):

enter image description here

To use the accumulated GC for your own purposes, just sum the gc list.

Log in to answer this question.