Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2017 (14.x) en latere versies
van Azure SQL Managed Instance
In deel twee van deze vijfdelige reeks zelfstudies verkent u de voorbeeldgegevens en genereert u enkele plots. Later leert u hoe u grafische objecten in Python serialiseert en deze objecten vervolgens deserialiseert en plots maakt.
In dit artikel gaat u het volgende doen:
- De voorbeeldgegevens controleren
- Plots maken met behulp van Python in T-SQL
In deel 1 hebt u de vereisten geïnstalleerd en de voorbeelddatabase hersteld.
In deel drie leert u hoe u functies maakt op basis van onbewerkte gegevens met behulp van een Transact-SQL-functie. Vervolgens roept u die functie aan vanuit een opgeslagen procedure om een tabel te maken die de functiewaarden bevat.
In deel vier laadt u de modules en roept u de benodigde functies aan om het model te maken en te trainen met behulp van een opgeslagen SQL Server-procedure.
In deel vijf leert u hoe u de modellen kunt operationeel maken die u hebt getraind en opgeslagen in deel vier.
De gegevens controleren
Neem eerst even de tijd om door het gegevensschema te bladeren, omdat we enkele wijzigingen hebben aangebracht om het gebruik van de NYC Taxi-gegevens gemakkelijker te maken
- De oorspronkelijke gegevensset heeft afzonderlijke bestanden gebruikt voor de taxi-id's en ritrecords. We hebben de twee oorspronkelijke gegevenssets samengevoegd op de kolommen medallion, hack_license en pickup_datetime.
- De oorspronkelijke gegevensset spaneerde veel bestanden en was vrij groot. We hebben het aantal records teruggebracht tot slechts 1% van het oorspronkelijke aantal. De huidige gegevenstabel heeft 1.703.957 rijen en 23 kolommen.
Taxi-identificatoren
De medaillonkolom vertegenwoordigt het unieke ID-nummer van de taxi.
De kolom hack_license bevat het rijbewijsnummer van de taxichauffeur (geanonimiseerd).
Rit- en tariefrecords
Elke reisrecord omvat de locatie en tijd voor ophalen en afzetten, en de reisafstand.
Elke tariefrecord bevat betalingsgegevens, zoals het betalingstype, het totale bedrag van de betaling en het fooibedrag.
De laatste drie kolommen kunnen worden gebruikt voor verschillende machine learning-taken. De kolom tip_amount bevat doorlopende numerieke waarden en kan worden gebruikt als labelkolom voor regressieanalyse. De getipte kolom heeft alleen ja/nee-waarden en wordt gebruikt voor binaire classificatie. De kolom tip_class heeft meerdere klasselabels en kan daarom worden gebruikt als label voor classificatietaken met meerdere klassen.
De waarden die worden gebruikt voor de labelkolommen zijn allemaal gebaseerd op de tip_amount kolom, met behulp van deze bedrijfsregels:
Labelkolom
tippedheeft mogelijke waarden 0 en 1Als
tip_amount> 0,tipped= 1; anderstipped= 0Labelkolom
tip_classheeft mogelijke klassewaarden 0-4Klasse 0:
tip_amount= $ 0Klasse 1:
tip_amount> $0 entip_amount<= $5Klasse 2:
tip_amount> $5 entip_amount<= $10Klasse 3:
tip_amount> $ 10 entip_amount<= $ 20Klasse 4:
tip_amount> $ 20
Plots maken met behulp van Python in T-SQL
Het ontwikkelen van een data science-oplossing omvat meestal intensieve gegevensverkenning en gegevensvisualisatie. Omdat visualisatie zo'n krachtig hulpmiddel is voor het begrijpen van de distributie van de gegevens en uitbijters, biedt Python veel pakketten voor het visualiseren van gegevens. De matplotlib-module is een van de populairste bibliotheken voor visualisatie en bevat veel functies voor het maken van histogrammen, spreidingsdiagrammen, boxplots en andere grafieken voor gegevensverkenning.
In deze sectie leert u hoe u met plots kunt werken met behulp van opgeslagen procedures. In plaats van de afbeelding op de server te openen, slaat u het Python-object plot op als varbinaire gegevens en schrijft u dit vervolgens naar een bestand dat elders kan worden gedeeld of bekeken.
Een plot maken als varbinaire gegevens
De opgeslagen procedure retourneert een geserialiseerd Python-object figure als een stroom varbinaire gegevens. U kunt de binaire gegevens niet rechtstreeks weergeven, maar u kunt Python-code op de client gebruiken om deserialiseren en de afbeeldingen weer te geven en vervolgens het afbeeldingsbestand op een clientcomputer op te slaan.
Maak de opgeslagen procedure PyPlotMatplotlib.
In het volgende script:
- De variabele
@querydefinieert de querytekstSELECT tipped FROM nyctaxi_sample, die wordt doorgegeven aan het Python-codeblok als argument voor de scriptinvoervariabele.@input_data_1 - Het Python-script is vrij eenvoudig: matplotlib-objecten
figureworden gebruikt om het histogram en het spreidingsplot te maken. Deze objecten worden vervolgens geserialiseerd met behulp van depicklebibliotheek. - Het Python-grafische object wordt geserialiseerd naar een Pandas DataFrame voor uitvoer.
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- De variabele
Voer nu de opgeslagen procedure uit zonder argumenten om een plot te genereren op basis van de gegevens die in code zijn vastgelegd als invoerquery.
EXEC [dbo].[PyPlotMatplotlib]De resultaten moeten er ongeveer als volgt uitzien:
plot 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649...Vanuit een Python-client kunt u nu verbinding maken met het SQL Server-exemplaar dat de binaire plotobjecten heeft gegenereerd en de plots bekijken.
Voer hiervoor de volgende Python-code uit, waarbij u de servernaam, databasenaam en referenties indien nodig vervangt (voor Windows-verificatie vervangt u de
UIDenPWDparameters doorTrusted_Connection=True). Zorg ervoor dat de Python-versie hetzelfde is op de client en de server. Zorg er ook voor dat de Python-bibliotheken op uw client (zoals matplotlib) dezelfde of hogere versie zijn ten opzichte van de bibliotheken die op de server zijn geïnstalleerd. Zie Python-pakketgegevens ophalen om een lijst met geïnstalleerde pakketten en hun versies weer te geven.%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())Als de verbinding is geslaagd, ziet u een bericht als volgt:
De plots worden opgeslagen in map: xxxx
Het uitvoerbestand wordt gemaakt in de Python-werkmap. Als u de plot wilt weergeven, zoekt u de Python-werkmap en opent u het bestand. In de volgende afbeelding ziet u een plot die is opgeslagen op de clientcomputer.
Volgende stappen
In dit artikel gaat u als volgt te werk:
- Ik heb de voorbeeldgegevens gecontroleerd.
- Plots gemaakt met behulp van Python in T-SQL