10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_十万条数据的csv文件 有多大


写在前面:本文属于淘宝用户行为分析这个项目的一部分,单独拎出来数据导入与清洗过程,写成一篇文章。

附完整的项目分析与可视化分析报告:


Daxuya:淘宝用户行为分析(SQL)zhuanlan.zhihu.com

10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据集_02


回顾下之前在Excel部分学习的数据清洗相关知识点:

  • 数据清洗即数据预处理,目的是去掉无效、重复数据,以符合我们的需求,得到想要的数据。
  • 数据清洗的步骤:选择子集;列名重命名;删除重复值;缺失值处理;一致化处理;数据排序;异常值处理

一、导入数据集

由于此次分析使用的是MySQL,需要先将数据导入到数据库中,再进行数据清洗。

a、新建一个数据库(Taobao)用于此次分析:


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_十万条数据的csv文件 有多大_03


b、如图,在创建好的新数据库下,提前创建一张userbehavior表(用于后面导入数据),使用Navicat导入表数据。


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据_04


c、右击创建的表格,选择“导入向导”,选择你要导入的数据表,导入文档格式注意与原始文档格式一致(这里是CSV格式)。


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据_05


d、点击下一步,进入选择附加选项(如图),因原csv文件中没有字段名,所以这里为“0”,从csv文件的第一行数据开始导入,到csv文件的第100万行数据结束。


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据集_06


e、点击下一步,选择目标表。这里选择我们提前创建好的空表。


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_十万条数据的csv文件 有多大_07


f、点击下一步,匹配各列数据,使之对应。


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据_08


g、点击下一步,选择导入模式,这里选择直接导入数据到创建好的空表。


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_时间戳_09


h、终于到了最后一步,点击“开始”按钮执行导入命令,数据量较大,耐心等待一会,如下图,显示成功导入100万条数据。


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据_10


至此,数据已导入成功,我们来看下数据的概貌:


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据集_11


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_时间戳_12


数据导入显示没问题,且是100万条。

下面进入本次分析的数据清洗:

选择子集 -> 列名重命名 -> 删除重复值 -> 处理缺失值 -> 一致化处理 -> 删除异常值


二、数据清洗

2.1 选择子集

原数据集中数据量庞大,本次分析选取了其中的100万条数据进行分析。

最终选取的100万条数据中各字段均有分析价值,所有的字段都需要用到,所以选择全部字段。

2.2 列名重命名

在前面导入数据集中,已经自创建了数据表结构,不需再作更改。

2.3 删除重复值

将用户ID,商品ID,时间戳三个字段定为联合主键,查询是否存在重复的记录。


select 用户ID
from userbehav
group By 用户ID,商品ID,时间戳
having count(*) >1;


查询结果:


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据_13


由查询结果可知,数据集中没有重复值。

2.4 处理缺失值

对所有列进行计数查询:


select count(用户ID),count(商品ID),count(商品类目ID),count(行为类型),count(时间戳)
from userbehav;


查询结果:


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_时间戳_14


由查询结果可知,选取数据集的100万条数据各列无缺失值。

2.5 一致化处理


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_时间戳_15

处理前的时间

由于数据中时间是以时间戳的形式记录,在分析时将“时间戳”列转换为日期和时间,便于理解和后续的分析。


-- 截取年月日,形成新的一列
alter table userbehav add column 日期 varchar(20);

-- 截取日期时间,形成新的一列
alter table userbehav add column 时间 varchar(20);

-- 将时间戳里的数据转化格式
update userbehav
set 
日期=from_unixtime(时间戳,'%Y-%m-%d'),
时间=from_unixtime(时间戳,'%k:%i:%s');


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据_16

处理后的日期和时间

2.6 删除异常值

因为此次数据研究的时间范围是2017年11月25日至2017年12月3日,所以需要将不满足这个时间范围的数据删除。

检查日期是否在数据集规定范围内:


select min(日期),max(日期)
from userbehav;


查询结果:


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据集_17


上查询结果显示时间范围并不在我们选定的时间当中,其中存在异常值。接着查询出这些不符合时间范围的数据。结果显示,这样的数据共有470条记录。


select * 
from userbehav
where 日期< '2017-11-25' or 日期> '2017-12-03';


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_时间戳_18

部分异常数据记录截图

将这470条数据删除掉后,再次查询检验数据集时间范围:


-- 删除异常数据470条
delete from userbehav
where 日期< '2017-11-25' or 日期> '2017-12-03';


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_时间戳_19


OK,数据集时间范围已经没问题。

删除掉之后,查询剩余的数据总量和用户总数。


-- 删除异常数据470条
delete from userbehav
where 日期< '2017-11-25' or 日期> '2017-12-03';

-- 统计删除异常数据后存留的数据总量 和 用户总数
select count(*),count(DISTINCT 用户ID) 
from userbehav;


得到查询结果:


10万条数据表和60万条数据表 mysql连接查询 十万条数据占多大空间_数据集_20


由上查询结果知,删除470条异常数据后,数据集中的数据总量为999530,用户总数为9739。

至此,完成此次分析全部的数据清洗。