7 Stimmen

Datenvisualisierung: Bubble-Charts, Venn-Diagramme und Tag-Wolken (ach du lieber Himmel!)

Angenommen, ich habe eine große Liste von Objekten (Tausende oder Zehntausende), von denen jedes mit einer Handvoll Tags versehen ist. Es gibt Dutzende oder Hunderte möglicher Tags, und ihre Verwendung folgt einem typischen Potenzgesetz: Einige Tags werden extrem häufig verwendet, aber die meisten sind selten. Alle außer den häufigsten paar Dutzend Tags könnten in der Tat in der Regel ignoriert werden.

Das Problem besteht nun darin, wie man die Beziehung zwischen diesen Tags visualisieren kann. Eine Tag-Cloud ist eine schöne Visualisierung der Frequenzen, aber sie ignoriert, welche Tags mit anderen Tags auftreten. Angenommen, der Tag :bar tritt nur bei Objekten auf, die auch mit :foo getaggt sind. Das sollte visuell erkennbar sein. Gleiches gilt für drei Tags, die tendenziell zusammen auftreten.

Man könnte jeden Tag zu einer Blase machen und sie teilweise überlappen lassen. Technisch betrachtet ist das ein Venn-Diagramm, aber es so zu behandeln könnte umständlich sein. Google Charts zum Beispiel kann Venn-Diagramme erstellen, aber nur für 3 oder weniger sets (tags): http://code.google.com/apis/chart/docs/gallery/venn_charts.html
Der Grund, warum sie es auf 3 sets beschränken, ist, dass es bei mehr schrecklich aussieht. Siehe "Erweiterungen auf höhere Anzahlen von sets" auf der Wikipedia-Seite: http://en.wikipedia.org/wiki/Venn_diagrams

Aber das gilt nur, wenn jede mögliche Schnittmenge nicht leer ist. Wenn nicht mehr als 3 Tags jemals gemeinsam auftreten (vielleicht nach dem Aussortieren der seltenen Tags), dann könnten eine Sammlung von Venn-Diagrammen funktionieren (wobei die Größen der Blasen die Tag-Frequenz repräsentieren).

Oder vielleicht ein Graph (mit Knoten und Kanten), bei dem visuell dickere oder dünnere Kanten die Häufigkeit des gemeinsamen Auftretens repräsentieren.

Haben Sie irgendwelche Ideen oder Hinweise auf Tools oder Bibliotheken? Idealerweise würde ich das mit JavaScript machen, aber ich bin offen für Dinge wie R und Mathematica oder wirklich alles andere. Ich bin bereit, einige tatsächliche Daten zu teilen (du wirst lachen, wenn ich dir sage, wofür es steht), wenn jemand neugierig ist.

Nachtrag: Die Anwendung, die ich ursprünglich im Sinn hatte, war TagTime, aber mir fällt auf, dass dies auch gut auf das Problem der Visualisierung meiner leckeren Lesezeichen zutrifft.

1 Stimmen

Du hast anscheinend den Teil über Programmierung aus deiner Frage weggelassen.

0 Stimmen

Er fragt, welche Bibliotheken er verwenden sollte. Es sei denn, er möchte ein Buch ausleihen, handelt es sich wahrscheinlich um eine Programmierfrage.

5voto

doug Punkte 67204

Wenn ich Ihre Frage richtig verstehe, sollte hier eine Bildmatrix gut funktionieren. Die Umsetzung, die ich im Sinn habe, wäre eine n x m-Matrix, in der die markierten Elemente die Zeilen sind und jeder Tagtyp eine separate Spalte ist. Jede Zelle in der Matrix würde ausschließlich aus "1" und "0" bestehen, d.h. ein bestimmtes Element hat entweder einen bestimmten Tag oder nicht.

In der unten stehenden Matrix (die ich um 90 Grad gedreht habe, damit sie besser in dieses Fenster passt - die Spalten repräsentieren tatsächlich die markierten Elemente und jede Zeile zeigt das Vorhandensein oder Fehlen eines bestimmten Tags bei allen Elementen) habe ich das Szenario simuliert, in dem es 8 Tags und 200 markierte Elemente gibt. , eine "0" ist blau und eine "1" ist hellgelb.

Alle Werte in dieser Matrix wurden zufällig ausgewählt (jedes markierte Element besteht aus acht Ziehungen aus einer Box mit zwei Token, einem blauen und einem gelben (kein Tag und Tag, respektive). Daher gibt es hier keinen visuellen Hinweis auf ein Muster, aber wenn es eines in Ihren Daten gibt, kann Ihnen diese Technik, die sehr einfach umzusetzen ist, dabei helfen, es zu finden.

Ich habe R verwendet, um die simulierten Daten zu generieren und zu plotten, nur mit Basisgrafiken (keine externen Pakete oder Bibliotheken):

# create the matrix
A = matrix(data=r1, nrow=1, ncol=8)

# populate it with random data
for (i in seq(0, 200, 1)){r1 = sample(0:1, 8, replace=TRUE); A = rbind(A, r1)}

# now plot it
image(z=A, ann=F, axes=F, col=topo.colors(12))

alternativer Text

2 Stimmen

Ich glaube nicht, dass diese Art von Visualisierung dabei helfen würde, Muster in den Daten zu finden, da es "Tausende von Objekten" und "Hunderte von Tags" gibt. Das resultierende Bild wird wahrscheinlich nur ein riesiges, unübersichtliches Bild sein.

1 Stimmen

Eine gute Seriation ist für das Erkennen von Mustern in dieser Art von Darstellung sehr wichtig.

2voto

John Ruiz Punkte 2271

Auch wenn dies ein alter Thread ist, bin ich heute erst darauf gestoßen.

Sie könnten auch in Erwägung ziehen, eine selbstorganisierende Karte zu verwenden.

Hier ist ein Beispiel für eine selbstorganisierende Karte zur Darstellung von Armut in der Welt. Es wurden 39 von dem, was Sie als Ihre "Tags" bezeichnen, verwendet, um das zu arrangieren, was Sie als Ihre "Objekte" bezeichnen.

http://www.cis.hut.fi/research/som-research/povertymap.gif Selbstorganisierende Karte zur Darstellung von Armut in der Welt

2voto

Jay Askren Punkte 10053

Wenn Sie das Web anvisieren, würde ich etwas wie dieses erstellen. Verbindungen zwischen den Knoten könnten dicker oder dunkler in der Farbe sein oder vielleicht eine stärkere Kraft, die sie verbindet, damit sie nah beieinander liegen. Ich würde auch den Tag-Namen innerhalb des Kreises hinzufügen.

Einige Bibliotheken, die dafür sehr gut geeignet wären, sind:

Einige andere unterhaltsame JavaScript-Bibliotheken, die es sich anzusehen lohnt, sind:

1voto

jeremy-george Punkte 1073

Ich bin mir nicht sicher, ob das funktionieren würde, da ich das nicht getestet habe, aber so würde ich anfangen:

Sie können eine Matrix erstellen, wie Doug es in seiner Antwort vorschlägt, aber anstatt Dokumente als Zeilen und Tags als Spalten zu haben, nehmen Sie eine quadratische Matrix, in der Tags als Zeilen und Spalten betrachtet werden. Der Wert der Zelle T1;T2 wird die Anzahl der Dokumente sein, die sowohl mit T1 als auch mit T2 markiert sind (beachten Sie, dass Sie damit eine symmetrische Matrix erhalten, weil [T1;T2] den gleichen Wert haben wird wie [T2;T1]).
Nachdem Sie das getan haben, ist jede Zeile (oder Spalte) ein Vektor, der den Tag in einem Raum mit T Dimensionen lokalisiert. Tags, die in diesem Raum nahe beieinander liegen, treten oft gemeinsam auf. Um das gemeinsame Auftreten zu visualisieren, können Sie dann eine Methode zur Reduzierung Ihrer Raumdimensionalität oder eine Clustering-Methode verwenden. Sie können z.B. eine Kohonen-Selbstorganisationskarte verwenden, um Ihren T-Dimensionen-Raum auf einen 2D-Raum zu projizieren, Sie erhalten dann eine 2D-Matrix, in der jede Zelle einen abstrakten Vektor im Tag-Raum darstellt (was bedeutet, dass der Vektor nicht unbedingt in Ihrem Datensatz existiert). Dieser Vektor spiegelt eine topologische Einschränkung Ihres Ausgangsraums wider und kann als "Modell"-Vektor angesehen werden, der ein signifikantes gemeinsames Auftreten einiger Tags widerspiegelt. Zudem repräsentieren Zellen, die nahe beieinander liegen, auf dieser Karte Vektoren, die im Ausgangsraum nahe beieinander liegen, was es Ihnen ermöglicht, den Tag-Raum auf eine 2D-Matrix abzubilden.
Die endgültige Visualisierung der Matrix kann auf verschiedene Arten erfolgen, aber ohne die Ergebnisse der vorherigen Verarbeitung zu sehen, kann ich Ihnen keine Ratschläge dazu geben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X