Учебник по Python. Изучение и визуализация данныхPython tutorial: Explore and visualize data

Применимо к: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

Во второй части этой серии руководств вы изучите образец данных и создадите несколько графиков.In part two of this five-part tutorial series, you'll explore the sample data and generate some plots. Далее вы узнаете, как сериализовать графические объекты на Python, а затем десериализовать эти объекты и создать графики.Later, you'll learn how to serialize graphics objects in Python, and then deserialize those objects and make plots.

Работая с этой статьей, вы узнаете о следующем.In this article, you'll:

  • Изучение образца данныхReview the sample data
  • Создание диаграмм с помощью языка Python в T-SQLCreate plots using Python in T-SQL

В первой части были установлены необходимые компоненты и восстановлена демонстрационная база данных.In part one, you installed the prerequisites and restored the sample database.

В третьей части вы узнаете, как создавать функции из необработанных данных с помощью функции Transact-SQL.In part three, you'll learn how to create features from raw data by using a Transact-SQL function. Затем вы вызовите эту функцию из хранимой процедуры, чтобы создать таблицу, содержащую значения характеристик.You'll then call that function from a stored procedure to create a table that contains the feature values.

В четвертой части вы научитесь загружать модули и вызывать необходимые функции для создания и обучения модели с помощью хранимой процедуры SQL Server.In part four, you'll load the modules and call the necessary functions to create and train the model using a SQL Server stored procedure.

Из пятой части вы узнаете, как ввести в эксплуатацию модели, которые были обучены и сохранены в соответствии с инструкциями в четвертой части.In part five, you'll learn how to operationalize the models that you trained and saved in part four.

Изучение данныхReview the data

Во-первых, уделите несколько минут для просмотра схемы данных, так как мы внесли некоторые изменения, чтобы упростить использование данных в базе данных работы такси в Нью-ЙоркеFirst, take a minute to browse the data schema, as we've made some changes to make it easier to use the NYC Taxi data

  • В исходном наборе данных для идентификаторов такси и записей о поездках использовались отдельные файлы.The original dataset used separate files for the taxi identifiers and trip records. Мы присоединили два исходных набора данных к столбцам medallion, hack_license и pickup_datetime.We've joined the two original datasets on the columns medallion, hack_license, and pickup_datetime.
  • Исходный набор данных имел много файлов и был довольно большим.The original dataset spanned many files and was quite large. Мы сократили выборку, чтобы получить 1% от первоначального количества записей.We've downsampled to get just 1% of the original number of records. Текущая таблица данных содержит 1 703 957 строк и 23 столбца.The current data table has 1,703,957 rows and 23 columns.

Идентификаторы таксиTaxi identifiers

В столбце medallion представлены уникальные идентификационные номера такси.The medallion column represents the taxi's unique ID number.

В столбце hack_license содержатся номера лицензий таксистов (без указания имен).The hack_license column contains the taxi driver's license number (anonymized).

Записи о поездках и оплатеTrip and fare records

Каждая запись о поездке включает сведения о местах посадки и высадки, а также о расстоянии поездки.Each trip record includes the pickup and drop-off location and time, and the trip distance.

Каждая запись об оплате включает такие сведения, как тип оплаты, общий размер платежа и размер чаевых.Each fare record includes payment information such as the payment type, total amount of payment, and the tip amount.

Последние три столбца можно использовать для различных задач машинного обучения.The last three columns can be used for various machine learning tasks. Столбец tip_amount содержит непрерывный ряд числовых значений и может использоваться в качестве столбца меток для регрессионного анализа.The tip_amount column contains continuous numeric values and can be used as the label column for regression analysis. Столбец tipped содержит значения "Да" или "Нет" и используется для двоичной классификации.The tipped column has only yes/no values and is used for binary classification. Столбец tip_class содержит несколько меток классов и поэтому может использоваться в качестве метки для задач многоклассовой классификации.The tip_class column has multiple class labels and therefore can be used as the label for multi-class classification tasks.

