Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Sql Server 2017 (14.x) és újabb verziók
Felügyelt Azure SQL-példány
Az ötrészes oktatóanyag-sorozat második részében megismerheti a mintaadatokat, és létrehozhat néhány diagramot. Később megtanulhatja, hogyan szerializálhat grafikus objektumokat a Pythonban, majd deszerializálhatja ezeket az objektumokat, és készíthet diagramokat.
Ebben a cikkben a következőket fogja megismerni:
- A mintaadatok áttekintése
- Diagramok létrehozása Python használatával a T-SQL-ben
Az első részben telepítette az előfeltételeket, és visszaállította a mintaadatbázist.
A harmadik részben megtanulhatja, hogyan hozhat létre funkciókat nyers adatokból egy Transact-SQL függvény használatával. Ezután meghívja ezt a függvényt egy tárolt eljárásból, hogy létrehozhasson egy táblát, amely tartalmazza a funkcióértékeket.
A negyedik részben betölti a modulokat, és meghívja a szükséges függvényeket a modell létrehozásához és betanítása egy SQL Server által tárolt eljárás használatával.
Az ötödik részben megtanulhatja, hogyan lehet üzembe helyezni a negyedik részben betanított és mentett modelleket.
Az adatok áttekintése
Először is szánjon egy percet az adatséma áttekintésére, mivel módosításokat hajtottunk végre, hogy megkönnyítsük a NYC Taxi adatok használatát.
- Az eredeti adatkészlet külön fájlokat használt a taxiazonosítókhoz és az utazási rekordokhoz. Csatlakoztunk a medallion, hack_license és pickup_datetime oszlop két eredeti adatkészletéhez.
- Az eredeti adatkészlet sok fájlra terjedt ki, és meglehetősen nagy volt. Az eredeti rekordszámot 1%-ra csökkentettük le. Az aktuális adattábla 1 703 957 sort és 23 oszlopot tartalmaz.
Taxiazonosítók
A medál oszlop a taxi egyedi azonosítószámát jelöli.
A hack_license oszlop tartalmazza a taxisofőr engedélyszámát (anonimizált).
Utazási és viteldíjrekordok
Minden utazási rekord tartalmazza a felvétel és lerakás helyét és idejét, valamint az utazás távolságát.
Minden viteldíjrekord tartalmazza a fizetési adatokat, például a fizetési típust, a teljes összeget és a tipp összegét.
Az utolsó három oszlop különböző gépi tanulási feladatokhoz használható. A tip_amount oszlop folyamatos numerikus értékeket tartalmaz, és a regresszióelemzés címkeoszlopaként használható. A billentett oszlop csak igen/nem értékekkel rendelkezik, és bináris besoroláshoz használatos. A tip_class oszlop több osztálycímkével rendelkezik, ezért többosztályos besorolási feladatokhoz használható címkeként.
A címkeoszlopokhoz használt értékek mind az tip_amount oszlopon alapulnak, az alábbi üzleti szabályok használatával:
A Címke oszlop
tippedlehetséges értéke 0 és 1Ha
tip_amount> 0,tipped= 1; egyébkénttipped= 0A címkeoszlop
tip_classlehetséges osztályértékei 0–40. osztály:
tip_amount= $01. osztály:
tip_amount> $0 éstip_amount<= $52. osztály:
tip_amount> $5 éstip_amount<= $103. osztály:
tip_amount> $10 éstip_amount<= $204. osztály:
tip_amount> 20 USD
Diagramok létrehozása Python használatával a T-SQL-ben
Az adatelemzési megoldások fejlesztése általában intenzív adatfeltárást és adatvizualizációt is magában foglal. Mivel a vizualizáció olyan hatékony eszköz az adatok és a kiugró értékek elosztásának megértéséhez, a Python számos csomagot biztosít az adatok vizualizációjához. A matplotlib modul az egyik legnépszerűbb vizualizációs kódtár, és számos függvényt tartalmaz hisztogramok, pontdiagramok, dobozdiagramok és egyéb adatfeltárási grafikonok létrehozásához.
Ebben a szakaszban megtudhatja, hogyan használhatja a diagramokat tárolt eljárások használatával. A képnek a kiszolgálón való megnyitása helyett a Python-objektumot plot varbinary adatokként tárolja, és azt egy fájlba írja, amely máshol is megosztható vagy megtekinthető.
Varbináris adatként diagramot létrehozni
A tárolt eljárás egy szerializált Python-objektumot figuread vissza varbináris adatok adatfolyamaként. A bináris adatokat közvetlenül nem tekintheti meg, de az ügyfélen lévő Python-kóddal deszerializálhatja és megtekintheti az ábrákat, majd mentheti a képfájlt egy ügyfélszámítógépre.
Hozza létre a PyPlotMatplotlib tárolt eljárást.
A következő szkriptben:
- A változó
@queryhatározza meg a lekérdezés szövegétSELECT tipped FROM nyctaxi_sample, amelyet a szkript bemeneti változójának@input_data_1argumentumként ad át a Python-kódblokknak. - A Python-szkript meglehetősen egyszerű: matplotlib
figureobjektumokkal készíti el a hisztogramot és a pontdiagramot, és ezeket azpickleobjektumokat a kódtár használatával szerializálja. - A Python grafikus objektum egy pandas DataFrame-hez van szerializálva a kimenethez.
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- A változó
Most futtassa a tárolt eljárást argumentumok nélkül, hogy bemeneti lekérdezésként kódolt adatokból hozzon létre egy diagramot.
EXEC [dbo].[PyPlotMatplotlib]Az eredményeknek a következőhöz hasonlónak kell lenniük:
plot 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649...Python-ügyfélből most már csatlakozhat a bináris diagramobjektumokat létrehozó SQL Server-példányhoz, és megtekintheti a diagramokat.
Ehhez futtassa a következő Python-kódot, majd cserélje le a kiszolgáló nevét, az adatbázis nevét és a hitelesítő adatokat a megfelelőre. Windows-hitelesítés esetén cserélje le a
UIDésPWDparamétereket aTrusted_Connection=True-re. Győződjön meg arról, hogy a Python-verzió megegyezik az ügyfélen és a kiszolgálón. Győződjön meg arról is, hogy az ügyfél Python-kódtárai (például a matplotlib) a kiszolgálón telepített kódtárakhoz képest azonosak vagy magasabbak. A telepített csomagok és azok verzióinak listáját a Python-csomaginformációk lekérése című témakörben tekintheti meg.%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())Ha a kapcsolat sikeres, az alábbihoz hasonló üzenetnek kell megjelennie:
A diagramok a következő könyvtárba vannak mentve: xxxx
A kimeneti fájl a Python munkakönyvtárában jön létre. A diagram megtekintéséhez keresse meg a Python munkakönyvtárát, és nyissa meg a fájlt. Az alábbi képen az ügyfélszámítógépen mentett diagram látható.
Következő lépések
Ebben a cikkben a következőt találja:
- A mintaadatok áttekintése
- Diagramok létrehozása Python használatával a T-SQL-ben