Большинство недоиспользуемых данных

Гистограммы и диаграммы рассеяния - отличные методы визуализации данных и взаимосвязи между переменными, но в последнее время я задавался вопросом о том, какие техники визуализации я пропускаю. Как вы думаете, какой из самых глухих сюжетов вы считаете?

Ответы должны:

  • Не очень часто используется в практика.
  • Быть понятным без особого фонового обсуждения.
  • Быть применимым во многих распространенных ситуациях.
  • Включить воспроизводимый код для создания пример (предпочтительно в R). Связанное изображение будет хороший.

Ответ 1

Я действительно согласен с другими плакатами: Книги Tufte являются фантастическими и хорошо стоят.

Во-первых, я хотел бы указать вам очень хороший учебник по ggplot2 и ggobi из "Глядя на данные" в начале этого года. Помимо этого я бы выделил только одну визуализацию из R и два графических пакета (которые не так широко используются в качестве базовой графики, решетки или ggplot):

Карты тепла

Мне очень нравятся визуализации, которые могут обрабатывать многомерные данные, особенно данные временных рядов. Тепловые карты могут быть полезны для этого. Один действительно аккуратный был показан Дэвид Смит в блоге Revolutions. Вот код ggplot любезно предоставлен Хэдли:

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)

Которая выглядит примерно так:

alt text

RGL: интерактивная 3D-графика

Еще один пакет, который стоит усилий для изучения, - RGL, который легко предоставляет возможность создавать интерактивная 3D-графика. Для этого есть много примеров для этого (в том числе в документации rgl).

В R-Wiki есть хороший пример о том, как построить графики 3D-рассеяния с помощью rgl.

GGobi

Другой пакет, который стоит знать, rggobi. Существует книга Springer по этому вопросу, а также множество замечательных документов/примеров в Интернете, в том числе на "Просмотр данных" .

Ответ 2

Графики, использующие полярные координаты, безусловно, недоиспользуются, - некоторые говорили бы с полным основанием. Я думаю, что ситуации, которые оправдывают их использование, не являются общими; Я также думаю, что когда возникают такие ситуации, полярные сюжеты могут выявлять шаблоны в данных, которые не могут быть линейными.

Я думаю, что, потому что иногда ваши данные по своей природе полярны, а не линейны, например, они цикличны (x-координаты, представляющие времена в течение 24-часового дня в течение нескольких дней), или данные ранее были отображены на полярное пространство объектов.

Вот пример. Этот график показывает веб-сайт, обозначающий объем трафика в час. Обратите внимание на два пика в 10 часов вечера и в 1 час ночи. Для сетевых инженеров Site они значительны; также важно, что они встречаются рядом друг с другом (всего лишь два часа). Но если вы построите одни и те же данные в традиционной системе координат, этот шаблон будет полностью скрыт - линейно построены, эти два пика будут 20 часов, что они есть, хотя они также являются двумя часов в течение нескольких дней подряд. Полярная диаграмма выше показывает это экономным и интуитивным способом (легенда не нужна).

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

Есть два способа (что я знаю), чтобы создавать графики, подобные этому, используя R (я создал график выше w/R). Один из них заключается в том, чтобы закодировать свою собственную функцию в базовых или сетчатых графических системах. Другим способом, который проще, является использование круглого пакета. Функция, которую вы используете, - 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)

Ответ 3

Мне очень нравится dotplots и найдите, когда я рекомендую их другим для соответствующих проблем с данными, они неизменно удивляются и восхищаются. Они, похоже, не пользуются большим спросом, и я не могу понять, почему.

Вот пример из Quick-R: dotplot on car data

Я считаю, что Кливленд больше всего ответственен за их разработку и обнародование, и пример в его книге (в которой ошибочные данные были легко обнаружены с помощью точки доступа) является мощным аргументом в пользу их использования. Обратите внимание, что вышеприведенный пример ставит только одну точку на строку, тогда как их реальная мощность приходит с вами, у вас есть несколько точек на каждой строке, с легендой, объясняющей, что именно. Например, вы можете использовать разные символы или цвета для трех разных временных точек, а оттуда легко получить представление о временных шаблонах в разных категориях.

В следующем примере (сделано в Excel всех вещей!) вы можете четко видеть, какая категория могла пострадать от обмена ярлыками.

Dotplot with 2 groups

Ответ 4

Если ваш график рассеяния имеет так много точек, что он становится полным беспорядком, попробуйте сглаженный график рассеяния. Вот пример:

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

Пакет hexbin (предложенный @Dirk Eddelbuettel) используется для этой же цели, но smoothScatter() имеет то преимущество, что он принадлежит к пакету graphics и, следовательно, является частью стандартной установки R.

Smiley as a regular or smoothed scatter plot

Ответ 5

Что касается искровой линии и другой идеи Tufte, YaleToolkit пакет на CRAN предоставляет функции sparkline и sparklines.

Другим пакетом, который полезен для больших наборов данных, является hexbin, так как он умело "вставляет" данные в ведра для обработки наборов данных, которые могут быть слишком большой для наивных диаграмм рассеяния.

Ответ 6

Скриптовые сюжеты (которые сочетают графику с плотностью ядра) относительно экзотичны и довольно круты. Пакет vioplot в R позволяет сделать их довольно легко.

Здесь пример (ссылка на Википедию также показывает пример):

enter image description here

Ответ 7

Еще одна приятная визуализация временного ряда, которую я только что просматривал, - "диаграмма рельефа" (как показано в этот пост в блоге "Learning R" ). Это очень полезно для визуализации изменений в позиции с течением времени.

Вы можете прочитать о том, как создать его на http://learnr.wordpress.com/, но вот что получилось:

alt text

Ответ 8

Мне также нравятся модификации ящиков в формате Tufte, которые позволяют вам делать небольшое многократное сравнение намного легче, потому что они очень "тонкие" по горизонтали и не загромождают сюжет с избыточными чернилами. Однако он лучше всего работает с довольно большим количеством категорий; если у вас есть только несколько сюжетов, то регулярные (Tukey) коробки выглядят лучше, так как они имеют немного больше веса для них.

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

Другие способы сделать эти (в том числе и другие типы ящиков в Туфте) обсуждаются в этом вопросе.

Ответ 10

Мы не должны забывать о симпатичном и (исторически) важном сюжетном и сюжетном сюжете (который тоже любит Туфте!). Вы получаете прямой количественный обзор плотности и формы данных (конечно, если ваш набор данных не превышает 200 точек). В R функция stem производит выпадение стебля и листьев (в рабочем пространстве). Я предпочитаю использовать функцию gstem из пакета fmsb, чтобы нарисовать его прямо на графическом устройстве. Ниже приведена дисперсия температуры тела бобров (данные должны быть в вашем наборе данных по умолчанию) на дисплее "за стеклом":

  require(fmsb)
  gstem(beaver1$temp)

enter image description here

Ответ 11

В дополнение к превосходной работе Tufte я рекомендую книги Уильяма С. Кливленда: визуализация данных и элементы графических данных. Они не только превосходны, но все они выполняются в R, и я считаю, что этот код доступен общественности.

Ответ 12

присущи рефлективный, вербальный! Пример из справки R:

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

По-моему, это самый удобный способ быстро взглянуть на данные или сравнить дистрибутивы. Для более сложных распределений существует расширение, называемое vioplot.

Ответ 13

Мозаичные сюжеты кажутся мне отвечающими всем четырем критериям. Есть примеры в r, под мозаикой.

Ответ 14

Посмотрите работу Эдварда Туфта и особенно эту книгу

Вы также можете попробовать свою презентацию. Это неплохо и включает в себя набор из четырех его книг. (я клянусь, что не владею его издательским запасом!)

Кстати, мне нравится его технология визуализации световой линии. Сюрприз! Google уже написал его и разместил на Google Code