Наиболее недоиспользуемая визуализация данных [закрыто]
-
21-09-2019 - |
Вопрос
Гистограммы и диаграммы рассеяния - отличные методы визуализации данных и взаимосвязи между переменными, но недавно я задумался о том, каких методов визуализации мне не хватает.Как вы думаете, какой тип сюжета является наиболее недоиспользуемым?
Ответы должны:
- Не очень часто используется в практике.
- Будьте понятны без большого количества предыстории обсуждения.
- Быть применимым во многих распространенных ситуациях.
- Включите воспроизводимый код для создания пример (предпочтительно на R).Связанное изображение было бы неплохо неплохо.
Решение
Я действительно согласен с другими плакатами: Книги Туфте фантастичны и его стоит прочесть.
Во-первых, я бы указал вам на очень хороший туториал по 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)
Который в конечном итоге выглядит примерно так:
РГЛ:Интерактивная 3D Графика
Еще один пакет, изучение которого стоит затраченных усилий, - это РГЛ, который легко предоставляет возможность создавать интерактивную 3D-графику.В Интернете есть много примеров для этого (в том числе в документации rgl).
В R-Wiki есть хороший пример о том, как создавать точечные 3D-графики с использованием rgl.
ГГоби
Еще один пакет, о котором стоит знать, это рггоби.Есть книга Спрингера на эту тему, и множество отличной документации / примеров онлайн, в том числе на "Просмотр данных" конечно.
Другие советы
Мне действительно нравится точечные графики и обнаруживаю, что, когда я рекомендую их другим для решения соответствующих проблем с данными, они неизменно удивляются и радуются.Похоже, от них мало толку, и я не могу понять, почему.
Вот пример из Quick-R:
Я считаю, что Кливленд несет наибольшую ответственность за их разработку и распространение, и пример в его книге (в котором ошибочные данные были легко обнаружены с помощью точечной диаграммы) является мощным аргументом в пользу их использования.Обратите внимание, что в приведенном выше примере на строку ставится только одна точка, тогда как их реальная сила заключается в том, что у вас есть несколько точек на каждой строке с легендой, объясняющей, что есть что.Например, вы могли бы использовать разные символы или цвета для трех разных временных точек и, следовательно, легко получить представление о временных закономерностях в разных категориях.
В следующем примере (прежде всего, выполненном в Excel!) вы можете четко видеть, какая категория могла пострадать от замены меток.
Графики, использующие полярные координаты, безусловно, используются недостаточно - некоторые сказали бы, что на то есть веские причины.Я думаю, что ситуации, которые оправдывают их использование, не являются распространенными;Я также думаю, что когда возникают такие ситуации, полярные графики могут выявить закономерности в данных, которые не могут выявить линейные графики.
Я думаю, это потому, что иногда ваши данные по своей сути полярный, а не линейный - например, он цикличен (координаты x представляют время в течение 24-часового дня в течение нескольких дней), или данные ранее были нанесены на карту полярного пространства объектов.
Вот пример.Этот график показывает средний объем трафика веб-сайта в разбивке по часам.Обратите внимание на два всплеска в 10 часов вечера и в 1 час ночи.Для сетевых инженеров Сайта это очень важно;также важно, что они происходят рядом друг с другом (просто два с разницей в несколько часов).Но если вы нанесете те же данные в традиционной системе координат, этот шаблон будет полностью скрыт - построенные линейно, эти два всплеска будут 20 разница в часах, какой они и есть, хотя в последующие дни их разница составляет всего два часа.Полярная диаграмма выше показывает это экономным и интуитивно понятным способом (легенда не обязательна).
Есть два способа (о которых я знаю) создавать подобные графики с использованием R (я создал график выше w / R).Один из них заключается в том, чтобы закодировать вашу собственную функцию либо в базовой, либо в сеточной графических системах.Другой способ, который проще, заключается в использовании круглая упаковка.Функция, которую вы бы использовали, это 'роза.диагноз':
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)
Если на вашем точечном графике так много точек, что он превращается в полный беспорядок, попробуйте сглаженный точечный график.Вот один из примеров:
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.
Что касается sparkline и других идей Tufte, то Набор инструментов YaleToolkit посылка на КЛЮВ обеспечивает функции sparkline
и sparklines
.
Другим пакетом, который полезен для больших наборов данных, является шестигранный ящик поскольку он умело "разбивает" данные на сегменты, чтобы иметь дело с наборами данных, которые могут быть слишком большими для наивных диаграмм рассеяния.
Скрипичные сюжеты (которые сочетают прямоугольные графики с плотностью ядра) относительно экзотичны и довольно круты.В виоплот пакет в R позволяет вам создавать их довольно легко.
Вот пример (ссылка на википедию также показывает пример):
Еще одна приятная визуализация временных рядов, которую я только что рассматривал, - это "рельефная диаграмма" (как показано в этот пост в блоге "Learning R").Это очень полезно для визуализации изменений положения с течением времени.
Вы можете прочитать о том, как создать его на http://learnr.wordpress.com/, но вот как это в конечном итоге выглядит:
Мне также нравятся модификации boxplots от 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
)
Другими способами их изготовления (включая другой вид коробчатого картона Tufte) являются обсуждается в этом вопросе.
Графики горизонтов (pdf), для визуализации множества временных рядов одновременно.
Графики параллельных координат (pdf), для многомерного анализа.
Ассоциация и мозаика графики для визуализации таблиц непредвиденных обстоятельств (см. видеомагнитофон упаковка)
Мы не должны забывать о милом и (исторически) важном участке из стеблей и листьев (который Туфте тоже любит!).Вы получаете прямой числовой обзор плотности и формы ваших данных (конечно, если ваш набор данных не превышает примерно 200 точек).В R функция stem
создает ваш рисунок стебля и листа (в рабочей области).Я предпочитаю использовать gstem
функция из пакета fmsb нарисовать его непосредственно на графическом устройстве.Ниже показано изменение температуры тела бобра (данные должны быть в вашем наборе данных по умолчанию) в виде стебля по листьям:
require(fmsb)
gstem(beaver1$temp)
В дополнение к превосходной работе Туфте, я рекомендую книги Уильяма С.Кливленд: Визуализация данных и Тот Элементы графических данных.Они не только превосходны, но и все они были сделаны на R, и я полагаю, что код находится в открытом доступе.
Коробочные сюжеты!Пример из справки R:
boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
На мой взгляд, это самый удобный способ быстро просмотреть данные или сравнить распределения.Для более сложных дистрибутивов существует расширение, называемое vioplot
.
Мозаичные сюжеты, как мне кажется, соответствуют всем четырем упомянутым критериям.Примеры есть в r, в разделе mosaicplot.
Ознакомьтесь с работами Эдварда Туфте и особенно эта книга
Вы также можете попробовать и поймать его передвижная презентация.Она довольно хороша и включает в себя комплект из четырех его книг.(клянусь, мне не принадлежат акции его издательства!)
Кстати, мне нравится его техника визуализации данных sparkline.Сюрприз!Google уже написал это и разместил на Код Google
Сводные графики?Как упомянуто на этой странице: