Как стать автором
Обновить

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

Время на прочтение5 мин
Количество просмотров4.6K

В ноябре 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.

Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+4
Комментарии0

Публикации

Истории

Работа

Data Scientist
63 вакансии

Ближайшие события