Path: blob/master/site/zh-cn/io/tutorials/postgresql.ipynb
25118 views
Copyright 2020 The TensorFlow IO Authors.
从 TensorFlow IO 中读取 PostgreSQL 数据库
概述
本教程介绍了如何从 PostgreSQL 数据库服务器创建 tf.data.Dataset
,以便可以将创建的 Dataset
传递给 tf.keras
进行训练或推理。
SQL 数据库是数据科学家的重要数据来源。PostgreSQL 是最流行的开源 SQL 数据库之一,在企业中广泛用于全面存储关键数据和事务数据。直接从 PostgreSQL 数据库服务器创建 Dataset
并将 Dataset
传递给 tf.keras
进行训练或推理,可以极大地简化数据流水线,并帮助数据科学家专注于构建机器学习模型。
设置和用法
安装所需的 tensorflow-io 软件包,然后重新启动运行时
安装和设置 PostgreSQL(可选)
警告:此笔记本只适合在 Google Colab 中运行。它会在系统上安装软件包,并且需要 sudo 访问。如果要在本地 Jupyter 笔记本中运行,请谨慎操作。
为了演示在 Google Colab 上的用法,您将安装 PostgreSQL 服务器。此外,还需要密码和一个空数据库。
如果您不在 Google Colab 上运行此笔记本,或者希望使用现有数据库,请跳过以下设置并前进到下一部分。
设置必要的环境变量
以下环境变量基于上一部分中的 PostgreSQL 设置。如果您使用其他设置或使用现有数据库,则应相应地更改这些设置:
在 PostgreSQL 服务器中准备数据
出于演示目的,本教程将创建一个数据库,并使用一些数据填充该数据库。本教程中使用的数据来自 UCI Machine Learning Repository 中提供的 Air Quality Data Set。
下面是 Air Quality Data Set 的一个子集的预览:
日期 | 时间 | CO(GT) | PT08.S1(CO) | NMHC(GT) | C6H6(GT) | PT08.S2(NMHC) | NOx(GT) | PT08.S3(NOx) | NO2(GT) | PT08.S4(NO2) | PT08.S5(O3) | T | RH | AH |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
10/03/2004 | 18.00.00 | 2.6 | 1360 | 150 | 11.9 | 1046 | 166 | 1056 | 113 | 1692 | 1268 | 13.6 | 48.9 | 0.7578 |
10/03/2004 | 19.00.00 | 2 | 1292 | 112 | 9.4 | 955 | 103 | 1174 | 92 | 1559 | 972 | 13.3 | 47.7 | 0.7255 |
10/03/2004 | 20.00.00 | 2.2 | 1402 | 88 | 9.0 | 939 | 131 | 1140 | 114 | 1555 | 1074 | 11.9 | 54.0 | 0.7502 |
10/03/2004 | 21.00.00 | 2.2 | 1376 | 80 | 9.2 | 948 | 172 | 1092 | 122 | 1584 | 1203 | 11.0 | 60.0 | 0.7867 |
10/03/2004 | 22.00.00 | 1.6 | 1272 | 51 | 6.5 | 836 | 131 | 1205 | 116 | 1490 | 1110 | 11.2 | 59.6 | 0.7888 |
参考文献部分提供了有关 Air Quality Data Set 和 UCI Machine Learning Repository 的更多信息。
为了帮助简化数据准备工作,我们准备了 sql 版本的 Air Quality Data Set,并将其以 AirQualityUCI.sql 形式提供。
创建表的语句如下:
用于在数据库中创建表并填充数据的完整命令如下:
从 PostgreSQL 服务器创建数据集并在 TensorFlow 中使用
从 PostgreSQL 服务器创建数据集就像调用带 query
和 endpoint
参数的 tfio.experimental.IODataset.from_sql
一样简单。query
是对表中选定列的 SQL 查询,而 endpoint
参数是地址和数据库名称:
从上面的 dataset.element_spec
输出可以看出,所创建的 Dataset
的元素是一个 python dict 对象,其中以数据库表的列名作为键。这对于应用进一步运算非常方便。例如,可以同时选择 Dataset
的 nox
和 no2
字段,并计算差值:
现在,可以将创建的 Dataset
直接传递至 tf.keras
用于训练或推理了。
参考文献
Dua, D. and Graff, C. (2019). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.
S. De Vito, E. Massera, M. Piga, L. Martinotto, G. Di Francia, On field calibration of an electronic nose for benzene estimation in an urban pollution monitoring scenario, Sensors and Actuators B: Chemical, Volume 129, Issue 2, 22 February 2008, Pages 750-757, ISSN 0925-4005