Log File in Data Frame umwandeln
Log File in Data Frame umwandeln
Hallo R-Community,
ich nutze R erst seit kurzem und habe ein Projekt übernommen, in dem ich eine Log Data (.txt) untersuchen soll.
Die Log Datei ist 3,1 GB groß. Diese habe ich bereits in 100 MB große Teile (über die PowerShell) zerlegt, damit ich diese auch mit R verarbeiten kann.
Jetzt stoße ich aber auf das Problem die komplett unstrukturierten Daten in eine Struktur (Data Frame) in R einzulesen.
Da es sich nicht ausschließlich um XML handelt, funktioniert das Package xmltools nicht. Das Package stringr habe ich bereits auch gefunden, nur leider will es hier nicht klappen.
Im Anhang findet ihr einen Ausschnitt der Log Datei. Dieser Ausschnit wiederholt sich sehr oft und ist unterschiedlich lang (3,1 GB).
Zudem habe ich bereits einen Ziel Data Frame skizziert.
Habt ihr eine Idee, wie ich dieses unstrukturierte Log File in eine Struktur bekomme?
Ich freue mich über Eure Anregungen und Hilfe.
VG
Yoshi
ich nutze R erst seit kurzem und habe ein Projekt übernommen, in dem ich eine Log Data (.txt) untersuchen soll.
Die Log Datei ist 3,1 GB groß. Diese habe ich bereits in 100 MB große Teile (über die PowerShell) zerlegt, damit ich diese auch mit R verarbeiten kann.
Jetzt stoße ich aber auf das Problem die komplett unstrukturierten Daten in eine Struktur (Data Frame) in R einzulesen.
Da es sich nicht ausschließlich um XML handelt, funktioniert das Package xmltools nicht. Das Package stringr habe ich bereits auch gefunden, nur leider will es hier nicht klappen.
Im Anhang findet ihr einen Ausschnitt der Log Datei. Dieser Ausschnit wiederholt sich sehr oft und ist unterschiedlich lang (3,1 GB).
Zudem habe ich bereits einen Ziel Data Frame skizziert.
Habt ihr eine Idee, wie ich dieses unstrukturierte Log File in eine Struktur bekomme?
Ich freue mich über Eure Anregungen und Hilfe.
VG
Yoshi
- Dateianhänge
-
- Example_Log_File.txt
- (1.86 KiB) 17-mal heruntergeladen
Re: Log File in Data Frame umwandeln
* Anbei noch die Skizze des Ziel Data Frames.
- Dateianhänge
-
- Target_Table.PNG (2.98 KiB) 490 mal betrachtet
Re: Log File in Data Frame umwandeln
Hallo,
gerade nicht viel Zeit. Als Hüftschuss würde ich denken, dass sich die ersten zwei Zeilen mit read.fwf einlesen lassen sollten (kann man mit n=1 auf einen Datensatz begrenzen) und bei dem Rest kommt es darauf an, wieviel von der Information Du brauchst. Wenn es wirklich nur der Teil unmittelbar hinter "ns2:" ist, dann vielleicht per grep und regexp, ansonsten mit grep nur den xml-Teil isolieren (alles zwischen <soapenv:body> und </soapenvbody>) und dass dann mit xmltools analysieren.
JMTC,
Bernhard
gerade nicht viel Zeit. Als Hüftschuss würde ich denken, dass sich die ersten zwei Zeilen mit read.fwf einlesen lassen sollten (kann man mit n=1 auf einen Datensatz begrenzen) und bei dem Rest kommt es darauf an, wieviel von der Information Du brauchst. Wenn es wirklich nur der Teil unmittelbar hinter "ns2:" ist, dann vielleicht per grep und regexp, ansonsten mit grep nur den xml-Teil isolieren (alles zwischen <soapenv:body> und </soapenvbody>) und dass dann mit xmltools analysieren.
JMTC,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Log File in Data Frame umwandeln
Hallo Yoshi,
willkommen im Forum!
Ich würde die Datei mit PERL (oder auch sed) in die XML-Teile zerlegen und dann ... (wie Du schon angedacht hattest).
Gruß, Jörg
willkommen im Forum!
Ich würde die Datei mit PERL (oder auch sed) in die XML-Teile zerlegen und dann ... (wie Du schon angedacht hattest).
Gruß, Jörg
Re: Log File in Data Frame umwandeln
Hallo Bernhard,
Hallo Jörg,
vielen Dank für die schnellen Antworten und die guten Tipps!
Mit read.fwf hat es geklappt die ersten zwei Zeilen zu extrahieren. Ich habe es auch mit dem kompletten Log File versucht und konnt die benötigten Informationen extrahieren.
Bild: Data Frame aktuell.
Es wird nur die Information hinter "ns2:" benötigt, jedoch komme ich mit den zwei Funktionen grep und regexpr noch nicht so gut zurecht. An folgenden Punkten hänge ich noch:
- Wie muss ich die .txt in R importieren, um diese Funktionen darauf anwenden zu können?
- Wie stelle ich die Verknüpfung zwischen der Tabelle, welche ich bereits habe (Bild: Data Frame aktuell) und der Information hinter "ns2:" her?
- Ist PERL bzw. sed eine Funktion oder ein Package? Wie muss ich hier die Text-Datei importieren bzw. kann ich die Informationsbausteine verknüpfen?
Bild: Data Frame geplant.
Ich freue mich schon auf weitere Anregungen!
VG
Yoshi
Hallo Jörg,
vielen Dank für die schnellen Antworten und die guten Tipps!
Mit read.fwf hat es geklappt die ersten zwei Zeilen zu extrahieren. Ich habe es auch mit dem kompletten Log File versucht und konnt die benötigten Informationen extrahieren.
Code: Alles auswählen
library(tidyr)
rm(list = ls())
# Definition der Spaltennamen
c.names <- c("No.","Time","Source","Destination", "Protocol", "Length", "Info")
# Importiert die Text Datei mit vordefinierten Spaltenbreiten als Data Frame
df <- as.data.frame(read.fwf("Example_Log_File.txt", width = c(8,15,22,22,9,7,80), fill = T))
# Entfernt Lerrzeichen vor und nach Merkmalsausprägungen
df <- data.frame(lapply(df, trimws), stringsAsFactors = FALSE)
# Setzt Spaltennamen
colnames(df) <- c.names
# Entfernt alle Spalten, welche NA enthalten
df <- df %>% drop_na()
# Data Frame nach relevanten Informationen Filtern
df <- df[df$Protocol == "HTTP/XML",]
df
Es wird nur die Information hinter "ns2:" benötigt, jedoch komme ich mit den zwei Funktionen grep und regexpr noch nicht so gut zurecht. An folgenden Punkten hänge ich noch:
- Wie muss ich die .txt in R importieren, um diese Funktionen darauf anwenden zu können?
- Wie stelle ich die Verknüpfung zwischen der Tabelle, welche ich bereits habe (Bild: Data Frame aktuell) und der Information hinter "ns2:" her?
- Ist PERL bzw. sed eine Funktion oder ein Package? Wie muss ich hier die Text-Datei importieren bzw. kann ich die Informationsbausteine verknüpfen?
Bild: Data Frame geplant.
Ich freue mich schon auf weitere Anregungen!
VG
Yoshi
Re: Log File in Data Frame umwandeln
Das ist ja schon mal schön.
Du solltest Dich unbedingt zu regular expressions in R belesen - das kann sehr hilfreich sein. So zum Beispiel kannst Du in einem String finden, wo "<ns2:" gefolt von einem Wort vorkommt:Es wird nur die Information hinter "ns2:" benötigt, jedoch komme ich mit den zwei Funktionen grep und regexpr noch nicht so gut zurecht.
Code: Alles auswählen
bsp <- "hier steht ganz viel <ns2:Muell und so"
regexpr("<ns2:[A-z0-9]*", bsp)
Code: Alles auswählen
regmatches(bsp, regexpr("<ns2:[A-z0-9]*", bsp))
Als STring einlesen. Beispielsweise mit file eine connection herstellen, dann mit readLines lesen oder so.- Wie muss ich die .txt in R importieren, um diese Funktionen darauf anwenden zu können?
Perl ist eine Programmiersprache, sed der streamline editor, ein sehr mächtiges Unix-Kommandozeilentool für Unix-Gurus.Ist PERL bzw. sed eine Funktion oder ein Package? Wie muss ich hier die Text-Datei importieren bzw. kann ich die Informationsbausteine verknüpfen?
LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Log File in Data Frame umwandeln
Hallo Yoshi,
und sed ist der Streameditor - das ist ein Programm, das in den Bereich UnixTextProcessing gehört: https://stackoverflow.com/tags/sed/info
Beide Tools können sehr gut mit regulären Ausdrücken umgehen.
Gruß, Jörg
PERL ist eine eigene Programmiersprache: https://stackoverflow.com/tags/perl/info
und sed ist der Streameditor - das ist ein Programm, das in den Bereich UnixTextProcessing gehört: https://stackoverflow.com/tags/sed/info
Beide Tools können sehr gut mit regulären Ausdrücken umgehen.
Gruß, Jörg
Re: Log File in Data Frame umwandeln
Hallo Bernhard,
hallo Jörg,
vielen vielen Dank für Eure Hilfe!
Ich werde mich gleich mal in die Regular Expressions reinfuchsen.
VG
Yoshi
hallo Jörg,
vielen vielen Dank für Eure Hilfe!
Ich werde mich gleich mal in die Regular Expressions reinfuchsen.
VG
Yoshi
Re: Log File in Data Frame umwandeln
Hallo Bernhard,
hallo Jörg,
es hat nun alles perfekt geklappt und die Daten sind jetzt strukturiert in einem Data Frame.
Vielen lieben Dank nochmal für Eure Unterstützung!
Ich wünsche Euch ein schönes Wochenende
LG
Yoshi
hallo Jörg,
es hat nun alles perfekt geklappt und die Daten sind jetzt strukturiert in einem Data Frame.
Vielen lieben Dank nochmal für Eure Unterstützung!
Ich wünsche Euch ein schönes Wochenende
LG
Yoshi
Re: Log File in Data Frame umwandeln
Hallo Yoshi,
kannst Du bitte kurz beschreiben, wie Du das Problem gelöst hast?
Gruß, Jörg
kannst Du bitte kurz beschreiben, wie Du das Problem gelöst hast?
Gruß, Jörg