Краткое руководство. Структуры данных и объекты с помощью Python с машинным обучением SQL
Область применения: SQL Server 2017 (14.x) и более поздних версий Управляемый экземпляр SQL Azure
В этом кратком руководстве вы узнаете, как использовать структуры и типы данных при применении Python в Службах машинного обучения SQL Server, Службах машинного обучения управляемого экземпляра Azure SQL или Кластерах больших данных. Вы узнаете о том, как перемещать данные между Python и SQL Server, и о типичных проблемах, возникающих при этом.
В машинном обучении SQL в качестве основы используется пакет Python pandas, который отлично подходит для работы с табличными данными. Однако нельзя просто передать скалярное значение из Python в вашу базу данных и ждать, что это просто сработает. В этом кратком руководстве вы вспомните некоторые базовые определения типов данных, чтобы подготовиться к решению дополнительных проблем, с которыми вы можете столкнуться при передаче табличных данных между Python и базой данных.
Основные понятия, которые необходимо знать:
- Кадр данных — это таблица с несколькими столбцами.
- Кадр данных с одним столбцом — объект в виде списка, называемый рядом.
- Одно значение кадра данных называется ячейкой, доступ к ней осуществляется по индексу.
Как можно предоставить единственный результат вычисления в виде кадра данных, если для объекта data.frame требуется табличная структура? Одним из ответов является представление одного скалярного значения в виде ряда, который легко преобразовать в кадр данных.
Примечание.
При возврате дат Python в SQL использует тип DATETIME, который имеет ограниченный диапазон дат от 1753-01-01 (-53690) до 9999-12-31 (2958463).
Необходимые компоненты
Для работы с этим кратким руководством необходимо следующее.
База данных SQL на одной из следующих платформ:
- Службы машинного обучения SQL Server. Сведения об установке см. в руководстве по установке для Windows или руководстве по установке для Linux.
- Кластеры больших данных SQL Server. Применение служб машинного обучения в кластерах больших данных SQL Server.
- Службы машинного обучения в Управляемом экземпляре SQL Azure. Дополнительные сведения см. в статье Общие сведения о службах машинного обучения в управляемом экземпляре SQL Azure.
Средство для выполнения SQL-запросов, содержащих сценарии Python. В этом кратком руководстве используется Azure Data Studio.
Скалярное значение в виде ряда
В этом примере выполняется некоторые простые математические операции и преобразуется скаляр в ряд.
Для ряда требуется индекс, который можно назначить вручную, как показано здесь, или программным способом.
EXECUTE sp_execute_external_script @language = N'Python' , @script = N' a = 1 b = 2 c = a/b print(c) s = pandas.Series(c, index =["simple math example 1"]) print(s) '
Поскольку ряд не был преобразован в объект data.frame, значения возвращаются в окне сообщения, но можно увидеть, что результаты больше напоминают табличный формат.
Результаты
STDOUT message(s) from external script: 0.5 simple math example 1 0.5 dtype: float64
Чтобы увеличить длину ряда, можно добавить новые значения с использованием массива.
EXECUTE sp_execute_external_script @language = N'Python' , @script = N' a = 1 b = 2 c = a/b d = a*b s = pandas.Series([c,d]) print(s) '
Если индекс не указан, создается индекс со значениями, начиная с 0 и заканчивая длиной массива.
Результаты
STDOUT message(s) from external script: 0 0.5 1 2.0 dtype: float64
Если увеличить число индексных значений, но не добавить новые данные, значения данных будут повторяться для заполнения ряда.
EXECUTE sp_execute_external_script @language = N'Python' , @script = N' a = 1 b = 2 c = a/b s = pandas.Series(c, index =["simple math example 1", "simple math example 2"]) print(s) '
Результаты
STDOUT message(s) from external script: 0.5 simple math example 1 0.5 simple math example 2 0.5 dtype: float64
Преобразование рядя в кадр данных
После преобразования скалярных математических результатов в табличную структуру все еще необходимо преобразовать их в формат, который может обрабатывать машинное обучение SQL.
Чтобы преобразовать ряд в объект data.frame, вызовите метод DataFrame библиотеки pandas.
EXECUTE sp_execute_external_script @language = N'Python' , @script = N' import pandas as pd a = 1 b = 2 c = a/b d = a*b s = pandas.Series([c,d]) print(s) df = pd.DataFrame(s) OutputDataSet = df ' WITH RESULT SETS((ResultValue FLOAT))
Результат показан ниже. Даже если вы используете индекс для получения конкретных значений из data.frame, значения индекса не являются частью выходных данных.
Результаты
ResultValue 0,5 2
Вывод данных в data.frame
Теперь мы выведем определенные значения из двух рядов математических результатов в объект data.frame. Первый имеет индекс с последовательными значениями, созданными Python. Во втором используется произвольный индекс строковых значений.
В следующем примере возвращается значение из ряда с помощью целочисленного индекса.
EXECUTE sp_execute_external_script @language = N'Python' , @script = N' import pandas as pd a = 1 b = 2 c = a/b d = a*b s = pandas.Series([c,d]) print(s) df = pd.DataFrame(s, index=[1]) OutputDataSet = df ' WITH RESULT SETS((ResultValue FLOAT))
Результаты
ResultValue 2.0 Помните, что автоматически созданный индекс начинается с 0. Попробуйте использовать значение индекса вне допустимого диапазона и посмотрите, что произойдет.
Теперь получим одно значение из другого кадра данных, используя строковый индекс.
EXECUTE sp_execute_external_script @language = N'Python' , @script = N' import pandas as pd a = 1 b = 2 c = a/b s = pandas.Series(c, index =["simple math example 1", "simple math example 2"]) print(s) df = pd.DataFrame(s, index=["simple math example 1"]) OutputDataSet = df ' WITH RESULT SETS((ResultValue FLOAT))
Результаты
ResultValue 0,5 При попытке использовать числовой индекс для получения значения из этого ряда появляется сообщение об ошибке.
Следующие шаги
Дополнительные сведения о написании расширенных функций Python с использованием машинного обучения SQL см. в этом кратком руководстве: