Обложка канала

R4marketing | канал Алексея Селезнёва | Язык R

Автор канала Алексей Селезнёв, руководитель отдела аналитики в Netpeak, автор R пакетов: ryandexdirect, rfacebookstat и др. В канале публикуются статьи, доклады, новости, заметки по языку R.

R4marketing | канал Алексея Селезнёва | Язык R

4 года назад
Открыть в
​​R + Spotify: изучаем свою активность Автор: Юрий Тукачев (@psych2016) Хороший пример построения тепловой карты. Скачать данные по истории прослушивания можно в аккаунте Spotify, в разделе "Privacy settings" > "Download your data". Среди наборов данных будет "Streaming history for the past year".
 
streamHistory <- fromJSON("MyData/StreamingHistory0.json", flatten = TRUE)

#Форматируем дату и добовляем время, день недели
mySpotify <- streamHistory %>% 
  as_tibble() %>% 
  mutate_at("endTime", ymd_hm) %>% 
  mutate_at("endTime", format, tz = "Asia/Yekaterinburg") %>%
  mutate_at("endTime", as_datetime) %>%
  mutate(date = floor_date(endTime, "day") %>% as_date, 
         seconds = msPlayed / 1000, 
         minutes = seconds / 60,
         weekday = weekdays(date, abbreviate = TRUE),
         hour = hour(endTime))

mySpotify %>% 
  mutate(weekday = factor(weekday, levels = rev(c("Пн","Вт","Ср","Чт","Пт","Сб","Вс")))) %>%
  group_by(weekday, hour) %>% 
  summarize(minutesListened = sum(minutes)) %>% 
  ggplot(aes(x = hour, weekday, fill = minutesListened)) + 
  geom_tile(color = "white", width = 0.98, height = 0.98) + 
  scale_y_discrete(expand = c(0,0)) +
  scale_x_continuous(breaks = seq(0,24,1), expand = c(0,0)) + 
  scale_fill_gradient("Минут прослушивания", low = "yellow", high = "red") +
  labs(x = "Время дня", y = "", caption = "Данные: Spotify  Визуализация: Юрий Тукачев") + 
  ggtitle("Когда я чаще всего слушал музыку на Spotify за последний год?", 
          "Еженедельная активность прослушивания по часам дня недели") +
  guides(fill = guide_colorbar(title.position = 'top', title.hjust = .5,
                                barwidth = unit(15, 'lines'), barheight = unit(.5, 'lines'))) +
  theme(plot.title.position = "plot", text = element_text(size = 14, family = "Roboto Mono"),
        plot.caption.position = "plot",
        plot.caption = element_text(color = "gray"),
        plot.subtitle = element_text(color = "gray"),
        legend.position = "top", 
        panel.background = element_blank(),
        plot.margin = margin(25, 25, 10, 25),
        axis.ticks = element_blank())

#заметки_по_R