5 votos

Visualizar la distribución de algo en un conjunto de datos muy grande

Supongamos que tengo una base de datos con alrededor de un millón de palabras y quiero hacerme una idea intuitiva de cómo se distribuye exactamente una palabra concreta, bastante infrecuente, en estos datos. Mi objetivo es poder ver claramente si esta palabra tiende a agruparse o si su distribución es relativamente uniforme. ¿Cuáles serían algunos buenos métodos para visualizar esto?

Por ejemplo, he visto algo que parece útil. Es básicamente una tira (rectángulo largo) en la que cada instancia de algo está representada por una línea vertical roja muy fina. El problema es que no sé cómo se llaman, y por lo tanto no puedo averiguar cómo hacer algo como esto en R.

Cualquier ayuda para encontrar la función R adecuada para ello, o cualquier otra sugerencia sobre buenas formas de visualizar este tipo de datos, sería muy apreciada.

3voto

jldugger Puntos 7490

Con una impresora de 1.200 ppp que utilice la línea más fina posible (un píxel) para cada palabra, el trazado de un millón de palabras seguiría teniendo casi 20 metros de longitud.

Tal vez un gráfico de densidad sería más útil.

3voto

Loren Pechtel Puntos 2212

Tomemos aquí una derivada (diferencia), de modo que en lugar de trabajar con la ubicación, se trabaja directamente con lo que se desea: la distancia.

Diga la palabra FOO aparece en el texto 30 veces. Calcule la distancia (número de otras palabras) entre cada aparición consecutiva de FOO, creando un vector de 29 distancias. Luego elige tu gráfico: histograma, densidad, xy con log x, etc.

Esto no te muestra donde clusters son, pero sí muestra agrupación.

2voto

Aunque Whuber tiene razón en principio, aún podría ver algo porque su palabra es muy infrecuente y sólo quiere parcelas de una palabra. Algo bastante infrecuente podría aparecer sólo 30 veces, probablemente no más de 500. Digamos que conviertes tus palabras en un único vector de palabras de un millón de longitud. Podrías construir fácilmente un gráfico con comandos básicos de R. Llamemos al vector 'palabras' y al elemento poco común 'desgraciado'.

n <- length(words)
plot(1:n, integer(n), type = 'n', xlab = 'index of word', ylab = '', main = 'instances of wretch', yaxt = 'n', frame.plot = TRUE)
wretch <- which(words %in% 'wretch')
abline(v = wretch, col = 'red', lwd = 0.2)

Podría cambiar la línea que asigna wretch utilizando un comando grep si necesita tener en cuenta las variaciones de la palabra. Además, el lwd en el comando abline podría establecerse más grueso o más fino dependiendo de la frecuencia de la palabra. Si acaba trazando 400 instancias, 0,2 funcionará bien.

He probado con algunos gráficos de densidad de este tipo de datos. Importé unas 50.000 palabras de Shakespeare y me resultó más fácil encontrar patrones en el código anterior que en los gráficos de densidad. Usé una palabra muy común que aparecía con una frecuencia 200 veces mayor que la frecuencia media ('to') y los gráficos se veían bien. Creo que harás un buen gráfico como este con casos raros en 1e6 palabras.

2voto

merriam Puntos 67

No sé si esto puede ser útil en su caso, pero en bioinformática a menudo siento la necesidad de visualizar la distribución de los recuentos de genes en un conjunto de datos dado. Este no es tan grande como tu conjunto de datos, pero creo que la estrategia se puede seguir para la mayoría de los grandes conjuntos de datos.

Una estrategia típica sería encontrar un número predeterminado de conglomerados utilizando, por ejemplo, la agrupación jerárquica (o cualquier otro procedimiento de agrupación). Una vez obtenidos los clusters, se puede muestrear un gen de cada uno de estos clusters. Suponiendo que el gen sea representativo del conglomerado, visualizar el recuento del gen (en forma de gráfico de densidad, histograma, gráfico qq, etc.) equivale a visualizar el comportamiento del conglomerado. Se puede hacer lo mismo para todos los clusters.

Básicamente, se reduce el enorme conjunto de datos a conglomerados y, a continuación, se visualizan los representantes de estos conglomerados suponiendo que "de media" el comportamiento de los conglomerados seguirá siendo "más o menos" el mismo.

Advertencia : Este método es muy sensible a muchas cosas, algunas de las cuales son el método de agrupación, el número de agrupaciones que elija, etc.

Creo que visualizar todas las palabras si el número de palabras es razonablemente grande (digamos $\geq$ 50) sería bastante difícil. Como bien señala Whuber, puede ser casi imposible.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X