21
Uebung 01 Dateien

Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

Embed Size (px)

Citation preview

Page 1: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

Uebung 01

Dateien

Page 2: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 2

Rohdaten• Einzeldaten

Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch meist als float bzw. long.

• DatensatzEin Datensatz ist daher eine Folge (Zeile) fester Länge n von Zahlen und die Prozessdaten bilden wieder eine Folge von Datensätzen

• DateiEine Rohdaten-Datei besteht damit aus einer Anzahl von Zeilen, die jeweils n Zahlen enthalten, die durch einen Trenner (Lehrzeichen, Komma o.ä.) voneinander getrennt sind.

• ZusatzinformationenManchmal wird noch eine Zeile aus Namen für die n Parameter der Datensätze und manchmal noch Informationen über Bedeutung und Entstehung der Daten vorangestellt.

Page 3: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 3

Raw-Dateien• Im Folgenden erwarten wir von den Rohdatenliferanten Dateien im

Textformatfolgender Struktur:• Datenzeilen:

durch einen Trenner \s , ;, \t,..) getrennte numerische Werte (Textstücke die als Zahlen interpretiert werden können), jede solche Zeile stellt einen Datensatz dar und alle Datensätze sollten gleich viele Parameter (Werte) enthalten.

• Kommentare:Textzeilen, die nicht mit einem numerischen Wert beginnen und Zeilenenden nach einem Kommentarzeichen #. Um Missinterpretationen zu vermeiden, ist es sinnvoll, auch alle Kommentarzeilen mit # beginnen zu lassen

– Kommentarzeilen können z.B. Informationen über den Prozess enthalten, aus dem die Daten stammen.

– Meist enthalten Rohdaten-Dateien eine Zeile mit getrennten Namen, die als Bezeichner für die einzelnen Parameter in den Datensätzen dienen.

– Oft werden auch numerische Informationen wie Wertebereiche, Anzahl von Daten/Datensatz und Datensätzen, Min, Max, Mittel,… in Kommentarzeilen angegeben.

Page 4: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 4

Tag-Dateien• Numerische Werte

werden als Zeichenfolgen notiert, beim Einlesen müssen diese Zeichenfolgen wieder in numerische Werte umgewandelt (geparsed) werden.

• tag-DateienEin bewährtes Format sind die tag-Dateien (eine Vorstufe von XML), in denen die Daten in Elementen zusammengefasst werden.

• Elemente beginnen und enden mit jeweils einem Namensfeld (tag) der Form <Name> und </Name>, zwischen denen Daten und/oder weitere Elemente stehen. Die Namen sollen dem Leser hinweise zur Bedeutung der eingeschlossenen Daten und Elemente geben.

• XMLBei XML kommt noch eine Grammatik hinzu, welche Elemente möglich sind und wie sie ineinander stehen können/sollen.

• Diese Darstellungsart eignet sich besonders für Darstellungen in Html-Seiten und bei der Verwendung in Datenbanken. Für die Arbeit am Rechner sind die meist zu schwerfällig.

Page 5: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 5

Datei-header• Als sehr nützlich haben sich Kommentarzeilen erwiesen,

in dem allgemeine Informationen gesammelt werden.• header

Im Dateikopf können verschiedene wichtige Informationen gespeichert werden, welcher Art und Herkunft die enthaltenen Daten sind, z.B.# project_name = …# recording_date = …# author = …# separator = “…“ (Das hier verwendete Trenner-Symbol)# sample_number = k (Anzahl der Daten-Zeilen)# chanel_number = n (Anzahl der Parameter i.e. Daten/Zeile)# chanel_names = … (Folge der Parameter-Namen ; n Items)

etc.

Page 6: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 6

statistics• Oft kann es wichtig sein, über die numerischen Daten in einer

Datei numerische Übersichtsinformationen (über die Anzahl von Parametern und Datensätzen hinaus) zu haben.

• In diesem Bereich können verschiedene numerische Informationen zu den einzelnen Parametern gespeichert werden, z. B.# sum_of_values = …,…# sum_of_squares = …,…# maximum_values = …,…# minimum_values = …,…# mean_values = …,…# range_high = …,…# range_low = …,…

etc.• Eine solche Statistik-Sektion kann wiederholte Berechnungen

immer wieder derselben Zahlwerte ersparen helfen.

Page 7: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 7

data• Der wichtigste Abschnitt ist der Daten -

Abschnitt, in dem sich die Datenzeilen (Datensätze, records) befinden.

• Dieser Abschnitt besteht genau aus den Datenzeilen ohne alle Kommentarzeilen einer Rohdaten-Datei, d.h. er hat so viele Zeilen, wie es Datensätze gibt und jede Zeile enthält die Werte aus einem Datensatz (durch einen Trenner z.B. \t getrennt).

• Zwischen den Datenzeilen können weitere Kommentarzeilen als Erläuterung stehen.

Page 8: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 8

Aufgabe 1:• Entwickle get , set und append Hilfsprogramme, mit denen

bestimmte Kommentar- oder Datenzeilen aus einer raw-datei geholt werden können

• get(string) file nimmt ein Textstück string (z.B. ‘# author=‘) entgegen, sucht in der Datei file eine Zeile, die mit string anfängt und gibt den Rest der Zeile nach dem string aus. Wenn eine solche Zeile nicht existiert, wird der leere String ““ ausgegeben

• set(string,zeile) filenimmt Textstück string (z.B. ‘# author=‘) und zeile entgegen, sucht in der Datei file eine Zeile, die mit string anfängt, löscht diese Zeile , falls sie existiert, und schreibt stattdessen die Konkatenationstring zeile in diese Datei.

• append(string,zeile) filetut dasselbe, wie set, nur daß die gefundene Zeile nicht gelöscht wird, sondern append hängt zeile an die gefundene Zeile an (z.B. einen weiteren Autor), wenn eine solche Zeile nicht gefunden wird, wird string zeile als neue Zeile in die Datei geschrieben.

• Beachte: append ist aus set unmittelbar definierbar:append(string,zeile) = set(string,get(string)zeile)

Page 9: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 9

Aufgabe 2• Eine wichtige Hilfsfunktion ist makeStatistics(file), die die Datenzeilen (weder Kommentar noch Leerzeile) des Files einmal durchgeht und dabei die folgenden Eintragungen berechnet und einträgt:# sample_number = (Anzahl der Daten-Zeilen)# chanel_number = (Anzahl der Parameter i.e. Daten/Zeile)# sum_of_values = …,… (pro Spalte die Summe aller Werte)# sum_of_squares = …,… (pro Spalte die Summe der Quadrate aller Werte)# maximum_values = …,… (pro Spalte das Maximum aller Werte)# minimum_values = …,… (pro Spalte das Minimum aller Werte)# mean_values = …,… (pro Spalte der Mittelwert aller Werte

sum_of_values / sample_number)

Page 10: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 10

AWK• Eine sehr geeignete Sprache dafür ist awk

(eine Erweiterung von sed in der UNIX-Welt), die auf command-line-Ebene automatisierte Veränderungen auf Textdateien durchführen kann.

• http://www.ostc.de/awk.pdf enthält ein sehr gutes Tutorial.

• Liest Dateien zeilenweise ein, zerlegt die Zeilen in Worte (Textstücke ohne Trenner) und interpretiert alle Worte, die Zahlen darstellen können als Zahlen.

Page 11: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 11

AWK Arbeitsweise• Ein awk-Befehl (Regel) ist von der Bauart:

awk MUSTER { AKTION }

• Dabei steht MUSTER für einen Ausdruck, der für eine Textzeile wahr oder falsch sein kann (boolescher oder regulärer Ausdruck)

• AKTION ist ein Programmstück, dessen elementare Operationen Textzeilen in gegebene Dateien schreiben.

• Der Befehl wird ausgeführt, indem– nacheinender die Zeilen (Records) aus einer Textdatei gelesen

werden.– Wenn die gelesene Zeile das Muster erfüllt, wird die Aktion auf

diese Zeile angewendet.– Die Abarbeitung endet, wenn die gesamte Textdatei gelesen

worden und jede zugehörige Aktion durchgeführt worden ist.• AWK schreibt immer in eine andere Datei als die, aus der sie

liest, meistens stdout und stdin .

Page 12: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 12

AWK eigene VariablenAWK hat eigene Variablen, die in Mustern und Aktionen verwendet werden

Variable Beschreibung Default Symbol• $0 Ganzer aktueller Record keiner $0• $1..$n Einzelne Felder keiner $1..$n• NF Zahl Felder im Record keiner n

• FS Eingabe Feldseparator Space, Tab +• OFS Ausgabe Feldseparator Space keines• NR Nummer des akt: Record keiner keiner• RS Input Record Separator Newline /• ORS Output Record Separator Newline keiner• FILENAME Name der aktuellen Datei  

Page 13: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 13

AWK - Einzeiler• Anzahl Eingabezeilen ausgeben:

– END { print NR }END ist wahr, wenn das Dateiende erreicht ist.

• Gesamtzahl aller Felder (Wörter) aller Eingabezeilen ausgeben:– { nw += NF } END { print nw }

• Alle nicht-Kommentarzeilen ausgeben– {$1 != “#“} {print $0}

• Jede nichtleere Zeile ausgeben:– NF>0

• Jede Zeile mit ihrer Zeilennummer davor ausgeben:– {print NR,$0}

Page 14: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 14

Leerzeichen• Leerzeichen, die in AWK Programmen fast

überall stehen dürfen, sind unter Windows auf der AWK-Command-Line nicht möglich, weil CMD das Leerzeichen als Trenner für Parameter interpretiert. Die oben aufgeführten 1-Zeiler müssen also komprimiert oder ungeschrieben werden zu:

• awk END{print(NR)} 1.dat• awk {nw+=NF}END{print(nw)} 1.dat• awk {if($0~/^#/);else{print($0)}} 1.dat• awk {if(NF!=0){print($0)}} 1.dat• awk {print(NR,$0)} 1.dat• awk {if(NF==0){print($0);}else{if($0~/^#/){print($0);}\

else{(zaehler+=1);print(zaehler,$0)}}} 1.dat

Page 15: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 15

Einsatz

• In einem Cmd-Fenster von Windows gehen wir in das Unterverzeichnis unserer Datenfiles.

• awk muß im Pfad sein.• Wir geben einawk “{ print NR, $0 }“ pts.dat >ptsNr.dat

0 0 10 1 20 2 31 0 41 1 51 2 4

Pts.dat

1 0 0 12 0 1 23 0 2 34 1 0 45 1 1 56 1 2 4

ptsNr.dat

Page 16: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 16

AWK Parameter• In AWK gibt es einen Parameter Übergabe

Mechanismus, der über die speziellen Variablen ARGV und ARGC gesteuert wird

• ARGV ist der Vektor aller Parameter des awk –Befehls.• ARGC ist die Anzahl der Parameter, also die Länge von

ARGV.• ARGV[0] ist der Befehlsname awk• ARGV[1] … ARGV[ARGC-1] sind die Parameter, die nach

dem eigentlichen Befehl aufgeführt werden• Der Befehl :

awk {BEGIN {for ( i = 0; i < ARGC; i++ ) {print ARGV[i]}}} eins zwei drei gibt folgendes auf dem Bildschirm aus:awkeinszweidrei

Page 17: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 17

AWK Parameter 2

• Ein alternativer Mechanismus ist die –v (value-) Option von awk.

• Durch awk –v a=1 –v b=‘heinz‘ … werden im Befehl vor der BEGIN Sektion die Variablen a und b eingeführt und mit den Werten 1 bzw. heinz initialisiert.

Page 18: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 18

Strings prüfen• Wie prüft man z.B., ob eine Zeile mit einem

bestimmten String anfängt (z.B. # author)• Hier bieten sich reguläre Ausdrücke als

Werkzeug an z.B.• $0 ~ /^# author/

~ bedeutet „kommt vor in“^ steht für den Textanfang// ist die Einschlussklammer für reguläre Ausdrücke

• ($1 == /#/) && ($2 == /author/)

Beim voreingestellten Trennungszeichen wird # in $1 und author in $2 landen

Page 19: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 19

AWK - Typen• Der wichtigste Datentyp von awk ist der

String (Zeichenkette, Text), eine besondere Rolle spielen dabei die Worte, die keine white spaces enthalten.

• awk wandelt nach Bedarf und Möglichkeit Worte in Zahlen (numerische Werte) um und auch umgekehrt. Die Ausdrücke a+0 bzw. a ““ (Konkatenation □) erzwingen die Interpretation als Zahl bzw. als String.

• awk verwendet 0 und ““ als booleschen Wert FALSE und alle übrigen Werte als TRUE.

Page 20: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 20

AWK Vektoren• Variablennamen haben keinen

vorgegebenen Typ und können auch als Vektoren verwendet werden

• Beispielfor (i = 1; i < NR; i++) eingabe[i]=$i;

• Die Variable eingabe enthält nun gerade die Worte bzw. Zahlen, die in der aktuell eingelesenen Zeile stehen.

• Solche Vektoren sind z.B. hilfreich, wenn die statistik-Zeilen erzeugt werden sollen

Page 21: Uebung 01 Dateien. SS 2011H. Werner : DatenalyseÜbung 1 : 2 Rohdaten Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch

SS 2011 H. Werner : Datenalyse Übung 1 : 21

Beispiel• In einer Datei sollen vor jeden Record (Zeile mit

numerischen Daten) die Record-Nummer geschrieben werden.

• Inhalt der Datei RNzaehlen.awk :BEGIN {RN = 0}{if (($1>=0)||($1<=0)) {RN++ ; print RN , $0} else {print $0}}

• Das Muster BEGIN ist nur vor dem Lesen des ersten records wahr, es wird eine Variable RN mit 0 initialisiert

• Wenn die aktuelle Zeile $0 mit einem numerischen Wert $1 anfängt (ein Record), so wird RN inkrementiert und vor die vorhandene Zeile herausgeschrieben, andernfalls (ein Kommentar oder Leerzeile …) wird nur die vorhandene Zeile unverändert herausgeschrieben.

• awk -f "RNzaehlen.awk" pts.dat >ptsRN.dat