Klaus BERNT
Software
 
Kontakt
Veranstaltungen
Projekte
Publikationen
Software
      Marc
      binarize
Freizeit
 

 

binarize

Konvertieren von Kategorien in Binärdaten

Bei der Datenanalyse tritt mitunter das Problem auf, dass kategorielle Daten vorliegen, das Analyse-Werkzeug aber nur binäre Daten untersuchen kann. Das Programm binarize hilft, die Kategorien in binäre Daten zu wandeln. Wenn die Kategorien eine Ordnung tragen, lässt sich diese in die Binärdaten übernehmen.

 

System-Voraussetzungen

binarize ist ein Perl-5-Programm, eine entsprechende Installation ist daher Voraussetzung. Eine mögliche Quelle dafür ist http://www.CPAN.org/.

binarize kann sowohl von einer Kommandozeile als auch mittels HTML-Formular aufgerufen werden; ein Beispiel für letzteres befindet sich am Ende dieses Dokumentes. Für eine lokale Installation wird entweder die Möglichkeit zum Kommandozeilenaufruf (oder etwas Entsprechendes) oder ein Web-Server (z.B. Apache; nicht Client -Netscape u.ä.-!) mit Perl-5 benötigt.

 

Installation

  • Download der Perl-Quelle; Menüpunkt 'save next link as...' verwenden!
  • Anpassen der ersten Zeile (Perl-Aufruf);
  • Execute-Erlaubnis geben.

 

Aufruf

Am Kommandozeilen-(=Offline-)Aufruf lassen sich die Optionen und Parameter von binarize erklären. Das Web-Formular (mit Online-Aufruf) ist lediglich eine andere Variante, das Programm mit seinen Daten zu versorgen. Ausserdem besteht bei der Online-Berechnung die Ausgabe stets aus mehreren Blöcken, die in einem Text hintereinander stehen; eine manuelle Nachbereitung ist für die weitere Verwendung meist unumgänglich. Beim lokalen (Offline-)Aufruf hingegen können die verschiedenen Resultate in verschiedene Dateien gelenkt werden.

Der binarize-Kommandozeilen-Aufruf

binarize [-i] [-v] [-c var_data] [-o var_output] [-d delimiter] [-m missing] cat_data > bin_data

