web-dev-qa-db-fra.com

Visualisation des données les plus sous-utilisées

Les histogrammes et les diagrammes de dispersion sont d'excellentes méthodes de visualisation des données et de la relation entre les variables, mais récemment je me suis demandé quelles techniques de visualisation me manquaient. Selon vous, quel est le type d'intrigue le plus sous-utilisé?

Les réponses devraient:

  1. Ne pas être très couramment utilisé dans la pratique.
  2. Soyez compréhensible sans beaucoup de discussion de fond.
  3. Être applicable dans de nombreuses situations courantes.
  4. Inclure un code reproductible pour créer un exemple (de préférence en R). Une image liée serait Nice.
176
Ian Fellows

Je suis vraiment d'accord avec les autres affiches: les livres de Tufte sont fantastiques et valent bien la lecture.

Tout d'abord, je voudrais vous signaler n très joli tutoriel sur ggplot2 et ggobi de "Looking at Data" plus tôt cette année. Au-delà de cela, je voudrais simplement mettre en évidence une visualisation de R et deux packages graphiques (qui ne sont pas aussi largement utilisés que les graphiques de base, les treillis ou ggplot):

Cartes thermiques

J'aime beaucoup les visualisations qui peuvent gérer des données multivariées, en particulier les données de séries chronologiques. Heat maps peut être utile pour cela. --- Un très joli a été présenté par David Smith sur le blog Revolutions . Voici le code ggplot fourni par Hadley:

stock <- "MSFT"
start.date <- "2006-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=",
                stock, "&a=", substr(start.date,6,7),
                "&b=", substr(start.date, 9, 10),
                "&c=", substr(start.date, 1,4), 
                "&d=", substr(end.date,6,7),
                "&e=", substr(end.date, 9, 10),
                "&f=", substr(end.date, 1,4),
                "&g=d&ignore=.csv", sep="")    
stock.data <- read.csv(quote, as.is=TRUE)
stock.data <- transform(stock.data,
  week = as.POSIXlt(Date)$yday %/% 7 + 1,
  wday = as.POSIXlt(Date)$wday,
  year = as.POSIXlt(Date)$year + 1900)

library(ggplot2)
ggplot(stock.data, aes(week, wday, fill = Adj.Close)) + 
  geom_tile(colour = "white") + 
  scale_fill_gradientn(colours = c("#D61818","#FFAE63","#FFFFBD","#B5E384")) + 
  facet_wrap(~ year, ncol = 1)

Ce qui finit par ressembler à ceci:

alt text

RGL: Graphiques 3D interactifs

Un autre paquet qui vaut bien l'effort d'apprendre est [~ # ~] rgl [~ # ~] , qui facilement offre la possibilité de créer des graphiques 3D interactifs. Il existe de nombreux exemples en ligne pour cela (y compris dans la documentation rgl).

Le R-Wiki a un bel exemple de la façon de tracer des nuages ​​de points 3D en utilisant rgl.

GGobi

Un autre paquet qui mérite d'être connu est rggobi . Il y a n livre Springer sur le sujet , et beaucoup de documentation/exemples en ligne, y compris au cours "Looking at Data" .

88
Shane

Les parcelles utilisant des coordonnées polaires sont certainement sous-utilisées - certains diraient avec raison. Je pense que les situations qui justifient leur utilisation ne sont pas courantes; Je pense également que lorsque ces situations se présentent, les tracés polaires peuvent révéler des modèles de données que les tracés linéaires ne peuvent pas.

Je pense que c'est parce que parfois vos données sont intrinsèquement polaires plutôt que linéaires - par exemple, elles sont cycliques (les coordonnées x représentant les heures au cours d'une journée de 24 heures plusieurs jours), ou les données ont déjà été cartographiées sur un espace de caractéristiques polaires.

Voici un exemple. Ce graphique montre le volume de trafic moyen d'un site Web par heure. Remarquez les deux pointes à 22 h et à 1 h. Pour les ingénieurs réseau du Site, ceux-ci sont importants; il est également significatif qu'ils se produisent les uns à côté des autres (à seulement deux heures d'intervalle). Mais si vous tracez les mêmes données sur un système de coordonnées traditionnel, ce modèle serait complètement caché - tracé linéairement, ces deux pointes seraient à 2 heures d'intervalle, ce qu'elles sont, bien qu'elles ne soient également que deux heures d'intervalle sur des jours consécutifs. Le graphique polaire ci-dessus montre cela de manière parcimonieuse et intuitive (une légende n'est pas nécessaire).

Polar chart showing site traffic, with peaks at hours 1 and 22

Il y a deux façons (à ma connaissance) de créer des tracés comme celui-ci en utilisant R (j'ai créé l'intrigue ci-dessus avec R). La première consiste à coder votre propre fonction dans les systèmes graphiques de base ou de grille. L'autre façon, qui est plus simple, est d'utiliser le package circulaire. La fonction que vous utiliseriez est 'rose.diag':

data = c(35, 78, 34, 25, 21, 17, 22, 19, 25, 18, 25, 21, 16, 20, 26, 
                 19, 24, 18, 23, 25, 24, 25, 71, 27)
three_palettes = c(brewer.pal(12, "Set3"), brewer.pal(8, "Accent"), 
                   brewer.pal(9, "Set1"))
rose.diag(data, bins=24, main="Daily Site Traffic by Hour", col=three_palettes)
56
doug

J'aime vraiment dotplots et je trouve que lorsque je les recommande à d'autres pour des problèmes de données appropriés, ils sont toujours surpris et ravis. Ils ne semblent pas être très utilisés, et je ne peux pas comprendre pourquoi.

Voici un exemple de Quick-R: dotplot on car data

Je crois que Cleveland est le plus responsable du développement et de la promulgation de ceux-ci, et l'exemple de son livre (dans lequel les données défectueuses ont été facilement détectées avec un pointplot) est un argument puissant pour leur utilisation. Notez que l'exemple ci-dessus ne met qu'un point par ligne, alors que leur puissance réelle vient avec vous avez plusieurs points sur chaque ligne, avec une légende expliquant lequel est lequel. Par exemple, vous pouvez utiliser différents symboles ou couleurs pour trois points temporels différents, et ainsi obtenir facilement une idée des modèles temporels dans différentes catégories.

Dans l'exemple suivant (fait dans Excel de toutes choses!), Vous pouvez clairement voir quelle catégorie pourrait avoir souffert d'un échange d'étiquettes.

Dotplot with 2 groups

56
Ari B. Friedman

Si votre nuage de points a tellement de points qu'il devient un gâchis complet, essayez un nuage de points lissé. Voici un exemple:

library(mlbench) ## this package has a smiley function
n <- 1e5 ## number of points
p <- mlbench.smiley(n,sd1 = 0.4, sd2 = 0.4) ## make a smiley :-)
x <- p$x[,1]; y <- p$x[,2]
par(mfrow = c(1,2)) ## plot side by side
plot(x,y) ## left plot, regular scatter plot
smoothScatter(x,y) ## right plot, smoothed scatter plot

Le package hexbin (suggéré par @Dirk Eddelbuettel) est utilisé dans le même but, mais smoothScatter() a l'avantage d'appartenir au package graphics, et fait donc partie de l'installation standard R.

Smiley as a regular or smoothed scatter plot

54
nullglob

En ce qui concerne le sparkline et d'autres idées Tufte, le paquet YaleToolkit sur CRAN fournit les fonctions sparkline et sparklines.

hexbin est un autre package utile pour les ensembles de données plus volumineux, car il "combine" intelligemment les données dans des compartiments pour traiter des ensembles de données qui peuvent être trop volumineux pour des nuages ​​de points naïfs.

30
Dirk Eddelbuettel

Parcelles de violon (qui combinent des parcelles de boîte avec une densité de noyau) sont relativement exotiques et assez cool. Le paquet vioplot dans R vous permet de les faire assez facilement.

Voici un exemple (le lien wikipedia montre également un exemple):

enter image description here

28
Jason Sundram

Une autre visualisation de la série chronologique de Nice que je venais de revoir est le "graphique en relief" (comme indiqué dans ce post sur le blog "Learning R" ). Ceci est très utile pour visualiser les changements de position au fil du temps.

Vous pouvez lire comment le créer sur http://learnr.wordpress.com/ , mais voici à quoi cela ressemble:

alt text

25
Shane

J'aime aussi les modifications par Tufte des boîtes à moustaches qui vous permettent de faire des comparaisons de petits multiples beaucoup plus facilement car elles sont très "fines" horizontalement et n'encombrent pas l'intrigue avec de l'encre redondante. Cependant, cela fonctionne mieux avec un assez grand nombre de catégories; si vous n'en avez que quelques-uns sur un terrain, les boxplots réguliers (Tukey) sont plus beaux car ils ont un peu plus de poids.

library(lattice)
library(taRifx)
compareplot(~weight | Diet * Time * Chick, 
  data.frame=cw , 
  main = "Chick Weights",
  box.show.mean=FALSE,
  box.show.whiskers=FALSE,
  box.show.box=FALSE
  )

compareplot

D'autres façons de les réaliser (y compris l'autre type de boîte à moustaches Tufte) sont discutées dans cette question .

20
Ari B. Friedman

Nous ne devons pas oublier l'intrigue mignonne et (historiquement) importante des tiges et des feuilles (que Tufte aime aussi!). Vous obtenez un aperçu directement numérique de la densité et de la forme de vos données (bien sûr, si votre ensemble de données n'est pas supérieur à environ 200 points). Dans R, la fonction stem produit votre affichage tige-et-feuille (dans l'espace de travail). Je préfère utiliser la fonction gstem du package fmsb pour la dessiner directement dans un périphérique graphique. Vous trouverez ci-dessous une variance de la température corporelle du castor (les données doivent se trouver dans votre jeu de données par défaut) dans un affichage tige par feuille:

  require(fmsb)
  gstem(beaver1$temp)

enter image description here

18
Geek On Acid

Graphes Horizon (pdf), pour visualiser plusieurs séries chronologiques à la fois.

Tracés de coordonnées parallèles (pdf), pour l'analyse multivariée.

Association et mosaic tracés, pour visualiser les tableaux de contingence (voir le package vcd )

18
Richie Cotton

En plus de l'excellent travail de Tufte, je recommande les livres de William S. Cleveland: Visualizing Data et The Elements of Graphing Data. Non seulement ils sont excellents, mais ils ont tous été réalisés en R, et je pense que le code est accessible au public.

15
Peter Flom

Boîtes à moustaches! Exemple de l'aide R:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")

À mon avis, c'est le moyen le plus pratique de jeter un coup d'œil aux données ou de comparer les distributions. Pour les distributions plus complexes, il existe une extension appelée vioplot.

14
mbq

Les parcelles en mosaïque me semblent remplir les quatre critères mentionnés. Il y a des exemples dans r, sous mosaicplot.

11
Peter Flom

Découvrez le travail d'Edward Tufte et surtout ce livre

Vous pouvez également essayer d'attraper sa présentation itinérante . C'est assez bon et comprend un paquet de quatre de ses livres. (Je jure que je ne possède pas le stock de son éditeur!)

Soit dit en passant, j'aime sa technique de visualisation de données sparkline. Surprise! Google l'a déjà écrit et publié sur Google Code

10
Paul Sasik

Parcelles récapitulatives? Comme mentionné dans cette page:

Visualisation des statistiques récapitulatives et de l'incertitude

1
Gökhan Sever