Visualizar múltiples "histogramas" (gráficos de barras)

9

Tengo dificultades para seleccionar la forma correcta de visualizar datos. Digamos que tenemos librerías que venden libros , y cada libro tiene al menos una categoría .

Para una librería, si contamos todas las categorías de libros, adquirimos un histograma que muestra la cantidad de libros que cae en una categoría específica para esa librería.

Quiero visualizar el comportamiento de la librería, quiero ver si favorecen una categoría sobre otras categorías. No quiero ver si están favoreciendo la ciencia ficción todos juntos, pero quiero ver si están tratando a cada categoría por igual o no.

Tengo ~ 1M librerías.

He pensado en 4 métodos:

  1. Muestree los datos, muestre solo 500 histogramas de la librería. Muéstrelos en 5 páginas separadas usando una cuadrícula de 10x10. Ejemplo de una cuadrícula 4x4:

    múltiples histogramas 1

  2. Igual que el n. ° 1. Pero esta vez clasifique los valores del eje x de acuerdo con su recuento descifrado, por lo que si hay un favor, se verá fácilmente.

  3. Imagina poner los histogramas en el n. ° 2 juntos como un mazo y mostrarlos en 3D. Algo como esto:
    Histograma 3D

  4. En lugar de usar el color de demanda del tercer eje para representar los colores, utilice un mapa de calor (histograma 2D): Histograma 2D
    si las librerías generalmente prefieren algunas categorías a otras, se mostrará como un bonito degradado de izquierda a derecha.

¿Tiene alguna otra idea / herramienta de visualización para representar varios histogramas?

nimcap
fuente
44
Creo que te refieres a gráficos de barras en lugar de histogramas
Rob Hyndman
@Rob: ¿No es el histograma un tipo especial de gráfico de barras que representa una distribución de frecuencia? Estoy tratando de visualizar frecuencias de categoría para muchas librerías.
nimcap
1
@nimcap No, porque el histograma está sobre una variable continua y la categoría de libro es una variable categórica.
@mbq Digamos que una librería tiene 3 libros, y sus categorías son: B1: [c1, c2, c3] B2: [c1, c3] B3: [c1, c4]. Cuando agregamos los recuentos de categorías obtenemos [c1 x 3, c2 x 1, c3 x 2, c4 x 1]. ¿No es esto suficiente para generar un histograma?
nimcap
2
@nimcap No, es suficiente generar un gráfico de barras. El histograma se puede hacer, por ejemplo, por el precio de un libro.

Respuestas:

12

Como has descubierto, ¡no hay respuestas fáciles para tu pregunta!

¿Supongo que te interesa encontrar librerías extrañas o diferentes? Si este es el caso, puede probar cosas como PCA (consulte la página de análisis de clúster de Wikipedia para obtener más detalles).

Para darle una idea, considere este ejemplo. Tienes 26 librerías (con los nombres A, B, .. Z). Todas las librerías son similares, excepto:

  1. Shop Z vende solo unos pocos libros de historia.
  2. Las tiendas OY venden más libros románticos que el promedio.

Una trama de componentes principales destaca estas tiendas para una mayor investigación.

Aquí hay un código R de muestra:

> 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)

Esto da la siguiente trama:

PCA plot http://img265.imageshack.us/img265/7263/tmplx.jpg

Darse cuenta de:

  1. Shop z es un punto periférico.
  2. Las otras tiendas forman dos grupos distintos.

Otras posibilidades

También puedes mirar GGobi , nunca lo he usado, pero parece interesante.

csgillespie
fuente
Gracias por tu valiosa respuesta. La situación es difícil de describir incluso en mi idioma nativo :) Déjame intentarlo. No me interesa si las librerías están favoreciendo categorías particulares, pero quiero ver si favorecen categorías. En realidad esto es lo que estoy esperando. Digamos que tengo 3 librerías (B1, B2, B3) y 4 categorías (C1, C2, C3, C4). Estos son sus datos de ventas: B1 (1, 1, 20, 20) B2 (90, 1, 1, 1), B3 (1, 1, 1, 30). Mirando estos datos, puedo decir que favorecen algunas categorías a otras. Pero si los datos fueran como B1 (20, 30, 20, 20) B2 (90, 100, 100, 100), B3 (30, 30, 40, 40) no puedo decir eso.
nimcap
En mi ejemplo, las tiendas OY favorecen los libros románticos. Es por eso que estas tiendas están en un grupo distinto en la trama de PC.
csgillespie
2
Lo voté como una buena respuesta general, pero como una respuesta práctica, tratar con tantos puntos de datos será brutal.
John
1
+1 Esto ciertamente no es lo que OP quiere, pero sí lo que debería desear.
1
+1 Buen ejemplo de una aplicación "realista" de PCA.
nico
3

Sugeriría algo que no tiene un nombre definido (probablemente "trama paralela") y se ve así:

texto alternativo

Básicamente, traza todos los recuentos de todas las librerías como puntos sobre las categorías enumeradas en el eje xy conecta los resultados de cada librería con una línea. Sin embargo, esto puede estar demasiado enredado para las líneas 1M. El concepto proviene de GGobi, que ya fue mencionado por csgillespie.

Glorfindel
fuente
1
Las gráficas paralelas dependen en gran medida del orden "correcto" de las variables, por lo que para demasiadas categorías esto se volverá tedioso. Y la fuente correcta parece ser A.Inselberg, 1981.
Benjamin Bannier
3
Se llaman diagramas de coordenadas paralelas: en.wikipedia.org/wiki/Parallel_coordinates
Simon Byrne
@ Simon, gracias; @honk Estoy de acuerdo, esta es una razón por la que no los uso.