Log File in Data Frame umwandeln

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
Yoshi
Beiträge: 5
Registriert: Mi Apr 10, 2019 9:30 am

Log File in Data Frame umwandeln

Beitrag von Yoshi »

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
Dateianhänge
Example_Log_File_marked.PNG
Example_Log_File.txt
(1.86 KiB) 17-mal heruntergeladen
Yoshi
Beiträge: 5
Registriert: Mi Apr 10, 2019 9:30 am

Re: Log File in Data Frame umwandeln

Beitrag von Yoshi »

* Anbei noch die Skizze des Ziel Data Frames.
Dateianhänge
Target_Table.PNG
Target_Table.PNG (2.98 KiB) 489 mal betrachtet
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Log File in Data Frame umwandeln

Beitrag von bigben »

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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Log File in Data Frame umwandeln

Beitrag von jogo »

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
Yoshi
Beiträge: 5
Registriert: Mi Apr 10, 2019 9:30 am

Re: Log File in Data Frame umwandeln

Beitrag von Yoshi »

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.

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
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
Dateianhänge
Geplanter Data Fram inkl. ns2 Spalte
Geplanter Data Fram inkl. ns2 Spalte
Ist Data Frame exkl. ns2 Spalte
Ist Data Frame exkl. ns2 Spalte
bigben
Beiträge: 2780
Registriert: Mi Okt 12, 2016 9:09 am

Re: Log File in Data Frame umwandeln

Beitrag von bigben »

Yoshi hat geschrieben: Mi Apr 10, 2019 12:03 pm 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.
Das ist ja schon mal schön.
Es wird nur die Information hinter "ns2:" benötigt, jedoch komme ich mit den zwei Funktionen grep und regexpr noch nicht so gut zurecht.
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:

Code: Alles auswählen

bsp <- "hier steht ganz viel <ns2:Muell und so"

regexpr("<ns2:[A-z0-9]*", bsp)
Die Antwort lautet 22, d. h. beginnend ab dem 22. Zeichen. Wenn Du das nicht selbst verarbeiten willst, gibt es Hilfsfunktionen. Damit könntest Du etwas spielen:

Code: Alles auswählen

regmatches(bsp, regexpr("<ns2:[A-z0-9]*", bsp))
Hier verwende ich aber Reguläre Ausdrücke regular expressions, nicht die Logik von xml. Du müsstest Dich da schon richtig reinlesen, damit Du die Limitationen verstehst.

- Wie muss ich die .txt in R importieren, um diese Funktionen darauf anwenden zu können?
Als STring einlesen. Beispielsweise mit file eine connection herstellen, dann mit readLines lesen oder so.
Ist PERL bzw. sed eine Funktion oder ein Package? Wie muss ich hier die Text-Datei importieren bzw. kann ich die Informationsbausteine verknüpfen?
Perl ist eine Programmiersprache, sed der streamline editor, ein sehr mächtiges Unix-Kommandozeilentool für Unix-Gurus.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Log File in Data Frame umwandeln

Beitrag von jogo »

Hallo Yoshi,
Yoshi hat geschrieben: Mi Apr 10, 2019 12:03 pm - Ist PERL bzw. sed eine Funktion oder ein Package? Wie muss ich hier die Text-Datei importieren bzw. kann ich die Informationsbausteine verknüpfen?
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
Yoshi
Beiträge: 5
Registriert: Mi Apr 10, 2019 9:30 am

Re: Log File in Data Frame umwandeln

Beitrag von Yoshi »

Hallo Bernhard,
hallo Jörg,

vielen vielen Dank für Eure Hilfe!

Ich werde mich gleich mal in die Regular Expressions reinfuchsen.

VG
Yoshi
Yoshi
Beiträge: 5
Registriert: Mi Apr 10, 2019 9:30 am

Re: Log File in Data Frame umwandeln

Beitrag von Yoshi »

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
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Log File in Data Frame umwandeln

Beitrag von jogo »

Hallo Yoshi,

kannst Du bitte kurz beschreiben, wie Du das Problem gelöst hast?

Gruß, Jörg
Antworten