Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: SQL Server 2017 (14.x) и более поздним версиям
Azure SQL Управляемый экземпляр
В этом кратком руководстве вы узнаете, как использовать структуры и типы данных при применении 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 см. в этом кратком руководстве: