r - 绘制作为星期几和一天中时间函数的买入比率直方图
问题描述
我有一个带有 34154695 obs 的数据框。在数据集中,值为 0 的 Class 变量表示“未购买”,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 的每周、每天和时间明智的购买数量的直方图,并希望输出如下图所示。
我尝试了这段代码但得到了错误
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
有人可以告诉我应该如何进行吗?真的,感谢您的任何帮助和建议。
亲切的问候
解决方案
这个问题并不完全清楚,但下面的代码产生了两个图表,一个是每天的总数Class
,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)
现在是图表。首先是工作日。
aggregate(Class ~ Weekday, data, sum) %>%
ggplot(aes(Weekday, Class)) +
geom_col()
并按小时。
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()
数据生成代码。
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)
推荐阅读
- javascript - 从 $("input").val() 检测事件,然后运行函数 js
- java - Java opencv中的interp2 matlab函数等效
- css - 从主 SCSS 样式化 Angular 组件的元素
- javascript - PersistentStorage 权限
在 Chrome 应用程序中 - apache-spark - 验证 RPC 的 Spark SASL 加密
- react-native - 获取 React Native 中的 WebView 组件中加载了多少页面
- denodo - Denodo:如何聚合 varchar 数据类型?
- json - TypeError:this.state.user.map 不是反应中的函数
- python - 使用 pyodbc 将非 ASCII 字符插入 Teradata 中的 Unicode 定义列
- node.js - AssertionError [ERR_ASSERTION]:选项参数中缺少 where 属性