你们好,我是jacky,很高兴继续跟你们分享《MySQL数据分析实战》,从本节课程开始,咱们的课程就会变得愈来愈实战,也会愈来愈有意思了;
咱们课程的主体叫MySQL数据分析实战,那咱们用MySQL来进行数据分析的时候,也必定会有其逻辑在的,你们想一想咱们不管从事任何的工做岗位,咱们工做都是有咱们的逻辑在的,可能有人会说,个人工做有什么工做逻辑?那jacky说,那是由于咱们的工做都太熟悉了,咱们也没有进行过总结,最简单的来讲,咱们工做总会有前后顺序吧,就是先作什么,后作什么,这也是一种逻辑;好,前面铺垫了这么多,jacky就是说,在实际工做中,用MySQL来作数据分析也是有它的逻辑在的,jacky给你们总结的单表操做的八句箴言,也是完成按照咱们实际工做中的逻辑来编写的;
前面jacky说过单表查询的八句箴言第二句是:数据清洗两条路,惟一where走一走;第三句:清洗数据有空值,is not 来去除;那jacky说第二句箴言,和第三句箴言咱们结合着来说,这都属于数据清洗的范畴;
本节课程,jacky将结合数据数据清洗的六大步骤,给你们解析八句箴言的第2、3、四句;web
八句箴言第一句:无论三七二十一,先把数据show来看sql
数据预处理说白了就是看两件事:数据库
(1)看描述数据的信息:就是咱们上次课讲的看表结构,SQL语句1;编程
(2)二是抽取一部分数据,使用人工查看方式,对数据自己有一个直观的了解,而且初步发现一些问题,为以后的处理作准备:这部分呢,jacky上次课也将了就是SQL语句2和SQL语句3;编程语言
SQL语句5:去除缺失数据-空值svg
select * from user where name is null; select * from user where name is not null;
为了避免打断逻辑的完整性,关于空值和NULL值的相关内容,在系列课程的最后一个章节,请观看《这些年踩过的坑-空值与NULL》,这里jacky就不给你们过空值和NULL值的一些知识点,包括优化的一些内容,你们对应最后的一章查看吧;函数
咱们打开MySQL软件,看一下message表,性能
select * from message
insert into mess(name,content) values('','vvvvvvvvvv'); insert into mess(name,content) values('user7',null);
±—±------±-----------------------+
| id | name | content |
±—±------±-----------------------+
| 1 | user1 | dfdfdfdfd |
| 2 | user1 | aaaaaaaaa |
| 3 | user1 | ccccccccc |
| 4 | user2 | jjjjjjjjjj |
| 5 | user5 | hello world |
| 6 | user6 | weixin:run2lucky |
| 7 | user6 | gongzhognhao:shujudata |
| 8 | | vvvvvvvvvv |
| 9 | use7 | NULL |
±—±------±-----------------------+优化
SQL语句4:去除缺失数据- 用is not 去除null值spa
select * from mess where content is not null
select * from mess where content <>''
select * from mess where name <>'' and content is not null;
SQL语句5:用比较运算符去除空值
运算符 | 含义 |
---|---|
= | 和~相等 |
<> | 和~不相等 |
>= | 大于等于~ |
> | 大于~ |
<= | 小于等于~ |
< | 小于 |
运算符很简单,没有必要每条来讲,但有几个主要注意的点:
insert into mess(name,content) values('user11','llllllllll'),('user32','kkkkkkkk');
对于字符串来讲,因为时间关系,jacky就不用MySQL举例了,jacky把规则说一下:字符串的比较是按字典顺序进行排序的,咱们必定要与数字的大小顺序区分,什么意思:
1<10<11<2<222<3
在MySQL中!= 与<>都是与~不相等的意思,但jacky这里更倾向于用<>,由于这样显得更规范,也更兼容其余的除MySQL外的数据库软件;
下面jacky来讲下数据清洗的第三步,去除或修改格式和内容错误的数据,前面 jacky说数据清洗,是整个数据分析过程当中不可缺乏的一个环节,在实际操做中,数据清洗一般会占用数据分析过程的80%的时间,若是说咱们的数据是由咱们企业内部系统日志而来,那咱们的数据源,在格式和内容方面,通常来讲,格式和内容会是比较结构化的,或者说是规范的,咱们不用花太多的时间进行数据清洗,但若是说,咱们的数据是由人工收集来的,或是多个数据源整合而来,那么咱们就要花时间对数据源进行清洗;
那清洗格式和内容错误的原则思想就是数据过滤,那什么是数据过滤或者说当咱们在工做中遇到须要用SQL清洗格式和内容有错误的数据时,咱们首要要想到的是什么?
就是数据过滤的两种方法:
(1)where过滤
看一我的SQL水平高不高,你看他使用IN仍是使用OR
(2)通配符过滤
有朋友说,这where过滤不就是where 字句吗?这有什么好说的,但jacky看过太多工做中常常写SQL的人,还真就是连where都写很差,下面jacky给你们好好总结一下where字句,告诉你们看一我的SQL 用的水平高不高,其实看where 字句就能看出来:
where过滤的第一层次:单一查询条件用where :真的没啥好说的,太简单了select * from message where age>30;
where 过滤的第二层次:多个查询条件组合:
SQL语句8:当在SQL语句中,用OR也行,用IN也行,那咱们用IN就牛*,就专业,用OR就**了,就不专业
为何IN要远远好过用OR呢?主要有四点理由:
(1)IN语法更清楚,更直观
(2)在与其余AND和OR组合使用IN时,求值顺序更容易管理
(3)这点是最最重要的就是,IN的性能更优,执行速度更快
(4)IN能够包含其余SELECT语句,OR不行
去重:
合并去重:分组
“暴力去重”:distinct