Все значения, используемые для столбцов меток, основаны на столбце tip_amount с применением следующих бизнес-правил:The values used for the label columns are all based on the tip_amount column, using these business rules:

  • Столбец меток tipped может принимать значения 0 или 1Label column tipped has possible values 0 and 1

    ЕСЛИ tip_amount > 0, ТО tipped = 1; ИНАЧЕ tipped = 0If tip_amount > 0, tipped = 1; otherwise tipped = 0

  • Столбец меток tip_class может принимать значения от 0 до 4Label column tip_class has possible class values 0-4

    Класс 0: tip_amount = $0Class 0: tip_amount = $0

    Класс 1: tip_amount > $0 И tip_amount < = $5Class 1: tip_amount > $0 and tip_amount <= $5

    Класс 2: tip_amount > $5 И tip_amount < = $10Class 2: tip_amount > $5 and tip_amount <= $10

    Класс 3: tip_amount > $10 И tip_amount < = $20Class 3: tip_amount > $10 and tip_amount <= $20

    Класс 4: tip_amount > $20Class 4: tip_amount > $20

Создание диаграмм с помощью языка Python в T-SQLCreate plots using Python in T-SQL

Разработка решения для обработки и анализа данных обычно связана с большим числом операций по анализу и визуализации данных.Developing a data science solution usually includes intensive data exploration and data visualization. Так как визуализация является эффективным средством для представления распределения данных и выбросов, в Python имеется много пакетов для визуализации данных.Because visualization is such a powerful tool for understanding the distribution of the data and outliers, Python provides many packages for visualizing data. Модуль matplotlib является одной из наиболее популярных библиотек для визуализации и включает множество функций для создания гистограмм, точечных диаграмм, блочных диаграмм и других графических средств просмотра данных.The matplotlib module is one of the more popular libraries for visualization, and includes many functions for creating histograms, scatter plots, box plots, and other data exploration graphs.

В этом разделе вы научитесь работать с графиками с использованием хранимых процедур.In this section, you learn how to work with plots using stored procedures. Вместо того чтобы открывать изображение на сервере, вы сохраняете объект Python plot как данные типа varbinary, а затем записываете их в файл, которым можно поделиться и просматривать в любом другом месте.Rather than open the image on the server, you store the Python object plot as varbinary data, and then write that to a file that can be shared or viewed elsewhere.

Создание графика в виде данных типа varbinaryCreate a plot as varbinary data

