Skip to content
Snippets Groups Projects
Commit cfa17e14 authored by fadwael.khaddar_ird.fr's avatar fadwael.khaddar_ird.fr
Browse files

modifications :)

parent 0bd151c8
No related branches found
No related tags found
No related merge requests found
......@@ -9,23 +9,18 @@ import sys
import matplotlib as plt
# Function definition
def CpG_context(methylated):
"""
This function aims to identify the presence of CpG methylation and count
their occurence and pourcentage among the total reads
"""
def CpG_context():
global CpG
global reads_methyles
global nb_C
global nb_CpG
positions_CpG = []
motif_counts = {} # Dictionnary to store count of each occurence
for motif in CpG:
motif_counts[motif] = 0
# Loop through k_mer column of methylated dataset
for kmer in methylated["k_mer"][2:]:
for kmer, position in zip(methylated["k_mer"][2:], methylated["position"]):
sub_kmer = kmer[2:]
sub_kmer_str = "".join(sub_kmer)
......@@ -33,114 +28,107 @@ def CpG_context(methylated):
for motif in CpG:
motif_count = sub_kmer_str.count(motif)
motif_counts[motif] += motif_count
if motif_count > 0:
positions_CpG.append(position)
total_count = sum(motif_counts.values())
pourcentage_CpG = (total_count / nb_CpG ) * 100
pourcentage_CpG = (total_count / nb_CpG) * 100
pourcentage_C = (total_count / nb_C) * 100
print(" --- Statistiques de CpG --- ")
print()
print(f" * Le nombre d'occurence de la méthylation CpG : {total_count} ")
print(f" * Le pourcentage de la méthylation CpG parmi tous les CpG du génome de référence : {pourcentage_CpG : .2f} %")
print(f" * Le pourcentage des cytosines méthylés (type CpG) parmi tous les cytosines du génome de référence : {pourcentage_C : .2f} %")
total_pourcentage_CpG = 0
for motif in CpG:
motif_df = methylated[methylated["k_mer"].str.slice(start=2, stop=4).str.contains(motif)] # Filtre de la dataset [methylated] et la prise en compte des recherches qu'à partir de la lettre d'indice 2 dans la colonne k_mer
motif_count = motif_df['count_modified'].sum() # Calcul de la somme des reads méthylés
motif_pourcentage = (motif_count / reads_methyles) * 100 # Calcul de pourcentage de chaque type du contexte dans les reads méthylés.
total_pourcentage_CpG += motif_pourcentage
print(f" * Le pourcentage total des reads contenant la méthylation type CpG parmi tous les reads méthylés : {total_pourcentage_CpG: .2f}% ")
print(
f" * Le pourcentage de la méthylation CpG parmi tous les CpG du génome de référence : {pourcentage_CpG : .2f} %")
print(
f" * Le pourcentage des cytosines méthylés (type CpG) parmi tous les cytosines du génome de référence : {pourcentage_C : .2f} %")
print()
return positions_CpG
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
"""
# Création d'un dictionnaire pour stocker le comptage de chaque motif
def CHG_context():
global CHG
global reads_methyles
global nb_C
global nb_CpG
motif_counts = {}
motif_sum = {}
motif_occurrences = {} # create a dictionary to store occurrences of each motif
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
motif_sum[motif] = 0
motif_occurrences[motif] = [] # initialize an empty list for each motif
rows = []
for i, kmer in enumerate(treated_df["k_mer"]):
for motif in CHG:
motif_count = sub_kmer_str.count(motif)
motif_count = kmer.count(motif)
motif_counts[motif] += motif_count
total_count = sum(motif_counts.values())
pourcentage_C = (total_count / nb_C) * 100
if motif_count > 0 and motif == "CCG":
motif_occurrences[motif].append(i)
row = treated_df.iloc[i]
rows.append(row)
if len(rows) != 0:
rows_df = pd.DataFrame(rows)
total_count = sum(motif_counts.values())
pourcentage_C_total = (total_count / nb_C) * 100
print(" --- Statistiques de CHG --- ")
print()
print(f" * Le nombre d'occurence de la méthylation CHG : {total_count} ")
print(f" * Le pourcentage des cytosines méthylés (type CHG) parmi tous les cytosines du génome de référence : {pourcentage_C : .2f} %")
print(
f"Le pourcentage des cytosines méthylés (type CHG) parmi tous les cytosines du génome de référence {pourcentage_C_total: .2f} %")
print()
# Comptage de pourcentage des reads contenant ce type de méthylation
total_pourcentage_CHG = 0
print(f"Le nombre d'occurence de la méthylation CHG : {total_count}, dont : ")
for motif in CHG:
motif_df = methylated[methylated["k_mer"].str.slice(start=2).str.contains(motif)] # Filtre de la dataset [methylated] et la prise en compte des recherches qu'à partir de la lettre d'indice 2 dans la colonne k_mer
motif_count = motif_df['count_modified'].sum() # Calcul de la somme des reads méthylés
motif_pourcentage = (motif_count / reads_methyles) * 100 # Calcul de pourcentage de chaque type du contexte dans les reads méthylés
total_pourcentage_CHG += motif_pourcentage
print(f" -> Le pourcetage des reads méthylés contenant la méthylation {motif} est : {motif_pourcentage: .2f}% ")
print()
print(f" * Le pourcentage total des reads méthylés présentant la méthylation CHG parmi tous les reads méthylés : {total_pourcentage_CHG: .2f}% ")
print()
pourcentage_C_motif = (motif_counts[motif] / nb_C) * 100
print(f" -> {motif} apparaît {motif_counts[motif]} fois")
print(f" Le pourcentage des cytosines méthylés (type {motif}) est {pourcentage_C_motif: .2f}%")
print()
return rows_df
def CHH_context(methylated):
"""
Cette fonction a pour but d'identifier la présence de la méthylation type CHH, compter le nombre
d'occurence de ce type et de calculer le pourcentage de chaque motif et le pourcentage total de tous les types du contexte CHH
"""
def CHH_context():
global CHH
global reads_methyles
motif_counts = {} # Création d'un dictionnaire pour stocker le comptage de chaque motif
motif_counts = {}
motif_sum={}
for motif in CHH:
motif_counts[motif] = 0
motif_sum[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
total_count = sum(motif_counts.values())
pourcentage_C = (total_count / nb_C) * 100
motif_sum[motif] += motif_count
total_count = sum(motif_counts.values())
pourcentage_C_total = (total_count / nb_C) * 100
print(" --- Statistiques de CHH --- ")
print()
print(f" * Le nombre d'occurence de la méthylation CHH : {total_count} ")
print(f" * Le pourcentage des cytosines méthylés (type CHH) parmi tous les cytosines du génome de référence : {pourcentage_C : .2f} %")
print()
total_pourcentage_CHH = 0
for motif in CHH:
motif_df = methylated[methylated["k_mer"].str.slice(start=2).str.contains(motif)] # Filtre de la dataset [methylated] et la prise en compte des recherches qu'à partir de la lettre d'indice 2 dans la colonne k_mer
motif_count = motif_df['count_modified'].sum() # Calcul de la somme des reads méthylés
motif_pourcentage = (motif_count / reads_methyles) * 100 # Calcul de pourcentage de chaque type du contexte
total_pourcentage_CHH += motif_pourcentage
print(f" -> Le pourcetage des reads méthylés contenant la méthylation {motif} est : {motif_pourcentage: .2f}% ")
print()
print(f" * Le pourcentage total des reads méthylés présentant la méthylation CHH parmi tous les reads méthylés : {total_pourcentage_CHH: .2f}% ")
print(f"Le pourcentage des cytosines méthylés (type CHH) parmi tous les cytosines du génome de référence {pourcentage_C_total: .2f} %")
print()
print(f"Le nombre d'occurence de la méthylation CHH : {total_count}, dont : ")
for motif in CHH :
pourcentage_C_motif = (motif_sum[motif] / nb_C) * 100
print(f" -> {motif} apparaît {motif_counts[motif]} fois")
print(f" Le pourcentage des cytosines méthylés (type {motif}) est {pourcentage_C_motif: .2f}%")
print()
def CpG_CCG_successive():
positions_CHG = CHG_context(methylated)
positions_CpG = CpG_context(methylated)
successive_values = []
for i in range(len(positions_CHG)):
if i < len(positions_CpG):
if abs(positions_CHG[i] - positions_CpG[i]) == 1:
successive_values.append((positions_CHG[i], positions_CpG[i]))
if i > 0:
if abs(positions_CHG[i] - positions_CHG[i - 1]) == 1:
successive_values.append((positions_CHG[i - 1], positions_CHG[i]))
if abs(positions_CpG[i - 1] - positions_CpG[i]) == 1:
successive_values.append((positions_CpG[i - 1], positions_CpG[i]))
successive_values = sorted(successive_values, key=lambda x: x[0])
for x, y in successive_values:
print("Successive positions: CCG = {}, CpG = {}".format(x, y))
print("####-------- CALCUL DES STATISTIQUES DE METHYLATION A PARTIR DE FICHIER TSV GENERE PAR DeepSignal-Plant --------####")
......@@ -173,11 +161,9 @@ for file in filenames:
# Nombre des reads méthylés :
reads_methyles = df["count_modified"].sum()
total_reads= df["coverage"].sum()
pourcentage_reads_methyles = (reads_methyles/total_reads) * 100
print(f"Le nombre des reads contenant la méthylation : {reads_methyles}")
print(f"Le pourcentage des reads méthylés parmi tous les reads : {pourcentage_reads_methyles: .2f}%")
couverture= df["coverage"].mean()
couverture_int =int(couverture)
print(f"La couverture moyenne est : {couverture_int}")
print()
# Extraction des reads méthylés en fonction avec un seuil sup ou égal à 5 reads mappés.
......@@ -185,16 +171,12 @@ for file in filenames:
print()
methyl= df[df["count_modified"] >= seuil]
methylated=pd.DataFrame(methyl) #Création du dataframe methylated contenant
CpG_context(methylated)
CHG_context(methylated)
CHH_context(methylated)
#methylated.to_csv(f"/home/fadwa/Téléchargements/test/methylated_seuil.tsv", sep ="\t")
treated_df = methylated[['position', 'k_mer']]
treated_df = pd.DataFrame(treated_df)
treated_df['k_mer'] = treated_df['k_mer'].str[2:]
CpG_context()
CHG_context()
CHH_context()
#CpG_CCG_successive()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment