如何不写 SQL ,探索和分析数据库?
数据分析的门槛在降低,希望你能及时意识到。
![](https://img.haomeiwen.com/i64542/bb8c156f628c0344.jpg)
需求
今天是本学期《数据库系统原理》的最后一课。学生们完成了数据分析项目,依次上台做展示。
![](https://img.haomeiwen.com/i64542/757c21c7d5e6b998.jpg)
看到连计算机扫盲课都没有上过的文科生,经过一个学期的学习,能够自己从网上找数据,导入关系型数据库,用 SQL 来做查询,直到以数据来回答自己感兴趣的问题,我觉得很开心。
在这个大数据时代,我们每个人的工作,都或多或少要跟数据打交道。小到记录自己的账本,大到用数据辅助企业战略决策。用好数据,可以帮助你所在的团队,和你个人增值。
有价值的数据,许多都存储在了各种数据库里面。想要使用好它们,只会用 Excel 或者 Access 是不够的。一般来说,查询它们的最好方式,是学会各种查询语言。最常见的,就是 SQL。
在著名的 Python 课程 Programming for Everybody 里面,主讲教授密歇根大学的 Chuck (Dr. Charles Severance) 认为,SQL 语言是编程语言中最简单的一种。
![](https://img.haomeiwen.com/i64542/069c6281d928e2f8.jpg)
但是,我们还是现实一点。
许多时候,你有分析数据的冲动,然而并非人人都有时间和意愿去学一门 SQL 课程,来完成日常工作中的数据查询、分析和可视化工作。
工具
好在,技术的发展,总是把很多原先专业人士才能做的事儿,变成大众都能做的。
例如自动挡汽车,例如手机上的相机应用,再例如我今天要给你介绍的 Metabase 。
Metabase 的 Slogan ,是这个样子的。
![](https://img.haomeiwen.com/i64542/086256ee41ee6524.jpg)
翻译过来,重点就是:
- 所有人都能用
- 可以容易表达你的问题
- 使你能从数据中学习
安装
我们来尝试一下。
Metabase 这款工具,完全可以适用于团队协作,因为它提供了 Docker 镜像、AWS 和 Heroku 等方便的云端使用方式。
![](https://img.haomeiwen.com/i64542/f6badecf07500030.jpg)
为了介绍的简单与方便,这里我只给你介绍一下单机版的安装。其余的应用形式,你可以学习本文之后,自己继续挖掘。
因为我自己使用的是 macOS ,所以这里选择 Mac 下面编译好的安装文件就行。
![](https://img.haomeiwen.com/i64542/9f2c7359e66700bb.jpg)
如果你使用的是其他系统,例如 Linux 或者 Windows ,安装也不麻烦。只需要点击“其他平台”按钮,下载一个 jar 类型文件。只要你在系统里面安装好 Java 运行环境,就可以直接双击该文件运行了。
![](https://img.haomeiwen.com/i64542/0c3a75595fe1ff7d.jpg)
这里以我电脑上的 macOS 系统为例。打开下载的 dmg 文件后,把可执行文件拖入到“应用”文件夹,就可以了。
![](https://img.haomeiwen.com/i64542/e36a5a05586bebc4.jpg)
第一次运行的时候,可能需要一些时间初始化。
![](https://img.haomeiwen.com/i64542/c689b757d42cc914.jpg)
当出现以下界面的时候,就意味着准备就绪了。
![](https://img.haomeiwen.com/i64542/945457b22cc2c942.jpg)
请你点击上图里面的蓝色按钮,开始设置。
我们需要输入一些基本注册信息。
![](https://img.haomeiwen.com/i64542/9b3840e1d120b56e.jpg)
之后,选择我们需要连接的数据库。
![](https://img.haomeiwen.com/i64542/b01fb08e8b852ee5.jpg)
注意,这里有很多选项可以选择。这些选项,基本上涵盖了市面上常见的主流数据库类型。
![](https://img.haomeiwen.com/i64542/d44f61db6364691f.jpg)
为了方便起见,这里我们使用“麻雀虽小五脏俱全”的 SQLite 数据库。其他类型的数据库,你可以稍后自己尝试。
我用的样例,是 Stanford 数据库开放课程使用的 colleges.db 。我自己上课的时候,一直用它作为基础样例演示给学生。
![](https://img.haomeiwen.com/i64542/e104cfa133c13c27.jpg)
设置完毕之后,下面需要注意,有个数据统计选项。 Metabase 是在询问你,是否允许把你的使用行为统计信息发给它,帮助改进。
![](https://img.haomeiwen.com/i64542/408fa4dba4310296.jpg)
如果你乐于分享,可以保持原先设定。若对自己的隐私比较注重,不用纠结了,可以关闭该选项。
![](https://img.haomeiwen.com/i64542/55e970d9b8816c83.jpg)
到这里,安装和设置就算完成了。
浏览
下面我们看看有哪些数据表可以查看。
这个数据库里面包含了3张表格,分别是:
- Student 学生信息
- Apply 申请信息
- College 招生学校信息
![](https://img.haomeiwen.com/i64542/1cc0af40586d504e.jpg)
我们选择其中的学生表格。
![](https://img.haomeiwen.com/i64542/451c3b7bf9c7143f.jpg)
Metabase 默认给了我们一些基本的描述性统计结果。
例如最重要的,是一张表格到底有多少行。这里样例 Student 表里,一共有12个学生的记录。
还没完,往下翻, Metabase 还为我们自动生成了一些其他统计结果。
首先是学生的学号分布。
![](https://img.haomeiwen.com/i64542/7511e0371c827323.jpg)
当然,由于学号无非是个独特数字而已,所以这个统计没有什么用处。
但下面这张,就不一样了。
![](https://img.haomeiwen.com/i64542/900b03f60663f9e6.jpg)
这是学生的 GPA 分布,可见,大部分学生的成绩高于 3.6 分。数据集不是个均匀或者正态分布。
![](https://img.haomeiwen.com/i64542/6aa6a39cc68b5238.jpg)
上面这张图,反映了学生来自的高中学校大小。看得出来,大部分学生还是来自于学生人数较多的学校。来自小而精的高中学生人数,相对较少。
![](https://img.haomeiwen.com/i64542/2980b2f49b1298ed.jpg)
后面这张图,统计了学生姓名。有意思的是,你可以清楚看到,有重名的学生。
如果你不满足于只看这些统计信息,而希望查看原始数据。那么可以点击“Browse Data” 按钮,选择 college 数据库。
![](https://img.haomeiwen.com/i64542/7f7aba460491b749.jpg)
然后选择其中的 Student 表格,就能看到全部学生记录信息。
![](https://img.haomeiwen.com/i64542/4cdda7299289788d.jpg)
分析
如果我们只关注其中一部分学生的情况,可以选择上方紫色的“Filter”(过滤)按钮。
![](https://img.haomeiwen.com/i64542/e05298eca30e04b5.jpg)
这里,所有的条件,都可以通过选择和输入数值来完成,不需要编程。我们选择过滤结果只保留 GPA 大于 3.5 的学生。
![](https://img.haomeiwen.com/i64542/c1035add736e849e.jpg)
上图左侧就是我们想看的结果了。
但是我们会觉得,“一幅图胜似千言万语”。
怎么办呢?我们选择右下方,以 GPA 作为分组依据,然后点击左下方的 Visualization (可视化)按钮。
![](https://img.haomeiwen.com/i64542/c3d815271a544314.jpg)
可见,在成绩大于3.5的学生里面,有4个是3.9分的成绩。这部分学生里面,学霸占的比例不小啊。
![](https://img.haomeiwen.com/i64542/b33b90abb7e52700.jpg)
我们还可以换一种分组方式,这里我们使用高中学校人数作为分组依据。然后再次进行可视化。
![](https://img.haomeiwen.com/i64542/b06b346791de5bdb.jpg)
于是你可以看到,GPA 3.5 分以上的学生,来自于人数规模1000的高中最多。
点击可视化按钮,我们可以选择不同的图形来表示。
这里我们选择饼图。
![](https://img.haomeiwen.com/i64542/60ff3b66e38de4eb.jpg)
你觉得在这个问题里,柱状图和饼图,哪个更适合描述咱们的过滤分析结果呢?
地图
下面我们来看看,如何对数据进行地理信息可视化。也就是,画个地图出来。
这里,我们选用的,是其中 College 这张表格。
这张表格里面,包含以下信息。
![](https://img.haomeiwen.com/i64542/f440c88d3f6feb55.jpg)
我们打算看看,不同州大学的录取人数。做法很简单。还是点击 Visualization 。
![](https://img.haomeiwen.com/i64542/58320a0125ced0e2.jpg)
选择图形选项最右下方的“地图”(Map)。
![](https://img.haomeiwen.com/i64542/e5ded685e2b2368c.jpg)
修改 Metric field 为 Enrollment 。然后 Region Field 为 State (州)。
于是你就能看见下面这样的地图了。
![](https://img.haomeiwen.com/i64542/4658aa2f9924f7f5.jpg)
有意思的是,Metabase 对于州的简写方式也能正确识别,并且把它们标记在地图上。而且根据汇总招生人数的多寡,还自动选择了不同深浅的颜色。
关联
下面我们来看看更实用的分析手段——关联查询。
从一张表里,我们已经可以分析出不少东西了。但是更多情况下,我们希望采用多张表格联合在一起,从而能从中挖掘出洞见(Insights)。
例如这里我给你提一个问题:
不同大学录取最低 GPA 是多少?
这个问题,你若是只用一张表,是无非回答的。
因为 Apply 表里面虽然有录取决策信息,但是不包含 GPA;
Student 表里面虽然包括了 GPA,但你不知道学生报了哪所学校,以及是否被录取了。
让我们点击上方菜单栏里面的“问问题”(Ask a question)按钮,然后从下图中选择“定制问题”(Custom Question)。
![](https://img.haomeiwen.com/i64542/c87b31e60d62106f.jpg)
然后,你需要选择数据库。
![](https://img.haomeiwen.com/i64542/867f8426e460d38f.jpg)
还得选择一个初始的表格。
![](https://img.haomeiwen.com/i64542/d838758c507bfb14.jpg)
我们选择 Student 表。
![](https://img.haomeiwen.com/i64542/980fb4510c92c71e.jpg)
然后选择 Join data (关联数据)。
![](https://img.haomeiwen.com/i64542/f4edb4c68b58d0ff.jpg)
这里我们需要选择 Apply 表格。
![](https://img.haomeiwen.com/i64542/f895d75d76f5652e.jpg)
然后会让我们选择用哪个列进行关联。毕竟,如果我们把张三的学生信息关联到李四的录取信息记录上,是没有意义的。
![](https://img.haomeiwen.com/i64542/5523c006b7c470e6.jpg)
我们观察一下,发现在 Student 和 Apply 中,都出现了学生的 ID (sID),这是学生的唯一标识。就用它好了。
![](https://img.haomeiwen.com/i64542/429987fb0a2eeebf.jpg)
下面我们设置一下过滤条件。显然,既然考虑录取分数,那么就得找出那些被录取的人。
于是我们在 Filter 一栏里面点击。
![](https://img.haomeiwen.com/i64542/cb54380375c8df49.jpg)
选择 Apply 表格。
![](https://img.haomeiwen.com/i64542/90b7417f327b7bed.jpg)
然后从中选择 Decision (录取决策)。
![](https://img.haomeiwen.com/i64542/17f33488df3f3ef1.jpg)
因为这里只有两种取值选择。所以我们可以选择 Y (录取)。
![](https://img.haomeiwen.com/i64542/cfa01f7c4f62e6bc.jpg)
然后我们就可以根据学校来查看最低录取分数了。
这里我们填写绿色的 Summarize 。
![](https://img.haomeiwen.com/i64542/e5a38f29abf8215b.jpg)
我们感兴趣的是最低录取分数,所以可以从中选择 Minimum of 。
![](https://img.haomeiwen.com/i64542/163a18eca4cbb9f2.jpg)
然后选择 GPA 作为最小值选择列。
![](https://img.haomeiwen.com/i64542/9b5b5bb8c30e1484.jpg)
还没完。因为我们是需要按照学校来分别计算的。所以在 by 后面选择 cName 。
![](https://img.haomeiwen.com/i64542/d07d0a705503affe.jpg)
通过简单的点选,你现在已经有了所有需要设置的信息。
![](https://img.haomeiwen.com/i64542/195ac60255ff336c.jpg)
好,我们执行吧。选择 Visualize 。
![](https://img.haomeiwen.com/i64542/ec580380488b05d1.jpg)
从这张图里,我们可以看到,Berkeley 录取学生的 GPA 线最高。 Cornell 和 Stanford 并列最低。
由此看来,名校看重的,绝不仅仅是 GPA 成绩啊。
是吗?
这个作为思考题,欢迎你把自己的答案写在留言区里面和大家交流。
小结
本文我带你用一个极简的数据库样例,尝试了不写任何一句 SQL 代码,对数据库进行过滤、分析、统计、可视化,以及表间关联查询。
你可能会觉得,这么简单的数据,我拿眼看心算,都比你这方法快!
没错,但是想象一下,如果你的每张表里面,数据量都多上1000倍呢?
我们要学东西,就需要掌握这种能规模化应用的技能。虽然初始学习的时候觉得有些繁琐,但是真正帮你应对大规模数据结果的时候,你就能尝到掌握它的甜头了。
祝数据分析愉快!
读过本文,如果觉得有收获,请点赞。
要读更多的文章,微信关注我的公众号“玉树芝兰”(nkwangshuyi)。别忘了加星标,以免错过新推送提示。
如果本文对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。
延伸阅读
你可能也会对以下话题感兴趣。点击链接就可以查看。
题图:Photo by National Cancer Institute on Unsplash