跳至主要内容

在 SQL 中执行 Python/R 的教程

了解如何在 SQL 中执行 Python 和 R,为您的数据库解锁强大的机器学习新可能性。
· 14分钟 阅读

使用 AI 探索

目录

Introduction

Python 和 R 是数据科学家、数据工程师与机器学习工程师广泛采用的编程语言。能够将 Python 代码作为 SQL 脚本运行,为数据操作带来无尽可能,包括在处理海量数据时启用库内机器学习功能。用于开展机器学习实验的常用工具是 VS Code 或 Notebook 等交互式集成开发环境(IDE)。然而,当数据规模非常大,或需要将 ML 模型投入生产时,这些工具可能会带来限制。业界一直迫切需要在数据所在之处进行编程与训练模型的能力;在本教程中,您将了解几种实现这一目标的方法。

Use-Case: Training Machine Learning Models In-Database

现今许多数据库都自带机器学习服务(见下一节)。这意味着您无需另行采购数据科学平台,就能利用库内机器学习能力在数据库中训练并部署模型。一个典型的机器学习工作流如下所示:

Typical Machine Learning Workflow

当您在数据库中训练机器学习模型时,不需要独立的 ETL 流程,因为数据已在数据库中。这能节省大量时间。对于后续的模型构建与部署等步骤,您也无需迁移到任何外部机器学习平台,因为您将使用库内能力来训练并部署 ML 解决方案。根据 Oracle Big Data Blog,这样做有三大好处:

整体流程更简化

仅仅为了把数据移动到算法所在的另一个平台,往往就需要数小时甚至数天。尽管这一过程会引入诸如潜在数据丢失等复杂性,但对大多数公司而言,这仍是常态。

节省时间与成本

将算法移至数据库比把数据移向算法更合逻辑。因此,将机器学习与数据库配套不仅更简单,也更高效。您可以节省时间与大量精力,最终通过降本对利润产生积极影响。

更快获得结果(价值)

事实是,尽管构建机器学习模型、训练、获取并分析结果需要投入大量时间和精力,但业务通常只有在模型部署到生产环境、从而组织内负责的部门(财务、人力、供应链、市场、销售等)能够使用结果时,才会真正关注机器学习。

由于将模型部署并集成到商业智能(BI)看板、呼叫中心、ATM、网站和移动设备等应用中对 IT 而言可能是巨大挑战,故而运营化的难易程度差别很大。

如果您的模型始终位于数据库中,那些复杂的部署工作量会大幅减少。流程更容易,结果也能更快获得。

Databases Supporting In-Database Machine Learning

Microsoft SQL Server

Microsoft SQL Server 机器学习服务在 SQL Server 关系型数据库管理系统(RDBMS)中支持 R、Python、Java、PREDICT T-SQL 命令以及 rx_Predict 存储过程,并在 SQL Server 大数据群集(Big Data Clusters)中支持 SparkML。在 R 与 Python 语言中,Microsoft 提供了多种用于机器学习的包与库。您可以将训练后的模型存储在数据库中或外部。Azure SQL 托管实例已预览支持 Python 和 R 的机器学习服务。了解更多。

Amazon Redshift

Amazon Redshift 是一项托管的、PB 级数据仓库服务,旨在让您使用现有的商业智能工具,轻松且具成本效益地分析所有数据。它针对从数百 GB 到 PB 及以上的数据集进行了优化,年成本低于每 TB 1,000 美元。了解更多。

Oracle Database

Oracle Cloud Infrastructure(OCI)Data Science 是一个托管的无服务器平台,供数据科学团队基于 Oracle 云基础设施(包括 Oracle Autonomous Database 和 Oracle Autonomous Data Warehouse)构建、训练和管理机器学习模型。它包含以 Python 为中心的开源社区工具、库与包,以及支持预测模型全生命周期的 Oracle Accelerated Data Science(ADS)库。了解更多。

Google Cloud BigQuery

BigQuery 是 Google Cloud 的托管 PB 级数据仓库,可让您几乎实时地对海量数据进行分析。BigQuery ML 允许您使用 SQL 查询在 BigQuery 中创建并执行机器学习模型。BigQuery ML 支持用于预测的线性回归;用于分类的二元与多类逻辑回归;用于数据分群的 K-means 聚类;用于构建商品推荐系统的矩阵分解;以及用于执行时间序列预测的时间序列模型。了解更多。

IBM Db2 Warehouse

IBM Db2 Warehouse on Cloud 是一项托管的公有云服务。您也可以在本地自有硬件或私有云中部署 IBM Db2 Warehouse。作为数据仓库,它包含内存数据处理与面向联机分析处理(OLAP)的列式表等特性。其 Netezza 技术提供了一套稳健的分析功能,旨在高效地将查询“带到”数据所在之处。了解更多。

BlazingSQL

BlazingSQL 是一款基于 RAPIDS 生态的 GPU 加速 SQL 引擎,既有开源项目也提供付费服务。RAPIDS 使用 CUDA,并基于 Apache Arrow 列式内存格式,是由英伟达孵化的一套开源软件库与 API。RAPIDS 的组成部分 CuDF 是一个类 Pandas 的 GPU DataFrame 库,用于加载、连接、聚合、筛选以及其他数据处理。了解更多。

Microsoft SQL Server Machine Learning Services

机器学习服务是 SQL Server 的一项功能,使您能够将 Python 和 R 脚本与关系数据一起运行。您可以使用开源包与框架,以及 Microsoft 的 Python 和 R 包,来进行预测分析与机器学习。脚本在数据库内执行,无需将数据移出 SQL Server 或通过网络传输。本文介绍 SQL Server 机器学习服务的基础知识及上手方法。

SQL Server 机器学习服务允许您在数据库内执行 Python 与 R 脚本。您可以用它来进行数据准备与清洗、特征工程,以及在数据库内训练、评估与部署机器学习模型。该功能在数据所在之处运行脚本,省去了将数据通过网络传输到其他服务器的步骤。

支持的 Python 与 R 版本

截至目前,SQL 机器学习服务支持以下 Python 与 R 版本。

默认安装的 Python 与 R 库

您可以使用任意喜欢的开源包与框架,但以下 Python 与 R 包为默认安装:

PyCaret: An Open-Source, Low-Code ML Library

PyCaret 是一款开源的低代码 Python 机器学习库,可自动化机器学习工作流。它是一款端到端的机器学习与模型管理工具,能成倍加速实验周期并提升生产力。

与其他开源机器学习库相比,PyCaret 是一种低代码替代方案,常可用寥寥数行替代上百行代码,使实验速度与效率呈指数级提升。PyCaret 本质上是多个机器学习库与框架的 Python 封装,例如 scikit-learn、XGBoost、LightGBM、CatBoost、spaCy、Optuna、Hyperopt、Ray 等。

PyCaret 的设计与简洁性灵感源自“公民数据科学家”的新兴角色,这一术语最早由 Gartner 提出。公民数据科学家是能够完成此前需更深技术专长才能完成的简单到中等复杂分析任务的资深业务用户。访问此链接了解更多 PyCaret 信息。

接下来,我们将安装 Microsoft SQL Server 并启用 SQL 机器学习服务。然后启用 Python 环境、安装 PyCaret(ML 库)并开始模型训练。一起看看如何操作。

End-to-End Demo of Training ML Models in SQL

Download and install SQL Server and Microsoft SSMS

Microsoft SQL Server 是 Microsoft 的关系型数据库管理系统。作为数据库服务器,它的主要功能是按不同应用的请求存储与检索数据。在本教程中,我们将使用 SQL Server 2019 Developer,通过 PyCaret 训练一个无监督机器学习模型。

如果您之前使用过 SQL Server,很可能已经完成安装并能访问数据库。若尚未安装,请点击此处下载 SQL Server 2019 Developer 版本。

点击 Developer 版本下方的“Download now”,并打开安装程序。选择“Custom”安装类型。


选择“新建 SQL Server 独立安装(New SQL Server stand-alone installation)”。


在“Instance Features”选项中,选择“Machine Learning Services and Language Extensions”和“Machine Learning Server”下的“Python”等功能。

成功安装 SQL Server 后,我们需要配合一个集成开发环境(IDE)。可选项很多;本教程中我将使用Microsoft SQL Server Management Studio。下载安装程序并按指引操作。安装 SSMS 十分简单。

Create a new database and import CSV

安装好 SQL Server 与 SSMS 后,我们需要创建一个新数据库并导入 CSV 文件以便使用。在对象资源管理器面板中,右键单击 Databases,选择“New Database”。输入数据库名称及其他信息。这可能需要几分钟。

数据库创建成功后,导入一个我们将在后续步骤中使用的 CSV 文件。您可以在本地下载示例文件,然后按指引操作。

