使用python及SQL处理数据,通过tableau进行可视化展示

工具:python、MySQL、tableau

数据来源:https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1

 

一. 项目背景

1. 项目概览:UserBehavior是阿里巴巴提供的一个淘宝用户行为数据集,用于隐式反馈推荐问题的研究。该数据集包含了2017年11月25日至2017年12月3日之间,有行为的约一百万随机用户的所有行为(行为包括点击、购买、加购、喜欢)

注:隐式反馈推荐问题(推荐系统中用户对物品的反馈分为显式和隐式反馈,显式反馈 (如评分、评级) 或单一的隐式反馈 (如浏览、点击、加入购物车)。 隐式反馈推荐是推荐系统通过对内容和用户行为的分析,建立适当的模型,帮助用户从海量的数据中找到自己感兴趣的内容。推荐系统中用户的行为反馈包括显式反馈和隐式反馈,隐式反馈信息在推荐系统算法中被广泛应用。隐式反馈体现着用户的兴趣爱好,对隐式反馈信息的挖掘有助于提高推荐系统的效果,以更好地设计推荐系统)。

2. 数据来源与理解

数据来源:阿里巴巴天池 https://tianchi.aliyun.com/dataset/dataDetail?dataId=649&userId=1

数据集介绍:

文件名称 说明 包含特征
UserBehavior.csv 包含所有的用户行为数据 用户ID,商品ID,商品类目ID,行为类型,时间戳

字段说明:

列名称 说明
用户ID 整数类型,序列化后的用户ID
商品ID 整数类型,序列化后的商品ID
商品类目ID 整数类型,序列化后的商品所属类目ID
行为类型

字符串,枚举类型,包括(\’pv\’, \’buy\’, \’cart\’, \’fav\’)

(注:\’pv\’–商品详情页pv,等价于点击;\’buy\’–商品购买;\’cart\’–将商品加入购物车;\’fav\’–收藏商品

时间戳 行为发生的时间戳

 数据集大小:

注:源数据数据量超过1亿,截取100万条数据进行分析

维度 数量
用户数量 987,994
商品数量 4,162,024
商品类目数量 9,439
所有行为数量 100,150,807

 

二. 分析目的

通过对2017年11月25日至2017年12月3日之间的用户行为数据分析,为客户提供更精准的隐式反馈推荐,提高用户忠诚度,提高商家的成交转化率。

 

三. 分析思路

 

 

四. 数据清洗

 1. 选择子集

源数据超过1亿,使用python截取100万数据进行分析

  1. import pandas as pd
  2. DATA_PATH = \'C:/Users/DELL/Desktop/淘宝用户行为分析/UserBehavior.csv\'
  3. df = pd.read_csv(DATA_PATH, nrows=1000000)
  4. target_name = \'C:/Users/DELL/Desktop/淘宝用户行为分析/ubhsmall.csv\'
  5. df.to_csv(target_name)

 

2. 列名重命名

源数据无列名,对CSV文件进行列名重命名

 

3. 重复值处理

  1. SELECT user_id, item_id,timestamp FROM ubhsmall
  2. GROUP BY user_id, item_id, timestamp
  3. HAVING COUNT(user_id) > 1;-- 查询无记录

  1. CREATE TABLE ubhsc
  2. SELECT * FROM ubhsmall
  3. GROUP BY user_id, item_id, cate_id, behavior_type, timestamp;-- 备份表

 

4. 缺失值处理

  1. SELECT COUNT(user_id), COUNT(item_id),
  2. COUNT(cate_id), COUNT(behavior_type), COUNT(timestamp)
  3. FROM ubhsc;

查询无缺失值

 5. 一致化处理

  1. ALTER TABLE ubhsc ADD ID int unsigned primary key auto_increment;-- 新增字段ID作为主键
  2. ALTER TABLE ubhsc ADD(longdate VARCHAR(255), date VARCHAR(255), time VARCHAR(255));-- 新增字段longdate, date, time用于存放时间
  3.  
  4. UPDATE ubhsc
  5. SET longdate=FROM_UNIXTIME(timestamp,\'%Y-%m-%d %k:%i:%s\'),
  6. date=FROM_UNIXTIME(timestamp,\'%Y-%m-%d\'),
  7. time=FROM_UNIXTIME(timestamp,\'%k:%i:%s\')
  8. WHERE ID BETWEEN 1 and 1000000;-- timestamp字段进行格式化,存放于longdate, date, time
  1. ALTER TABLE ubhsc ADD hour INT(30);
  2. UPDATE ubhsc SET hour = HOUR(time);-- 新增字段hour, 用于存储小时

 

6. 异常值处理

  1. SELECT COUNT(longdate)
  2. FROM ubhsc
  3. WHERE longdate<\'2017-11-25 00:00:00\' or longdate >\'2017-12-03 24:00:00\';

  1. DELETE FROM ubhsmallcopy
  2. WHERE longdate<\'2017-11-25 00:00:00\' or longdate >\'2017-12-03 24:00:00\';

 

 

7. 查看数据情况

  1. SELECT
  2. COUNT(distinct user_id) AS 用户数,
  3. COUNT(distinct item_id) AS 商品数量,
  4. COUNT(distinct cate_id) AS 商品类型数量,
  5. SUM(case when behavior_type = \'pv\' then 1 else 0 end) AS 浏览次数,
  6. SUM(case when behavior_type = \'fav\' then 1 else 0 end) AS 收藏次数,
  7. SUM(case when behavior_type = \'cart\' then 1 else 0 end) AS 加入购物车次数,
  8. SUM(case when behavior_type = \'buy\' then 1 else 0 end) AS 购买次数,
  9. COUNT(longdate) AS 数据总量
  10. from ubhsc;

 

五. 数据分析

(一)用户角度

 1. 总体运营分析

1.1 用户流量分析

①总访问量PV、总访客数UV、平均访问量PV/UV

  1. SELECT COUNT(DISTINCT user_id) AS \'总访客数UV\',
  2. sum(case when behavior_type=\'pv\' then 1 else 0 END) as \'总访问量PV\',
  3. sum(case when behavior_type=\'pv\' then 1 else 0 END)/COUNT(DISTINCT user_id) as \'人均访问次数\'
  4. FROM ubhsc;

2017年11月25日至2017年12月3日,PV为9739,UV为876539,人均访问次数为90次

 

②PV、UV、平均访问量与日期/时间的关系

(备注:可使用处理过后的源数据在tableau中直接进行可视化,以下SQL可提取对应数据)

  1. #以日期为维度
  2. SELECT Date,
  3. COUNT(DISTINCT user_ID) AS \'总访客数UV\',
  4. sum(case when behavior_type=\'pv\' then 1 else 0 END) as \'总访问量PV\',
  5. sum(case when behavior_type=\'pv\' then 1 else 0 END)/COUNT(DISTINCT user_id) as \'人均访问次数\'
  6. FROM ubhsc
  7. GROUP BY Date
  8. ORDER BY Date;
  9. #以(天)小时为维度(备注,以小时为维度,可计算日均UV、PV)
  10. SELECT `hour`,
  11. COUNT(DISTINCT User_ID) AS \'总访客数UV\',
  12. sum(case when behavior_type=\'pv\' then 1 else 0 END) as \'总访问量PV\',
  13. sum(case when behavior_type=\'pv\' then 1 else 0 END)/COUNT(DISTINCT user_id) as \'人均访问次数\'
  14. FROM ubhsc
  15. GROUP BY `hour`
  16. ORDER BY `hour`;

使用tableau连接mysql数据库,进行可视化,结果显示在2017/11/25-2017/12/3期间,PV与UV随日期的变化趋势相似,11/25-12/1保持稳定的水平,12/2开始较为明显的增长,增长率约为33%,而人均访问次数则相对平稳,自12/1有缓慢下降趋势。

以一天为维度,10点-18点之间,UV、PV均无较大波动(UV在6000上下波动,PV在45000上下波动),18点-23点,UV、PV出现明显增长,PV波动明显(用户频繁访问)

 

1.2 总体销售情况

 由于数据源中未提供金额字段,此处仅分析成交量变化

  1. #成交量
  2. SELECT sum(case when behavior_type=\'buy\' then 1 else 0 end) as \'成交量\'
  3. FROM ubhsc;
    #GMV、销售金额、客单价:数据集中无金额数据,此部分暂不做分析

2017年11月25日至2017年12月3日,总成交量为19984

  1. #按日期分组,查看成交量变化趋势
  2. SELECT date,sum(case when behavior_type=\'buy\' then 1 else 0 end) as \'成交量\'
  3. FROM ubhsc
  4. GROUP BY date
  5. ORDER BY date;
  6. #以小时分组,查看成交量变化趋势
  7. SELECT `hour`,sum(case when behavior_type=\'buy\' then 1 else 0 end) as \'成交量\'
  8. FROM ubhsc
  9. GROUP BY `hour`
  10. ORDER BY `hour`;

 从时间维度,成交量在12/2达到最大值,与PV、UV变化趋势相同

 

 成交量的变化趋势大致与UV、PV的变化趋势相同,10-16点成交量较高且趋于平稳,13点出现小高峰,而从16点开始,成交量出现下降趋势,直到18点,开始回升,20-22点为成交量最高的时间段。

 

(二)消费行为分析
1. 活跃用户分析

  1. # 根据日期分组,查看活跃用户
  2. SELECT date, COUNT(DISTINCT(user_id)) AS 活跃用户
  3. FROM ubhsc
  4. GROUP BY date
  5. ORDER BY date ASC;
  6. # 根据小时分组,了解每个时段的活跃人数
  7. SELECT hour, COUNT(DISTINCT(user_id)) AS 活跃用户
  8. FROM ubhsc
  9. GROUP BY hour
  10. ORDER BY hour ASC;

 11月25至12月1日用户活跃人数分布均匀,而12月1日开始明显出现上涨,12月2日活跃人数达到137774

 

 

 

 

 一天中,4点是活跃人数最低点,0-7点处于低峰,符合用户作息规律,4-10点活跃用户数回升,10-18点之间波动不大,夜间活跃人数开始增长,21点、22点用户最为活跃

 

 

 

2. 付费用户分析

  1. # 付费用户
  2. SELECT date, COUNT(DISTINCT(user_id)) AS 付费用户数,sum(case when behavior_type=\'buy\' then 1 else 0 end)/COUNT(DISTINCT(user_id)) AS 付费用户人均消费次数
  3. FROM ubhsc
  4. WHERE behavior_type=\'buy\'
  5. GROUP BY date
  6. ORDER BY date ASC;
  7. SELECT `hour` as 小时, COUNT(DISTINCT user_id) as 付费用户数
  8. FROM ubhsc
  9. WHERE behavior_type=\'buy\'
  10. GROUP BY `hour`;

 付费用户数在12月2日达到最大值,而付费用户人均消费次数变化不大

 

 一天中,付费用户数与活跃用户数变化规律一致,21点平台付费用户数最多

 

 

  1. #付费率:消费人数/活跃人数
  2. SELECT a.date, a.活跃用户数,b.付费用户数,CONCAT(ROUND(b.付费用户数*100/a.活跃用户数,2),\'%\') FROM
  3. (SELECT date, COUNT(DISTINCT(user_id)) AS 活跃用户数
  4. FROM ubhsc
  5. GROUP BY date
  6. ORDER BY date ASC) a
  7. LEFT JOIN
  8. (SELECT date, COUNT(DISTINCT user_id) as 付费用户数
  9. FROM ubhsc
  10. WHERE behavior_type=\'buy\'
  11. GROUP BY date) b ON a.date =b.date;

用户付费率在20%上下波动,付费率最高的日期为11月29日,而付费用户数最多的12月2日,用户付费率为18.04%

 
3. 用户行为习惯分析

  1. #按用户分组,查看不同行为发生次数
  2. SELECT user_id,COUNT(behavior_type) as \'用户行为数\',
  3. sum(case when behavior_type=\'pv\' then 1 else 0 end ) as \'点击次数\',
  4. sum(case when behavior_type=\'fav\' then 1 else 0 end) as \'收藏次数\',
  5. sum(case when behavior_type=\'cart\' then 1 else 0 end) as \'加购次数\',
  6. sum(case when behavior_type=\'buy\' then 1 else 0 end) as \'购买次数\'
  7. FROM ubhsc
  8. GROUP BY user_id
  9. ORDER BY 用户行为数 DESC;

 

 (备注:tableau使用处理后原表即可,此处SQL可提取对应数据)

  1. #按日期分组,查看不同行为的变化规律
  2. SELECT date as \'日期\',
  3. sum(case when behavior_type=\'pv\' then 1 else 0 end ) as \'点击次数\',
  4. sum(case when behavior_type=\'fav\' then 1 else 0 end) as \'收藏次数\',
  5. sum(case when behavior_type=\'cart\' then 1 else 0 end) as \'加购次数\',
  6. sum(case when behavior_type=\'buy\' then 1 else 0 end) as \'购买次数\'
  7. FROM ubhsc
  8. GROUP BY date
  9. ORDER BY date ASC;
  1. #按小时分组,查看不同行为的变化规律
  2. SELECT `hour` as \'时间\',
  3. sum(case when behavior_type=\'pv\' then 1 else 0 end ) as \'点击次数\',
  4. sum(case when behavior_type=\'fav\' then 1 else 0 end) as \'收藏次数\',
  5. sum(case when behavior_type=\'cart\' then 1 else 0 end) as \'加购次数\',
  6. sum(case when behavior_type=\'buy\' then 1 else 0 end) as \'购买次数\'
  7. FROM ubhsc
  8. GROUP BY `hour`
  9. ORDER BY `hour` ASC;

 分析显示,18点-23点,用户点击浏览行为频繁,收藏、加购、购买数量随之增加,这其中加购次数高于购买、收藏,且购买曲线与收藏曲线趋势更为接近,结合淘宝加购及收藏功能,可以分析得到,用户浏览商品后多利用加入购物车做比较,之后再选定商品进行购买。

 

4. 复购率与留存率

  1. #计算复购率:复购率 = 购买次数两次及其以上的人数/有购买行为的用户总数
  2. SELECT
  3. sum(case when t.购买次数>1 then 1 else 0 end ) as 复购次数,
  4. sum(case when t.购买次数>0 then 1 else 0 end ) as 购买次数,
  5. CONCAT(ROUND(sum(case when t.购买次数>1 then 1 else 0 end)*100/ sum(case when t.购买次数>0 then 1 else 0 end),2),\'%\') as 复购率
  6. from
  7. (SELECT user_id,COUNT(behavior_type) as \'用户行为数\',
  8. sum(case when behavior_type=\'buy\' then 1 else 0 end) as \'购买次数\'
  9. FROM ubhsc
  10. GROUP BY user_id) t

用户复购率为65.61%

  1. #计算留存率:n日后留存率=(注册后的n日后还登录的用户数)/第一天新增总用户数
  2. #以2017-11-25作为第一天,计算次日、3日、7日留存率
  3. select count(distinct user_id) as 第一天新用户数 from ubhsc
  4. where date = \'2017-11-25\';-- 6899
  5. select count(distinct user_id) as 第二天留存用户数 from ubhsc
  6. where date = \'2017-11-26\' and user_id in (SELECT user_id FROM ubhsc
  7. WHERE date = \'2017-11-25\');-- 5463
  8. select count(distinct user_id) as 第三天留存用户数 from ubhsc
  9. where date = \'2017-11-27\' and user_id in (SELECT user_id FROM ubhsc
  10. WHERE date = \'2017-11-25\');-- 5309
  11. select count(distinct user_id) as 第七天留存用户数 from ubhsc
  12. where date = \'2017-12-01\' and user_id in (SELECT user_id FROM ubhsc
  13. WHERE date = \'2017-11-25\');-- 5334
  14.  
  15. CREATE TABLE liucun
  16. (第一天新用户数 int,
  17. 第二天留存用户数 int,
  18. 第三天留存用户数 int,
  19. 第七天留存用户数 int)
  20. INSERT INTO liucun VALUES(6899,5463,5309,5334);
  21. SELECT CONCAT(ROUND(100*第二天留存用户数/第一天新用户数,2),\'%\')AS 次日留存率,
  22. CONCAT(ROUND(100*第三天留存用户数/第一天新用户数,2),\'%\')AS 三日留存率,
  23. CONCAT(ROUND(100*第七天留存用户数/第一天新用户数,2),\'%\')AS 七日留存率
  24. from liucun;

 用户次日留存率为79.19%、三日留存率为76.95%,七日留存率为77.32%,相差不大

 

(三)用户行为转化分析

  1. #创建用户行为数据视图
  2. #视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
  3. #以用户数为维度
  4. create view vuserbeha AS
  5. select User_ID,COUNT(Behavior_type) as \'用户行为数\',
  6. sum(case when Behavior_type =\'pv\' then 1 else 0 end ) as \'点击\',
  7. sum(case when Behavior_type =\'fav\' then 1 else 0 end) as \'收藏\',
  8. sum(case when Behavior_type =\'cart\' then 1 else 0 end) as \'加购\',
  9. sum(case when Behavior_type =\'buy\' then 1 else 0 end) as \'购买\'
  10. from ubhsc
  11. GROUP BY User_ID
  12. ORDER BY 用户行为数 DESC;
  13. -- 用户留存分析(漏斗转化)
  14. select sum(case when 点击>0 then 1 else 0 end)as 点击用户数,
  15. sum(case when 收藏>0 then 1 else 0 end) as 收藏用户数,
  16. sum(case when 加购>0 then 1 else 0 end) as 加购用户数,
  17. sum(case when 购买>0 then 1 else 0 end) as 购买用户数
  18. from 用户行为数据;-- 9706,3843,7297,6645
  19.  
  20. -- 点击——购买的留存分析
  21. select
  22. sum(case when 购买>0 then 1 else 0 end) as 购买用户数
  23. from 用户行为数据
  24. where 收藏=0 and 加购=0;-- 700
  25.  
  26. -- 点击——加购——购买的留存分析
  27. select
  28. sum(case when 加购>0 then 1 else 0 end) as 加购用户数,
  29. sum(case when 购买>0 then 1 else 0 end) as 购买用户数
  30. from 用户行为数据
  31. where 收藏=0 and 加购<>0;-- 4608 3202
  32.  
  33. -- 点击——收藏——购买的留存分析
  34. select
  35. sum(case when 收藏>0 then 1 else 0 end) as 收藏用户数,
  36. sum(case when 购买>0 then 1 else 0 end) as 购买用户数
  37. from 用户行为数据
  38. where 加购=0 and 收藏<>0;-- 1154,686
  39.  
  40. -- 点击——收藏——加购——购买的留存分析
  41. select
  42. sum(case when 加购>0 then 1 else 0 end) as 加购用户数,
  43. sum(case when 收藏>0 then 1 else 0 end) as 收藏用户数,
  44. sum(case when 购买>0 then 1 else 0 end) as 购买用户数
  45. from 用户行为数据
  46. where 加购<>0 and 收藏<>0;-- 2689,2689,2057

 

  1. #创建用户行为数据视图
  2. CREATE VIEW userbeha AS
  3. SELECT user_id, cate_id,
  4. count(behavior_type)as 用户行为总数,
  5. sum( CASE WHEN behavior_type = \'pv\' THEN 1 ELSE 0 END ) AS 点击数,
  6. sum( CASE WHEN behavior_type = \'fav\' THEN 1 ELSE 0 END ) AS 收藏数,
  7. sum( CASE WHEN behavior_type = \'cart\' THEN 1 ELSE 0 END ) AS 加购数,
  8. sum( CASE WHEN behavior_type = \'buy\' THEN 1 ELSE 0 END ) AS 购买数
  9. FROM ubhsc
  10. GROUP BY user_id, cate_id;

 

  1. #统计各行为发生总数
  2. SELECT
  3. sum(用户行为总数) AS total_bh,
  4. sum( 点击数 ) AS total_pv,
  5. sum( 收藏数 ) AS total_fav,
  6. sum( 加购数 ) AS total_cart,
  7. sum( 购买数) AS total_buy
  8. FROM
  9. userbeha;-- 978279,876539,27486,54270,19984

 

 

  1. #计算各行为转化率
  2. select concat(round(sum(点击数)/sum(用户行为总数)*100,2),\'%\') as total_to_pv,
  3. concat(round((sum(收藏数)+sum(加购数))/sum(点击数)*100,2),\'%\') as pv_to_favCart,
  4. concat(round(sum(购买数)/sum(点击数)*100,2),\'%\') as pv_to_buy
  5. from userbeha;

 

 

 

  1. #比较不同路径转化率
  2. #总点击数:876539
  3. #点击-购买(直接购买)
  4. SELECT SUM(购买数)FROM userbeha
  5. where 点击数 > 0
  6. AND 收藏数 = 0
  7. AND 加购数 = 0;-- 9260
  8. -- 直接购买转化率=9260/876539=0.0105
  9. #点击-加购-购买
  10. SELECT SUM(加购数),SUM(购买数)FROM userbeha
  11. where 点击数 > 0
  12. AND 收藏数 = 0
  13. AND 加购数 > 0;-- 42780,5114
  14. -- 点击-加购-购买转化率=5114/876539=0.0058
  15. #点击-收藏-购买
  16. SELECT SUM(收藏数),SUM(购买数)FROM userbeha
  17. where 点击数 > 0
  18. AND 收藏数 > 0
  19. AND 加购数 = 0;-- 18245,1445
  20. -- 点击-收藏-购买转化率=1445/876539=0.0013
  21. #点击-收藏-加购-购买
  22. SELECT SUM(收藏数),SUM(加购数),SUM(购买数)FROM userbeha
  23. where 点击数 > 0
  24. AND 收藏数 > 0
  25. AND 加购数 > 0;-- 4847,4310,662
  26. -- 点击-收藏-加购-购买转化率=662/876539=0.0007

 直接购买的转化率最高(1.05%),其次是“点击-加购购买

 

(四)用户价值分析(RFM模型)
数据源未提供金额数据,从R、F角度对用户进行分群分析,此处暂不做分析

 

二. 商品角度
(一)商品销售分析
1. 商品销售整体情况

  1. #曝光商品总数
  2. select COUNT(DISTINCT Item_ID)
  3. from ubhsc;-- 393357

  1. #产生销售商品总数
  2. select COUNT(DISTINCT Item_ID)
  3. from ubhsc
  4. where Behavior_type=\'buy\';-- 17282

 

  1. #用户购买商品情况
  2. select a.购买次数,COUNT(a.Item_ID) as 商品数
  3. FROM
  4. (select Item_ID,COUNT(User_ID) as 购买次数
  5. from ubhsc
  6. where Behavior_type=\'buy\'
  7. GROUP BY Item_ID) as a
  8. GROUP BY 购买次数
  9. ORDER BY 购买次数 DESC;

在本次统计数据中,只购买一次的商品有15303种,占用户购买商品数的88.54%(15303/17282),说明商品售卖主要是依靠商品的长尾效应

 

 2. 商品排行榜

  1. #浏览top
  2. select cate_id,
  3. sum(case when Behavior_type =\'pv\' then 1 else 0 end) as \'点击\'
  4. from ubhsc
  5. GROUP BY cate_id
  6. ORDER BY 点击 DESC
  7. limit 20;

 点击最高为商品4756105

  1. #收藏top
  2. select cate_id,
  3. sum(case when Behavior_type =\'fav\' then 1 else 0 end) as \'收藏\'
  4. from ubhsc
  5. GROUP BY cate_id
  6. ORDER BY 收藏 DESC
  7. limit 20;

收藏最高为商品4756105(与点击相同)

 

  1. #加购top
  2. select cate_id,
  3. sum(case when Behavior_type =\'cart\' then 1 else 0 end) as \'加购\'
  4. from ubhsc
  5. GROUP BY cate_id
  6. ORDER BY 加购 DESC
  7. limit 20;

加购最高为商品4756105(与点击、收藏相同)

  1. #购买top
  2. select cate_id,
  3. sum(case when Behavior_type =\'buy\' then 1 else 0 end) as \'购买\'
  4. from ubhsc
  5. GROUP BY cate_id
  6. ORDER BY 购买 DESC
  7. limit 20;

购买最多为商品2735466

 

 结果显示,点击、收藏、加购最多的商品是4756105,而购买最多的商品为2735466,这说明4756105的购买转化率较低,需结合实际业务分析转化率低的原因,提升购买转化率,同时优化其他商品展示,提高销量。

 

(二)商品偏好分析及评分预测–后续研究

 

版权声明:本文为fanyu2019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/fanyu2019/p/12858729.html