之前在博客记录了一篇行为分析(python)的文章,后来觉得自己可以用SQL再走一遍,也算练练手。数据来源于天池的2020-04-13的“UserBehavior.csv”。
数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)。数据集的组织形式和MovieLens-20M类似,即数据集的每一行表示一条用户行为,由用户ID、商品ID、商品类目ID、行为类型和时间戳组成,并以逗号分隔。
我自己的MySql版本是5.5,Navicat是10.1,窗口函数不支持。另外,这一次我并没有将表拆分,之后的处理和查询也都是在一表中进行的,工作中还是应该循序范式操作。
以下是我的分析操作流程,这里就不再做过多的结论描述了,毕竟只是对前文各分析模块用Sql取数。
依然从以下四个方向着手进行分析
PV、UV。
留存率。
各周期内消费次数统计。
各行为转化模型。
复购率。
回购率。
RFM模型。
商品和行为关系。
TOP商品分析。
源数据中的时间是时间戳,这里我将时间戳进行转换,并且增加日期和对应时段用于后续分析,因为电脑配置原因,我这里只写入大概80万条数据,实在是卡的要命。。。
增加转化后的数据date(%Y-%m-%d %H:%i:%s)
alter table ub add date VARCHAR(32)
UPDATE ub SET date = FROM_UNIXTIME(time,'%Y-%m-%d %H:%i:%s')
SELECT * from ub limit 10
新增日期(%Y-%m-%d)一列
alter table ub add day VARCHAR(32)
UPDATE ub SET day = cast(date as DATE)
新增小时列
alter table ub add hour VARCHAR(32)
UPDATE ub SET hour = right(CONVERT(date,TIME),8)
UPDATE ub SET hour = hour(date)
alter table ub modify column date datetime
alter table ub modify column day datetime
alter table ub modify column hour INT
SELECT COUNT(1) FROM ub WHERE user_id IS NULL
有备无患
SELECT * INTO behavior_ORIG FROM behavior
因为实际数据中不仅仅是2017-11-25 到 2017-12-04的数据,也有一些零零碎碎的杂项,所以对无关日期进行了删除处理。
DELETE FROM ub WHERE day < '2017-11-25' OR day >= '2017-12-04'
SELECT
day,
COUNT(1) PV
FROM ub
GROUP BY day
ORDER BY day ASC
SELECT hour,count(1)
from ub
GROUP BY hour
ORDER BY hour asc
SELECT
diff_day.min_day as min_day,
sum(case when diff_day.to_fday=0 then 1 else 0 end) as day_1,
sum(case when diff_day.to_fday=1 then 1 else 0 end) as day_2,
sum(case when diff_day.to_fday=2 then 1 else
文章浏览阅读4.8k次,点赞27次,收藏41次。看李航的《统计学习方法》朴素贝叶斯章节中4.1.2后验概率对大化的含义时,对这里的理解有些困扰,参考另一篇博客在这里写下自己对这一个问题的个人见解,烦请指正。 如上图所示,书中从期望风险函数直接跳到条件取值期望,这里的推导过程如下:在这里,设:那么上式可以改为:对于上式的期望风险求最..._后验概率最大化的含义
文章浏览阅读285次。序该文档主要列举了常见的SpringBoot的基础搭建以及和其他框架的整合的基础项目搭建自己从项目中提取了认为比较着重的要点和注意事项一并列举到了文档中,后续会加以补充更多与SpringBoot整合的相关demo代码地址: SpringBootDemoAll.01, 构建一个基本的SpringBoot项目要点:@LocalServerPort 表示获取当前启动的项目端口号,一般订阅..._springboot最全demo
文章浏览阅读3.6k次。问题背景Matlab环境下调用Python函数,调用文件为"evaluation.py",提示"py.evaluation"。解决方案首先确认Python文件路径已被导入,如果文件路径没有导入,则执行如下语句导入路径if count(py.sys.path,'文件路径') == 0 insert(py.sys.path,int32(0),'文件路径');end和普通的Python编程模式一样,在Matlab中,除了基础函数,使用其他任何函数都需要导入相应的库。例如导入numpy_无法解析名称 'py.runner.runner'。、
文章浏览阅读1.8w次。中国十大用户体验设计咨询公司排名随着全球互联网产业的飞速发展,人们对于用户体验的嗅觉变得更加灵敏。用户体验对应的是体验地图,叫user experience map或者user journey map,集中于要做的产品,用来挖掘用户在跟产品的触点中的痛点,并给出对应的解决方法,让以人为本的设计理念贯穿开发的最早期甚至进入整个品牌的发展。国内不乏优秀的用户体验设计咨询公司,今天就盘点一下:既有中..._国内咨询公司排行榜
文章浏览阅读1k次。原文地址:XML,WSDL,SOAP,JSON的关系及区别1.XML与JSON比较首先,XML与JSON的目前主要的两种数据交换格式。其结构如下:<?xml version="1.0" encoding="utf-8"><country> <name>中国</name> <province> <name&..._api接口xml、json、soap的区别
文章浏览阅读493次。为什么要使用Swagger2在SpringMVC中集成Swagger2引入依赖添加Swagger2配置类让Spring加载Swagger2配置类访问Swagger2为什么要使用Swagger2 在现在的项目开发中,后端越来越多的倾向于只提供api接口,而不进行页面等的搭建,编写操作,无论是采用前后端分离的开发模式,还是给移动端提供api接口等都是如此。而..._springmvc集成swagger2
文章浏览阅读195次。一、什么是Java事务通常的观念认为,事务仅与数据库相关。事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。..._java什么叫事务,处理步骤
文章浏览阅读1.2w次,点赞9次,收藏6次。今天遇到一个比较傻的问题,其实就是思维的问题。一时间没有反应过来。刚上手用Python Selenium做自动化测试的同学应该会遇到类似这样的问题Unabletolocateelement:"method":"cssselector","selector":".oRhbg"Unable to locate element: {"method":"css selector","selector":".oRhbg"}Unabletolocateelement:"method":"cssselector"_no such element: unable to locate element: {"method":"css selector","selecto
文章浏览阅读2.3k次,点赞3次,收藏26次。双缓冲绘图的核心是将所有绘图操作的屏幕设备CDC pDC 用自定义的内存设备CDC MemDC来代替,然后通过在内存的位图CBitmap中作图,然后将作好的图复制到屏幕MemDC来显示,同时禁止背景刷新,从而消除闪烁。一、原因窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。因为窗体在刷新时会有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PA_mfc双缓冲绘图
文章浏览阅读1.2k次。#6 ZigZag ConversionThe string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)_leetcode easy pdf
文章浏览阅读9.6k次,点赞3次,收藏44次。一、同一个线程组内可通过jmeter-Critical Section Controller (临界部分控制器)来控制业务逻辑: 根据锁名来控制并发,同一个锁名之下,在同一时间点只能存在一个运行中,适用于控制并发的场景。锁名类型: 锁名为空,认为每个锁为不同的锁锁名相同,多个锁认为是同一个锁,同一个时间点只能存在一个运行中锁名为变量,根据变量值来判断是不是属于同一个锁,变量值为相同时,则认为是同一个锁作用临界区控制器确保其子节点下的取样器或控制器将被执行(只有一个线程作为一个锁)_jmeter怎么控制请求之间的顺序
文章浏览阅读2w次,点赞13次,收藏89次。VUE3.0实现websocket1、 vue2.0与vue3.0的区别先说一下网上很多资料的websocket都是针对vue2.0的,我这个vue入门小菜鸟,对于vue的整体实现过程理解还是有偏差,因而记录下2.0到3.0的变化。其参考了该博主的文章链接: 让你30分钟快速掌握vue 3。其主要是对vue3.0新增了setup函数,取消了data变量的赋值。感兴趣的可以自行阅读。这里只做记录。Vue2--------------vue3beforeCreate -> setup()cr_vue3 websocket