数据清洗
查看各字段的数据
-- 查看各字段的情况
SELECT
COUNT( DISTINCT tb2_copy1.userId ) 用户数量,
COUNT( DISTINCT tb2_copy1.itemId ) 商品数量,
COUNT( DISTINCT tb2_copy1.category ) 商品类目数量,
count( tb2_copy1.behavior ) AS 所有行为数量
FROM
tb2_copy1;
1. 选择子集
分析所需,5个字段都保留
2.列的重命名
预览数据时,发现该数据集是没有字段名,因此在导入数据时,分别给这5个字段添加字段名
3. 删除重复值
- 用户的购买行为由于时间精确到小时,确实会存在少量用户在一小时内重复购买或浏览统一商品的行为,因此不对此部分数据进行处理。
-- 查询重复值
SELECT
*
FROM
tb2_copy1
GROUP BY
userId,itemId,category,behavior,timestamps
HAVING
COUNT( * ) > 1;
结果:无重复值
4. 缺失值处理
SELECT
COUNT(userId), COUNT(itemId), COUNT(category),
COUNT(behavior), COUNT(timestamps)
FROM
tb2_copy1;
没有存在缺失值的字段
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');
6. 数据排序
无需对数值进行排序
7. 异常值处理
from_unixtime(unix_timestamp,format)
返回UNIX时间戳对应的日期,使用该函数对timestamps字段进行处理。
-- 查询异常值
select
count(timestamps),
count(datetimes),count(date),count(time)
from
tb2_copy1;
-- 查询空值
select * from tb2_copy1 where datetimes is NULL;
- 这三个字段的数据量少于其他字段,说明他们存在空值
-- 删除空值
delete from tb2_copy1 where datetimes is NULL;
-- 检验时间区间
SELECT MAX(datetimes), MIN(datetimes) FROM tb2_copy1;
-- 删除不符合时间区间的数据并验证
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;
完成数据清洗后的数据: