gigantische CSV Datei analysieren

b0rsch

Ensign
Registriert
Jan. 2014
Beiträge
219
CSV Datei analysieren

Hello Community,

wie der Titel bereits verrät, suche ich ein Programm welches eine große CSV Datei auf Schlagwörter analysiert.

Der Datensatz umfasst über 150000 Zeilen mit jeweils recht viel Text. Die Software sollte mir sagen können welche Wörter wie oft benutzt werden (eine Art ranking). Im Bestfall sogar noch Zusammenhänge herstellen wie z.B. "besonders häufige Kombination ist 'Passwort' + 'vergessen'''

Im Idealfall ist die Software Open-Source und erfüllt alle Anforderungen. Von Excel, Acess oder MySQL gefriemel möchte ich absehen. Ich suche ein Programm das für genau sowas entwickelt wurde.

Gibt es so etwas und hat jemand damit eventuell Erfahrung?

Schon mal besten Dank!

edit: In der CSV sind mir die Wörter vorher nicht bekannt!
 
Zuletzt bearbeitet:
rg88 schrieb:
Wieviel willst ausgeben?

Wie bereits gesagt: 'im besten Fall Open-Source' allerdings will ich erst mal sondieren ob das überhaupt so möglich ist wie ich mir das vorstelle und schließe auch Kaufversionen generell nicht aus
 
Umfassende Lösung mit einer Millionen Optionen und Möglichkeiten: Der ELK Stack.

E: Elasticsearch
L: Logstash
K: Kibana

https://www.elastic.co/webinars/introduction-elk-stack

Elasticsearch basiert auf Lucene und kann mit Texten, Schlagwörtern und co. alles erdenkliche anstellen und analysieren.
Logstash ist eine Art Parser, der hauptsächlich dafür gedacht ist, um Log Dateien in Elasticsearch einzulesen. Natürlich kann das Teil auch jede beliebige Text Datei, CSV oder was auch immer auseinander nehmen.
Kibana ist ein grafisches User Interface um die Querys zu erstellen und die Ergebnisse in Graphen, Karten, Tabellen, etc. auszugeben.

Erfordert natürlich etwas Einarbeitung, aber danach hat man ein extrem mächtiges Analyse Werkzeug für jede Art von Daten.

(Btw: 150000 Zeilen sind nicht gigantisch, sondern eher eher ein Witz ;) )
 
Zuletzt bearbeitet:
benneque schrieb:
Umfassende Lösung mit einer Millionen Optionen und Möglichkeiten: Der ELK Stack.

E: Elasticsearch
L: Logstash
K: Kibana

https://www.elastic.co/webinars/introduction-elk-stack

Elasticsearch basiert auf Lucene und kann mit Texten, Schlagwörtern und co. alles erdenkliche anstellen und analysieren.
Logstash ist eine Art Parser, der hauptsächlich dafür gedacht ist, um Log Dateien in Elasticsearch einzulesen. Natürlich kann das Teil auch jede beliebige Text Datei, CSV oder was auch immer auseinander nehmen.
Kibana ist ein grafisches User Interface um die Querys zu erstellen und die Ergebnisse in Graphen, Karten, Tabellen, etc. auszugeben.

Erfordert natürlich etwas Einarbeitung, aber danach hat man ein extrem mächtiges Analyse Werkzeug für jede Art von Daten.

(Btw: 150000 Zeilen sind nicht gigantisch, sondern eher eher ein Witz ;) )

Du scheinst ne Menge wissen darüber zu besitzen. Aber für mich als 'Laie' ist das nur schwer nachvollziehbar. Auf jedenfall interessant zu erfahren was alles möglich ist aber ich benötige eigentlich nur ein einfach zu bedienendes Programm das für mich die Wörter in der CSV Datei zählt
 
"ne Menge" ist relativ. Ich nutze Elasticsearch inzwischen in jedem Projekt für jede Art von Query oder Aggregation. Vor allem Suchen in Freitext sind damit extrem einfach, eigentlich genau so wie bei Google:
+wort = muss vorkommen
-wort = darf nicht vorkommen
+w* = muss ein wort enthalten, das mit w beginnt
etc. pp.

Und mit den Aggregationen lässt sich natürlich auch zählen, gruppieren, etc.
(Das beste daran ist natürlich die Geschwindigkeit ;) )


Einfaches Wörter zählen kannst du mit jeder Sprache haben, die irgendeine Form von GROUP BY unterstützt. In SQL ist das natürlich etwas komplizierter.

Aber hier wäre eine simple Lösung in Java:
Code:
myString.split("\\s").stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
    .forEach((word, count) -> {
        System.out.println(word + ": " + count);
    });

Sollte in Python, Ruby, PHP, etc. ähnlich simpel sein.
 
Zuletzt bearbeitet:
Hi, ich stelle mal awk in den Raum. Damit geht es auf jeden Fall auch, es ist komplett OpenSource und kostenfrei und auf jedem GNU Linux verfügbar. Der Code ist relativ simpel (und kommt von dieser Website):

Code:
# Print list of word frequencies
{
    for (i = 1; i <= NF; i++)
        freq[$i]++
}

END {
    for (word in freq)
        printf "%s\t%d\n", word, freq[word]
}

Für eine Datei im aktuellen Verzeichnis sieht der Befehl in der Kommandozeile etwa so aus:

Code:
awk 'BEGIN { FS = ";" } {for (i=1; i<= NF; i++) {freq[$i]++}} END {for (word in freq) {printf "%s\t%d\n", word, freq[word]}}' test.csv > Ausgabe.csv

Für .csv-Dateien kann man auch den Feldseperator auf ";" stellen. Als generelle Lektüre zu awk ist die Seite hier denke ich zu empfehlen, grob gesprochen liest awk Texteingabe zeilenweise als Tabelle, der Programmteil

Code:
{for (i=1; i<= NF; i++) {freq[$i]++}}

wird pro Zeile Texteingabe ausgeführt, freq ist ein assoziatives Array das das Wort als Index und die Häufigkeit als zugeordneten Wert benutzt.

Edit: Als Hinweis an den TE: ich habe damit schon etwa 12 1.6Millionen-Zeilen-Dateien in unter einer Stunde umfassend gefiltert und gearbeitet und habe keine allzu performante Maschine benutzt (rMBP 13" Mid 2014), sollte also auch mit Deiner Datei gehen -- idR ist awk auch relativ schnell.
 
Zuletzt bearbeitet:
Im Prinzip mit jeder Skriptsprache oder Java etc. möglich.

1.) Array anlegen
2.) "Wort" trennen (Zeilenweise, Komma-separiert).
3.) Falls "Wort" neu, als Array-Index anfügen und Wert = 1 stellen
4.) Falls "Wort" schon hinterlegt, Werte um 1 erhöhen
5.) Array mit Worten und dazugehörigen Werten ausgeben

Bei Wort-Kombinationen ist das ähnlich, nur dass anstatt einem Wort eine Wort-Kombination hinterlegt wird.

* Performant ist das nicht, aber schnell getan*
 
Ich würde auch awk dazu verwenden. Es bietet wirklich immense Möglichkeiten.

150000 Zeilen sind nicht viel, aber wieviel MB hat das File? Ich habe mir selbst ein Analyseskript für logfiles geschrieben. Es analysiert ca 1GB große logfiles in einer Minute. Damit sehe ich, bei welchem loglevel welche exceptions wie häufig vorkommen.
 
Ja das reicht dicke :DD die CSV ist im Gegensatz zu anderen Analysen die so gefahren werden wohl eher ein Witz.

Aber auch das ist auch wieder mit programmieren etc verbunden.

In der CSV sind mir die Wörter übrigens nicht bekannt! Will gerade herausfinden was oft vorkommt.

Aber ich merke schon. Ein einfaches tool dass man via GUI sagt durchsuch das und zeig mir an was wie oft vorkommt gibt es wohl nicht oder?
Ergänzung ()

Frage: was wäre hiermit? Dem CSV Word Count Tool
 
Zuletzt bearbeitet:
Probier es doch aus, mit Programmiersprachen hast Du aber mMn die größere Kontrolle und mehr Möglichkeiten. Ich weiß nicht was Du für ein OS benutzt, aber es gibt sicherlich auch Texteditoren, die das allermeiste so auch können... wenigstens für Verbände wie "Passwort vergessen".
 
Zurück
Oben