用MySQL预处理一个多准则电影评分数据集

与笔者的这篇文章中用到的数据集是一样的,只是这次换用MySQL,目的是一样的。

用EXCEL预处理一个多准则电影评分数据集

想要的预处理结果是:

1,将不需要的列删去,

2,将含NULL值的记录删去,删除重复数据

3,将整体评分的分值调整为0-5,

4,对电影和用户名进行编号,分别从1到N,

5,统计预处理后数据集信息。

=========================

下面开始用MySQL对上述的5个需求进行处理。

1,将不需要的列删去。

在将CSV格式的原始数据集通过Navicat导入到数据库中以后,先把表复制一个,在复制的表上进行操作,保留最原始表。

接下来所有操作都会在复制表上进行操作。

选择设计表,将不需要的字段直接删除即可,就完成了第一步。之后可以将相对应的列名改为数据集中的正确的列名。

2,将含NULL值的记录删去。

在开始删除之前,先检查一下数据有多少条。输入

SELECT count(*) FROM alldata_copy1;

结果为:

然后开始删除含NULL值的列,这些都是爬取的时候没有爬到完整数据的条目,要作为无效数据删掉。

先查看哪些列含有NULL值,因为数据集是从Excel中导入的,null是以‘null’的形式存存储在表中的,也就是说,需要查找并删除的是含有文本‘null’的行。

查看一下这样的值。

SELECT username,moviename FROM alldata_copy1
where username like '%null%' or moviename like '%null%'
order by moviename desc;

或者用正则表达式搜索含null的记录:

SELECT username,moviename FROM alldata_copy1
where username REGEXP 'null'
order by moviename desc;

得到这样的结果:

之后,直接删掉这些数据即可。

delete from alldata_copy1
where username like '%null%';

运行结果是这样的:

剩余数据条数:

SELECT count(*) from alldata_copy1;

接下来,删除几个列完全相同的数据,每个重复数据只保留1条。

使用distinct,然后直接创建一个新表。

create table alldata3
( SELECT DISTINCT * from alldata_copy2 );

之后的操作就在新表alldata3上面进行。

3、将整体评分数值范围由0-100调整为0-5。

这一步是对数据的数值进行调整,只需要把total列除20即可。

SELECT total / 20  as newtotal FROM `alldata3`;

之后把这一列更新到表中。当然了,在此之前先创建一个新的列totalnew

update alldata3_copy1
set totalnew = total / 20;

可以看到,已经得到想要的数据,再删除掉不需要的列,把totalnew改回total即可。

4、对电影和用户名进行编号,分别从1到N。

这里的需求是:要把现有的电影名字,用户名字,全部替换乘从1开始依次增加的数字ID,目的是为了在之后的计算中方便程序使用。这是数据预处理的要求。

比如说,现有

moviename

你的名字

你的名字

你的名字

你的名字

你的名字

替换后,应该是

movieid

1

1

1

1

1

对于用户名,也是同样的操作。

对电影名字来说,首先把所有不同名的电影查找出来并建立一个新表。

CREATE table movie5 
(select distinct moviename 
from alldata4_copy1);

然后在这个表里面,创建一个新的字段,movieid

alter table movie5
add movieid int;

然后,更改字段属性为自增字段。

alter table movie5
change movieid
movieid int not null 
auto_increment 
primary key;

达到了给不同的电影赋予连续的数字ID的目的,根据movie5表,把ID更新到想要的表中。

update lastdata,movie5
set lastdata.movieid = movie5.movieid
where lastdata.moviename=movie5.moviename;

用这个语句可以完成该工作,得到结果如下:

之后采用与电影名相同的操作方法,把用户名也替换成数字ID,第4步的工作就完成了。

5,统计预处理后数据集信息

这里主要是看看电影和用户的分组和每一组的数量。

SELECT movieid,count(movieid) as movienum
from lastdata_copy1
GROUP BY movieid
order by movieid desc;

可以看到电影共有1380部

再来看用户的

SELECT userid,count(userid) as usernum
from lastdata_copy1
GROUP BY userid
order by userid desc;

可以看到共有用户17548名。

OK,数据集处理完毕。

猜你喜欢

转载自blog.csdn.net/youxinyuchu/article/details/83514981