Skip to content
Snippets Groups Projects
Commit 44b4f625 authored by Clara Moreno's avatar Clara Moreno
Browse files

PRÉMISSES D'UN SECOND TABLEAU STAT

parent ed8b797e
No related branches found
No related tags found
No related merge requests found
import gffutils
import pandas as pd
def gff_a_html(gff_file, output_html):
"""
Analyse un fichier GFF et génère un tableau HTML avec les informations des gènes extraites
Parameters:
- gff_file (str): chemin de ou est enregistré le fichier GFF
- output_html (str): chemin de ou on veux que le fichier HTML s'enregistre
Returns:
- rien mais enregistre un fichier HTML avec un tableau de donnée la ou on lui a demandé
"""
# base de données temporaire du fichier
db = gffutils.create_db(gff_file, dbfn=":memory:", force=True, keep_order=True, merge_strategy="create_unique", sort_attribute_values=True)
# memory : pour pas stocker sur disque (RAM)
#force = true : recrée base si elle existe déja
#merge_strategy="create_unique" : pour que les valeurs fusionnée reste unique
#sort_attribute_values=True : tri valeurs
data = [] # Liste stock infos
# éléments GFF
for feature in db.all_features(): #all_feature() est une methode des gffutils
entry = {
"Feature Type": feature.featuretype,
"ID": feature.id,
"Start": feature.start,
"End": feature.end,
"Strand": feature.strand,
"Sequence": feature.attributes.get('Sequence'),
"CDS": feature.attributes.get('CDS'),
}
data.append(entry)
# TABLEAU :
df = pd.DataFrame(data, columns=["ID", "Start", "End", "Strand","Sequence", "CDS"])
# fichier HTML
df.to_html(output_html, index=False)
print(f"HTML table generated: {output_html}")
if __name__ == "__main__":
#chemin des fichiers de Clara :
#gff_file = "/Users/claramoreno/PycharmProjects/PythonProjectPaster/wormbase_gff2_alt.txt"
#output_html = "/Users/claramoreno/PycharmProjects/PythonProjectPaster/output.html"
#chemin des fichiers :
#gff_file =
#output_html =
print(gff_a_html(gff_file,output_html))
\ No newline at end of file
import gffutils
import pandas as pd
from collections import Counter
def avg_lenght(db):
avg = Counter()
# Longueur moyenne des Features :
CDS_lengths = [feature.end - feature.start + 1 for feature in db.features_of_type("CDS")]
region_lengths = [feature.end - feature.start + 1 for feature in db.features_of_type("region")]
coding_exon_lengths = [feature.end - feature.start + 1 for feature in db.features_of_type("coding_exon")]
intron_lengths = [feature.end - feature.start + 1 for feature in db.features_of_type("intron")]
avg_CDS_length = sum(CDS_lengths) / len(CDS_lengths) if CDS_lengths else 0
avg_region_length = sum(region_lengths) / len(region_lengths) if region_lengths else 0
avg_coding_exon_length = sum(coding_exon_lengths) / len(coding_exon_lengths) if coding_exon_lengths else 0
avg_intron_length = sum(intron_lengths) / len(intron_lengths) if intron_lengths else 0
avg["CDS"] = avg_CDS_length
avg["region"] = avg_region_length
avg["coding_exon"] = avg_coding_exon_length
avg["intron"] = avg_intron_length
return avg
def count(db):
"""
Stat
Parameters:
- db: base de donné
Returns:
- stats (dict) : exemple --> Counter({'coding_exon': 4, 'intron': 3, 'region': 1, 'CDS': 1, 'average_gene_length': 0})
"""
stats = Counter()
for feature in db.all_features(): #methode gffutils
stats[feature.featuretype] += 1
return stats
import pandas as pd
def fusions_stat(count, avg):
"""
Combinaisons de plusieurs dictionnaires stat dans 1 tableau
Parameters:
- stats (dict): Un dictionnaire avec le nombre de chaque type de feature.
- avg (dict): Un dictionnaire avec la longueur moyenne de chaque type de feature.
Returns:
- Un unique tableau et sa c'est beau
"""
# Transformer les dict en tableau
count_df = pd.DataFrame(count.items(), columns=["Feature Type", "Count"])
avg_df = pd.DataFrame(avg.items(), columns=["Feature Type", "Average Length"])
# Fusion les tableaux sur la colonne "Feature Type"
combined_df = pd.merge(count_df, avg_df, on="Feature Type", how="left") #faut que klé des deux dict soit les memes
return combined_df
def gff_a_html(gff_file, output_html):
"""
Analyse un fichier GFF et génère un tableau HTML avec les informations des gènes extraites
Parameters:
- gff_file (str): chemin de ou est enregistré le fichier GFF
- output_html (str): chemin de ou on veux que le fichier HTML s'enregistre
Returns:
- rien mais enregistre un fichier HTML avec un tableau de donnée la ou on lui a demandé
"""
# base de données temporaire du fichier
db = gffutils.create_db(gff_file, dbfn=":memory:", force=True, keep_order=True, merge_strategy="create_unique", sort_attribute_values=True)
# memory : pour pas stocker sur disque (RAM)
#force = true : recrée base si elle existe déja
#merge_strategy="create_unique" : pour que les valeurs fusionnée reste unique
#sort_attribute_values=True : tri valeurs
data = [] # Liste stock infos
# éléments GFF
for feature in db.all_features(): #all_feature() est une methode des gffutils
entry = {
"Feature Type": feature.featuretype,
"ID": feature.id,
"Start": feature.start,
"End": feature.end,
"Strand": feature.strand,
"Sequence": feature.attributes.get('Sequence'),
"CDS": feature.attributes.get('CDS')
}
data.append(entry)
# DATA
df = pd.DataFrame(data, columns=["ID", "Start", "End", "Strand", "Sequence", "CDS"])
df_html = df.to_html(index=False) #html
# STAT
cnt = count(db)
avg = avg_lenght(db)
stats_df = fusions_stat(cnt, avg)
stats_html = stats_df.to_html(index=False) #html
# TOUT les tableaux dans 1 fichier HTML
with open(output_html, "w", encoding="utf-8") as f:
f.write("<h1> DATA </h1>\n")
f.write(df_html) # 1er tableau
f.write("<h1> Statistics </h1>\n")
f.write(stats_html) # 2e tableau
print(f"HTML file saved as {output_html}")
if __name__ == "__main__":
#chemin des fichiers de Clara :
gff_file = "/Users/claramoreno/PycharmProjects/PythonProjectPaster/wormbase_gff2_alt.txt"
output_html = "/Users/claramoreno/PycharmProjects/PythonProjectPaster/output.html"
#chemin des fichiers :
#gff_file =
#output_html =
print(gff_a_html(gff_file,output_html))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment