Большинство недоиспользуемых данных
Гистограммы и диаграммы рассеяния - отличные методы визуализации данных и взаимосвязи между переменными, но в последнее время я задавался вопросом о том, какие техники визуализации я пропускаю. Как вы думаете, какой из самых глухих сюжетов вы считаете?
Ответы должны:
- Не очень часто используется в
практика.
- Быть понятным без особого
фонового обсуждения.
- Быть применимым во многих распространенных ситуациях.
- Включить воспроизводимый код для создания
пример (предпочтительно в 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]()
Другие способы сделать эти (в том числе и другие типы ящиков в Туфте) обсуждаются в этом вопросе.
Ответ 9
Графики Horizon (pdf) для визуализации множества временных рядов одновременно.
Параллельные графики координат (pdf) для многомерного анализа.
Ассоциация и mosaic, для визуализации (см. vcd)
Ответ 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
Ответ 15
Сводные графики? Как упоминалось на этой странице:
Визуализация итоговой статистики и неопределенности