Mein Script - Euere Verbesserungsvorschläge/Kommentare
Verfasst: Donnerstag 26. Oktober 2006, 14:01
Hallo ihr da draußen!
Meine kleine Vorgeschichte, ich komme aus der Bioinformatik und arbeite daher intensiv mit Datenbanken und Scripten. Die ganze Zeit nutzte ich Perl um meine Ideen umzusetzen, doch um mich nicht ganz in Perl fest zu beißen erlerne ich nebenbei Python.
Falls ihr Zeit habt, dann schaut euch doch bitte mein unten aufgeführtes Script an und gebt Kommentare und/oder Verbesserungsvorschläge ab, freue mich über jede noch so kleine Zeile!
Was ist der Hintergrund hinter diesem Script?
Wir analysieren eine Gruppe von Genen und deren Promotoren (Gene: Einheit die essentielle Information für Lebewesen enthält; Promoter: An- und Ausschalter von Genen, ein Gen kann mehrere Promotoren haben), die wir in zwei Gruppen unterteilen und zwar in die Gruppe der in „tumor-assoziierten“ und „normalen“ Gene (die Zuordnung, ob ein Gen tumor-assoziiert ist oder nicht, legt die Tabelle cancer_gene fest, ist ein Gen in dieser Tabelle aufgelistet so gehört es zu der Gruppe „tumor-assoziiert“, falls nicht zu der Gruppe der „normalen“ Gene). Dabei interessiert uns die relative Häufigkeit von allen möglichen Promoterclustern in beiden Gruppen. Ein kleines Beispiel um ein Promotercluster zu verdeutlichen:
Das Gen ‚GEN1’ hat ‚PRO1, PRO2, PRO3’ und das Gen ‚GEN2’ hat ‚PRO1, PRO3, PRO4’ als Promotoren. Es ergeben sich nun folgende mögliche Promotercluster:
In der weiteren Analyse interessiert nur noch was für Promotorencluster zu welcher Gruppe gehört. Wenn GEN1 und GEN2 in unterschiedlichen Gruppen wären würde die Ausgabe für unser kleines ‚Genset’ lauten:
Falls sie aber eine gemeinsamen Gruppe angehören:
Nun mein Script was diese Aufgabe erfüllt, aber ist es die Musterlösung? Mein Modul standard ermöglicht mir die DB_Verbindung. Der Teil wo ich die DB-Info aus den Tabellen lese habe ich auskommentiert und frei erfundene Dictionaries erzeugt, so kann das Script auch bei euch laufen und ihr könnt damit experimentieren.
[/code]
Meine kleine Vorgeschichte, ich komme aus der Bioinformatik und arbeite daher intensiv mit Datenbanken und Scripten. Die ganze Zeit nutzte ich Perl um meine Ideen umzusetzen, doch um mich nicht ganz in Perl fest zu beißen erlerne ich nebenbei Python.
Falls ihr Zeit habt, dann schaut euch doch bitte mein unten aufgeführtes Script an und gebt Kommentare und/oder Verbesserungsvorschläge ab, freue mich über jede noch so kleine Zeile!
Was ist der Hintergrund hinter diesem Script?
Wir analysieren eine Gruppe von Genen und deren Promotoren (Gene: Einheit die essentielle Information für Lebewesen enthält; Promoter: An- und Ausschalter von Genen, ein Gen kann mehrere Promotoren haben), die wir in zwei Gruppen unterteilen und zwar in die Gruppe der in „tumor-assoziierten“ und „normalen“ Gene (die Zuordnung, ob ein Gen tumor-assoziiert ist oder nicht, legt die Tabelle cancer_gene fest, ist ein Gen in dieser Tabelle aufgelistet so gehört es zu der Gruppe „tumor-assoziiert“, falls nicht zu der Gruppe der „normalen“ Gene). Dabei interessiert uns die relative Häufigkeit von allen möglichen Promoterclustern in beiden Gruppen. Ein kleines Beispiel um ein Promotercluster zu verdeutlichen:
Das Gen ‚GEN1’ hat ‚PRO1, PRO2, PRO3’ und das Gen ‚GEN2’ hat ‚PRO1, PRO3, PRO4’ als Promotoren. Es ergeben sich nun folgende mögliche Promotercluster:
Code: Alles auswählen
GEN1: PRO1-PRO2, PRO1-PRO3, PRO2-PRO3
GEN2: PRO1-PRO3, PRO1-PRO4, PRO3-PRO4
Code: Alles auswählen
tumor-assoziert:
PRO1-PRO2 1
PRO1-PRO3 1
PRO2-PRO3 1
normal:
PRO1-PRO3 1
PRO1-PRO4 1
PRO3-PRO4 1
Code: Alles auswählen
Gruppenname:
PRO1-PRO2 1
PRO1-PRO3 2
PRO2-PRO3 1
PRO1-PRO4 1
PRO3-PRO4 1
Nun mein Script was diese Aufgabe erfüllt, aber ist es die Musterlösung? Mein Modul standard ermöglicht mir die DB_Verbindung. Der Teil wo ich die DB-Info aus den Tabellen lese habe ich auskommentiert und frei erfundene Dictionaries erzeugt, so kann das Script auch bei euch laufen und ihr könnt damit experimentieren.
Code: Alles auswählen
#! /usr/bin/python2.4 -w
## import standard,sys
## standard.header()
## cursor = standard.dbconnection_localhost()
## if cursor == 'false':
## print "database connection failed!"
## sys.exit()
## START ##
## exits_tumor_association ##
def exits_tumor_association(gene):
if TUMOR.has_key(gene):
return 'true'
else:
return 'false'
## END ##
## START ##
## do_analysis ##
def do_analysis(Promoters, DIC):
Flag = {}
for promoter_a in Promoters:
Flag[promoter_a] = 0
for promoter_b in Promoters:
if Flag.has_key(promoter_b):
t = 0
else:
cluster = promoter_a + ' - ' + promoter_b
if DIC.has_key(cluster):
counter = DIC[cluster] + 1
DIC[cluster] = counter
else:
DIC[cluster] = 1
return DIC
## END ##
## # get a list of tumor associated genes from database and save them in dictionary TUMOR
## sql = "SELECT DISTINCT ensembl_id FROM cancer_gene WHERE ensembl_id IS NOT NULL"
## cursor.execute(sql)
## result = cursor.fetchall()
## TUMOR = {}
## for column in result:
## gene = column[0]
## TUMOR[gene] = 0
## get a list of genes and their corresponding promoters
## sql = "SELECT DISTINCT ensembl_gene, signalname FROM ps_signals_processed
## WHERE ensembl_gene = 'ENSG00000160714' OR ensembl_gene = 'ENSG00000001461' OR ensembl_gene = 'ENSG00000078403'
## OR ensembl_gene = 'ENSG00000138363'"
## sql = "SELECT DISTINCT ensembl_gene, signalname FROM ps_signals_processed"
## cursor.execute(sql)
## result = cursor.fetchall()
## result.sort()
## CLUSTER = {}
## for gene, promoter in result:
## if CLUSTER.has_key(gene):
## Temp = CLUSTER[gene]
## Temp.append(promoter)
## CLUSTER[gene]=Temp
## else:
## CLUSTER[gene]=[promoter]
# defining a dictionary of tumor-associated genes
TUMOR = {}
TUMOR['A']=0
TUMOR['B']=0
TUMOR['C']=0
# defining a dictionary with gene and corresponding promoter information
CLUSTER = {}
CLUSTER['A'] = ['a','b','c'] # a - b, a - c, b - c
CLUSTER['B'] = ['a','d','e'] # a - d, a - e, d - e
CLUSTER['C'] = ['a','e','f'] # a - e, c - f, e - f
CLUSTER['D'] = ['a','b']
CLUSTER['E'] = ['a','b','e','f']
CLUSTER['F'] = ['c','d']
CLUSTER['G'] = ['e','f','g']
CLUSTER['H'] = ['b','g']
TUMOR_CLUSTER = {}
NORMAL_CLUSTER = {}
for gene in CLUSTER:
Promoters = CLUSTER[gene]
Promoters.sort()
# checking if actual gene can be assigned to tumor associated genes
if exits_tumor_association(gene) == 'true':
do_analysis(Promoters, TUMOR_CLUSTER)
# if it is not associated with tumor we baptized those genes normal genes
else:
do_analysis(Promoters, NORMAL_CLUSTER)
# print content of tumor-associated dictionary to stdout
print "#"*10, " Analysis of tumor associated genes ", "#"*10
for cluster in TUMOR_CLUSTER:
print cluster, TUMOR_CLUSTER[cluster]
# print content of normal dictionary to stdout
print "#"*10, " Analysis of normal genes ", "#"*10
for cluster in NORMAL_CLUSTER:
print cluster, NORMAL_CLUSTER[cluster]