layout: post # 使用的布局(不需要改)title: 淘宝用户行为数据清洗 # 标题
subtitle: 淘宝用户行为数据 #副标题
date: 2019-8-17 # 时间
author: shexiaobin # 作者
header-img: img/post-bg-digital-native.jpg #这篇文章标题背景图片
catalog: true # 是否归档
tags: #标签
- Data analysis

数据清洗

查看各字段的数据

  1. -- 查看各字段的情况
  2. SELECT
  3. COUNT( DISTINCT tb2_copy1.userId ) 用户数量,
  4. COUNT( DISTINCT tb2_copy1.itemId ) 商品数量,
  5. COUNT( DISTINCT tb2_copy1.category ) 商品类目数量,
  6. count( tb2_copy1.behavior ) AS 所有行为数量
  7. FROM
  8. tb2_copy1;

2019-08-17-淘宝用户行为数据清洗 - 图1

2019-08-17-淘宝用户行为数据清洗 - 图2

1. 选择子集

分析所需,5个字段都保留

2.列的重命名

2019-08-17-淘宝用户行为数据清洗 - 图3

预览数据时,发现该数据集是没有字段名,因此在导入数据时,分别给这5个字段添加字段名

2019-08-17-淘宝用户行为数据清洗 - 图4

3. 删除重复值

  • 用户的购买行为由于时间精确到小时,确实会存在少量用户在一小时内重复购买或浏览统一商品的行为,因此不对此部分数据进行处理。
  1. -- 查询重复值
  2. SELECT
  3. *
  4. FROM
  5. tb2_copy1
  6. GROUP BY
  7. userId,itemId,category,behavior,timestamps
  8. HAVING
  9. COUNT( * ) > 1;

2019-08-17-淘宝用户行为数据清洗 - 图5

结果:无重复值

4. 缺失值处理

  1. SELECT
  2. COUNT(userId), COUNT(itemId), COUNT(category),
  3. COUNT(behavior), COUNT(timestamps)
  4. FROM
  5. tb2_copy1;

2019-08-17-淘宝用户行为数据清洗 - 图6

没有存在缺失值的字段

5. 一致化处理

  • 时间数据中的日期和小时存在于一列中,需要将其分开以便分别研究每日和一段日期内的数据变化,故将其拆分成三列
  1. -- 字段一致化处理
  2. /*添加表字段*/
  3. alter table tb2_copy1 add datetimes datetime;
  4. alter table tb2_copy1 add date date;
  5. alter table tb2_copy1 add time time;
  6. /*更新表数据*/
  7. update
  8. tb2_copy1
  9. set datetimes=FROM_UNIXTIME(timestamps);
  10. update
  11. tb2_copy1
  12. set date=FROM_UNIXTIME(timestamps,'%Y-%m-%d');
  13. update
  14. tb2_copy1
  15. set time=FROM_UNIXTIME(timestamps,'%H:%i:%s');

2019-08-17-淘宝用户行为数据清洗 - 图7

2019-08-17-淘宝用户行为数据清洗 - 图8

6. 数据排序

无需对数值进行排序

7. 异常值处理

from_unixtime(unix_timestamp,format)

返回UNIX时间戳对应的日期,使用该函数对timestamps字段进行处理。

  1. -- 查询异常值
  2. select
  3. count(timestamps),
  4. count(datetimes),count(date),count(time)
  5. from
  6. tb2_copy1;

2019-08-17-淘宝用户行为数据清洗 - 图9

  1. -- 查询空值
  2. select * from tb2_copy1 where datetimes is NULL;

2019-08-17-淘宝用户行为数据清洗 - 图10

  • 这三个字段的数据量少于其他字段,说明他们存在空值
  1. -- 删除空值
  2. delete from tb2_copy1 where datetimes is NULL;

2019-08-17-淘宝用户行为数据清洗 - 图11

  1. -- 检验时间区间
  2. SELECT MAX(datetimes), MIN(datetimes) FROM tb2_copy1;

2019-08-17-淘宝用户行为数据清洗 - 图12

  1. -- 删除不符合时间区间的数据并验证
  2. SELECT * FROM tb2_copy1
  3. WHERE date< '2017-11-25' or date >='2017-12-4';
  4. DELETE FROM tb2_copy1
  5. WHERE date< '2017-11-25' or date >='2017-12-4';
  6. SELECT MAX(date), MIN(date) FROM tb2_copy1;

2019-08-17-淘宝用户行为数据清洗 - 图13

完成数据清洗后的数据:

2019-08-17-淘宝用户行为数据清洗 - 图14