#########第一步,源数据 start #########
#大数据环境准备
gc()
memory.size(T) #查看已分配内存,6972
memory.size(F) #查看已使用内存,6852.55
memory.limit() #查看内存上限,返回8075
memory.limit(size=20000) #扩大内存上限
#df_tb <- read.table("shuju.txt",header=TRUE,sep=",",encoding = "UTF-8")
#始终报错:列的数目比列的名字要多
#300万数据的记事本打开,很慢;
#Excel中单张表格只能存放100百万行的数据,也没办法复制过去,再复制回来
#只拷贝200行数据时,读取成功
#大文件快速读取
library("data.table")
df_tb <- fread(input = "shuju.txt",stringsAsFactors = FALSE,encoding="UTF-8")
df_tb <- as.data.frame(df_tb)
str(df_tb) #3182261 obs. of 9 variables
max(df_tb$Id) #返回3182174
length(unique(df_tb$Id)) #返回3182174,3182174<3182261,表明编号存在重复值
#time列,调整成日期类型
df_tb$time <- as.Date(df_tb$time)
#基于日期排序
order(unique(df_tb$time)) #返回排序后元素对应的位置
rank(unique(df_tb$time)) #返回对应元素的排名
sort(unique(df_tb$time)) #返回排序后的向量
length(sort(unique(df_tb$time))) #共计32天
#behavior_type:用户行为类型
#点击1、收藏2、加购物车3、购买4表示
df_tb$behavior_type <- as.factor(df_tb$behavior_type)
#########第一步,源数据 stop#########
#########第二步,缺失值探索 start######
#列表显示缺失值
library("lattice")
library("mice")
md.pattern(df_tb) #矩阵查阅法,0行返回
df_tb[!complete.cases(df_tb),] #非空行返回,0行返回
#########第二步,缺失值探索 stop######
##########第三步,模型###############################
#########3.1 AARRR漏斗模型分析用户行为###########
#3.1.1 常规指标分析
#基于behavior_type,生成频数表
b_type <- table(df_tb$behavior_type)
b_type <- as.data.frame(b_type)
#基于数据框,读取Var1列的频数值读取Freq列的统计值
Total_visit <- b_type$Freq[b_type$Var1==1]
Total_favorit <- b_type$Freq[b_type$Var1==2]
Total_car <- b_type$Freq[b_type$Var1==3]
Total_pay <- b_type$Freq[b_type$Var1==4]
#整体购物情况
#总访问量PV (Page View)即页面浏览量或点击量,用户每次刷新即被计算一次
pv <- Total_visit #对应300W
#日均访问量
dv <- round(pv/length(sort(unique(df_tb$time))))
#独立用户总数uv,
#即Unique Visitor,访问您网站的一台电脑客户端为一个访客。
#00:00-24:00内相同的客户端只被计算一次
uv <- length(unique(df_tb$user_id)) #对应315w
#有购买行为的用户数量
pay_uv <- length(unique(df_tb$user_id[df_tb$behavior_type==4])) #对应3w
#用户的购物情况
#对应各user_id的访问次数,收藏次数,加入购物车次数,以及支付次数
user_df_long <- as.data.frame(table(df_tb$user_id,df_tb$behavior_type)) #二维列频表,变成长表格式
library("reshape2") #支持长表,宽表之间的数据格式转换
user_df_wide <- dcast(user_df_long,Var1~Var2)#类比于数据透视表,Var1对应行变量,Var2对应列变量
colnames(user_df_wide) <- c("user_id","访问次数","收藏次数","购物车次数","支付次数")
#借助现有列,创建新列
#不能用sum,它会将每一个整列值总计求和然后再加上其他整列求和