利用 SQL 进行数据分析初学者教程 - ep1

由 Tomi Mester 写于2017年5月9日
本文转载自https://data36.com/sql-for-data-analysis-tutorial-beginners/

如果你想成数据分析师或是数据科学家,那么 SQL 是必须的。在过去的几年中,我已经与许多公司有线业务合作 - 从 5 人创业公司到 5000 多名员工跨国公司,并没有看到一家不会以某种方式使用SQL进行数据分析(以及更多的事情)的公司。

SQL简单并且容易理解。因而,不只是工程师、开发者、数据分析师或数据科学家可以使用它,而是任何愿意花费几天来学习和练习它的人。

我已经创建了这个 SQL 系列,成为有志的数据分析师和数据科学家的最实用和多动手的 SQL 教程。如果你从没有接触过编码、编程、查询,它将从头开始,这并不会是一个问题!

让我们开始吧!

select

注意:因为这是一个实用教程,我鼓励你和我一起编码。如果你这样做,你将需要一个数据服务器来练习。所以我建议你先通过阅读这篇文章

利用SQL进行数据分析?这是什么?为什么好呢?

SQL代表『结构化查询语言』。
但是我喜欢描述它为「加强版的 Excel」。下面是同一份数据在 Excel 和 SQL:

Excel&sql

如你所见,SQL 和 Excel 十分相似。它们用具有行和列的二维列表展示数据。两者都非常结构化,非常透明。

不过也有差异。作为初学者,你应该知道两件关于 SQL 的重要事情:

1.第一是性能。虽然 Excel 在小数据集中表现很棒,但是当你使用不同的公式处理 100 k+ 行的文件,它变得十分缓慢和低效。在 SQL 中,甚至超过 10 M+ 行的文件可以很快的处理。(例如,在接下来的利用 SQL进行数据分析文章中,我们将使用一个 7 M+ 行的数据集。)

2.第二是怎样访问你的数据。Excel 主要是图形用户界面(也成为 GUI)。你可以滚动、敲入公式、用光标选择你的范围等等,非常方便。在 SQL 中,你没有这样的界面,你必须使用称为『SQL 查询』来代替。看下面的gif:

excel

<center>在 Excel 中求和</center >

sql

<center>在 SQL 中求和</center >

因为第一次看到这个,可能感觉到麻烦。但是相信我,一旦你了解 SQL 基础知识,你会发现它比 Excel 更加清晰、更有效率。只提两个有点:在 SQL 中,连接表比 Excel 更简单。同样,使用 SQL 自动化和重复使用脚本也将会变得更加方便。

当你使用 SQL 进行数据分析,你将会使用它(最有可能)进行简单任务:聚合事情、连接数据集、使用简单的统计和数学方法。但是,你可以比以前更有效率执行这些任务和更大的数据集。

Python,R 和 bash怎么样?

如果你已经完成了我之前的 bash 教程 或者你已经参加一些我的在线直播,你可能会问:SQL 比 Python,R 或者 bash 好还是坏?答案是...好吧,这个问题没有明确答案!

一旦你开始在实际生活的数据项目中应用这些语言,你将看到 Python 和 R 在某些方面是表现好的,而 SQL 在其他方面表现好。主要是语法、功能、性能不同...但是,我现在不想进入该主题,因为:

a)我承诺一个使用教程,其主题有点理论(甚至有点哲学)。
    b)它还有点先进的东西。
    c)在这个水平上,你完全不需要担心它的性能,并且你有可能得到资深数据科学家或者数据工程师的帮助。

注意:如果你真的很好奇,我给你~1小时在这里比较 Python,R,SQL 和 bash。

但是现在,让我们试试吧!

STEP 0 - 安装你自己的 SQL 环境来练习!

注意:如果你已经有自己的 SQL 环境,你可以跳到<u>STEP-获得数据!</u>

首先,请仔细阅读这篇文章。它是关于如何一步一步设置你自己的数据服务和安装 bash,Python,R 和 SQL 的教程。

注意:在我的『利用 SQL 进行数据分析』文章中,我将使用 postgreSQL!还有其他类型的 SQL 语言(例如,另一个众所周知的开源语言 mySQL)。好消息是,所有的 SQL 语言都非常相似 -- 如果你学习 postgreSQL,则需要几个小时(甚至几分钟)才能适应另一个。我选择了 postgreSQL,因为它很受欢迎(许多在线企业都在使用它),同时它被称为最先进的开源 SQL 语言。

如果你通过上述链接的文章,请仔细检查,如果你有以下3件事情:

1.具有终端(或 iTerm)访问权限的数据服务器。
  2.PostgreSQL 安装在你的数据服务器上。
  3.你的计算机上的Pgadmin4(或SQL Workbench)。

如果缺少某些内容,请再次阅读:安装 bash,Python,R 和 SQL!

注意:作为一个 SQL 查询工具,相比于 pgadmin4,我更喜欢 SQL Workbench,但这是一种品味的问题。在我的利用 SQL 进行数据分析教程中,我将使用 SQL Workbench(以下是有关如何在计算机上安装它的教程),但你可以随意使用 pgadmin4。这不会有什么区别!

STEP 1 – 通过命令行登录你的 SQL 数据库!

太好了!你将在一分钟内编写你的第一个 SQL 查询!首先从命令行访问你的 SQL 数据库!你已经做了一次,我们将重复这个过程:

1.打开终端(或 iTerm)。
  2.ssh到你的数据服务器
  在我的环境下,我输入:
  ssh tomi@[my_ip_adress]
  

t1

  3.一旦我登录服务器,我想访问我的 postgreSQL 数据库。因为我已经访问了我的用户,我只需要键入这个命令:
  psql -U tomi -d postgres- » psql 是命令本身以及 -U 指定你的用户名(我的为「tomi」),以及 -d 指定你的数据库的名称(我的是 postgres 同样适用于你)。你的提示应改为:
postgres=>
  
t2

  完成!你可以完全访问你的 SQL 数据库!
  4.作为测试,键入:
  \dt
  这会列出你所有的数据表。到目前为止,你只有一个数据表,但是这将会马上改变!
  
t3

再次提醒!如果缺少某些东西或者不能运行,请再次阅读:安装 bash,Python,R 和 SQL!

STEP 2 - 获得数据!

在本教程中,我们将使用一个非常小的数据集,称为 zoo。
您可以从这里以原始 .tsv 格式下载,你可以在 Excel 中操作它。如果您已经完成了bash 教程,或者在bash /command line

但是,继续使用SQL:
1)创建一个表,我们可以向表中载入数据。在我的后续教程中,我将详细解释这里发生了什么,但现在,你只需将这几行代码复制粘贴到终端中:

CREATE TABLE zoo (  
    animal varchar(10),  
    uniq_id integer PRIMARY KEY,  
    water_need integer  
);  

t4

2)仔细检查表格是否已创建:
\dt
我们有新的数据表:zoo!
t5

3)载入数据!
再次说明:我稍后会解释,但是现在,只是复制粘贴这个 SQL 查询:

INSERT INTO zoo (animal,uniq_id,water_need) VALUES  
   ('elephant',1001,500),  
   ('elephant',1002,600),  
   ('elephant',1003,550),  
   ('tiger',1004,300),  
   ('tiger',1005,320),  
   ('tiger',1006,330),  
   ('tiger',1007,290),   
   ('tiger',1008,310),  
   ('zebra',1009,200),  
   ('zebra',1010,220),  
   ('zebra',1011,240),  
   ('zebra',1012,230),  
   ('zebra',1013,220),  
   ('zebra',1014,100),  
   ('zebra',1015,80),  
   ('lion',1016,420),  
   ('lion',1017,600),   
   ('lion',1018,500),   
   ('lion',1019,390),  
   ('kangaroo',1020,410),  
   ('kangaroo',1021,430),  
   ('kangaroo',1022,410);  

如果一切正常,你会得到这条提醒:
INSERT 0 22

t6

最重要的 SQL 语句:SELECT

是时候学习最基本的 SQL 语句。这是:

SELECT * FROM table_name;
每当你在数据上使用读取,过滤,转换,聚合或执行任何操作,你将会使用 SELECT。在这系列教程中,90%的内容将会显示出来,以某种方式修改单一查询。作为开始,我们从 zoo 数据表中 SELECT 任意内容。

SELECT * FROM zoo;

t7

我已经得到完整的可读格式的表。(如果要从这个视角中退出,请在键盘上按Q键。)

