Краткое руководство. Использование структур данных и объектов при работе с Python и машинным обучением SQLQuickstart: Data structures and objects using Python with SQL machine learning

Применимо к:Applies to: даSQL Server 2017 (14.x);SQL Server 2017 (14.x)yesSQL Server 2017 (14.x);SQL Server 2017 (14.x) и более поздние версии ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed InstanceПрименимо к:Applies to: даSQL Server 2017 (14.x);SQL Server 2017 (14.x)yesSQL Server 2017 (14.x);SQL Server 2017 (14.x) and later ДаУправляемый экземпляр SQL AzureAzure SQL Managed InstanceYesУправляемый экземпляр SQL AzureAzure SQL Managed Instance

В этом кратком руководстве вы узнаете, как использовать структуры и типы данных при применении Python в Службах машинного обучения SQL Server, Службах машинного обучения управляемого экземпляра Azure SQL или Кластерах больших данных.In this quickstart, you'll learn how to use data structures and data types when using Python in SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services, or on SQL Server Big Data Clusters. Вы узнаете о том, как перемещать данные между Python и SQL Server, и о типичных проблемах, возникающих при этом.You'll learn about moving data between Python and SQL Server, and the common issues that might occur.

В машинном обучении SQL в качестве основы используется пакет Python pandas, который отлично подходит для работы с табличными данными.SQL machine learning relies on the Python pandas package, which is great for working with tabular data. Однако нельзя просто передать скалярное значение из Python в вашу базу данных и ждать, что это просто сработает.However, you cannot pass a scalar from Python to your database and expect it to just work. В этом кратком руководстве вы вспомните некоторые базовые определения типов данных, чтобы подготовиться к решению дополнительных проблем, с которыми вы можете столкнуться при передаче табличных данных между Python и базой данных.In this quickstart, you'll review some basic data structure definitions, to prepare you for additional issues that you might run across when passing tabular data between Python and the database.

Основные понятия, которые необходимо знать:Concepts to know up front include:

  • Кадр данных — это таблица с несколькими столбцами.A data frame is a table with multiple columns.
  • Кадр данных с одним столбцом — объект в виде списка, называемый рядом.A single column of a data frame is a list-like object called a series.
  • Одно значение кадра данных называется ячейкой, доступ к ней осуществляется по индексу.A single value of a data frame is called a cell and is accessed by index.

Как можно предоставить единственный результат вычисления в виде кадра данных, если для объекта data.frame требуется табличная структура?How would you expose the single result of a calculation as a data frame, if a data.frame requires a tabular structure? Одним из ответов является представление одного скалярного значения в виде ряда, который легко преобразовать в кадр данных.One answer is to represent the single scalar value as a series, which is easily converted to a data frame.

Примечание

При возврате дат Python в SQL использует тип DATETIME, который имеет ограниченный диапазон дат от 1753-01-01 (-53690) до 9999-12-31 (2958463).When returning dates, Python in SQL uses DATETIME which has a restricted date range of 1753-01-01(-53690) through 9999-12-31(2958463).

Предварительные требованияPrerequisites

Для работы с этим кратким руководством необходимо следующее.You need the following prerequisites to run this quickstart.

Скалярное значение в виде рядаScalar value as a series

В этом примере выполняется некоторые простые математические операции и преобразуется скаляр в ряд.This example does some simple math and converts a scalar into a series.

  1. Для ряда требуется индекс, который можно назначить вручную, как показано здесь, или программным способом.A series requires an index, which you can assign manually, as shown here, or programmatically.

    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, значения возвращаются в окне сообщения, но можно увидеть, что результаты больше напоминают табличный формат.Because the series hasn't been converted to a data.frame, the values are returned in the Messages window, but you can see that the results are in a more tabular format.

    РезультатыResults

    STDOUT message(s) from external script: 
    0.5
    simple math example 1    0.5
    dtype: float64
    
  2. Чтобы увеличить длину ряда, можно добавить новые значения с использованием массива.To increase the length of the series, you can add new values, using an array.

    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 и заканчивая длиной массива.If you do not specify an index, an index is generated that has values starting with 0 and ending with the length of the array.

    РезультатыResults

    STDOUT message(s) from external script:
    0    0.5
    1    2.0
    dtype: float64
    
  3. Если увеличить число индексных значений, но не добавить новые данные, значения данных будут повторяться для заполнения ряда.If you increase the number of index values, but don't add new data values, the data values are repeated to fill the series.

    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)
    '
    

    РезультатыResults

    STDOUT message(s) from external script:
    0.5
    simple math example 1    0.5
    simple math example 2    0.5
    dtype: float64
    

Преобразование рядя в кадр данныхConvert series to data frame

После преобразования скалярных математических результатов в табличную структуру все еще необходимо преобразовать их в формат, который может обрабатывать машинное обучение SQL.Having converted the scalar math results to a tabular structure, you still need to convert them to a format that SQL machine learning can handle.

  1. Чтобы преобразовать ряд в объект data.frame, вызовите метод DataFrame библиотеки pandas.To convert a series to a data.frame, call the pandas DataFrame method.

    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))
    

    Результат показан ниже.The result is shown below. Даже если вы используете индекс для получения конкретных значений из data.frame, значения индекса не являются частью выходных данных.Even if you use the index to get specific values from the data.frame, the index values aren't part of the output.

    РезультатыResults

    ResultValueResultValue
    0,50.5
    22

Вывод данных в data.frameOutput values into data.frame

Теперь мы выведем определенные значения из двух рядов математических результатов в объект data.frame.Now you'll output specific values from two series of math results in a data.frame. Первый имеет индекс с последовательными значениями, созданными Python.The first has an index of sequential values generated by Python. Во втором используется произвольный индекс строковых значений.The second uses an arbitrary index of string values.

  1. В следующем примере возвращается значение из ряда с помощью целочисленного индекса.The following example gets a value from the series using an integer index.

    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))
    

    РезультатыResults

    ResultValueResultValue
    2.02.0

    Помните, что автоматически созданный индекс начинается с 0.Remember that the auto-generated index starts at 0. Попробуйте использовать значение индекса вне допустимого диапазона и посмотрите, что произойдет.Try using an out of range index value and see what happens.

  2. Теперь получим одно значение из другого кадра данных, используя строковый индекс.Now get a single value from the other data frame using a string index.

    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))
    

    РезультатыResults

    ResultValueResultValue
    0,50.5

    При попытке использовать числовой индекс для получения значения из этого ряда появляется сообщение об ошибке.If you try to use a numeric index to get a value from this series, you get an error.

Дальнейшие действияNext steps

Дополнительные сведения о написании расширенных функций Python с использованием машинного обучения SQL см. в этом кратком руководстве:To learn about writing advanced Python functions with SQL machine learning, follow this quickstart: