Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
tippedetykiet ma możliwe wartości 0 i 1Jeśli
tip_amount> 0,tipped= 1; w przeciwnym razietipped= 0Kolumna
tip_classetykiet ma możliwe wartości klas 0–4Klasa 0:
tip_amount= $0Klasa 1:
tip_amount> $0 oraztip_amount<= $5Klasa 2:
tip_amount> $5 itip_amount<= $10Klasa 3:
tip_amount> $10 itip_amount<= $20Klasa 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.
Utwórz procedurę składowaną PyPlotMatplotlib.
W poniższym skrypcie:
- Zmienna
@querydefiniuje tekstSELECT 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 matplotlib
figuresą używane do tworzenia histogramu i wykresu punktowego, a te obiekty są następnie serializowane przy użyciupicklebiblioteki. - 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- Zmienna
Teraz uruchom procedurę składowaną bez argumentów, aby wygenerować wykres na podstawie danych zakodowanych jako zapytanie wejściowe.
EXEC [dbo].[PyPlotMatplotlib]Wyniki powinny wyglądać mniej więcej tak:
plot 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649...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
UIDiPWDnaTrusted_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())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
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.
Dalsze kroki
W tym artykule dowiesz się:
- Przejrzył przykładowe dane
- Utworzone wykresy przy użyciu języka Python w języku T-SQL