Python-Tutorial: Untersuchen und Visualisieren von Daten
Gilt für: SQL Server 2017 (14.x) und höher Azure SQL Managed Instance
Im zweiten Teil dieser fünfteiligen Tutorialreihe werden Sie die Beispieldaten untersuchen und einige Plots erstellen. Im späteren Verlauf erfahren Sie, wie Sie Grafikobjekte in Python serialisieren, anschließend deserialisieren und Plots erstellen.
In diesem Artikel führen Sie Folgendes durch:
- Überprüfen der Beispieldaten
- Erstellen von Plots mit Python in T-SQL
In Teil 1 haben Sie die Voraussetzungen installiert und die Beispieldatenbank wiederhergestellt.
In Teil drei erfahren Sie, wie Sie mithilfe einer Transact-SQL-Funktion aus Rohdaten Features erstellen. Sie rufen anschließend die Funktion aus einer gespeicherten Prozedur auf, um eine Tabelle zu erstellen, die die Funktionswerte enthält.
In Teil vier laden Sie die Module und rufen die erforderlichen Funktionen auf, um das Modell mithilfe einer gespeicherten SQL Server-Prozedur zu erstellen und zu trainieren.
In Teil fünf erfahren Sie, wie Sie die Modelle operationalisieren können, die Sie in Teil vier trainiert und gespeichert haben.
Überprüfen der Daten
Nehmen Sie sich zunächst eine Minute, um das Datenschema zu durchsuchen, da einige Änderungen daran vorgenommen wurden, um die Verwendung der NYC Taxi-Daten zu vereinfachen.
- Im ursprünglichen Dataset wurden separate Dateien für die Taxi-IDs und die Fahrtendatensätze verwendet. Die zwei ursprünglichen Datasets in den Spalten medallion, hack_license und pickup_datetime wurden zusammengeführt.
- Das ursprüngliche Dataset umfasste viele Dateien und war ziemlich groß. Das Dataset wurde reduziert, sodass nun nur noch 1 % der ursprünglichen Anzahl von Datensätzen vorliegt. Die aktuelle Datentabelle enthält 1.703.957 Zeilen und 23 Spalten.
Taxi-IDs
Die Spalte medallion stellt die eindeutige ID-Nummer des Taxis dar.
Die Spalte hack_license enthält das (anonymisierte) Kennzeichen des Taxifahrers.
Datensätze von Fahrten und Fahrpreisen
Jeder Datensatz für Fahrten enthält den genauen Abhol- und Zielort und die Zeit sowie die Fahrstrecke.
Jeder Fahrpreisdatensatz enthält die Zahlungsinformationen wie die Zahlungsart, der Gesamtbetrag und den Fahrtpreis.
Die letzten drei Spalten können für verschiedene Machine Learning-Tasks verwendet werden. Die Spalte tip_amount enthält fortlaufende numerische Werte und kann als die label -Spalte für die Regressionsanalyse verwendet werden. Die Spalte tipped verfügt nur über Ja/Nein-Werte und wird für die binäre Klassifikation verwendet. Die tip_class -Spalte weist mehrere Klassenbezeichnungen auf und kann deshalb als Bezeichnung für mehrklassige Klassifizierungsaufgaben verwendet werden.
Die Werte für die Bezeichnungsspalten basieren alle auf der tip_amount
-Spalte und verwenden folgende Geschäftsregeln:
Die Bezeichnungsspalte
tipped
kann die Werte „0“ (null) und „1“ enthalten.Wenn
tip_amount
> 0,tipped
= 1; andernfallstipped
= 0Die Bezeichnungsspalte
tip_class
kann Class-Werte von „0“ (null) bis „4“ enthalten.Class 0:
tip_amount
= 0 $Class 1:
tip_amount
> $0 undtip_amount
<= $5Class 2:
tip_amount
> $5 undtip_amount
<= $10Class 3:
tip_amount
> $10 undtip_amount
<= $20Class 4:
tip_amount
> $20
Erstellen von Plots mit Python in T-SQL
Das Entwickeln einer Data Science-Lösung bringt normalerweise die intensive Untersuchung und Visualisierung von Daten mit sich. Da die Visualisierung ein leistungsfähiges Tool für das Verständnis der Verteilung von Daten und Ausreißern ist, stellt Python viele Pakete für die Visualisierung von Daten bereit. Das matplotlib-Modul ist eine der beliebteren Bibliotheken für die Visualisierung und umfasst viele Funktionen zum Erstellen von Histogrammen, Punktdiagrammen, Boxplots und anderen Graphen für die Datenuntersuchung.
In diesem Abschnitt erfahren Sie, wie Sie mithilfe von gespeicherten Prozeduren mit Plots arbeiten. Anstatt das Bild auf dem Server zu öffnen, speichern Sie das Python-Objekt plot
als Daten vom Typ varbinary und schreiben diese dann in eine Datei, die an anderer Stelle freigegeben oder angezeigt werden kann.
Erstellen eines Plots als varbinary-Daten
Die gespeicherte Prozedur gibt ein serialisiertes figure
-Pythonobjekt als varbinary-Datenstrom zurück. Sie können binäre Daten nicht direkt anzeigen, aber Sie können Python-Code auf dem Client verwenden, um die Abbildungen zu deserialisieren und anzuzeigen und um die Bilddatei anschließend auf einem Clientcomputer zu speichern.
Erstellen Sie die gespeicherte Prozedur PyPlotMatplotlib.
Für das unten aufgeführte Skript gilt Folgendes:
- Die Variable
@query
definiert den AbfragetextSELECT tipped FROM nyctaxi_sample
, der als Argument für die Skripteingabevariable@input_data_1
an den Python-Codeblock übergeben wird. - Das Python-Skript ist relativ einfach:
figure
-Objekte von matplotlib werden verwendet, um das Histogramm und das Punktdiagramm zu erstellen. Anschließend werden diese Objekte mithilfe derpickle
-Bibliothek serialisiert. - Das Python-Grafikobjekt wird für die Ausgabe in einen pandas-Datenrahmen serialisiert.
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
- Die Variable
Führen Sie die gespeicherte Prozedur jetzt ohne Argumente aus, um ein Plot aus den Daten zu generieren, die als Eingabeabfrage hartcodiert sind.
EXEC [dbo].[PyPlotMatplotlib]
Die Ergebnisse sollten etwa wie folgt aussehen:
plot 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649...
Sie können nun über einen Python-Client einer Verbindung mit der SQL Server-Instanz herstellen, die die binären Plotobjekte generiert hat, und die Plots anzeigen.
Führen Sie dazu den folgenden Python-Code aus, wobei Sie den Servernamen, den Datenbanknamen und die Anmeldeinformationen entsprechend ersetzen (für die Windows-Authentifizierung ersetzen Sie die Parameter
UID
undPWD
durchTrusted_Connection=True
). Stellen Sie sicher, dass die Python-Versionen auf dem Client und dem Server identisch sind. Stellen Sie außerdem sicher, dass die Python-Bibliotheken auf Ihrem Client (z. B. matplotlib) eine identische oder höhere Version als die auf dem Server installierten Bibliotheken aufweisen. Eine Liste der installierten Pakete und deren Versionen finden Sie unter Abrufen von Paketinformationen für 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())
Wenn die Verbindung erfolgreich hergestellt wird, sollte eine Nachricht ähnlich der folgenden angezeigt werden:
Die Plots werden im folgenden Verzeichnis gespeichert: xxxx
Die Ausgabedatei wird im Python-Arbeitsverzeichnis erstellt. Suchen Sie das Python-Arbeitsverzeichnis, und öffnen Sie die Datei, um den Plot anzuzeigen. In der folgenden Abbildung sehen Sie einen Plot, der auf dem Clientcomputer gespeichert wurde.
Nächste Schritte
In diesem Artikel führen Sie folgende Schritte aus:
- Sie haben die Beispieldaten überprüft.
- Sie haben Plots mit Python in T-SQL erstellt.