Хранимая процедура возвращает сериализованный объект Python figure в виде потока данных varbinary.The stored procedure returns a serialized Python figure object as a stream of varbinary data. Двоичные данные нельзя просматривать напрямую, но можно использовать код Python на клиенте для десериализации и просмотра рисунков, а затем сохранения в файл изображения на клиентском компьютере.You cannot view the binary data directly, but you can use Python code on the client to deserialize and view the figures, and then save the image file on a client computer.

  1. Создайте хранимую процедуру PyPlotMatplotlib, если сценарий PowerShell еще не сделал этого.Create the stored procedure PyPlotMatplotlib, if the PowerShell script did not already do so.

    • Переменная @query определяет текст запроса SELECT tipped FROM nyctaxi_sample, который передается в блок кода Python в качестве аргумента входной переменной @input_data_1.The variable @query defines the query text SELECT tipped FROM nyctaxi_sample, which is passed to the Python code block as the argument to the script input variable, @input_data_1.
    • Сценарий Python довольно прост: объекты matplotlib figure используются для создания гистограммы и точечной диаграммы, и затем эти объекты сериализуются с помощью библиотеки pickle.The Python script is fairly simple: matplotlib figure objects are used to make the histogram and scatter plot, and these objects are then serialized using the pickle library.
    • Графический объект Python сериализуется в тип данных DataFrame библиотеки pandas для вывода.The Python graphics object is serialized to a pandas DataFrame for output.
    DROP PROCEDURE IF EXISTS PyPlotMatplotlib;
    GO
    
    CREATE PROCEDURE [dbo].[PyPlotMatplotlib]
    AS
    BEGIN
        SET NOCOUNT ON;
        DECLARE @query nvarchar(max) =
        N'SELECT cast(tipped as int) as tipped, tip_amount, fare_amount FROM [dbo].[nyctaxi_sample]'
        EXECUTE sp_execute_external_script
        @language = N'Python',
        @script = N'
    import matplotlib
    matplotlib.use("Agg")
    import matplotlib.pyplot as plt
    import pandas as pd
    import pickle
    
    fig_handle = plt.figure()
    plt.hist(InputDataSet.tipped)
    plt.xlabel("Tipped")
    plt.ylabel("Counts")
    plt.title("Histogram, Tipped")
    plot0 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
    plt.clf()
    
    plt.hist(InputDataSet.tip_amount)
    plt.xlabel("Tip amount ($)")
    plt.ylabel("Counts")
    plt.title("Histogram, Tip amount")
    plot1 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
    plt.clf()
    
    plt.hist(InputDataSet.fare_amount)
    plt.xlabel("Fare amount ($)")
    plt.ylabel("Counts")
    plt.title("Histogram, Fare amount")
    plot2 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
    plt.clf()
    
    plt.scatter( InputDataSet.fare_amount, InputDataSet.tip_amount)
    plt.xlabel("Fare Amount ($)")
    plt.ylabel("Tip Amount ($)")
    plt.title("Tip amount by Fare amount")
    plot3 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"])
    plt.clf()
    
    OutputDataSet = plot0.append(plot1, ignore_index=True).append(plot2, ignore_index=True).append(plot3, ignore_index=True)
    ',
    @input_data_1 = @query
    WITH RESULT SETS ((plot varbinary(max)))
    END
    GO
    
  2. Теперь запустите хранимую процедуру без аргументов, чтобы создать график на основе данных, жестко запрограммированных в качестве входного запроса.Now run the stored procedure with no arguments to generate a plot from the data hard-coded as the input query.

    EXEC [dbo].[PyPlotMatplotlib]
    
  3. Результаты должны выглядеть примерно так:The results should be something like this:

    plot
    0xFFD8FFE000104A4649...
    0xFFD8FFE000104A4649...
    0xFFD8FFE000104A4649...
    0xFFD8FFE000104A4649...
    
  4. Из клиента Python теперь можно подключаться к экземпляру SQL Server, который создал двоичные объекты графиков, и просматривать их.From a Python client, you can now connect to the SQL Server instance that generated the binary plot objects, and view the plots.

    Для этого выполните следующий код Python, заменив имя сервера, имя базы данных и учетные данные соответствующим образом (для проверки подлинности Windows замените параметры UID и PWD на Trusted_Connection=True).To do this, run the following Python code, replacing the server name, database name, and credentials as appropriate (for Windows authentication, replace the UID and PWD parameters with Trusted_Connection=True). Убедитесь, что версия Python одинакова на клиенте и на сервере.Make sure the Python version is the same on the client and the server. Также убедитесь, что библиотеки Python на вашем клиенте (например, matplotlib) имеют ту же или более позднюю версию по сравнению с версиями библиотек, установленных на сервере.Also make sure that the Python libraries on your client (such as matplotlib) are the same or higher version relative to the libraries installed on the server.

    %matplotlib notebook
    import pyodbc
    import pickle
    import os
    cnxn = pyodbc.connect('DRIVER=SQL Server;SERVER={SERVER_NAME};DATABASE={DB_NAME};UID={USER_NAME};PWD={PASSWORD}')
    cursor = cnxn.cursor()
    cursor.execute("EXECUTE [dbo].[PyPlotMatplotlib]")
    tables = cursor.fetchall()
    for i in range(0, len(tables)):
        fig = pickle.loads(tables[i][0])
        fig.savefig(str(i)+'.png')
    print("The plots are saved in directory: ",os.getcwd())
    
  5. Если подключение установлено успешно, должно отобразиться сообщение следующего вида:If the connection is successful, you should see a message like the following:

    Графики сохранены в каталоге: XXXXThe plots are saved in directory: xxxx

  6. Выходной файл создается в рабочем каталоге Python.The output file is created in the Python working directory. Чтобы просмотреть график, перейдите в рабочий каталог Python и откройте файл.To view the plot, locate the Python working directory, and open the file. На следующем рисунке показан график, сохраненный на клиентском компьютере.The following image shows a plot saved on the client computer.

    Зависимость суммы чаевых от суммы чекаTip amount vs Fare amount

Дальнейшие шагиNext steps

Работая с этой статьей, вы выполните следующие задачи:In this article, you:

  • Изучен образец данныхReviewed the sample data
  • Созданы графики с помощью языка Python в T-SQLCreated plots using Python in T-SQL