Sdílet prostřednictvím


Rychlý start: Datové struktury a objekty pomocí Pythonu se strojovým učením SQL

Platí pro: SQL Server 2017 (14.x) a novější verze Azure SQL Managed Instance

V tomto rychlém startu se dozvíte, jak používat datové struktury a datové typy při použití Pythonu ve službách SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services nebo v clusterech s velkými objemy dat SQL Serveru. Dozvíte se o přesouvání dat mezi Pythonem a SQL Serverem a o běžných problémech, ke kterým může dojít.

Strojové učení SQL využívá balíček Pandas Pythonu, který je skvělý pro práci s tabulkovými daty. Do databáze ale nemůžete předat skalár z Pythonu a očekávat, že bude fungovat. V tomto rychlém startu si projdete některé základní definice datové struktury, abyste se připravili na další problémy, se kterými se můžete setkat při předávání tabulkových dat mezi Pythonem a databází.

Mezi koncepty, které je potřeba znát předem, patří:

  • Datový rámec je tabulka s více sloupci.
  • Jeden sloupec datového rámce je objekt podobný seznamu označovaný jako řada.
  • Jedna hodnota datového rámce se nazývá buňka a je přístupná indexem.

Jak byste zpřístupnili jediný výsledek výpočtu jako datový rámec, pokud datový rámec vyžaduje tabulkovou strukturu? Jednou z odpovědí je znázornění jedné skalární hodnoty jako řady, která se snadno převede na datový rámec.

Poznámka:

Při vracení kalendářních dat python v SQL používá dateTIME s omezeným rozsahem dat 1753-01-01(-53690) až 9999-12-31(2958463).

Požadavky

Ke spuštění tohoto rychlého startu potřebujete následující požadavky.

Skalární hodnota jako řada

Tento příklad provede několik jednoduchých matematických operací a převede skalár na řadu.

  1. Řada vyžaduje index, který můžete přiřadit ručně, jak je znázorněno zde, nebo programově.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    print(c)
    s = pandas.Series(c, index =["simple math example 1"])
    print(s)
    '
    

    Protože řady nebyly převedeny na data.frame, vrátí se hodnoty v okně Zprávy, ale můžete vidět, že výsledky jsou ve více tabulkovém formátu.

    Results

    STDOUT message(s) from external script: 
    0.5
    simple math example 1    0.5
    dtype: float64
    
  2. Pokud chcete zvětšit délku řady, můžete přidat nové hodnoty pomocí pole.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    d = a*b
    s = pandas.Series([c,d])
    print(s)
    '
    

    Pokud nezadáte index, vygeneruje se index, který obsahuje hodnoty začínající hodnotou 0 a končící délkou pole.

    Results

    STDOUT message(s) from external script:
    0    0.5
    1    2.0
    dtype: float64
    
  3. Pokud zvýšíte počet hodnot indexu , ale nepřidáte nové datové hodnoty, datové hodnoty se opakují, aby vyplnily řadu.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    a = 1
    b = 2
    c = a/b
    s = pandas.Series(c, index =["simple math example 1", "simple math example 2"])
    print(s)
    '
    

    Results

    STDOUT message(s) from external script:
    0.5
    simple math example 1    0.5
    simple math example 2    0.5
    dtype: float64
    

Převod řad na datový rámec

Po převodu skalárních matematických výsledků na tabulkovou strukturu je stále potřeba je převést na formát, který dokáže strojové učení SQL zpracovat.

  1. Chcete-li převést sérii na DataFrame, zavolejte metodu pandas.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    import pandas as pd
    a = 1
    b = 2
    c = a/b
    d = a*b
    s = pandas.Series([c,d])
    print(s)
    df = pd.DataFrame(s)
    OutputDataSet = df
    '
    WITH RESULT SETS((ResultValue FLOAT))
    

    Výsledek je uvedený níže. I když index použijete k získání konkrétních hodnot z data.frame, hodnoty indexu nejsou součástí výstupu.

    Results

    ResultValue
    0,5
    2

Výstupní hodnoty do data.frame

Teď vypíšete konkrétní hodnoty ze dvou řad matematických výsledků v datovém rámci. První má index sekvenčních hodnot vygenerovaných Pythonem. Druhý používá libovolný index řetězcových hodnot.

  1. Následující příklad získá hodnotu z řady pomocí celočíselného indexu.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    import pandas as pd
    a = 1
    b = 2
    c = a/b
    d = a*b
    s = pandas.Series([c,d])
    print(s)
    df = pd.DataFrame(s, index=[1])
    OutputDataSet = df
    '
    WITH RESULT SETS((ResultValue FLOAT))
    

    Results

    ResultValue
    2.0

    Nezapomeňte, že automaticky vygenerovaný index začíná na 0. Zkuste použít hodnotu indexu mimo rozsah a podívejte se, co se stane.

  2. Teď získejte jednu hodnotu z druhého datového rámce pomocí řetězcového indexu.

    EXECUTE sp_execute_external_script @language = N'Python'
        , @script = N'
    import pandas as pd
    a = 1
    b = 2
    c = a/b
    s = pandas.Series(c, index =["simple math example 1", "simple math example 2"])
    print(s)
    df = pd.DataFrame(s, index=["simple math example 1"])
    OutputDataSet = df
    '
    WITH RESULT SETS((ResultValue FLOAT))
    

    Results

    ResultValue
    0,5

    Pokud se pokusíte použít číselný index k získání hodnoty z této řady, zobrazí se chyba.

Další kroky

Pokud se chcete dozvědět o psaní pokročilých funkcí Pythonu pomocí strojového učení SQL, postupujte podle tohoto rychlého startu: