Udostępnij za pomocą


Samouczek w języku Python: eksplorowanie i wizualizowanie danych

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje usługi Azure SQL Managed Instance

W drugiej części tej pięcioczęściowej serii samouczków zapoznasz się z przykładowymi danymi i wygenerujesz niektóre wykresy. Później dowiesz się, jak serializować obiekty graficzne w języku Python, a następnie deserializować te obiekty i tworzyć wykresy.

W tym artykule dowiesz się:

  • Przeglądanie przykładowych danych
  • Tworzenie wykresów przy użyciu języka Python w języku T-SQL

W części 1 zainstalowano wymagania wstępne i przywrócono przykładową bazę danych.

W trzeciej części dowiesz się, jak tworzyć funkcje na podstawie danych pierwotnych przy użyciu funkcji Transact-SQL. Następnie wywołasz tę funkcję z procedury składowanej, aby utworzyć tabelę zawierającą wartości funkcji.

W czwartej części załadujesz moduły i wywołasz niezbędne funkcje, aby utworzyć i wytrenować model przy użyciu procedury składowanej programu SQL Server.

W części piątej dowiesz się, jak operacjonalizować modele, które zostały wytrenowane i zapisane w części czwartej.

Przeglądanie danych

Najpierw pośmiń minutę, aby przejrzeć schemat danych, ponieważ wprowadziliśmy pewne zmiany, aby ułatwić korzystanie z danych nowojorskich taksówek

  • Oryginalny zestaw danych używał oddzielnych plików dla identyfikatorów taksówek i rekordów podróży. Połączyliśmy dwa oryginalne zestawy danych na podstawie kolumn medallion, hack_license, i pickup_datetime.
  • Oryginalny zestaw danych obejmował wiele plików i był dość duży. Zredukowaliśmy liczbę rekordów, aby uzyskać zaledwie 1% początkowej liczby rekordów. Bieżąca tabela danych zawiera 1703 957 wierszy i 23 kolumny.

Identyfikatory taksówek

Kolumna medalionu reprezentuje unikalny numer identyfikacyjny taksówki.

Kolumna hack_license zawiera numer licencji taksówkarza (anonimowy).

Zapisy podróży i taryf

Każdy rekord podróży zawiera lokalizację i godzinę odbioru oraz godzinę podróży.

Każdy rekord opłaty zawiera informacje o płatności, takie jak typ płatności, łączna kwota płatności i kwota napiwku.

Ostatnie trzy kolumny mogą służyć do różnych zadań uczenia maszynowego. Kolumna tip_amount zawiera wartości liczbowe ciągłe i może służyć jako kolumna etykiety do analizy regresji. Kolumna tipped ma tylko wartości yes/no i jest używana do klasyfikacji binarnej. Kolumna tip_class zawiera wiele etykiet klas i dlatego może być używana jako etykieta dla zadań klasyfikacji wieloklasowej.

Wartości używane dla kolumn etykiet są oparte na kolumnie tip_amount przy użyciu następujących reguł biznesowych:

  • Kolumna tipped etykiet ma możliwe wartości 0 i 1

    Jeśli tip_amount> 0, tipped = 1; w przeciwnym razie tipped = 0

  • Kolumna tip_class etykiet ma możliwe wartości klas 0–4

    Klasa 0: tip_amount = $0

    Klasa 1: tip_amount> $0 oraz tip_amount<= $5

    Klasa 2: tip_amount> $5 i tip_amount<= $10

    Klasa 3: tip_amount> $10 i tip_amount<= $20

    Klasa 4: tip_amount> $20

Tworzenie wykresów przy użyciu języka Python w języku T-SQL

Opracowywanie rozwiązania do nauki o danych zwykle obejmuje intensywną eksplorację danych i wizualizację danych. Ponieważ wizualizacja jest tak zaawansowanym narzędziem do zrozumienia dystrybucji danych i wartości odstających, język Python udostępnia wiele pakietów do wizualizacji danych. Moduł matplotlib jest jedną z bardziej popularnych bibliotek wizualizacji i zawiera wiele funkcji tworzenia histogramów, wykresów punktowych, wykresów pól i innych wykresów eksploracji danych.

W tej sekcji dowiesz się, jak pracować z wykresami przy użyciu procedur składowanych. Zamiast otwierać obraz na serwerze, należy przechowywać obiekt plot języka Python jako dane varbinary , a następnie zapisywać je w pliku, który można udostępnić lub wyświetlić w innym miejscu.

Stwórz wykres jako dane typu varbinary

Procedura składowana zwraca serializowany obiekt języka Python figure jako strumień danych varbinary . Nie można wyświetlić danych binarnych bezpośrednio, ale możesz użyć kodu języka Python na kliencie do deserializacji i wyświetlenia liczb, a następnie zapisać plik obrazu na komputerze klienckim.

  1. Utwórz procedurę składowaną PyPlotMatplotlib.

    W poniższym skrypcie:

    • Zmienna @query definiuje tekst SELECT tipped FROM nyctaxi_samplezapytania , który jest przekazywany do bloku kodu języka Python jako argument zmiennej wejściowej skryptu . @input_data_1
    • Skrypt języka Python jest dość prosty: obiekty matplotlibfigure są używane do tworzenia histogramu i wykresu punktowego, a te obiekty są następnie serializowane przy użyciu pickle biblioteki.
    • Obiekt graficzny języka Python jest serializowany do ramki danych pandas w celu uzyskania danych wyjściowych.
    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. Teraz uruchom procedurę składowaną bez argumentów, aby wygenerować wykres na podstawie danych zakodowanych jako zapytanie wejściowe.

    EXEC [dbo].[PyPlotMatplotlib]
    
  3. Wyniki powinny wyglądać mniej więcej tak:

    plot
    0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
    
  4. Z poziomu klienta języka Python możesz teraz nawiązać połączenie z wystąpieniem programu SQL Server, które wygenerowało obiekty wykresu binarnego, i wyświetlić wykresy.

    W tym celu uruchom następujący kod w języku Python, zastępując odpowiednio nazwę serwera, nazwę bazy danych i poświadczenia. W przypadku uwierzytelniania systemu Windows zastąp parametry UID i PWD na Trusted_Connection=True. Upewnij się, że wersja języka Python jest taka sama na kliencie i serwerze. Upewnij się również, że biblioteki języka Python na kliencie (np. matplotlib) są takie same lub wyższe niż biblioteki zainstalowane na serwerze. Aby wyświetlić listę zainstalowanych pakietów i ich wersji, zobacz Pobieranie informacji o pakiecie języka Python.

    %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. Jeśli połączenie zakończy się pomyślnie, powinien zostać wyświetlony komunikat podobny do następującego:

    Wykresy są zapisywane w katalogu: xxxx

  6. Plik wyjściowy jest tworzony w katalogu roboczym języka Python. Aby wyświetlić wykres, znajdź katalog roboczy języka Python i otwórz plik. Na poniższej ilustracji przedstawiono wykres zapisany na komputerze klienckim.

    Kwota napiwku a kwota przejazdu Kwota napiwku a kwota przejazdu

Dalsze kroki

W tym artykule dowiesz się:

  • Przejrzył przykładowe dane
  • Utworzone wykresy przy użyciu języka Python w języku T-SQL