淘宝用户行为数据清洗

淘宝用户行为数据

Posted by shexiaobin on August 17, 2019

数据清洗

查看各字段的数据

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

image

image

1. 选择子集

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

2.列的重命名

image

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

image

3. 删除重复值

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

image

结果:无重复值

4. 缺失值处理

SELECT 
	COUNT(userId), COUNT(itemId), COUNT(category),
	COUNT(behavior), COUNT(timestamps)
FROM 
	tb2_copy1;

image

没有存在缺失值的字段

5. 一致化处理

  • 时间数据中的日期和小时存在于一列中,需要将其分开以便分别研究每日和一段日期内的数据变化,故将其拆分成三列
-- 字段一致化处理
/*添加表字段*/
alter table tb2_copy1 add datetimes datetime;
alter table tb2_copy1 add date date;
alter table tb2_copy1 add time time;

/*更新表数据*/
update 
	tb2_copy1 
set datetimes=FROM_UNIXTIME(timestamps);

update 
	tb2_copy1 
set date=FROM_UNIXTIME(timestamps,'%Y-%m-%d');

update 
	tb2_copy1 
set time=FROM_UNIXTIME(timestamps,'%H:%i:%s');

image

image

6. 数据排序

无需对数值进行排序

7. 异常值处理

from_unixtime(unix_timestamp,format)

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

-- 查询异常值
select 
	count(timestamps),
	count(datetimes),count(date),count(time) 
from 
	tb2_copy1;

image

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

image

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

1569462351506

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

image

-- 删除不符合时间区间的数据并验证
SELECT * FROM tb2_copy1 
WHERE date< '2017-11-25' or date >='2017-12-4';

DELETE FROM tb2_copy1 
WHERE date< '2017-11-25' or date >='2017-12-4';

SELECT MAX(date), MIN(date) FROM tb2_copy1;

image

完成数据清洗后的数据:

image