绘制购买比例的直方图与星期几和一天中的时间的关系

时间:2018-12-22 08:52:49

标签: r histogram

我有一个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 :(得分:1)

这个问题尚不完全清楚,但是下面的代码产生了两个图表,一个图表是每个Class的{​​{1}},另一个是每小时每小时Weekday的另一个。
我首先将列Class强制转换为类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)

enter image description here

按小时。

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() 的情况下生成。它们将由更大的管道产生,但是像下面这样做可能更简单或更可取。
从原始数据开始。

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()