Data - Libraries für Datenverarbeitung

Willkommen zu einer weiteren Folge in meiner allseits beliebten Reihe „Libraries mit nichtssagenden Namen, die niemanden interessieren“.

Heute: „Data“. Libraries für die Verarbeitung von Daten.

https://github.com/javagl/Data

Es gibt eine release unter https://github.com/javagl/Data/releases , wo verschiedene Anwendungen kombiniert sind, die auf Basis dieser Libraries erstellt wurden.


Den Kern des ganzen bildet data-core, wo tatsächlich auch ein bißchen was in der README.md steht: https://github.com/javagl/Data/tree/master/data-core

Es geht dabei um die Definition von Datentypen, Datenstrukturen, Datensätzen und Datenströmen, und Operationen auf letzteren. Man kann also z.B. einen Datensatz definieren, bei dem man weiß, dass er aus drei „Spalten“ besteht, in der ersten Spalte ein nominaler Datentyp vom Typ String mit dem Wertebereich { "A", "B", "C" } steht, in der zweiten Spalte ein Ordinaler Datentyp wie etwa ein LocalDateTime, und in der dritten Spalte ein Numerischer Datentyp vom Typ Double mit dem Wertebereich (0.0, 1.0].

Wenn man auf den Datensatz (d.h. auf den DataStream) dann mapping- oder filter-Operationen anwendet, werden die Veränderungen in das Datenschema übertragen. Da weiß man, was man hat. (Ein paar Konzepte sind ähnlich wie die von Spark und so, falls das jemand kennt…)

Garniert wird das ganze mit den data-vectors, wo man jede Zeile eines Datensatzes mit einem rein numerischen Vektor assoziieren kann. Wie der Vektor aus dem Dateneintrag erstellt wird, kann man sich aussuchen. Aber die Vektoren kann man dann weiter verrechnen, um z.B. eine Standardisierung durchzuführen, oder eine Principal Component Analysis zur Dimensionsreduktion, … oder man schmeißt das ganze in irgendein Machine-Learning-Verfahren. In der data-ml-Lib sind man sehr rudimentär Classifier ankizziert, und Qualtitätsmaße für Classifier, die man aus einer Cross-Validation ziehen kann.


Ein Anwendungsfall von dem ganzen ist die Generierung von künstlichen Datensätzen, speziell von Datensätzen für Klassifizierung. Es gibt eine Anwendung, mit der man solche Datensätze (einzeln und händisch) generieren kann:

https://raw.githubusercontent.com/javagl/Data/master/data-applications/screenshots/DataGen01.png

Man kann einen Datensatz beliebiger Dimensionalität erstellen, und dann verschiedene „Unterdatenmengen“ hinzufügen - also Gaussian- oder Normalverteilte Blobs, oder Punkte auf einer Kugeloberfläche. Das ganze wird live in einer Scatterplot-Matrix angezeigt. Die Parameter dieser „Data generation steps“ kann man einstellen - insbesondere natürlich die Klasse, die die Datenelemente haben sollen.

(Die Spinner dort sind „draggable“ Spinner: Man kann klicken und ziehen… schön interaktiv und so :slight_smile: ).

Wenn man sich seinen Datensatz zusammengebaut hat, kann man den Entstehungsprozess (also die Schritte mit all ihren Parametern) reproduzierbar abspeichern - und natürlich den eigentlichen Datensatz selbst rausschreiben, als ARFF-Datei (Weka-Dateiformat).

Nebenbei kann man sich auch noch Dinge wie die Scagnostics – Wikipedia anzeigen lassen - zumindest die, die für mehr als 2 Dimensionen anwendbar sind…


Diese „Prozess“-Dateien für die Erstellung eines einzelnen Datensatzes sind vielleicht schon praktisch. Interessant wird das ganze aber dadurch, dass man die Parameter natürlich auch automatisch in bestimmten Wertebereichen variieren lassen kann. Mit einem „Batch Generator“ kann man sich hunderte von Datensätzen erstellen (einschließlich der Prozessbeschreibungen), in denen bestimmte Parameterbereiche abgetastet werden. So entsteht dann z.B. so ein Datensatz hier:

(Diese Bilder werden auch gleich mit erstellt).

Die Beschreibung dieses Batch-Prozesses ist aber noch sehr rudimentär und spezifisch, deswegen ist in der Release nur eine Bespiel-EIngabedatei dabei, die man aufmachen und durchlaufen lassen kann, um ca. 100 Klassifikations-Test-Datensätze zu generieren.


Und was macht man mit 100 künstlichen Datensätzen? Joa, Classifier testen halt. Die „Data analysis“-Anwendung kann man verwenden, um einen Datensatz zu laden, und sich für einen der zig Weka-Classifier, die man dort dann auswählen kann, statistische Informationen anzeigen zu lassen, zu Qualitätsmaßen, die aus einer Cross Validation bereichnet wurden.

Diese Analyseanwendung ist aber auch noch sehr rudimentär. Eher ein Test oder Proof Of Concept. Das ganze intuitiver, interaktiver und übersichtlicher zu machen steht noch aus.


Schließlich gehört zu dem ganzen auch noch ein „Editor“ für Datensätze:

https://raw.githubusercontent.com/javagl/Data/master/data-applications/screenshots/DataSetEditor01.png

Damit kann man ein bißchen an den Datensätzen rum-manipulieren, Zeilen/Spalten löschen, filtern, umsortieren, Spalten konvertieren (z.B. wenn man man wieder eine CSV-Datei hat, und weiß, dass sie in einer Spalte nur „double“-Werte enthält, aber beim Parsen eben erstmal nur Strings rauskommen…), PCA anwenden, sich ein paar Histogramme für die Attributwerte anzeigen, und das ganze natürlich auf wieder als ARFF-Dateien rauscchreiben.


Das ganze ist natürlich (wie alles von mir) erstmal eine Version 0.0.1, komplett vorläufig, und kann sich jederzeit beliebig ändern.

1 „Gefällt mir“

Das Projekt ist jetzt privat.