淘宝用户购物行为分析
在本案例中,我们将使用 Databend Cloud 对来自天池实验室的淘宝用户购物行为数据集进行分析,一起发现有趣的购物行为。
该数据集为 CSV 格式,包含了 2017 年 11 月 25 日至 2017 年 12 月 3 日之间,有行为的约一百万随机用户的所有行为(包括点击、购买、加购、喜欢)。数据集的每一行表示一条用户行为,由以下 5 列组成,并以逗号分隔:
列名称 | 说明 |
---|---|
用户 ID | 整数类型,序列化后的用户 ID |
商品 ID | 整数类型,序列化后的商品 ID |
商品类目 ID | 整数类型,序列化后的商品所属类目 ID |
行为类型 | 字符串,枚举类型,包括:'pv':商品详情页 pv,等价于点击; 'buy':商品购买; 'cart':将商品加入购物车; 'fav':收藏商品 |
时间戳 | 行为发生的时间戳 |
准备工作
1
下载数据集
- 下载淘宝用户购物行为数据集到本地,然后使用以下命令解压:
unzip UserBehavior.csv.zip
- 将解压后的数据集文件 (UserBehavior.csv) 压缩为 gzip 格式:
gzip UserBehavior.csv
2
创建外部 Stage
-
登入 Databend Cloud,并新建一个工作区。
-
在工作区中,执行以下 SQL 语句在阿里云上创建一个名为"mycsv"的外部 Stage:
CREATE STAGE mycsv URL = 's3://<YOUR_BUCKET_NAME>'
CONNECTION = (
ACCESS_KEY_ID = '<YOUR_ACCESS_KEY_ID>',
SECRET_ACCESS_KEY = '<YOUR_SECRET_ACCESS_KEY>',
ENDPOINT_URL = '<YOUR_ENDPOINT_URL>',
ENABLE_VIRTUAL_HOST_STYLE = TRUE
)
FILE_FORMAT = (
TYPE = CSV
COMPRESSION = AUTO
);
- 执行以下 SQL 语句验证 Databend Cloud 是否可访问到该外部 Stage:
LIST @mycsv;
3
上传数据集到外部 Stage
使用 BendSQL将压缩后的数据集文件 (UserBehavior.csv.gz) 上传到外部 Stage。获取计算集群的连接信息,请参考连接到计算集群。
(base) eric@Erics-iMac ~ % bendsql --host tenantID--YOUR_WAREHOUSE.gw.aliyun-cn-beijing.default.databend.cn \
--user=cloudapp \
--password=<YOUR_PASSWORD> \
--database="default" \
--port=443 --tls
Welcome to BendSQL 0.9.3-db6b232(2023-10-26T12:36:55.578667000Z).
Connecting to tenantID--YOUR_WAREHOUSE.gw.aliyun-cn-beijing.default.databend.cn:443 as user cloudapp.
Connected to DatabendQuery v1.2.183-nightly-1ed9a826ed(rust-1.72.0-nightly-2023-10-28T22:10:15.618365223Z)
cloudapp@tenantID--YOUR_WAREHOUSE.gw.aliyun-cn-beijing.default.databend.cn:443/default> PUT fs:///Users/eric/Documents/UserBehavior.csv.gz @mycsv
PUT fs:///Users/eric/Documents/UserBehavior.csv.gz @mycsv
┌─────────────────────────────────────────────────────────────────┐
│ file │ status │ size │
│ String │ String │ UInt64 │
├───────────────────────────────────────────┼─────────┼───────────┤
│ /Users/eric/Documents/UserBehavior.csv.gz │ SUCCESS │ 949805035 │
└─────────────────────────────────────────────────────────────────┘
1 file uploaded in 401.807 sec. Processed 1 file, 905.80 MiB (0.00 file/s, 2.25 MiB/s)
数据导入和清洗
1
创建表格
在工作区中,执行以下 SQL 语句为数据集创建表格:
CREATE TABLE `user_behavior` (
`user_id` INT NOT NULL,
`item_id` INT NOT NULL,
`category_id` INT NOT NULL,
`behavior_type` VARCHAR,
`ts` TIMESTAMP,
`day` DATE );
2
清洗、导入数据
-
执行以下 SQL 语句导入数据到表格中,并同时完成清洗:
- 去除无效的时间区外的数据
- 数据去重
- 生成额外列数据
INSERT INTO user_behavior
SELECT $1,$2,$3,$4,to_timestamp($5::bigint) AS ts, to_date(ts) day
FROM @mycsv/UserBehavior.csv.gz WHERE day BETWEEN '2017-11-25' AND '2017-12-03'
GROUP BY $1,$2,$3,$4,ts;
- 执行以下 SQL 语句验证数据导入是否成功。该语句将返回表格的 10 行数据。
SELECT * FROM user_behavior LIMIT 10;
数据分析
在完成了前期的准备和数据导入之后,我们正式开始进行数据分析。
用户 流量及购物情况分析
1
总访问量和用户数
SELECT SUM(CASE WHEN behavior_type = 'pv' THEN 1 ELSE 0 END) as pv,
COUNT(DISTINCT user_id) as uv
FROM user_behavior;
3
统计每个用户的购物情况,生成新表:user_behavior_count
create table user_behavior_count as select user_id,
sum(case when behavior_type = 'pv' then 1 else 0 end) as pv, -- 点击数
sum(case when behavior_type = 'fav' then 1 else 0 end) as fav, --收藏数
sum(case when behavior_type = 'cart' then 1 else 0 end) as cart, --加购物车数
sum(case when behavior_type = 'buy' then 1 else 0 end) as buy --购买数
from user_behavior
group by user_id;