Visualisierung mehrerer „Histogramme“ (Balkendiagramme)

9

Ich habe Schwierigkeiten, den richtigen Weg zur Visualisierung von Daten auszuwählen. Nehmen wir an, wir haben Buchhandlungen , die Bücher verkaufen , und jedes Buch hat mindestens eine Kategorie .

Wenn wir für eine Buchhandlung alle Kategorien von Büchern zählen, erhalten wir ein Histogramm, das die Anzahl der Bücher anzeigt, die in eine bestimmte Kategorie für diese Buchhandlung fallen.

Ich möchte das Verhalten des Buchladens visualisieren, ich möchte sehen, ob sie eine Kategorie gegenüber anderen Kategorien bevorzugen. Ich möchte nicht sehen, ob sie alle zusammen Sci-Fi bevorzugen, aber ich möchte sehen, ob sie jede Kategorie gleich behandeln oder nicht.

Ich habe ~ 1M Buchhandlungen.

Ich habe an 4 Methoden gedacht:

  1. Probieren Sie die Daten aus und zeigen Sie nur die Histogramme von 500 Buchhandlungen. Zeigen Sie sie auf 5 separaten Seiten mit einem 10x10-Raster. Beispiel eines 4x4-Gitters:

    multiple Histogramme 1

  2. Gleich wie # 1. Aber dieses Mal sortieren Sie die x-Achsenwerte nach ihrer Anzahl absteigend. Wenn es also eine Bevorzugung gibt, ist dies leicht zu erkennen.

  3. Stellen Sie sich vor, Sie setzen die Histogramme in # 2 wie ein Deck zusammen und zeigen sie in 3D. Etwas wie das:
    3D-Histogramm

  4. Anstatt die Farbe der dritten Achse zur Darstellung von Farben zu verwenden, verwenden Sie eine Heatmap (2D-Histogramm): 2D-Histogramm
    Wenn Buchhandlungen im Allgemeinen einige Kategorien anderen vorziehen, wird dies als schöner Verlauf von links nach rechts angezeigt.

Haben Sie andere Visualisierungsideen / -werkzeuge zur Darstellung mehrerer Histogramme?

Nimcap
quelle
4
Ich denke, Sie meinen eher Balkendiagramme als Histogramme
Rob Hyndman
@Rob: Ist das Histogramm nicht eine spezielle Art von Balkendiagramm, das eine Häufigkeitsverteilung darstellt? Ich versuche, Kategoriefrequenzen für viele Buchhandlungen zu visualisieren.
Nimcap
1
@nimcap Nein, da sich das Histogramm über einer kontinuierlichen Variablen befindet und die Buchkategorie eine kategoriale Variable ist.
@mbq Angenommen, ein Buchladen hat 3 Bücher und ihre Kategorien sind: B1: [c1, c2, c3] B2: [c1, c3] B3: [c1, c4]. Wenn wir die Kategorienzahlen aggregieren, erhalten wir [c1 x 3, c2 x 1, c3 x 2, c4 x 1]. Reicht das nicht aus, um ein Histogramm zu erstellen?
Nimcap
2
@nimcap Nein, es reicht aus, ein Balkendiagramm zu erstellen. Das Histogramm kann zum Beispiel für einen Buchpreis erstellt werden.

Antworten:

12

Wie Sie herausgefunden haben, gibt es keine einfachen Antworten auf Ihre Frage!

Ich nehme an, dass Sie daran interessiert sind, seltsame oder andere Buchhandlungen zu finden? Wenn dies der Fall ist, können Sie Dinge wie PCA ausprobieren ( weitere Informationen finden Sie auf der Wikipedia- Cluster-Analyseseite ).

Betrachten Sie dieses Beispiel, um Ihnen eine Idee zu geben. Sie haben 26 Buchhandlungen (mit den Namen A, B, .. Z). Alle Buchhandlungen sind ähnlich, außer:

  1. Shop Z verkauft nur wenige Geschichtsbücher.
  2. Geschäfte OY verkaufen mehr Liebesbücher als der Durchschnitt.

