Постройте гистограмму коэффициента покупки в зависимости от дня недели и времени дня. - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть датафрейм с 34154695 obs.В наборе данных переменная класса со значением 0 обозначает «не куплено», а 1 обозначает «покупку».

> str(data)
'data.frame':   34154695 obs. of  5 variables:
 $ SessionID: int  1 1 1 2 2 2 2 2 2 3 ...
 $ Timestamp: Factor w/ 34069144 levels "2014-04-01T03:00:00.124Z",..: 1452469 1452684 1453402 1501801 1501943 1502207 1502429 1502569 1502932 295601 ...
 $ ItemID   : int  214536500 214536506 214577561 214662742 214662742 214825110 214757390 214757407 214551617 214716935 ...
 $ Category : Factor w/ 339 levels "0","1","10","11",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Class    : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...

Я сталкиваюсь с трудностями при поиске решения для построения гистограммы количества покупок в неделю, задневная и временная покупка, основанная на значении класса = 1, и на выходе, как показано на рисунках ниже

enter image description here enter image description here

Я пробовал этот код, но получил ошибку

library(dplyr)
library(lubridate)



x <- strptime(data$Timestamp, format = "%Y-%m-%d")#assume you need only days/month , assign to a variable, because dplyr has problems with with date type.

data$month <- month(x) #get month from date obj.

month_summ <- data %>% group_by(month) %>%  #group by month and calculated sold items per month
  summarise(
    total_sales = n()
  )


library(ggplot2)



 ggplot(data=month_summ, aes(x=month, y=ItemID)) +   geom_bar(stat="identity") #plot the histogram

Ошибка в grouped_df_impl (data, unname (vars), drop): дата столбца неподдерживаемого класса POSIXlt / POSIXt

Может кто-нибудь сообщить, как мне поступить ??Действительно, спасибо за любую помощь и предложение.

С уважением

1 Ответ

0 голосов
/ 22 декабря 2018

Вопрос не совсем ясен, но следующий код выдает два графика, один из которых составляет всего Class за Weekday, а другой - всего Class за час дня.
I первый столбец приведения Classк классу "integer", в вашем выводе str(data) это "factor".

library(tidyverse)
library(lubridate)

data$Class <- as.integer(as.character(data$Class))

data$Weekday <- format(data$Timestamp, "%a")
data$Hour <- hour(data$Timestamp)

Теперь графики.Сначала по рабочим дням.

aggregate(Class ~ Weekday, data, sum) %>%
  ggplot(aes(Weekday, Class)) +
  geom_col()

enter image description here

И по часам.

aggregate(Class ~ Hour, data, sum) %>%
  ggplot(aes(Hour, Class)) +
  geom_col()

enter image description here

Редактировать.

Приведенные выше графики также могут быть получены без изменения исходного набора данных data.Они будут производиться в результате более крупной трубы, но, возможно, проще или предпочтительнее сделать это следующим образом.
Начиная с исходных данных.

data$Class <- as.integer(as.character(data$Class))

data %>%
  mutate(Weekday = format(Timestamp, "%a")) %>%
  group_by(Weekday) %>%
  summarise(Class = sum(Class)) %>%
  ggplot(aes(Weekday, Class)) +
  geom_col()

data %>%
  mutate(Hour = hour(Timestamp)) %>%
  group_by(Hour) %>%
  summarise(Class = sum(Class)) %>%
  ggplot(aes(Hour, Class)) +
  geom_col()

Код генерации данных.

set.seed(1234)    # Make the results reproducible
n <- 1e3
start <- as.POSIXct("2018-01-01 00:00:00")
end <- Sys.time()
Timestamp <- sample(seq(start, end, by = "min"), n, TRUE)
Class <- factor(sample(0:1, n, TRUE))
data <- data.frame(Timestamp, Class)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...