Не забудьте сделать репост в соц сети!

вторник, 21 апреля 2020 г.

Построение нормированной диаграммы в R с использованием dplyr и pipeline

Оригинал поста здесь Построение нормированной диаграммы в R с использованием dplyr и pipeline




Такая задача часто возникает в анализе данных. Давайте посмотрим ее решение на примере Toy example

Создаем данные
 df = data.frame(a = sample(c('a', 'b', 'c', 'd'), 1000, replace = TRUE), 
                b = sample(c('x', 'y', 'zizuzi'), 1000, replace = TRUE),
c = rnorm(1000)) 
Загружаем необходимые библиотеки
library(dplyr) # преобразование данных
library(ggplot2) # визуализация 
library(scales) # на диаграмме значения преобразовывает в %
Далее собственно преобразование
 df1 = df %>% select(a, b) %>% # выбирает только нужные нам переменные
  filter(a != 'd')%>% # при необходимости удаяем ненужные уровни
  mutate(b = case_when(      # можем поменять уровни переменной 
     b == 'x' ~ 'x',
     b == 'y' ~ 'y', 
     b == 'zizuzi' ~ "z" 
  ) ) %>% 
  group_by(a,b) %>% # оставшаяся чсть пайплайна нужна для меток на диаграмме 
  summarise(count=n()) %>% 
  mutate(perc=count/sum(count))
В этом пайплайне команды filter и mutate только на тот случай, если вам нужно что-то почистить и подготовить. Фишка в основном - расчет % Визуализация
 ggplot(df1, aes( a,y = perc, fill = b)) + geom_bar(stat="identity") +
  geom_text(aes(label=scales::percent(perc, accuracy = .1)) , position = position_stack(vjust = 0.5),
            color="white" ,size=5) + theme(text = element_text(size=15),
                                           axis.text.x = element_text(size=15, 
                                                                      angle = 80, hjust = 1, colour = 'black'),
                                           legend.title = element_blank(),
                                           axis.title = element_blank())
Ну и получается что-то типа
Цвета, размеры шрифтов - дело вкуса





Построение нормированной диаграммы в R с использованием dplyr и pipeline

Комментариев нет:

Отправить комментарий

3

1