数据准备和特征工程:数据工程师必知必会技能
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 数据库中的数据

目前,常见的数据库可以分为如下两类。

●关系型数据库,如MySQL、PostgreSQL、Microsoft SQL Server、Oracle等。

●非关系型数据库,如BigTable(Google)、Cassandra、MongoDB等。

随着技术的发展,其他类型的数据库也在涌现,如键值数据库等。

MySQL是常用的关系型数据库,它有着比较悠久的历史,曾经是开源的,后来被转手到甲骨文公司,目前仅有社区版开源。尽管如此,因为种种原因,它的使用量仍然比较大。因此,下面就以它为例说明如何从关系型数据库中读取数据。

如果读者尚未在本地计算机安装此数据,可以参阅“扩展探究”中的相关内容。

作为未来的数据科学行业从业者,我们必须掌握数据库有关知识。

基础知识

从MySQL数据库中读取数据的最基本方法是使用SQL语句。下面以本地所创建的数据库为例,演示常用的查询语句。

(1)显示数据库名称。

SQL的全称为Structured Query Language,译为结构化查询语言。SQL是用于访问和处理数据库的标准计算机语言。

查询已有的数据库,其中名为books的数据库是专为本操作示例而创建的。

(2)显示某数据库中的表名称。

首先,指定要操作的数据库。

然后,显示此数据库中的表名称:

也可以使用如下SQL语句实现表名称的查询。

(3)显示数据库表的结构。

显示表结构的常用SQL语句,例如:

SQL语句中的命令不区分大小写,通常习惯用大写。

或者

(4)查询表的记录条数。

在查询数据库表的具体内容之前,先了解记录数量的大小。

查询显示mybooks表中共有6条记录。也可以分组查询。其中COUNT(1)也可以写成COUNT(*),结果一样。

关于COUNT(1)和COUNT(*)的区别,有不同解释,读者可以在网上查阅。

此处的查询结果显示,mybooks表中的记录根据字段PUB的值可以分为两组:其中一组有4条,另一组有2条。

在上述查询记录数量的SQL语句中,使用了COUNT(1),其实也可以更换为其他整数或者字段名称。

上面语句的含义是针对某个字段的记录进行查询。如果使用COUNT(1),则意味着根据主键进行记录数量查询。

(5)查询记录详情。

查询记录详情的SQL语句关键词是SELECT。下面列举几种常见的查询方法,更多的查询方法请参阅数据库的文献资料。

●查询所有记录

显示出数据库表中的所有记录的所有字段值。

●查询指定字段值

●查询结果按照指定字段值的倒序排列

●依据条件查询

查询到了字段pub的值为“phei”的所有记录。

查询到了字段id的值为2和5的记录。

查询到了字段id的值在2~5之间的所有记录。

查询到了字段id的值中含有“Python”字样的记录。

依据条件查询的方式还很多,此处不一一列举,请读者在应用的时候查阅有关资料。

除了使用SQL语句,还可以利用高级语言实现对数据库内容的读写操作。例如,Python语言针对MySQL数据库的接口模块就有多种,此处以其中一个名为PyMySQL的模块为例进行说明(官方网站:https://pymysql.readthedocs.io/en/latest/)。

首先安装此模块:

安装完毕后,用如下方式连接数据库,并读取表中的记录。

此处演示的是连接本地数据库,host也可以用于指定远程地址。

为了实现Python与MySQL数据库的连接,In[1]的代码中使用了pymysql模块,并且用①的方式实现连接,即建立了连接对象(变量mydb引用的pymysql.connect函数返回对象)。读者可以通过帮助文档查看pymysql.connect函数的各参数的具体含义。

②创建一个游标对象,后续的各种关于数据库的操作都是利用此游标对象的方法进行的。

③是一个字符串,是从数据库表中读取所有记录的SQL语句。

④使用游标对象的execute方法执行SQL语句,再用⑤得到所有的记录,为了显示出来,执行其后的循环语句。

项目案例

1.项目描述

在MySQL环境中,创建如下结构的数据库表(名字为cities)。

将1.1.1节的In[2]数据写入此数据表中。然后,用Python完成如下查询。

●查询表中的记录总数。

●只查询name和area两个字段的记录。

●查询population字段中最大和最小的记录。

●查询全部记录,并将查询结果按照area字段从大到小地排序。

2.实现过程

(1)根据要求,用SQL语句创建数据库表结构(也可以用Python完成创建数据库表结构的操作,请读者自行仿照In[1]的方式完成)。

注意,在此处使用的是“utf8”,不是“utf-8”。

(2)从CSV文档中读入数据,并写入数据库表city中。

Pandas中也提供了针对读写数据库的函数pd.read_sql()和pd.to_sql(),详细内容请扫描二维码阅读《Pandas读写文件》。

执行In[2]的代码之后,将原来CSV文件的数据插入数据库表city中。如果使用SQL语句查看此表的结果,可以进行如下操作:

(3)利用Python语言完成查询要求。

动手练习

注:以下操作可以基于本节已经创建的数据库进行,也可以自己新建数据库。

1.查询数据库表中的所有记录。

2.根据指定字段查询。

3.按照指定字段排序,并查询指定数量的记录,如倒序排列之后的前三条记录。

4.根据某个字段值查询。

5.根据某个字段值在某范围内查询。

6.根据某个字段值的字符匹配条件查询。

7.指定字段,练习带AND或者OR的多条件查询。

扩展探究

1.在本地计算机上安装MySQL数据库,并熟悉有关操作。

●安装:https://dev.mysql.com/doc/refman/8.0/en/installing.html

●SQL语句:https://www.w3schools.com/sql/

2.可以进一步了解其他关系型数据库,如PostgreSQL(网站:https://www.postgresql.org/)。

3.利用Pandas的函数,读取数据库中的记录。

再次体现了Pandas的强大功能。

建议读者在上述基础上,用Pandas的函数完成“动手练习”中的各题的操作。

4.建议读者了解非关系型数据库,如比较常用的MongoDB,其官网是https://www.mongodb.com/