In-Database Python-Analyse für SQL-Entwickler
Schritt 2: Daten mit PowerShell in SQL Server importieren
Schritt 4: Feature-Extraktion von Daten mit T-SQL
Die Entwicklung von Data Science-Lösungen umfasst in der Regel eine intensive Datenexploration und Datenvisualisierung. In diesem Schritt untersuchen Sie die Beispieldaten und generieren einige Diagramme. Außerdem erfahren Sie, wie Sie Grafikobjekte in Python serialisieren und Diagramme deserialisieren und erstellen.
[!NOTE] Dieses Tutorial zeigt nur das Binomialklassifizierungsmodell. Es ist auch möglich, andere Modelle wie die Regressionsklassifikation und die Polynomklassifikation zu erstellen.
Der Originaldatensatz enthält die Taxikennung und den Fahrdatensatz in separaten Dateien, wird jedoch mit medallion, hack_license und pickup_datetime als Schlüssel verknüpft, um die Verwendung der Beispieldaten zu vereinfachen. Die verwendeten Datensätze werden mit 1% der ursprünglichen Anzahl von Datensätzen abgetastet. Der abgetastete Datensatz enthält 1.703.957 Zeilen und 23 Spalten.
** Taxi-Kennung **
** Fahraufnahme und Fahrpreisaufzeichnung **
――Jedes Fahrprotokoll enthält den Ort und die Zeit des Ein- und Aussteigens sowie die Fahrstrecke.
Jeder Tarifdatensatz enthält Zahlungsinformationen wie Zahlungsart, Gesamtzahlungsbetrag und Chipbetrag.
Die letzten drei Spalten können für verschiedene maschinelle Lernaufgaben verwendet werden.
Die Spalte tip_amount enthält fortlaufende Zahlen und kann als Beschriftungsspalte (Zielvariable) für die Regressionsanalyse verwendet werden.
Die gekippte Spalte hat nur Ja / Nein-Werte und kann als Beschriftungsspalte (Zielvariable) für die Binomialklassifizierung verwendet werden.
Die tip_class-Spalte hat mehrere ** Klassenbeschriftungen ** und kann als Beschriftungsspalte (Zielvariable) für die Polynomklassifizierung verwendet werden.
Der als Beschriftungsspalte verwendete Wert basiert auf der Spalte tip_amount.
Säule | Regel |
---|---|
tipped | If tip_amount > 0, tipped = 1, otherwise tipped = 0 |
tip_class | Class 0: tip_amount =$ 0 Class 1: tip_amount >$ 0and tip_amount <=$ 5 Class 2: tip_amount >$ 5and tip_amount <=10 Dollar Class 3: tip_amount >10 Dollarand tip_amount <=20 $ Class 4: tip_amount >20 $ |
Die Visualisierung ist wichtig, um die Verteilung von Daten und Ausreißern zu verstehen, und Python bietet viele Pakete für die Datenvisualisierung. Das matplotlib-Modul enthält viele Funktionen zum Erstellen von Histogrammen, Streudiagrammen, Box-Whiskern und anderen Datenexplorationsdiagrammen.
In diesem Abschnitt erfahren Sie, wie Sie mit Plots mit gespeicherten Prozeduren arbeiten. Hier wird das Diagramm als varbinäre Typdaten behandelt.
Das ** RevoScalePy ** -Paket der Python-Bibliothek, das in SQL Server 2017 Machine Learning Services enthalten ist, entspricht dem RevoScaleR-Paket der R-Bibliothek. In diesem Beispiel wird rxHistogram verwendet, um ein Histogramm basierend auf den Ergebnisdaten einer Transact-SQL-Abfrage zu zeichnen. Wickeln Sie es zur einfacheren Verwendung in eine gespeicherte PlotHistogram-Prozedur ein.
Diese gespeicherte Prozedur gibt ein serialisiertes Python-Zeichenobjekt als Stream von varbinären Daten zurück. Sie können die Binärdaten nicht direkt anzeigen, sondern verwenden Python-Code auf dem Client, um die Binärdaten zu deserialisieren und die Bilddatei auf dem Clientcomputer zu speichern.
Die gespeicherte Prozedur "SerializePlots" wird in SQL Server durch Schritt 2: Importieren von Daten in SQL Server mithilfe von PowerShell (http://qiita.com/qio9o9/items/98df36982f1fbecdf5e7) definiert.
Erweitern Sie im Objekt-Explorer von Management Studio die Option Programmierung> Gespeicherte Prozeduren.
Klicken Sie mit der rechten Maustaste auf "SerializePlots" und wählen Sie "Ändern", um das Transact-SQL-Skript in einem neuen Abfragefenster zu öffnen.
CREATE PROCEDURE [dbo].[SerializePlots]
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
Figur
der ** Matplotlib-Bibliothek ** erstellt Histogramme und Streudiagramme, und diese Objekte werden mit der ** Pickle-Bibliothek ** serialisiert.Führen Sie die folgende Abfrage in Management Studio aus.
EXEC [dbo].[SerializePlots]
Ändern Sie die Verbindungszeichenfolge im Python-Skript "DeserializeSavePlots.py" in den heruntergeladenen Dateien entsprechend Ihrer Umgebung und führen Sie sie dann aus.
** Für die SQL Server-Authentifizierung **
```python:DeserializeSavePlots
import pyodbc
import pickle
import os
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER={SERVER_NAME};DATABASE={DB_NAME};UID={USER_NAME};PWD={PASSOWRD}')
cursor = cnxn.cursor()
cursor.execute("EXECUTE [dbo].[SerializePlots]")
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())
```
** Für die Windows-Authentifizierung **
```Python:DeserializeSavePlots.py
import pyodbc
import pickle
import os
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER={SERVER_NAME};DATABASE={DB_NAME};Trusted_Connection=yes;')
cursor = cnxn.cursor()
cursor.execute("EXECUTE [dbo].[SerializePlots]")
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())
```
> [!NOTE]
Passen Sie die Python-Laufzeitversion auf Server und Client an. Passen Sie außerdem die vom Client verwendete Version der Python-Bibliothek, z. B. matplotlib, an den Server an oder machen Sie eine höhere Version.
Wenn die Verbindung erfolgreich hergestellt wurde, wird das folgende Ergebnis angezeigt.
Im Python-Arbeitsverzeichnis werden vier Dateien erstellt.
Zeigt die Anzahl der erhaltenen und die nicht erhaltenen Chips an.
Zeigt die Verteilung der Chipmengen an.
Zeigt die Tarifverteilung an.
Es ist ein Streudiagramm mit dem Tarif auf der x-Achse und dem Chipbetrag auf der y-Achse.
Schritt 4: Feature-Extraktion von Daten mit T-SQL
Schritt 2: Daten mit PowerShell in SQL Server importieren
In-Database Python-Analyse für SQL-Entwickler
Step 3: Explore and Visualize the Data