# Werkzeug zur Datenanalyse von CSV nach Diagramm



## Jay1980 (30. Mrz 2011)

Servus,

ich lasse über ein Shell-Skript nacheinander viele Dateien zu einer Anwendung schicken. Die Anwendung rackert einen Algorithmus ab und erstellt eine CSV-Datei je Eingabedatei. Jetzt will ich die Daten analysieren, das mache ich aktuell mit OpenOfficeCalc: ich lese die CSV-Datei ein, das sind zwei Spalten, diese zwei Spalten kopiere ich und lass sie sortieren. Dann erstelle ich ein Diagramm auf Grundlage der sortierten Spalten und speichere die Datei als ods-Datei, also das OpenOfficeCalc-Format und exportiere das geschaffene Diagramm als PDF - wunderbar, aber bei vielen Dateien muss das automatisch passieren - was würdet ihr da machen?

Erst versuchte ich mich an OpenOfficeBasic - der Makrosprache für OpenOffice - kein Erfolg. Das geht sehr zäh und wird ein Riesengefrickel, gerade so Sachen wie 'Exportiere als PDF' werden mir als Basic-Novize viel Einarbeitungszeit kosten. Ich las auch, dass OpenOffice recht gut für die Java-Welt zugreifbar ist - es gibt einmal die BeanShell, so kann wohl aus OOO heraus selbst via (vereinfachtem) Java eine Automatisierung programmiert werden. Ebenfalls ist es wohl auch möglich eine Java-Anwendung zu bauen, die OOO voll fernsteuert. Dies ist für mich denke ich besser, da die Kernkoordination ja über ein Shell-Skript ist und das automatische Anstoßen des Office-Makros ebenfalls noch ein ungelöstes Problem ist. Hm, ich denke ich bin nicht der einzige der so etwas machen muss und vielleicht hat einer, der sich die Hörner schon abstoßen musste ja einen Tipp für mich, wie man wohl schnell an brauchbare Ergebnisse kommt.

Danke  vorab.


----------



## nrg (30. Mrz 2011)

würde auch OOo oder Apache POI vorschlagen


----------



## madboy (30. Mrz 2011)

Für mich hört sich das nach einem Paradebeispiel für gnuplot homepage an.


----------



## Gast2 (30. Mrz 2011)

Warum nicht einfach die Daten mit einem eigenen Program einlesen, sortieren und dann mit JFreeChart ein Diagramm zeichenen lassen und als PDF exportieren?

1) CSV einlesen und parsen - sehr einfach
2) Datenstruktur sortieren - einfach
3) Chart erzeugen - kommt auf die Chart an, aber würd ich immer noch als einfach bezeichenen
4) PDF exportieren - auch einfach

Also das wäre meiner Meinung nach der einfachste Weg.


----------



## Jay1980 (30. Mrz 2011)

Der Weg über JFreeChart scheint sinnig. Ich vermute das sollte auch das schnellste sein, dazu habe ich die Kontrolle, dass auch bei sehr vielen 'Zeilen' kein Problem passiert, OOCalc packt bis Version 3.2 denke ich nur rund 65000 . Gibts noch einen Umstand auf den ich aufpassen muss, dass der Programmzugriff schnell ist?

Aktuell plane ich das so im Shellskript: 
for DATEI in *.datafiles
do   
      java -jar plotmirdameindinghin.jar
done

Es werden sehr viele Aufrufe sein, kann ich der Java-Maschine explizit sagen, dass die schön anbleiben soll?


----------



## Gast2 (30. Mrz 2011)

Nein, jedesmal wird einen neue VM gestartet. 

Ich würde dann wohl eher den Weg gehen deinem Java Program als Input Argument einen Folder zu geben, oder eine Liste von Dateinamen und sich das Java Programm drum kümmert die Batch abzuarbeiten.

EDIT://

Alternativ natürlich kannst du auch einen permanenten Serverdienst laufen lassen der per Messaging ein Kommando aktzeptiert.


----------



## madboy (30. Mrz 2011)

Noch ein kurzes Votum für Gnuplot, dann hör ich auf ;-)

Ich verstehe nicht, was an der Java-Lösung einfacher/schneller sein soll gegenüber etwas wie diesem:

```
for file in *csv
do
	sorted_file="sorted_$file"
	sort $file > $sorted_file

	plotcommand=("set datafile separator \";\"; " "set terminal pdf; " "set output \"$file.pdf\"; " "set title \"Blubb\"; " "plot '$sorted_file' with lines;" )

	echo ${plotcommand[@]} | gnuplot
	rm $sorted_file
done
```


----------



## Gast2 (30. Mrz 2011)

Right, du hast recht - schneller geht wohl nicht.


----------