Ein Hauptkomponenten-Diagramm hebt diese Geschäfte zur weiteren Untersuchung hervor.

Hier ist ein Beispiel für einen R-Code:

> d = data.frame(Romance = rpois(26, 50), Horror = rpois(26, 100), 
               Science = rpois(26, 75), History = rpois(26, 125))
> rownames(d) = LETTERS
#Alter a few shops
> d[15:25,][1] = rpois(11,150)
> d[26,][4] = rpois(1, 10)
#look at the data
> head(d, 2)
       Romance Horror Science History
 A      36    107      62     139
 B      47     93      64     118
> books.PC.cov = prcomp(d)
> books.scores.cov = predict(books.PC.cov)
# Plot of PC1 vs PC2
> plot(books.scores.cov[,1],books.scores.cov[,2],
       xlab="PC 1",ylab="PC 2", pch=NA)
> text(books.scores.cov[,1],books.scores.cov[,2],labels=LETTERS)

Dies ergibt die folgende Darstellung:

PCA-Plot http://img265.imageshack.us/img265/7263/tmplx.jpg

Beachte das:

  1. Shop z ist ein Randpunkt.
  2. Die anderen Geschäfte bilden zwei unterschiedliche Gruppen.

Andere Möglichkeiten

Sie können sich auch GGobi ansehen , ich habe es nie benutzt, aber es sieht interessant aus.

csgillespie
quelle
Vielen Dank für Ihre wertvolle Antwort. Die Situation ist selbst in meiner Muttersprache schwer zu beschreiben :) Lass es mich versuchen. Ich bin nicht interessiert, ob Buchhandlungen bestimmte Kategorien bevorzugen, aber ich möchte sehen, ob sie Kategorien bevorzugen. Eigentlich erwarte ich das. Angenommen, ich habe 3 Buchhandlungen (B1, B2, B3) und 4 Kategorien (C1, C2, C3, C4). Dies sind ihre Verkaufsdaten: B1 (1, 1, 20, 20) B2 (90, 1, 1, 1), B3 (1, 1, 1, 30). Wenn ich mir diese Daten ansehe, kann ich sagen, dass sie einige Kategorien anderen vorziehen. Aber wenn Daten wie B1 (20, 30, 20, 20) B2 (90, 100, 100, 100), B3 (30, 30, 40, 40) waren, kann ich das nicht sagen.
Nimcap
In meinem Beispiel bevorzugen Geschäfte OY Liebesbücher. Aus diesem Grund befinden sich diese Shops im PC-Plot in einer bestimmten Gruppe.
Csgillespie
2
Ich habe dies als gute allgemeine Antwort gewählt, aber als praktische Antwort wird der Umgang mit so vielen Datenpunkten brutal sein.
John
1
+1 Dies ist sicherlich nicht das, was OP will, dennoch ist es sicher das, was sie / er wollen sollte.
1
+1 Schönes Beispiel für eine "bodenständige" Anwendung von PCA.
Nico
3

Ich würde etwas vorschlagen, das keinen definierten Namen hat (wahrscheinlich "Parallelplot") und so aussieht:

Alt-Text

Grundsätzlich zeichnen Sie alle Zählungen für alle Buchhandlungen als Punkte über die auf der x-Achse aufgelisteten Kategorien und verbinden die Ergebnisse jeder Buchhandlung mit einer Linie. Dies kann jedoch für 1M-Zeilen zu verwirrend sein. Das Konzept stammt von GGobi, das bereits von csgillespie erwähnt wurde.

Glorfindel
quelle
1
Parallele Diagramme hängen stark von der "richtigen" Reihenfolge der Variablen ab, sodass dies für zu viele Kategorien mühsam wird. Und die richtige Quelle scheint A.Inselberg, 1981 zu sein.
Benjamin Bannier
3
Sie werden als parallele Koordinatendiagramme bezeichnet: en.wikipedia.org/wiki/Parallel_coordinates
Simon Byrne
@ Simon danke; @honk Ich stimme zu, dies ist ein Grund, warum ich sie nicht benutze.