1 / 21

Uebung 01

Uebung 01. Dateien. Rohdaten. Einzeldaten Gemessene Daten liegen normalerweise als reelle Zahlen vor, d.h. computertechnisch meist als float bzw. long .

bern
Download Presentation

Uebung 01

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Uebung 01 Dateien

  2. Rohdaten • EinzeldatenGemessene 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. H. Werner : Datenalyse

  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. H. Werner : Datenalyse

  4. Tag-Dateien • Numerische Wertewerden 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. • Elementebeginnen 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. H. Werner : Datenalyse

  5. Datei-header • Als sehr nützlich haben sich Kommentarzeilen erwiesen, in dem allgemeine Informationen gesammelt werden. • headerIm 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. H. Werner : Datenalyse

  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. H. Werner : Datenalyse

  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. H. Werner : Datenalyse

  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) H. Werner : Datenalyse

  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) H. Werner : Datenalyse

  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. H. Werner : Datenalyse

  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 . H. Werner : Datenalyse

  12. AWK eigene Variablen AWK 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 H. Werner : Datenalyse

  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} H. Werner : Datenalyse

  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 H. Werner : Datenalyse

  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 1 0 1 2 0 2 3 1 0 4 1 1 5 1 2 4 Pts.dat 1 0 0 1 2 0 1 2 3 0 2 3 4 1 0 4 5 1 1 5 6 1 2 4 ptsNr.dat H. Werner : Datenalyse

  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 dreigibt folgendes auf dem Bildschirm aus: awkeinszweidrei H. Werner : Datenalyse

  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. H. Werner : Datenalyse

  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 H. Werner : Datenalyse

  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. H. Werner : Datenalyse

  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 H. Werner : Datenalyse

  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 H. Werner : Datenalyse

More Related