Заметки по языку R | Часть 1: Построение нетипичных диаграмм, и подписи данных в ggplot2

—

от автора

В ноябре 2018 года я запустил телеграм канал R4marketing посвящённый языку R. Публикации канала разделены по рубрикам, одна из таких рубрик — «Заметки по R». В неё входят небольшие заметки, с интересным или полезными советами по использованию языка R, заимствованные из прочитанных статей, подсмотренные в различных чатах или взятые из собственной практики работы в R.

Этой статьёй я начинаю серию публикаций состоящих из подборок наиболее полезных заметок канала R4marketing. Первая статья данной серии посвящена визуализации данных.

Содержание

Если вы интересуетесь анализом данных возможно вам будут полезны мои telegram и youtube каналы. Большая часть контента которых посвящены языку R.

  1. Построение интерактивных воронок.

  2. Построение диаграммы Парето.

  3. Построение круговых диаграмм в ggplot2.

  4. Как добавить ярлыки данных в ggplot2.

  5. Построение диаграммы гантелей.

Построение интерактивных воронок

Воронка — наиболее часто используемый способ визуализации этапов продажи, направленный на выявления проблемных шагов на пути к заключению сделки.

Особого пояснения тут не требуется, ниже приведён пример кода для построения интерактивной воронки на базе пакета highcharter.

library(dplyr) library(highcharter)  # установка темы options(   highcharter.theme = hc_theme_smpl(     tooltip = list(valueDecimals = 2)     )   )  # тестовые данные df <- data.frame(   x = c(0, 1, 2, 3, 4),   y = c(975, 779, 584, 390, 200),   name = c("Leads",           "Sales Call",           "Follow Up",           "Conversion",           "Sale") ) %>%   arrange(-y)  # построение визуализации hc <- df %>%   hchart(     "funnel", hcaes(x = name, y = y),     name = "Sales Conversions"   )  # выводим график в Viewer hc

Пример воронки, полученный с помощью приведённого примера кода:

Интерактивная визуализация воронки продаж
Интерактивная визуализация воронки продаж

Данная заметка заимствованна из статьи «Funnel Chart in R-Interactive Funnel Plot».

Построение диаграммы Парето

Диаграмма Парето является графическим отображением правила Парето. В менеджменте качества применение этого правила показывает, что значительное число несоответствий и дефектов возникает из-за ограниченного числа причин. Коротко правило Парето формулируется как 80 на 20. Например, если применить это правило по отношению к дефектам, то окажется, что 80 процентов дефектов возникает из-за 20 процентов причин.

Более подробно о том как используется диаграмма Парето можно почитать вот тут.

Ниже пример построения диаграммы Парето с помощью пакета qcc.

library(qcc)  # тестовые данные df <- data.frame(   product = c('A', 'B', 'C', 'D', 'E', 'F'),   count = c(40, 57, 50, 82, 17, 16) )  # диаграмма парето pareto.chart(   df$count,   main = 'Pareto Chart',   col = heat.colors(length(df$count)) )

Результат выглядит примерно вот так:

Диаграмма Парето
Диаграмма Парето

Эта заметка родилась из статьи «How to Create Pareto Chart in R».

Построение круговых диаграмм в ggplot2

Несмотря на то, что круговая диаграмма один из самых неудачных способов визуализации данных, она в то же время является одним из наиболее часто используемых типов диаграмм.

Но если вы попробуете поискать geom_pie() среди прочих, доступных в ggplot2 геомов, то ваши поиски не увенчаются успехом. Стандартной отдельной функции под построение круговой диаграммы в ggplot2 нет.

Но, построить круговую диаграмму в ggplot2 тем не менее можно. По умолчанию графики в ggplot2 строятся в декартовой системе координат. Если вы построите нормированную столбчатую диаграмму, и переведёте её из декартовой в полярную систему координат, то получите круговую диаграмму.

Для перевода в полярную систему координат используйте функцию coord_polar().

Ниже пример построения круговой диаграммы:

library(ggplot2)  # генерируем тестовые данные d <- data.frame(   Slices = c("Writing code", "Staring at plot", "Fixing code", "Enjoying plot") |> rep(2),   Time = c(1, 5, 4, 2, 1, 1, 1, 2),   When = c("Before reading this post", "After reading this post") |> rep(each = 4) ) |>   transform(     # Относительные временные диапазоны     Time_relative = Time / ave(Time, When, FUN = sum),     Slices = factor(Slices, levels = unique(Slices)),     When = factor(When, levels = unique(When)) )  # строим круговую диаграмму ggplot(d, aes(x = 1, y = Time_relative, fill = Slices)) +   facet_grid(cols = vars(When)) +    # преобразуем систему координат в полярную   # для построения круговой диаграммы   coord_polar(theta = "y") +   # создаём столбчатую диаграмму с позицией stacked   geom_col(position = position_stack(reverse = TRUE),             color = "tan3", size = 3, show.legend = FALSE) +    # Добавляем описание секторов   geom_text(aes(label = Slices),              position = position_stack(vjust = 0.5, reverse = TRUE)) +    # очищаем тему   theme_void() +    labs(title = "Относительное время, потраченное на построение круговых диаграмм с помощью ggplot2")

График построенный с помощью приведённого выше кода выглядит следующим образом:

Круговая диаграмма построенная с помощью ggplot2
Круговая диаграмма построенная с помощью ggplot2

Код этой заметки был подсмотрен в статье «ggplot: Easy as pie (charts)».

Как добавить ярлыки данных в ggplot2

Добавить на график подписи можно с помощью слоя geom_text(). Аргумент vjust позволяет вам менять положение подписи выше или ниже самого столбца.

В свою очередь geom_text() поддерживает следующие эстетики:

  • label — текст подписей

  • alpha — прозрачность

  • angle — угол наклона

  • colour — цвет текста

  • family — шрифт

  • fontface — тип шрифта, жирный, курсив и т.д.

  • group — группировка

  • hjust — горизонтальное смещение текста относительно визуализации

  • lineheight — межстрочный интервал

  • size — размер шрифта

  • vjust — вертикальное смещение текста относительно визуализации

Пример кода для построения графика с подписями данных:

library(ggplot2)  # счётчик случайных чисел set.seed(123)  # тестовый набор данных data <- data.frame(x = sample(LETTERS[1:6], 300, replace = TRUE))  # Способ 1: используем переменную ..count.. ggplot(data, aes(x = factor(x), fill = factor(x))) +   geom_bar() +   geom_text(     aes(label = ..count..),      stat = "count",      vjust = 1.5,      colour = "white" )  # Способ 2: Предварительная агрегация данных data %>%    dplyr::count(x, name = 'Freq') %>%    ggplot(aes(x = x, y = Freq, fill = x)) +    geom_bar(stat = "identity") +   geom_text(     aes(label = Freq),      vjust = -1,      colour = "gray32",      fontface = 'bold' )

Результат выполнения кода:

Диаграмма с подписями данных
Диаграмма с подписями данных

Код заметки заимствован из статьи «Adding text labels to ggplot2 Bar Chart».

Построение диаграммы гантелей

Рассмотрим ещё одно расширение для ggplot2 — ggalt.

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

Пример построения диаграммы гантелей в R:

library(tidyverse) library(tidyquant) library(ggalt)  # приводим данные к нужному виду mpg_by_year_tbl <- mpg %>%   select(hwy, year, model, class) %>%   pivot_wider(     names_from   = year,     values_from  = hwy,     id_cols      = c(class, model),     values_fn    = function(x) mean(x, na.rm = TRUE),     names_prefix = "year_"   ) %>%   mutate(model = fct_reorder(model, year_2008)) %>%   drop_na()  # строим график mpg_by_year_tbl %>%   ggplot(aes(x = year_1999,               xend = year_2008,               y = model,               group = model)) +      geom_dumbbell(     colour="#a3c4dc",     colour_xend="#0e668b",     size=4.0,     dot_guide=TRUE,     dot_guide_size=0.15,     dot_guide_colour = "grey60"   )

Выглядит диаграмма гантелей построенная с помощью приведённого выше кода так:

В написании данной заметки использовался материал статьи «ggalt: Make a Dumbbell Plot to Visualize Change in ggplot2».

Заключение

Надеюсь вам были полезные приведённые в статье 5 заметок по визуализации данных в R и они найдут отклик в решении ваших задач.

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

Ну и конечно, буду рад видеть вас среди подписчиков канала R4marketing.


ссылка на оригинал статьи https://habr.com/ru/articles/577784/