SELECT * FROM zoo;
我想它甚至不需要一个解释 -- 因为语法本身非常接近英语 - 但是为了以防万一:
SELECT 是主语句,它告诉 SQL 我们想从我们的数据表中读取一些东西。
* 通常是指「一切」 -- 在这种情况下,这意味着我们想选择每一列。
FROM 告诉 SQL,我们要从指定的表中读取数据。
zoo 是表的名称。如果你有更多的表,您可以将其替换为任何其他表名。
; 这是一个 SQL 特定的语法。每个查询都应该用分号关闭。如果您不小心错过了,SQL 将期望您继续查询,不会在屏幕上返回任何内容。

t8

从现在起,你将会使用这种语法。

SELECT columns

你可以用实际的列名替换 * 字符。尝试这个查询:
SELECT animal, water_need FROM zoo;

t9

(如果要从此视图中退出,请在键盘上按Q键。)

确切地说,你所期望的是:你的屏幕上列出了「animal」和「water_need」列,而不是「uniq_id」。
这样可以 SELECT 任何列。你只需要用逗号分隔指定的列名。

你也可以这样做:
SELECT animal, animal, animal FROM zoo;

t10

你会看到同一列多次...但是,因为这是没有意义的,我建议只是根本不这样做。

显示数据的前几行 -- LIMIT 从句

现在我们正在使用 22 行的数据表。在「利用 SQL 进行数据分析」系列的下一集中,我们将使用一个 7 M+ 行数据文件。这是一个很大的变化,在这种情况下,每次都在屏幕上打印所有数据是不合理的,而是获取前几行的小样本。为此,使用 LIMIT 从句 - 这是之前介绍的「基础查询」顶部的一个小「扩展」:

SELECT * FROM zoo LIMIT 10;

这将仅打印前10行。(记住它是如何在 bash 中完成的?这是 head -10 命令。)

t11

当然,你可以决定要打印多少行,并在 LIMIT 之后指定!

过滤指定行 -- WHERE从句

基于数值,你可以用 WHERE 从句选择特定的行。例如:

SELECT * FROM zoo WHERE animal = 'elephant';

t12

SELECT * FROM zoo -»这是「基础查询」
WHERE -» 这告诉 SQL 你想过滤一些东西
animal = 'elephant' -» animal 是你正在寻找给定值的列名。而 elephant 是值本身。在 SQL 中,你必须添加列名,寻找值。
; -» 永远不要忘记分号!

在利用 SQL 进行数据分析系列的下一集中,我将详细介绍如何充分利用 WHERE!现在,如果你知道这是为了过滤行,便足够了。

自我测试#1

这是一个介绍性的文章,所以这第一个任务也将是相当容易的:
从 zoo 表中选择前 3 个 zebra!
该解或多或少是本文的总结!
.
.
.
准备?
这是我的解决方案:
SELECT * FROM zoo WHERE animal = 'zebra' LIMIT 3;

t13

SQL 很容易,对吧?

还有一件事:语法...

稍后,我将向你展示一些最佳实践,以及如何保持 SQL 查询的清洁和高效,但在第一篇文章中,我仅强调两件事情:

  1. 所有的查询都应以分号(;)结尾。如果你不小心错过了,SQL 将期望您继续查询,不会在屏幕上返回任何内容。例如:
    postgres=> SELECT * FROM zoo
    postgres->
    这不是很好...这样更好:
    postgres=> SELECT * FROM zoo;
  2. 当谈到SQL关键字(SELECT,WHERE,LIMIT等),SQL 并不区分大小写。例如:
    SELECT * FROM zoo;
    工作原理如下:
    select * from zoo;表名,列名和值的区分大小写是你设置的问题。在我们当前的设置(使用postgreSQL)中,表名和列名不区分大小写,但是字段值是。例如。
    SELECT * FROM zoo WHERE animal = 'elephant'; –» WORKS
    SELECT * FROM ZOO WHERE ANIMAL = 'elephant'; –» WORKS
    SELECT * FROM ZOO WHERE ANIMAL = 'ELEPHANT'; –» DOES NOT WORK

请注意,按照惯例上大多数人使用大写 SQL 关键字(SELECT,WHERE,LIMIT等)。它有助于阅读你的代码。

结论

相当不错的学习和使用 SQL 进行数据分析!恭喜!现在你可以写你的第一个非常基本的 SQL 查询...但这只是开始!让我们继续下一集,并学习如何使用 WHERE 从句从数据集中过滤东西。

如果你不想错过下一集,并且也想获得有关即将到来的网络研讨会的信息,请订阅我的每周通讯

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

推荐阅读更多精彩内容