Python 教程:准备数据以通过 SQL 机器学习训练线性回归模型

适用于: SQL Server 2017 (14.x) 及更高版本 Azure SQL 托管实例

此教程系列包括四个部分,在第二部分中,你将使用 Python 从数据库准备数据。 在本系列的后面部分,你将在 SQL Server 机器学习服务中或 SQL Server 2019 大数据群集上通过 Python 使用此数据训练并部署线性回归模型。

此教程系列包括四个部分,在第二部分中,你将使用 Python 从数据库准备数据。 在本系列的后面部分,你将通过 SQL Server 机器学习服务在 Python 中使用此数据定型和部署线性回归模型。

此教程系列包括四个部分,在第二部分中,你将使用 Python 从数据库准备数据。 在本系列的后面部分,你将通过 Azure SQL 托管实例机器学习服务在 Python 中使用此数据定型和部署线性回归模型。

本文将指导如何进行以下操作:

  • 将数据库中的数据加载到 pandas 数据帧中
  • 通过删除某些列,在 Python 中准备数据

第一部分中,你了解了如何还原示例数据库。

第三部分中已介绍如何在 Python 中定型线性回归机器学习模型。

第四部分中,你将了解如何将模型存储到数据库中,然后根据你在第二和第三部分中开发的 Python 脚本来创建存储过程。 存储过程将在服务器上运行,以便基于新数据进行预测。

先决条件

  • 本教程的第二部分假设你已完成第一部分且满足其必备条件。

浏览和准备数据

若要在 Python 中使用数据,需要将数据库中的数据加载到 pandas 数据帧中。

在 Azure Data Studio 中创建新的 Python 笔记本,并运行以下脚本。

下面的 Python 脚本将数据库中 dbo.rental_data 表中的数据集导入到 pandas 数据帧 df。

在连接字符串中,根据需要替换连接详细信息。 若要将 Windows 身份验证与 ODBC 连接字符串一起使用,请指定 Trusted_Connection=Yes; 而不是 UIDPWD 参数。

import pyodbc
import pandas
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

# Connection string to your SQL Server instance
conn_str = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server}; SERVER=<server>; DATABASE=TutorialDB;UID=<username>;PWD=<password>')

query_str = 'SELECT Year, Month, Day, Rentalcount, Weekday, Holiday, Snow FROM dbo.rental_data'

df = pandas.read_sql(sql=query_str, con=conn_str)
print("Data frame:", df)

可得到类似于下面的结果。

Data frame:      Year  Month  Day  Rentalcount  WeekDay  Holiday  Snow
0    2014      1   20          445        2        1     0
1    2014      2   13           40        5        0     0
2    2013      3   10          456        1        0     0
3    2014      3   31           38        2        0     0
4    2014      4   24           23        5        0     0
..    ...    ...  ...          ...      ...      ...   ...
448  2013      2   19           57        3        0     1
449  2015      3   18           26        4        0     0
450  2015      3   24           29        3        0     1
451  2014      3   26           50        4        0     1
452  2015     12    6          377        1        0     1

[453 rows x 7 columns]

筛选数据帧中的列以移除我们不想在训练中使用的列。 Rentalcount 不应包含在内,因为它是预测的目标。

columns = df.columns.tolist()
columns = [c for c in columns if c not in ["Year", "Rentalcount"]]

print("Training set:", df[columns])

请注意训练集有权访问的数据:

Training set:      Month  Day  Weekday  Holiday  Snow
1        2   13        5        0     0
3        3   31        2        0     0
7        3    8        7        0     0
15       3    4        2        0     1
22       1   18        1        0     0
..     ...  ...      ...      ...   ...
416      4   13        1        0     1
421      1   21        3        0     1
438      2   19        4        0     1
441      2    3        3        0     1
447      1    4        6        0     1

[91 rows x 5 columns]

后续步骤

在本教程系列的第二部分中,你已完成这些步骤:

  • 将数据库中的数据加载到 pandas 数据帧中
  • 通过删除某些列,在 Python 中准备数据

若要对使用 TutorialDB 数据库中数据的机器学习模型进行训练,请按照本教程系列的第三部分进行操作: