Megosztás a következőn keresztül:


Python-oktatóanyag: Adatok feltárása és vizualizációja

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 tipped lehetséges értéke 0 és 1

    Ha tip_amount> 0, tipped = 1; egyébként tipped = 0

  • A címkeoszlop tip_class lehetséges osztályértékei 0–4

    0. osztály: tip_amount = $0

    1. osztály: tip_amount> $0 és tip_amount<= $5

    2. osztály: tip_amount> $5 és tip_amount<= $10

    3. osztály: tip_amount> $10 és tip_amount<= $20

    4. 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.

  1. Hozza létre a PyPlotMatplotlib tárolt eljárást.

    A következő szkriptben:

    • A változó @query határozza meg a lekérdezés szövegét SELECT 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ű: matplotlibfigure objektumokkal készíti el a hisztogramot és a pontdiagramot, és ezeket az pickle objektumokat 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
    
  2. 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]
    
  3. Az eredményeknek a következőhöz hasonlónak kell lenniük:

    plot
    0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
    
  4. 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 és PWD paramétereket a Trusted_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())
    
  5. Ha a kapcsolat sikeres, az alábbihoz hasonló üzenetnek kell megjelennie:

    A diagramok a következő könyvtárba vannak mentve: xxxx

  6. 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ó.

    Tipp összege és Viteldíj összege

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