右键单击“Tables” → New → Table。您可以随意命名。本例中,我将该表命名为“jewelry”。

表创建好后,我们可以填充内容。将 CSV 文件导入该表。右键单击数据库并选择 Tasks -> Import Data

在 Data Source 中选择“Flat File Source”,然后使用“Browse”按钮选择 CSV 文件。在点击 Next 前,花点时间配置数据导入设置。

点击 Next,输入数据库详情(服务器名、用户名和密码),并按照后续界面指引操作。最后,点击 Finish 完成导入。

现在,我们已经有了名为“jewelry”的表,且数据已导入。

Configure Python Environment

在开始于 SQL 中训练机器学习模型之前,我们需要在 SQL 中配置 Python 脚本。我们将通过系统存储过程 sp_execute_external_script 在 SQL Server“内部”运行 Python。首先,点击“New Query”,执行以下代码以启用远程脚本执行所需的该过程:

EXEC sp_configure ‘external scripts enabled’, 1

RECONFIGURE WITH OVERRIDE

在继续之前请重启 SQL Server。

现在,设置语言并检查安装路径。借助 Microsoft SQL 机器学习服务,您可以选择 R 或 Python。在本例中,我们将使用 Python,更具体地说是 PyCaret(一个用于机器学习的 Python 库),在“jewelry”数据集上训练无监督聚类模型。

EXECUTE sp_execute_external_script

@language =N’Python’,

@script=N’import sys; print(“\n”.join(sys.path))’

在开始训练模型前的最后一步是安装 PyCaret 库。要安装 PyCaret 包,请打开命令提示符并转到 SQL Server 安装的 Python 包所在位置(见上方路径)。在命令提示符中运行以下代码。

pip.exe install pycaret

安装可能需要 10–15 分钟。完成后将类似如下:

现在,回到 Microsoft SSMS。

Train an unsupervised clustering model

聚类是一种将具有相似特征的数据点分组的机器学习技术。这些分组有助于探索数据、识别模式并分析数据子集。常见的业务用例包括:

  • 为市场营销进行客户分群。
  • 分析客户购买行为以制定促销与折扣。
  • 识别如 COVID-19 等疫情暴发中的地理聚类。

每位客户有四个数据点,如下所示:


我们的目标是在该数据集上训练 KMeans 聚类模型,并创建一个名为“Cluster”的新列,表示彼此归属同一组的客户群。

EXECUTE sp_execute_external_script

@language = N’Python’,

@script = N’dataset = InputDataSet

import pycaret.clustering as pc

dataset = pc.get_clusters(data = dataset, num_clusters=4)

OutputDataSet = dataset’,

@input_data_1 = N’SELECT [Age], [Income], [SpendingScore], [Savings] FROM [jewellery]’

WITH RESULT SETS(([Age] INT, [Income] INT, [SpendingScore] FLOAT, [Savings] FLOAT, [Cluster] varchar(15)));

输出:

请注意,这有多么简单。仅用一行代码 `pc.get_clusters(...)`,我们就完成了数据预处理、训练无监督的 KMeans 模型,并使用训练好的模型生成聚类标签——且全程无需离开 SQL Server 环境。与聚类类似,PyCaret 还支持使用 `pc.get_anomaly` 魔法命令进行无监督异常检测。您也可以训练有监督的机器学习模型(分类或回归)、将模型存储在 SQL 过程里,并在后续用于推理。以上全部都可以在数据库中完成。

Conclusion

在数据库中进行机器学习对您的业务意味着什么?这意味着您可以减少所需步骤,更高效、更快速、且更易于运营化地开展机器学习。在数据库中训练机器学习模型可最大限度地减少数据移动,从而节省时间与成本。不过,这并非灵丹妙药。是否采用,始终取决于具体用例。希望本教程能为您在企业环境中开展机器学习带来新的思路。

如果您想进一步了解如何将 Python 与 SQL 结合使用,以提升数据分析能力与效率,建议学习 Introduction to Databases in Python 课程。在该课程中,您将学习在 Python 中使用 SQL 的基础知识。这会很有帮助,因为数据库无处不在,而数据科学家、分析师和工程师必须经常与之交互。Python 的 SQL 工具包 SQLAlchemy 提供了一种易上手、直观的方式来查询、构建并写入 SQLite、MySQL 和 PostgreSQL 等关键数据库。

主题