查看原文
其他

数据治理 | 还在用Excel做数据分析呢?SQL它不香吗

数据seminar 数据Seminar 2022-12-31

我们将在数据治理板块中推出一系列原创推文,帮助读者搭建一个完整的社科研究数据治理软硬件体系。该板块将涉及以下几个模块:

  1. 计算机基础知识

(1)社科研究软硬件体系搭建——虚拟化技术概述与实践

  1. 编程基础

(1)数据治理 | 带你学Python之 环境搭建与基础数据类型介绍篇

(2)数据治理 | 带你学Python之控制结构与函数

(3)数据治理 | 带你学Python之面向对象编程基础

(4)本期内容:数据治理 | 还在用excel做数据分析呢?SQL它不香吗

  1. 数据采集
  2. 数据存储

(1)安装篇 数据治理 | 遇到海量数据stata卡死怎么办?这一数据处理利器要掌握

(2)管理篇 数据治理 | 多人协同处理数据担心不安全?学会这一招,轻松管理你的数据团队

(3)数据导入 数据治理 | “把大象装进冰箱的第二步”:海量微观数据如何“塞进”数据库?

  1. 数据清洗
  2. 数据实验室搭建

前言

这里是 SQL 编程语法基础系列内容,该系列共包含两部分内容(本文属于第一部分内容),该部分讲述了Excel和SQL之间的区别,和Excel中数据的操作怎么用SQL来实现。该系列后续的一部分将会主讲SQL语法为主。

引言

Excel是数据分析的必备工具,也是多数数据分析师接触的第一个工具,Excel能够解决我们对数据的基本操作,例如对数据进行记录、计算、过滤与分析等。

Excel是一个非常好用的工具,但也是有短板的,我们如果打开一个数据量很大的sheet,会发现打开的速度很慢,还时不时伴随着卡顿;Excel共享也不方便:我们想要别人也能访问和使用数据,需要将文件发送给对方才可以;Excel安全性较低:Excel作为一个办公软件,其安全性可想而知,没有太多的安全性功能。

面对这些问题,数据库能够很好为我们解决这些问题:数据库可以存放大批量的数据,一个表随随便便存个几十万是一点问题没有的,上百万,上千万也是很常见;数据库可以轻松的共享,且共享方便;数据库安全性高,有着复杂的安全机制和权限验证,也有非常完善的数据备份机制,能最大限度的保证数据的安全。

在本文首先,简单介绍了数据库的和SQL的概念,之后讲解Excel中对于数据的操作,怎么用SQL来完成,对于本文列出的5条SQL语句,读者们可以不需要完全理解,只需要大致了解其中的含义即可,我们会在该系列的第二部分详细讲解SQL语句。

Part1数据库和SQL

(一)数据库简介

简单的说,数据库(Database)就是一个存放数据的仓库,这个仓库是按照一定的数据结果来组织、存储的、我们可以通过数据库提供的多种方法来管理数据库里的数据,数据库和我们生活中存放杂物的仓库性质一样,区别只是存放的东西不同。数据库中可以存放许多不同的表,就像Excel里面能够写入不同的Sheet一样。

数据库分关系型数据库和非关系型数据库:

  • 关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织,Excel中的一个Sheet就是一张二维的表。关系型数据库中的每一个表,其实就是Excel中的每一个Sheet,关系型数据库使用方便,操作数据库的SQL语言通用(SQL是用来和数据库交流的语言,后面会讲到)。
  • 非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。非关系型数据库不提供SQL支持,学习和使用成本较高。

(二)SQL简介

人和人直接使用人类语言进行沟通,人和数据库之间则使用SQL语言进行“交流”。

SQL(Structured Query Language 结构化查询语句)是一种特定目的程序语言,用于管理关系数据库管理系统。SQL的功能包括数据插入、查询、更新和删除,数据库的创建和修改,以及数据访问控制等。SQL就像指令,每一条指令都会交给数据库管理系统,管理系统会执行对应的操作。可根据下图加深理解。

Part2从EXCEL到SQL

原始数据展示

为方便大家学习,我们准备了一份演示数据,文件名为:国民经济指标2017.xlsx,在MySQL数据库中也存放了一张一模一样的表,表名为:国民经济指标2017

下图展示了数据的前20行:

(一)数据筛选

我们可以利用Excel工具栏中的筛选选项,来对表格中的内容进行筛选:
我们在指标名称中选择<生产总值>后点击确定,然后就能够看到筛选后的结果:
筛选后的结果:
在Excel中,我们需要通过鼠标进行各种的操作,而在数据库中,我们只需要编写简单的SQL语句,就能够满足我们的筛选要求:
1. select * 
2. from 国民经济指标2017 
3. where 指标名称 = '生产总值';

SQL执行结果(文本内容):

城  市 | 指标名称 | 指标取值   | 指标单位    |
- - - + - - - - + - - - - - + - - - - - - 
杭州市 | 生产总值 | 12603.36  | 亿元        |
宁波市 | 生产总值 | 9842.06   | 亿元        |
温州市 | 生产总值 | 5411.59   | 亿元        |
嘉兴市 | 生产总值 | 4380.52   | 亿元        |
湖州市 | 生产总值 | 2476.13   | 亿元        |
绍兴市 | 生产总值 | 5078.37   | 亿元        |
金华市 | 生产总值 | 3848.62   | 亿元        |
衢州市 | 生产总值 | 1331.27   | 亿元        |
舟山市 | 生产总值 | 1219.78   | 亿元        |
台州市 | 生产总值 | 4388.22   | 亿元        |
丽水市 | 生产总值 | 1250.92   | 亿元        |

这条SQL语句很好理解,用到了三个关键词:

  • select 关键词:用来查询数据,这边的 * 指的是所有列的数据。
  • from 关键词:定义从那张表中进行查询,这边从<国民经济指标2017>这张表中查询。
  • where 关键词:用来筛选我们指定的数据,这边需要满足指标名称为<生产总值>的数据。

我们可以观察到,Excel复杂的操作,我们利用SQL一条语句就能够实现。

(具体的语法细节,我们将在下一期推文重点介绍!)

(二)数据求和

为了方便观察,我们从原来的Excel表中将指标名称为<生产总值>提取到了一个新的Sheet。

在Excel中,我们可以利用求和的公式=SUM()来对框选的数据进行求和,操作如下:

选择需要求和的项点击Enter键后,下图是求和后的值:

下面是利用SQL对表中的数据进行求和操作:

1. select sum(指标取值) 
2. from 国民经济指标2017 
3. where 指标名称 = '生产总值';

SQL执行结果(文本内容):

sum(指标取值)  |
- - - - - - - +
 51830.84     |

可以看到SQL语句中有也有sum()字样,这说明SQL的一些语法,跟Excel还是很类似的。

(三)数据排序

我们可以利用工具栏中的升序和降序,来对数据进行排序:

排序前表格示例:

排序后结果(升序):

下面我们利用SQL来进行排序order by关键词是用来排序的:

1. select * 
2. from 国民经济指标2017 
3. where 指标名称 = '生产总值' 
4. order by 指标取值;

SQL执行结果(文本内容):

城市   | 指标名称 | 指标取值   | 指标单位    |
- - - + - - - - + - - - - - + - - - - - - - 
舟山市 | 生产总值 | 1219.78   | 亿元        |
丽水市 | 生产总值 | 1250.92   | 亿元        |
衢州市 | 生产总值 | 1331.27   | 亿元        |
湖州市 | 生产总值 | 2476.13   | 亿元        |
金华市 | 生产总值 | 3848.62   | 亿元        |
嘉兴市 | 生产总值 | 4380.52   | 亿元        |
台州市 | 生产总值 | 4388.22   | 亿元        |
绍兴市 | 生产总值 | 5078.37   | 亿元        |
温州市 | 生产总值 | 5411.59   | 亿元        |
宁波市 | 生产总值 | 9842.06   | 亿元        |
杭州市 | 生产总值 |12603.36   | 亿元        |

(四)数据分组

假设我们想要求出不同指标的各项总和,在Excel中我们可以利用<数据透视表>选项进行分组,可以在<插入>栏中点击<表格和区域>并在新Sheet中创建:

<指标名称>拖入行,将<指标取值>拖入值就能看到分组后的结果:

分组求和后的结果:

SQL中的分组,使用group by关键词,并用sum函数求和:
1. select 指标名称, sum(指标取值)
2. from 国民经济指标2017 
3. group by 指标名称;

SQL执行结果(只展示前5行文本内容):

城市                 | sum(指标取值)    |
- - - - - - - - - - + - - - - - - - - -  
财政总收入            | 9799.21         |
城镇居民人均可支配收入  | 554350.00       |
出口总额              | 2826.77         |
第二产业              | 22656.38        |
第三产业              | 27199.80        |

(五)数据匹配

我们在Excel中可以使用VLOOKUP函数来对不同表进行数据匹配:

需求如下,表2是某些城市的“生产总值”数据,表1中的第三列“指标取值”,是待匹配的列,我们需要根据城市来匹配出指定的<指标取值>
匹配过程如下:

使用VLOOKUP函数需要传入4个参数:

  1. 第1个参数为待匹配数据的关键字,在表二中要根据这个“城市”列,来查找“指标名称”。
  2. 第2个参数需要选择数据表,F3:G13 表示表2中的数据
  3. 第3个参数为列序数,这里的列序数代表的是你要输出的数据在数据表的第几列,例如想要输出指标取值填2,指标单位填3
  4. 第4个参数传入匹配的规则,0代表准确匹配,1代表模糊匹配
匹配后的结果:
在SQL中,我们还是可以利用一条SQL语句来实现表的整合:
1. select table1.城市, table1.指标名称, table2.指标取值
2. from table1 
3. left join table2 on table1.城市 = table2.城市;

SQL执行结果(文本内容):

城市    | 指标名称 | 指标取值  |
- - - - + - - - - + - - - - - 
杭州市  | 生产总值 | 12603.36 |
宁波市  | 生产总值 | 9842.06  |
温州市  | 生产总值 | 5411.59  |
嘉兴市  | 生产总值 | 4380.52  |
湖州市  | 生产总值 | 2476.13  |
绍兴市  | 生产总值 | 5078.37  |
金华市  | 生产总值 | 3848.62  |
衢州市  | 生产总值 | 1331.27  |
舟山市  | 生产总值 | 1219.78  |
台州市  | 生产总值 | 4388.22  |
丽水市  | 生产总值 | 1250.92  |

  • left join 关键词:指定联结的类型,在SQL中有很多不同的联结方式,这边采用左联结。
  • on 关键词:指定对照的信息,这边根据表中的城市列进行匹配。

Part3总结

本文介绍了Excel和SQL之间的联系,可以看出SQL能够轻松的完成我们对数据的操作需求,而且SQL要比Excel处理数据方便的多也更加的灵活,下期我们将会详细介绍具体的SQL语法细节,以及更多的SQL语句用法。




星标⭐我们不迷路!
想要文章及时到,文末“在看”少不了!

点击搜索你感兴趣的内容吧


往期推荐


数据可视化 | 52个实用的数据可视化工具!

统计计量 | 值得推荐的计量经济学论文

数据资源 | 八大板块!数据公开下载渠道(下)

数据资源 | 八大板块!数据公开下载渠道(中)

数据治理 | 带你学Python之面向对象编程基础

文章推荐 | 经典永流传:美国经济评论百年经典论文20篇(可下载)






数据Seminar




这里是大数据、分析技术与学术研究的三叉路口


文 | 金航凯


    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存