liest die Datei cat_data mit kategoriellen Daten ein und schreibt sie als Binär-Daten auf Standard-Output (hier umgelenkt auf die Datei bin_data). Einige Meldungen (z.B. Fehler-) werden auf Standard-Error ausgegeben und erscheinen auf dem Monitor.
Optionen (alle optional):
Jede Option gilt nur für die erste folgende Konvertierung einer cat_data-Datei; danach werden alle Optionen und ihre Parameter auf ihre Vorgabe-Werte zurückgesetzt. Bei mehrfacher Angabe einer parametrisierten Optionen gilt jeweils der letzte angegebene Parameter.
-i :
keine ID-Spalte vorhanden
(wird sonst als erste Spalte erwartet und 1-zu-1 ausgegeben);
-v :
keine Zeile mit Variablennamen vorhanden
(Variablennamen werden dann entweder aus var_data gelesen oder automatisch erzeugt als V_#);
-c :
Variablennamen und Kategorien aus Datei var_data lesen, ebenso Steuerung der Ausgabe.
-o :
Variablennamen und Kategorien in Datei var_output schreiben, ebenso Steuerung der Ausgabe. Erzeugt eine (einfache) var_data-Datei.
-d :
Feld-Trennzeichen (darf auch eine Zeichenkette sein, die dann insgesamt trennt).
Im Online-Feld wird das <TAB>-Zeichen als '\t' dargestellt.
-m :
Missing-Value-Darstellung
(in der Ausgabe, ist nur mit der Option -c sinnvoll).

Parameter
cat_data
Diese Datei enthält die kategoriellen Daten, die in Binärform konvertiert werden sollen. Ohne eine solche Datei ist der Aufruf von binarize sinnlos.
Im Offline-Aufruf dürfen mehrere cat_data-Dateien in der Parameterliste erscheinen. Da jedoch alle Binär-Daten in der gleichen Datei landen, ist hiervon abzuraten; lediglich die Variablen/Kategorien-Informationen können verteilt gespeichert werden. Nach jeder cat_data-Konvertierung werden die Optionen und ihre Parameter auf ihre Vorgabe-Werte zurückgesetzt; die Optionen können (und müssen!) daher vor jedem cat_data-Parameter separat definiert werden.
Bei der Online-Eingabe darf das <TAB>-Zeichen als '\t' dargestellt werden.
Der Aufbau dieser Datei wird weiter unten im Abschnitt Daten-Struktur erläutert.
var_data
Die Datei nennt die in cat_data enthaltenen Variablen und deren Kategorien. Kategorien, die eine Ordnung aufweisen, können zu einer Gruppe zusammengefasst und als Gruppe in mehreren Arten binär ausgegeben werden; dies erleichtert und erweitert die (binäre) Datenanalyse. Zur Gruppierung und Ausgabe-Steuerung wird in var_data jeder Kategorien-Gruppe eine Kommandozeichenkette zugeordnet.
Bei der Online-Eingabe darf das <TAB>-Zeichen als '\t' dargestellt werden.
Der Aufbau dieser Datei wird weiter unten im Abschnitt Daten-Struktur erläutert.
Weitere Möglichkeiten wie z.B. Intervall-Angabe für Fliesskomma-Werte sind in binarize ausdrücklich nicht vorgesehen; die Wandlung in Kategorien müsste an anderer Stelle vorgenommen werden.
var_output
Diese Datei wird von binarize derart erzeugt, dass sie ohne Änderung als var_data in einem weiteren Lauf eingesetzt werden könnte. Sinnvoller ist es jedoch, vorher eigene Modifikationen anzubringen: zum Beispiel Gruppieren (d.h. Zeilen zusammenfassen), Ausgabe-Kommandos eintragen, Missing Values löschen.
bin_data
Diese Datei ist das Haupt-Ergebnis eines binarize-Laufes. Sie enthält für jede Variable eine Liste von Spalten mit Null- oder Eins-Einträgen. Die genaue Anzahl von Spalten hängt von der Gruppierung der Kategorien und den Ausgabe-Anweisungen ab (siehe unten).
bin_data zeigt -wie die Eingabe-Datei cat_data- eine Matrix von Werten; diese liegen jedoch (ausser in der ersten Zeile und -ohne Option -i- in der ersten Spalte) im Bereich {0,1}, sind also binär. Als Trennzeichen ist der Tabulator fest bestimmt. Jede Zeile in bin_data repräsentiert die gleiche Zeile (bei Option -v: um eins verschoben) in cat_data, nur mit mehr, wahrscheinlich sogar viel mehr Spalten.
bin_data hat in der ersten Zeile die Liste der binären Variablen. Jeder binäre Variablenname setzt sich zusammen aus
  1. dem kategoriellen Variablennamen,
  2. einem Kommando-Zeichen (siehe unten),
  3. einem Gleichheitszeichen und
  4. der Kategorie (Ausgabe-Darstellung)
Fehlt die Option -i (d.h. die erste Spalte in den Eingabe-Daten ist eine ID), so wird dieser Wert ohne Änderung übertragen. Ist der Variablenname dieser Spalte nicht anders definiert, so wird er als 'ID' ausgegeben.

 

Gruppieren von Kategorien

Im binären Ausgabe-Datensatz wird aus einer Kategorie-Spalte ein ganzer Block von binären 0/1-Spalten. Üblicherweise enthält so ein Block genauso viele Spalten wie die Variable Kategorien hat. Wenn man die Binär-Darstellungen aller Kategorien einer Variablen untereinander schreibt, bilden sie die Zeilen einer Matrix. Wenn diese Kategorien keine Ordnung tragen, wird jede Spalte ihres Binär-Spalten-Blocks genau eine Eins zeigen, der Rest sind Nullen; dies ergibt die Einheitsmatrix. Ist jedoch eine Ordnung vorhanden, die z.B. eine Teilmengenrelation beschreibt, kann es sinnvoll sein, statt einer Einheitsmatrix (jede Kategorie erzeugt genau eine Eins) eine (rechte-obere oder linke-untere) Dreiecksmatrix von Einsen für den Binär-Spalten-Block zu erzeugen. Die Ordnung kann auch nur für einen Teil der Variablen-Kategorien gelten; aus diesem Grund führt binarize die Kategorien-Gruppen ein. Jede solche Gruppe kann mehrfach binär ausgegeben werden. Auf diese Weise kann einerseits die Original-Information »dieser Datensatz enthält jene Kategorie« vermittelt werden, andererseits wird aber auch die Zusatz-Information »dieser Datensatz enthält jene Kategorie und daher auch alle kleineren/größeren« darstellbar. In einer grafischen Auswertung (Beispiel: mittleres Einkommen pro Region) würde ein schrittweises Durchlaufen und Region-Anzeigen von Kategorien ohne Gruppierung jeweils die Regionen anzeigen, die zur gerade aktuellen Kategorie gehören; die Regionen der nächsten Kategorie hätten keine Überlappung mit den aktuellen. Mit Gruppierung dagegen würde das markierte Gebiet stetig wachsen oder schrumpfen (je nach Ordnung). In manchen Anwendungen (z.B. spezielle Fälle der Assoziationsregel-Berechnung) kann die Standard-Konvertierung (ohne Gruppierung) sogar unsinnig sein. Bestes Beispiel für die Notwendigkeit mehrerer Gruppen in einer Variablen ist eine geordnete Kategoriengruppe, zu der sich ein Missing Value gesellt: dieses passt nicht in die Ordnung und muss daher als 'Single' ausgegeben werden.

 

Daten-Struktur

cat_data

In dieser Datei wird eine Matrix von Werten erwartet. Dabei entspricht jede Zeile einem Datensatz und jede Spalte einer (kategoriellen) Variablen. Die Spalten sind durch ein Trennzeichen (Delimiter) voneinander getrennt (Default=<TAB>; wählbar durch Option -d).
Die erste Zeile darf Variablennamen enthalten; fehlen diese, ist die Option -v zu setzen.
Die erste Spalte jeder Zeile darf eine (eindeutige) Identifikation enthalten. Sie wird nicht kategoriell interpretiert, sondern ohne Änderung in die Ausgabe übertragen. Fehlt eine solche Spalte, sollte die Option -i gesetzt werden.

var_data

Die Datei hat folgenden Aufbau:
für jede Variable:
eine Zeile mit dem Variablennamen;
für jede Kategoriengruppe eine weitere Zeile mit
einer Kommando-Zeichenkette
nach dem Muster /^[<=>]*$/, d.h. jedes der Zeichen '<', '=' und '>' darf beliebig oft (oder garnicht) enthalten sein, andere jedoch nicht
<TAB>
Kategorie-Eingabe-Darstellung (Eintrag in cat_data)
<TAB>
Kategorie-Ausgabe-Darstellung (Eintrag in der Variablen-Zeile der Ausgabe);
Es dürfen beliebig viele Sequenzen der Art
<TAB>Kategorie-Eingabe-Darstellung<TAB>Kategorie-Ausgabe-Darstellung
auf der Zeile folgen; dadurch wird die Gruppierung dargestellt.

Ein- und Ausgabe-Darstellung
Die Datei cat_data enthält möglicherweise nicht den Text, den Sie sich als Variablen/Kategorien-Beschreibung wünschen. Daher gibt es die Möglichkeit, jeder cat_data-Kategorie einen anderen Text zuzuordnen, der in der binären Ausgabe in der Variablenzeile verwendet wird.

Kommando-Zeichenkette
Ob eine Kategorien-Gruppe eine Einheitsmatrix oder eine rechte-obere oder linke-untere Dreiecksmatrix erzeugt, steuert das Kommando-Zeichen '=', '<' bzw. '>'. Da es sinnvoll sein kann, mehrere dieser Darstellungen nebeneinander auszugeben, dürfen diese Zeichen auch mehrfach und gemischt auftreten. Welche Darstellung in der Binär-Ausgabe steht, ist an der Variablenzeile ersichtlich: das Kommando-Zeichen (plus ein '=') trennt den Variablennamen von der Kategorie. Für jede Kategorien-Gruppe einer Variablen kann eine andere Kommando-Zeichenkette angegeben werden.

 

Algorithmus

Die Bearbeitung erfolgt in folgenden Schritten:
  • Feststellung der vorhandenen Variablen/Kategorien.
    Ist eine var_data-Datei angegeben (Option -c Parameter), so werden die Variablennnamen aus dieser Datei verwendet und nur die dort erfassten Kategorien jeder Variablen als gültige Werte behandelt; jeder andere Wert zählt als Missing Value. Wenn es solche Werte gibt, erscheint in der Binär-Ausgabe eine zusätzliche ungruppierte Binär-Variable mit dem Namen var==missing (Option -m Parameter; Default='·').
    Eine etwaige Variablen-Zeile wird in diesem Falle nicht beachtet.
    Fehlt die Option -c, so werden die Variablennamen entweder aus der ersten (Variablen-)Zeile der cat_data-Daten gelesen (Option -v fehlt) oder als V_# (#=Spalten-Index) bestimmt (Option -v vorhanden). Die Kategorien werden für jede Spalte (=Variable) separat aus den Daten gesammelt. Einen bevorzugten Missing Value gibt es ebensowenig wie eine spezifizierte Reihenfolge oder eine Gruppierung der Kategorien einer Variablen. Die Kategorien jeder Variablen werden dann lexikografisch sortiert; wenn man Glück hat, landen diejenige Kategorien, die fehlende Werte repräsentieren sollen, am Anfang oder Ende dieser Listen.
  • Aufbau der binären Ausgabe-Texte
    Diese Texte bestehen aus Nullen und Einsen, die mit Tabulator-Zeichen getrennt sind. Für jede Kategorie jeder Variablen wird ein eigener Text erzeugt; hierzu dienen die zuvor erzeugten Kategorien-Listen.
    Im Fall ohne Option -c enthält jeder einzelne Ausgabe-Text so viele Tabulator-getrennte Null-Eins-Einträge wie die Variable Kategorien hat (inklusive Missing Value); davon ist genau ein Eintrag eine Eins.
    Im Fall mit Option -c kann jede Kategorien-Gruppe mehrfach ausgegeben werden; die Zahl der Binär-Einträge der Variablen erhöht sich für jede zusätzliche Ausgabe einer Gruppe um die Anzahl der Gruppen-Mitglieder. Ausserdem werden alle nicht vordefinierten Kategorien als ein gemeinsamer Missing Value in einer zusätzlichen Binär-Variablen zusammengefasst.
  • Ausgabe der Binär-Variablen-Zeile
    Jede (kategorielle) Eingabe-Variable wird mit jeder ihrer Kategorien verbunden und in der Form Variable+Kommandozeichen+'='+Kategorie als Binär-Variablenname ausgegeben. Feldtrennzeichen ist der Tabulator. War in der Eingabe eine ID-Spalte angekündigt, so wird deren Bezeichnung ohne Änderung übernommen, andernfalls fehlt sie auch in der Binär-Variablen-Zeile.
  • Zeilenweises Einlesen der Kategorie-Daten aus cat_data und Ausgabe der Binär-Daten.
    Beim Durchlaufen der Spalten einer Eingabe-Zeile wird der jeweilige zum Variable-Kategorie-Paar gehörige binäre Ausgabe-Text der Ausgabe-Zeile hinzugefügt.

 

Beispiel-Offline-Aufrufe

binarize -i -v -d ' ' -m NA -c marketing.vc marketing.data

binarize -i -v -d ' ' -m NA -o marketing.vco marketing.data

 

Online-Aufruf

Eingabe-Felder
ID-Spalte Das gelöschte Flag entspricht der Offline-Option -i.
Variablen-Zeile Das gelöschte Flag entspricht der Offline-Option -v.
Delimiter Das Textfeld entspricht der Offline-Option -d und ihrem Parameter.
Missing-Darstellung Das Textfeld entspricht der Offline-Option -m und ihrem Parameter.
Variable/Kategorien Der Textbereich darf eine var_data-Datei enthalten; dies entspricht der Offline-Option -c und ihrem Parameter.
Kategorien-Daten Der Textbereich muss eine cat_data-Datei enthalten; dies entspricht der Eingabe-Datei cat_data der Offline-Version.
Ausgabe-Format Die HTML-Ausgabe sieht besser aus, die Text-Ausgabe lässt sich leichter weiterverarbeiten. Der Inhalt ist bei beiden Formaten gleich: im ersten Block stehen die Binär-Daten (entsprechend Standard-Output bin_data der Offline-Version), der zweite Block enthält die var_output-Informationen (entsprechend der Offline-Option -o), und der dritte Block (sofern vorhanden) listet die (Fehler-)Meldungen, die die Offline-Version auf Standard-Error ausgibt.
convert Der Button startet die Online-Berechnung.

 

Kostprobe gefällig?

ID-Spalte Variablen-Zeile
Delimiter Missing-Darstellung

Variable/Kategorien

Kategorien-Daten
Ausgabe-Format:     HTML
  Text

 


[Uni Augsburg]  [Math.-Nat. Tech. Fakultät]  [Institut für Mathematik]  [Print-Version]  [E-Mail]  aktualisiert am: 05.06.2023;  © Klaus BERNT