如何不写 SQL ,探索和分析数据库?

数据分析的门槛在降低,希望你能及时意识到。

image

需求

今天是本学期《数据库系统原理》的最后一课。学生们完成了数据分析项目,依次上台做展示。

image

看到连计算机扫盲课都没有上过的文科生,经过一个学期的学习,能够自己从网上找数据,导入关系型数据库,用 SQL 来做查询,直到以数据来回答自己感兴趣的问题,我觉得很开心。

在这个大数据时代,我们每个人的工作,都或多或少要跟数据打交道。小到记录自己的账本,大到用数据辅助企业战略决策。用好数据,可以帮助你所在的团队,和你个人增值。

有价值的数据,许多都存储在了各种数据库里面。想要使用好它们,只会用 Excel 或者 Access 是不够的。一般来说,查询它们的最好方式,是学会各种查询语言。最常见的,就是 SQL。

在著名的 Python 课程 Programming for Everybody 里面,主讲教授密歇根大学的 Chuck (Dr. Charles Severance) 认为,SQL 语言是编程语言中最简单的一种

image

但是,我们还是现实一点。

许多时候,你有分析数据的冲动,然而并非人人都有时间和意愿去学一门 SQL 课程,来完成日常工作中的数据查询、分析和可视化工作。

工具

好在,技术的发展,总是把很多原先专业人士才能做的事儿,变成大众都能做的。

例如自动挡汽车,例如手机上的相机应用,再例如我今天要给你介绍的 Metabase 。

Metabase 的 Slogan ,是这个样子的。

image

翻译过来,重点就是:

  • 所有人都能用
  • 可以容易表达你的问题
  • 使你能从数据中学习

安装

我们来尝试一下。

Metabase 这款工具,完全可以适用于团队协作,因为它提供了 Docker 镜像、AWS 和 Heroku 等方便的云端使用方式。

image

为了介绍的简单与方便,这里我只给你介绍一下单机版的安装。其余的应用形式,你可以学习本文之后,自己继续挖掘。

因为我自己使用的是 macOS ,所以这里选择 Mac 下面编译好的安装文件就行。

image

如果你使用的是其他系统,例如 Linux 或者 Windows ,安装也不麻烦。只需要点击“其他平台”按钮,下载一个 jar 类型文件。只要你在系统里面安装好 Java 运行环境,就可以直接双击该文件运行了。

image

这里以我电脑上的 macOS 系统为例。打开下载的 dmg 文件后,把可执行文件拖入到“应用”文件夹,就可以了。

image

第一次运行的时候,可能需要一些时间初始化。

image

当出现以下界面的时候,就意味着准备就绪了。

image

请你点击上图里面的蓝色按钮,开始设置。

我们需要输入一些基本注册信息。

image

之后,选择我们需要连接的数据库。


image

注意,这里有很多选项可以选择。这些选项,基本上涵盖了市面上常见的主流数据库类型。

image

为了方便起见,这里我们使用“麻雀虽小五脏俱全”的 SQLite 数据库。其他类型的数据库,你可以稍后自己尝试。

我用的样例,是 Stanford 数据库开放课程使用的 colleges.db 。我自己上课的时候,一直用它作为基础样例演示给学生。

image

设置完毕之后,下面需要注意,有个数据统计选项。 Metabase 是在询问你,是否允许把你的使用行为统计信息发给它,帮助改进。

image

如果你乐于分享,可以保持原先设定。若对自己的隐私比较注重,不用纠结了,可以关闭该选项。

image

到这里,安装和设置就算完成了。

浏览

下面我们看看有哪些数据表可以查看。

这个数据库里面包含了3张表格,分别是:

  • Student 学生信息
  • Apply 申请信息
  • College 招生学校信息
image

我们选择其中的学生表格。

image

Metabase 默认给了我们一些基本的描述性统计结果。

例如最重要的,是一张表格到底有多少行。这里样例 Student 表里,一共有12个学生的记录。

还没完,往下翻, Metabase 还为我们自动生成了一些其他统计结果。

首先是学生的学号分布。

image

当然,由于学号无非是个独特数字而已,所以这个统计没有什么用处。

但下面这张,就不一样了。

image

这是学生的 GPA 分布,可见,大部分学生的成绩高于 3.6 分。数据集不是个均匀或者正态分布。

image

上面这张图,反映了学生来自的高中学校大小。看得出来,大部分学生还是来自于学生人数较多的学校。来自小而精的高中学生人数,相对较少。

image

后面这张图,统计了学生姓名。有意思的是,你可以清楚看到,有重名的学生。

如果你不满足于只看这些统计信息,而希望查看原始数据。那么可以点击“Browse Data” 按钮,选择 college 数据库。

image

然后选择其中的 Student 表格,就能看到全部学生记录信息。

image

分析

如果我们只关注其中一部分学生的情况,可以选择上方紫色的“Filter”(过滤)按钮。

image

这里,所有的条件,都可以通过选择和输入数值来完成,不需要编程。我们选择过滤结果只保留 GPA 大于 3.5 的学生。

image

上图左侧就是我们想看的结果了。

但是我们会觉得,“一幅图胜似千言万语”。

怎么办呢?我们选择右下方,以 GPA 作为分组依据,然后点击左下方的 Visualization (可视化)按钮。

image

可见,在成绩大于3.5的学生里面,有4个是3.9分的成绩。这部分学生里面,学霸占的比例不小啊。

image

我们还可以换一种分组方式,这里我们使用高中学校人数作为分组依据。然后再次进行可视化。

image

于是你可以看到,GPA 3.5 分以上的学生,来自于人数规模1000的高中最多。

点击可视化按钮,我们可以选择不同的图形来表示。

这里我们选择饼图。


image

你觉得在这个问题里,柱状图和饼图,哪个更适合描述咱们的过滤分析结果呢?

地图

下面我们来看看,如何对数据进行地理信息可视化。也就是,画个地图出来。

这里,我们选用的,是其中 College 这张表格。

这张表格里面,包含以下信息。

image

我们打算看看,不同州大学的录取人数。做法很简单。还是点击 Visualization 。

image

选择图形选项最右下方的“地图”(Map)。

image

修改 Metric field 为 Enrollment 。然后 Region Field 为 State (州)。

于是你就能看见下面这样的地图了。

image

有意思的是,Metabase 对于州的简写方式也能正确识别,并且把它们标记在地图上。而且根据汇总招生人数的多寡,还自动选择了不同深浅的颜色。

关联

下面我们来看看更实用的分析手段——关联查询。

从一张表里,我们已经可以分析出不少东西了。但是更多情况下,我们希望采用多张表格联合在一起,从而能从中挖掘出洞见(Insights)。

例如这里我给你提一个问题:

不同大学录取最低 GPA 是多少?

这个问题,你若是只用一张表,是无非回答的。

因为 Apply 表里面虽然有录取决策信息,但是不包含 GPA;

Student 表里面虽然包括了 GPA,但你不知道学生报了哪所学校,以及是否被录取了。

让我们点击上方菜单栏里面的“问问题”(Ask a question)按钮,然后从下图中选择“定制问题”(Custom Question)。

image

然后,你需要选择数据库。

image

还得选择一个初始的表格。

image

我们选择 Student 表。


image

然后选择 Join data (关联数据)。


image

这里我们需要选择 Apply 表格。


image

然后会让我们选择用哪个列进行关联。毕竟,如果我们把张三的学生信息关联到李四的录取信息记录上,是没有意义的。


image

我们观察一下,发现在 Student 和 Apply 中,都出现了学生的 ID (sID),这是学生的唯一标识。就用它好了。
image

下面我们设置一下过滤条件。显然,既然考虑录取分数,那么就得找出那些被录取的人。

于是我们在 Filter 一栏里面点击。

image

选择 Apply 表格。

image

然后从中选择 Decision (录取决策)。

image

因为这里只有两种取值选择。所以我们可以选择 Y (录取)。

image

然后我们就可以根据学校来查看最低录取分数了。

这里我们填写绿色的 Summarize 。

image

我们感兴趣的是最低录取分数,所以可以从中选择 Minimum of 。

image

然后选择 GPA 作为最小值选择列。

image

还没完。因为我们是需要按照学校来分别计算的。所以在 by 后面选择 cName 。

image

通过简单的点选,你现在已经有了所有需要设置的信息。

image

好,我们执行吧。选择 Visualize 。

image

从这张图里,我们可以看到,Berkeley 录取学生的 GPA 线最高。 Cornell 和 Stanford 并列最低。

由此看来,名校看重的,绝不仅仅是 GPA 成绩啊。

是吗?

这个作为思考题,欢迎你把自己的答案写在留言区里面和大家交流。

小结

本文我带你用一个极简的数据库样例,尝试了不写任何一句 SQL 代码,对数据库进行过滤、分析、统计、可视化,以及表间关联查询。

你可能会觉得,这么简单的数据,我拿眼看心算,都比你这方法快!

没错,但是想象一下,如果你的每张表里面,数据量都多上1000倍呢?

我们要学东西,就需要掌握这种能规模化应用的技能。虽然初始学习的时候觉得有些繁琐,但是真正帮你应对大规模数据结果的时候,你就能尝到掌握它的甜头了。

祝数据分析愉快!

读过本文,如果觉得有收获,请点赞

要读更多的文章,微信关注我的公众号“玉树芝兰”(nkwangshuyi)。别忘了加星标,以免错过新推送提示。

如果本文对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。

延伸阅读

你可能也会对以下话题感兴趣。点击链接就可以查看。

题图:Photo by National Cancer Institute on Unsplash

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,117评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,963评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,897评论 0 240
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,805评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,208评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,535评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,797评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,493评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,215评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,477评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,988评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,325评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,971评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,807评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,544评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,455评论 2 266

推荐阅读更多精彩内容