Skip to content
Snippets Groups Projects
Statistics_methylation.py 3.89 KiB
Newer Older
import  glob

# Utilisation de glob pour pouvoir tourner le script sur tous les fichiers tsv.

path = r"/home/fadwa/Téléchargements/test"
filenames = glob.glob(path + '/*.tsv')
# Définition des fonctions
def CpG_contexte(methylated):
    """
    Cette fonction a pour but d'identifier la présence de la méthylation type CpG
    et de calculer le pourcentage
    global CpG
    motif_counts = {}  # Création d'un dictionnaire pour stocker le comptage de chaque motif
    for motif in CpG:
        motif_counts[motif] = 0

    # Boucler à travers chaque k_mer dans df dataset

    for kmer in methylated["k_mer"][2:]:
        sub_kmer = kmer[2:4]
        sub_kmer_str = "".join(sub_kmer)

        # Comptage des occurences de chaque motif dans sub_kmer

        for motif in CpG:
            motif_count = sub_kmer_str.count(motif)
            motif_counts[motif] += motif_count

    # Calculer le total des occurences de chaque sub_kmer
    total_len = len(methylated["k_mer"])
    total_count = sum(motif_counts.values())
    pourcentage = (total_count / total_len) * 100

    print(f"Le pourcentage de la méthylation type CpG est  : {pourcentage: .2f}% ")



def CHG_context(methylated):
    """
    Cette fonction a pour but d'identifier la présence de la méthylation type CHG
    et de calculer le pourcentage

    """
    motif_counts = {}  # Création d'un dictionnaire pour stocker le comptage de chaque motif
    global CHG
    for motif in CHG:
        motif_counts[motif] = 0

    # Boucler à travers chaque k_mer dans methylated dataset

    for kmer in methylated["k_mer"][2:]:
        sub_kmer = kmer[2:]
        sub_kmer_str = "".join(sub_kmer)

        # Comptage des occurences de chaque motif dans sub_kmer

        for motif in CHG:
            motif_count = sub_kmer_str.count(motif)
            motif_counts[motif] += motif_count

    # Calculer le total des occurences de chaque sub_kmer
    total_len = len(methylated["k_mer"])
    total_count = sum(motif_counts.values())
    pourcentage = (total_count  / total_len) * 100

    print(f"Le pourcentage de la méthylation type CHG est: {pourcentage: .2f}% ")


def CHH_context(methylated):
    """
    Cette fonction a pour but d'identifier la présence de la méthylation type CpG
    et de calculer le pourcentage

    """
    global CHH
    motif_counts = {}  # Création d'un dictionnaire pour stocker le comptage de chaque motif
    for motif in CHH:
        motif_counts[motif] = 0

    # Boucler à travers chaque k_mer dans methylated dataset

    for kmer in methylated["k_mer"][2:]:
        sub_kmer = kmer[2:]
        sub_kmer_str = "".join(sub_kmer)

        # Comptage des occurences de chaque motif dans sub_kmer

        for motif in CHH:
            motif_count = sub_kmer_str.count(motif)
            motif_counts[motif] += motif_count

    # Calculer le total des occurences de chaque sub_kmer
    total_len = len(methylated["k_mer"])
    total_count = sum(motif_counts.values())
    pourcentage = (total_count  / total_len) * 100

    print(f"Le pourcentage de la méthylation type CHH est : {pourcentage: .2f}% ")


# Déclaration des trois contexte de méthylation
CpG = ["CG"]
CHG = ["CCG", "CAG", "CTG"]
CHH = ["CCC", "CAA", "CTT", "CCA", "CCT", "CAT", "CAC", "CTA", "CTC"]
for file in filenames:
    print(f"Statistiques pour le fichier {file}")
    names = ["Chromosome", "position","strand", "pos_in_strand", "prob_0_sum", "prob_1_sum", "count_modified", "count_unmodified", "coverage", "modification_frequency", "k_mer"]
    call_mods = pd.read_csv(file, sep='\t', names=names)

# Création du DataFrame
df = pd.DataFrame(call_mods)

# Extraction des reads méthylés

methyl= df[df["count_modified"] >= seuil]
methylated=pd.DataFrame(methyl)

#methylated.to_csv("/home/fadwa/Téléchargements/FAS08151_methylated.tsv", sep='\t')

CpG_contexte(methylated)
CHG_context(methylated)
CHH_context(methylated)