Bioinformatik für Biochemiker

Ähnliche Dokumente
Bioinformatik für Biochemiker

Bioinformatik für Lebenswissenschaftler

A2.1 Python. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. A2.1 Python. A2.2 Kurzer Sprachüberblick. A2.3 Selectionsort in Python

Algorithmen und Datenstrukturen

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Python Einführung. Monica Selva Soto. 24 März Mathematisches Institut

Algorithmen als systematische Vorgehensweisen zur Lösung eines formal definierten Problems

Informatik I: Einführung in die Programmierung 3. Werte, Typen, Variablen und Ausdrücke

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Einführung in die Computerlinguistik

WS2017/ Oktober 2017

Bioinformatik für Biochemiker

WS2018/ Oktober 2018

Programming 101. Carl Herrmann IPMB & DKFZ

if ( Logischer Operator ) { } else { Anweisungen false

WS2018/ Oktober 2018

Programmierkurs Python I

Kontrollstrukturen. Verzweigungen Einfache Mehrfache Wiederholungen Eine Sequenz durchlaufen Wiederhole bis Solange. Tue

1 Bedingte Anweisungen. 2 Vergleiche und logische Operatoren. 3 Fallunterscheidungen. 4 Zeichen und Zeichenketten. 5 Schleifen.

WS2017/ Oktober 2017

Python 2. Vorlesung Computerlinguistische Techniken Alexander Koller. 28. Oktober 2014

Programmieren in Python

1 Berechnung von Summen (ca = 10 Punkte)

Minimaleinführung in Python 3

Arrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3

1. Die rekursive Datenstruktur Liste

Algorithmen und Datenstrukturen (für ET/IT)

Vorkurs Informatik WiSe 17/18

Informatik I: Einführung in die Programmierung

Intensivübung zu Algorithmen und Datenstrukturen

Vorkurs Informatik WiSe 16/17

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Definition Algorithmus. Wie beschreibt man Algorithmen?

Funktionen in Python

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

1 Funktionsaufrufe. Informatik I: Einführung in die Programmierung 4. Funktionen: Aufrufe und Definitionen. Standardfunktionen: Typen-Konversion

PROCESSING EINE ZUSAMMENFASSUNG. Created by Michael Kirsch & Beat Rossmy

Wirtschaftsinformatik I (Bachelor) SS 07 Prof. Gomber. Python

Algorithmen und Datenstrukturen in der Bioinformatik Zweites Übungsblatt WS 05/06 Musterlösung

Mathematische Computer-Software

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Programmiervorkurs für die Numerik Teil 2/4

Java Anweisungen und Ablaufsteuerung

Java I Vorlesung Imperatives Programmieren

Informatik I. 4. Funktionen: Aufrufe und Definitionen. 25. Oktober Albert-Ludwigs-Universität Freiburg. Informatik I.

Programmierkurs Python I

Schleifen Datenfelder (Arrays) Verzweigungen

Wertebereich und Genauigkeit der Zahlendarstellung

Tag 2 Repetitorium Informatik (Java)

2. Programmierung in C

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

1 def Anweisung. 2 Argumentübergabe. 3 Lokale Variablen. 4 Default Argumente. 5 Aufruf mit Schlüsselwort. 6 Variable Argumente. Funktionen in Python

Funktionen in Python

Programmieren in Python

Teil II. Datentypen. T. Neckel Einführung in die wissenschaftliche Programmierung IN8008 Wintersemester 2017/

float: Fließkommazahl nach IEEE 754 Standard mit 32 bit

2 Teil 2: Nassi-Schneiderman

Martin Unold INFORMATIK. Geoinformatik und Vermessung

R-Wörterbuch Ein Anfang... ein Klick auf einen Begriff führt, sofern vorhanden, zu dessen Erklärung.

4 Daten in Python. Primäres Ziel: Daten zu Containern zusammenfassen, insbesondere Vektoren etc., um vernünftige Beispiele rechnen zu können.

Anregungen zu Übung 2

Programmieren in Python

Programmieren in Python

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Programmierkurs Python I

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Informatik I. Informatik I Iteratoren Generatoren Das Modul itertools. Iterierbare Objekte Iteratoren. Python-Interpreter

Elementare Datentypen in C++

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Probeklausur Name: (c)

WiMa-Praktikum 1. Woche 8

Programmiersprachen Einführung in C

Programmierung I Einführung in Python, Beyond the Basics

Python als praktischer Helfer

Algorithmik und Programmieren

2 Programmieren in Java I noch ohne Nachbearbeitung

Unterlagen. CPP-Uebungen-08/

Java Zusammenfassung. Basisdatentypen ganzzahlig: Byte, Short, Integer, Long Fließkomma: Float, Double Zeichen: Character Wahrheitswerte: Boolean

Transkript:

Bioinformatik für Biochemiker Oliver Kohlbacher, Steffen Schmidt SS 2010 4. Python Basics Abt. Simulation biologischer Systeme WSI/ZBIT, Eberhard Karls Universität Tübingen

Überblick Python Datentypen Kontrollstrukturen Funktionen Module Beispiel Verwendung zum Vergleich von Sequenzen

Ähnlichkeit zweier Sequenzen Wie kann man die Ähnlichkeit zweier Sequenzen beschreiben? Einfachste Möglichkeit: Zählen identischer Zeichen GATCGTTCG CATGGTTGA Problem: Was bei Sequenzen unterschiedlicher Länge? GATCGTTCG GATCGTTCG GATCGTTCG GGTTGA G---GTT-GA GGTTGA Ähnlichkeit: 3 5 0 Ähnlichkeit bei dieser einfachen Definition vom gewählten Alignment abhängig! Welches ist das richtige Alignment?

Algorithmen Gegeben: Zwei Sequenzen A, B mit A = B auf dem Alphabet Σ = {A, C, G, T, -} Eine Distanzfunktion d : Σ x Σ R Berechne die Distanz d(a, B) wie folgt: distanz 0 Für i = 1 A : distanz distanz + d(a i, b i ) Gib Wert von distanz aus Zuweisung Schleife Zuweisung Ausgabe

Auswertung von Ausdrücken

Auswertung von Ausdrücken >>> a = 4 >>> b = 'ACTG' >>> a + b Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> b + a Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: cannot concatenate 'str' and 'int' objects Python hat verschiedene Typen für Daten die in Variablen gespeichert sind int / float für numerischen Daten (ganze Zahlen und Fließkommazahlen) str für Zeichenketten (Strings) Operator ist nicht (immer) kompatibel für Variablen unterschiedlichen Typs (was ist die Summe eines Strings und einer Zahl?)

Datentypen Addition von einem int Datentyp mit einem float Datentyp liefert gewünschtes Ergebnis Division von zwei Ganzzahlen liefert wiederum eine Ganzzahl! (Division ohne Rest) Will man die Division zweier reeller Zahlen, muss man Python mitteilen, dass es sich um solche handelt (ein Dezimalpunkt reicht: also 2. oder 2.0 statt 2)

Datentypen dir Funktion gibt Information über die vorhandenen Methoden eines Datentyps/Objekts

Datentypen help-funktion gibt Information über Methoden eines Datentyps/Objekts Damit kann man versuchen schnell im Interpreter Hilfe zu erhalten, wenn etwas nicht so funktioniert, wie gedacht

Python Listen Listen sind Aneinanderreihungen beliebiger Werte (genauer: Objekte), die man zusammenfassen will Viele Python-Funktionen akzeptieren Listen als Argumente Möchte man z.b. das Minimum von vier Werten berechnen, so definiert man eine Liste mit diesen Werten und ruft dann die Funktion min mit dieser Liste auf: l = [170, 55, 3, 244] print min(l) Listen definiert man in Python, indem man die einzelnen Werte in eckige Klammern schreibt Vorsicht: eckige Klammern hinter einer Variablen bedeuten den Zugriff mit einem oder mehreren Indices! Nicht verwechseln! Ergebnis dieses kurzen Programms ist natürlich 3

Listen Listen können beliebige Datentypen enthalten, z.b. Zahlen oder Strings l = [1, 2, 'ACT'] Man kann auch leere Listen definieren: l = [] Listen lassen auch die Indexoperationen wie bei Strings zu, ebenso kann man sie konkatenieren (mit dem Operator +) und mit print ausgeben Mit append lassen sich Elemente an die Liste anhängen, alternativ kann man das Element durch Konkatenation mit einer einelementigen Liste anfügen: l = [1, 2, 3] l.append(4) l = l + [5]

Listen Beispiele A = ['Hund', 'Katz', 'Maus'] B = ['Ratte', 'Nacktmull'] print len(a), len(b) print A + B print B + B print len(a + B) print A[:2] + B[2:] A[1] = B[1] print A A.append('Igel') print A A = A + B print A 3 2 ['Hund', 'Katz', 'Maus', 'Ratte', 'Nacktmull'] ['Ratte', 'Nacktmull', 'Ratte', 'Nacktmull'] 5 ['Hund', 'Katz'] ['Hund', 'Nacktmull', 'Maus'] ['Hund', 'Nacktmull', 'Maus', 'Igel'] ['Hund', 'Nacktmull', 'Maus', 'Igel', 'Ratte', 'Nacktmull']

Python Matrix Listen sind in Python nur eine von vielen Datenstrukturen Mit Hilfe von Arrays kann man große Mengen von Zahlen darstellen Sowohl eindimensionale ( Vektoren ), als auch zweidimensionale ( Matrizen ) oder mehrdimensionale Arrays (allgemeine Tensoren) sind möglich Diese Arrays sind in Python nicht in der Sprache selbst verankert, sondern werden von einem externen Modul namens numpy (Numerical Python) zur Verfügung gestellt, das separat installiert werden muss Dafür stellt numpy Ihnen sehr schnelle und einfache Operationen aus der linearen Algebra (z.b. Matrixmultiplikationen) zur Verfügung, die Sie nicht mehr selbst implementieren müssen www.numpy.org

Python Matrix Eine Matrix kann man auf viele Arten erzeugen. Wir wollen die Matrix nicht nur erzeugen sondern am besten auch gleich mit Nullen füllen Das geht mit der Funktion numpy.zeros, deren Argument eine Liste mit der Größe in den jeweiligen Dimensionen ist import numpy # Lade Modul A = numpy.zeros([3]) # Definiert Vektor # der Länge 3 A[1] = 5 # Setzt 2. Element print A M = numpy.zeros([3,3]) # definiert eine 3x3-Matrix M[0,0] = M[1,1] = M[2,2] = 2 print M print A * M Ausgabe: [0 5 0] [[2 0 0] [0 2 0] [0 0 2]] [[ 0 0 0] [ 0 10 0] [ 0 0 0]]

Kontrollstrukturen Kontrollstrukturen bestimmen den logischen Fluss von Programmen Es gibt zwei Klassen von Kontrollstrukturen: Verzweigungen: if-else Schleifen: for, while Damit lassen sich alle möglichen Programmflüsse abbilden Im Gegensatz zu anderen Programmiersprachen (C++, Java) hat Python keine Mehrfachverzweigung (switch-case)

Python Bedingungen Bedingungen erlauben es Programmteile nur dann auszuführen, wenn eine bestimmte Bedingung erfüllt ist Die wichtigste Kontrollstruktur mit einer Bedingung ist if-else: if distanz < 5: print 'Distanz gering' else: print 'Distanz zu gross!' Man kann if-else auch auf mehrere Fälle (mit elif) erweitern: if distanz == 0: print 'Identisch.' elif distanz == 1: print 'Fast identisch.' else: print 'Nun ja.'

Python FOR-Schleifen FOR-Schleifen iterieren eine Schleifenvariable durch die Elemente eines Sequenztypen (z.b. List, String) Der Schleifenrumpf wird dabei für jeden Wert der Liste einmal durchlaufen Für eine leere Liste wird der Rumpf entsprechend nicht durchlaufen Man kann ähnliches Verhalten mit unterschiedlichen Konstrukten erhalten s = 'ABCD' s = 'ABCD' for x in s: print x for x in range(len(s)): print s[x] Der linke Code ist kompakter, tut aber im wesentlichen das gleiche wie der rechte Möchte man aber auch die Position des Buchstabens in der Sequenz ausgeben ist die rechte Variante geschickter

Python WHILE-Schleifen WHILE-Schleifen iterieren so lange eine bestimmte Bedingung erfüllt ist Vor jedem Durchlauf wird dabei die Bedingung im Schleifenkopf getestet, ist sie erfüllt wird der Rumpf ausgeführt Man kann damit ähnliche Dinge erzielen wie mit einer FOR- Schleife, ist aber nicht an Sequenztypen gebunden s = 'ABCD' i = len(s) - 1 while i >= 0: s = 'ABCD' for x in range(len(s)): print s[len(s) - x - 1] print s[i] i = i - 1 Ob eine FOR- oder eine WHILE-Schleife die geschicktere Variante ist, hängt ganz vom Einzelfall ab

Verschachtelte Schleifen Schleifen können auch ineinander geschachtelt werden Der Rumpf der ersten (äußeren) Schleife beinhaltet dann die zweite (innere) Schleife Beispiel: Ausgabe aller Worte der Länge 3 auf Σ DNA : sigma = 'ACGT' for i in sigma: for j in sigma: for k in sigma: # äußere Schleife # zweite Schleife # innerste Schleife print i + j + k

Funktionen Funktionen in Programmiersprachen sind ähnlich zu mathematischen Funktionen, es gibt jedoch einige Unterschiede Prinzipiell verwendet man Funktionen um häufig benutzten Code nicht mehrmals schreiben zu müssen Funktionen sind abgeschlossene Codestücke, denen Argumente übergeben werden und die einen Rückgabewert haben können In Python werden Funktionen mit Hilfe des def-schlüsselwortes definiert Funktionen haben einen Namen, eine Liste von Argumenten und einen Codeblock der die eigentliche Rechnung durchführt Beispiel: Eine Funktion, die zu einer Zahl deren doppelten Wert zurückliefert def doppelt(x): return 2 * x print doppelt(4) Das Schlüsselwort return definiert dabei den Rückgabewert der Funktion

Funktionen Fibonacci-Zahlen: unendliche Folge, die das Wachstum einer Kaninchenpopulation beschreibt (Leonardo Fibonacci, 1202) Definition: Dies kann als rekursive Funktion geschrieben werden, also eine Funktion, die sich selbst wieder aufruft: def fib(x): if x == 0: return 0 if x == 1: return 1 return fib(x-1) + fib(x-2) for i in range(10): print fib(i) http://www.bbc.co.uk/radio4/science/media/5nbunnies.jpg

Distanzberechnung Wir versuchen nun unseren Algorithmus aus dem Pseudocode in Python umzusetzen Dazu sollte die Distanzfunktion d als Funktion implementiert werden Wir wählen als einfache Distanzfunktion die Identität Summation über die Spalten des Alignments implementieren wir als for-schleife distanz 0 Für i = 1 A : distanz distanz + d(a i, b i ) Gib Wert von distanz aus

Alignmentdistanzen in Python # Einfache Berechnung von Alignmentdistanzen A = 'ACGT' B = 'A-GT' distanz = 0 # Sequenzen im Alignment # Gesamtdistanz # Berechne fuer jede Position im Alignment # die Distanz und summiere sie for i in range(len(a)): d = 1 if (A[i] == B[i]): d = 0 distanz = distanz + d d(a, b) = print 'Distanz des Alignments:', distanz 0 : für a = b 1 : andernfalls

Alignmentdistanzen mit Fkt. # Einfache Berechnung von Alignmentdistanzen A = 'ACGT' # Sequenzen im Alignment B = 'A-GT' distanz = 0 # Gesamtdistanz # Definiere eine Funktion d(a, b) zur Distanzberechnung def d(a, b): if a == b: return 0 else: return 1 # Berechne fuer jede Position im Alignment # die Distanz und summiere sie auf for i in range(len(a)): distanz = distanz + d(a[i], B[i]) print 'Distanz des Alignments:', distanz

Module Module sind ein Weg Programme in kleinere, überschaubare Einheiten zu verteilen Dies verbessert die Wiederverwendbarkeit von Code: wenn jemand etwas praktisches geschrieben hat, kann jemand anderes den Code einfach in seinen Programmen verwenden Triviales Beispiel: Kreisumfang r = 5.6 pi = 3.1415 print "Umfang: ", 2 * pi * r from math import pi r = 5.6 print "Umfang: ", 2 * pi * r Die Zahl π ist im Modul math (das mit Python mitgeliefert ist) schon (in voller Genauigkeit!) definiert Das Kommando import lädt diese Funktionalität aus dem Modul math und macht pi damit verfügbar

Module Eigene Module kann man auch schreiben, dazu wird lediglich eine Python-Datei mit dem Namen des Moduls angelegt Das import-kommando kann dabei Teile eines Moduls laden (import x from y, siehe letzte Folie) oder das gesamte Modul # Modul Dist.py # Dieses Modul implementiert # Die Distanzfunktion d und # kann von anderen Programmen # verwendet werden. def d(a, b): if a == b: return 0 else: return 1 # Berechnung der Distanz import Dist # Lade Modul Dist A = `ACGT` B = `A-GG` d = 0 for i in range(len(a)): d = d + Dist.d(A[i], B[i]) # Die Distanzfunktion wird # über den Namen des Moduls # angesprochen: Dist.d

Vergleich VIELER Sequenzen Trennung von Daten und Programm Man möchte das Programm nicht jedes Mal verändern, wenn man andere Sequenzen vergleichen möchte Das Programm muss also die Sequenzen aus einer anderen Datei laden Der FASTA-Parser von BioPython bietet sich hier an, damit lassen sich beliebig viele Sequenzen mit wenig Aufwand laden: # Importiere FASTA-Parser von BioPython from Bio import SeqIO # Lese alle Sequenzen aus einer FASTA-Datei fasta_datei = open("many_sequences.fasta") all = list(seqio.parse(fasta_datei, "fasta")) # Ausgabe wieviele Sequenzen gelesen wurden print len(all),"sequenzen eingelesen."

Vergleich VIELER Sequenzen Beispiel: Gegeben viele Sequenzen gleicher Länge (z.b. alle möglichen Alignments mit einer bestimmten Anzahl Gaps) Lese alle Sequenzen aus einer Datei ein (Trennung von Daten/Programm!) Gib für jedes Paar von Sequenzen (wieviele?) die Distanz der Sequenzen aus > seq1 AATCGGA > seq2 ATCGA-- > seq3 -ATCGA- > seq4 A-TCGA- > seq5 --ATCGA > seq6 -ATC-GA > seq7 -A-TCGA > seq8 ATC--GA

Vergleich VIELER Sequenzen # Importiere FASTA-Parser von BioPython from Bio import SeqIO # Importiere Distanzfunktion from Dist import d # Lese alle Sequenzen aus einer FASTA-Datei fasta_datei = open("many_sequences.fasta") all = list(seqio.parse(fasta_datei, "fasta")) # Berechne alle Distanzen zwischen den Sequenzen for i in range(len(all)): for j in range(i + 1, len(all)): print i, j, d(all[i], all[j])

Literatur http://openbookproject.net/thinkcspy How to think like a computer scientist Mit Beispielen in Python! http://www.diveintopython.org Ein ganzes Buch zu Python zum freien Herunterladen! Hinweis: Sie können Python auch auf Ihrem eigenen Rechner unter Windows installieren: http://www.python.org