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


Rövid útmutató: Adatstruktúrák és objektumok Pythonban, SQL-alapú gépi tanulással

A következőkre vonatkozik: Sql Server 2017 (14.x) és újabb verziók Felügyelt Azure SQL-példány

Ebben a rövid útmutatóban megtudhatja, hogyan használhat adatstruktúrákat és adattípusokat a Python használata során az SQL Server Machine Learning Servicesben, az Azure SQL Managed Instance Machine Learning Servicesben vagy az SQL Server Big Data-fürtökön. Megismerheti az adatok Python és SQL Server közötti áthelyezését, valamint az esetlegesen előforduló gyakori problémákat.

Az SQL machine learning a Python pandas-csomagra támaszkodik, amely nagyszerűen használható táblázatos adatokkal. Azonban nem adhat át skalárt a Pythonból az adatbázisba, és elvárhatja, hogy csak működjön. Ebben a rövid útmutatóban áttekinthet néhány alapvető adatstruktúra-definíciót, hogy felkészülhessen a táblázatos adatok Python és az adatbázis közötti átadásakor esetleg előforduló további problémákra.

Az elölről megismerendő fogalmak a következők:

  • Az adatkeret egy több oszlopból áll.
  • Az adatkeretek egyetlen oszlopa egy sorozatnak nevezett listaszerű objektum.
  • Az adatkeretek egyetlen értékét cellának nevezzük, amelyet index segítségével érünk el.

Hogyan teheti közzé egy számítás egyetlen eredményét adatkeretként, ha egy data.frame táblázatos struktúrát igényel? Az egyik válasz az egyetlen skaláris érték sorozatként való ábrázolása, amely könnyen átalakítható adatkeretté.

Megjegyzés:

Dátumok visszaadásakor a Python az SQL-ben a DATETIME-t használja, amely 1753-01-01 (-53690) és 9999-12-31 (2958463) korlátozott dátumtartományt használ.

Előfeltételek

A rövid útmutató futtatásához a következő előfeltételekre lesz szüksége.

Skaláris érték sorozatként

Ez a példa néhány egyszerű matematikai műveletet végez, és egy skalárt sorozattá alakít át.

  1. Egy sorozathoz szükség van egy indexre, amelyet manuálisan, az itt látható módon vagy programozott módon rendelhet hozzá.

    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)
    '
    

    Mivel az adatsor nem lett adatkeretté konvertálva, az értékek az Üzenetek ablakban jelennek meg, de láthatja, hogy az eredmények táblázatosabb formátumban vannak.

    Results

    STDOUT message(s) from external script: 
    0.5
    simple math example 1    0.5
    dtype: float64
    
  2. Az adatsor hosszának növeléséhez új értékeket adhat hozzá egy tömb használatával.

    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)
    '
    

    Ha nem ad meg indexet, a rendszer létrehoz egy indexet, amely 0-val kezdődő és a tömb hosszával végződő értékekkel rendelkezik.

    Results

    STDOUT message(s) from external script:
    0    0.5
    1    2.0
    dtype: float64
    
  3. Ha növeli az indexértékek számát, de nem ad hozzá új adatértékeket , az adatértékek ismétlődnek az adatsor kitöltéséhez.

    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
    

Adatsor átalakítása adatkeretté

A skaláris matematikai eredmények táblázatos szerkezetté alakítása után is olyan formátumra kell konvertálnia őket, amelyet az SQL Machine Learning képes kezelni.

  1. Az adatsorok data.frame formátumba való konvertálásához hívja meg a pandas DataFrame metódust.

    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))
    

    Az eredmény alább látható. Még ha az index használatával is lekér bizonyos értékeket a data.frame-ből, az indexértékek nem részei a kimenetnek.

    Results

    ResultValue
    0,5
    2

A kimeneti értékeket egy data.frame-be helyezzük

Most két matematikai eredménysor adott értékeit adja ki egy data.frame-ben. Az első a Python által létrehozott szekvenciális értékek indexével rendelkezik. A második a sztringértékek tetszőleges indexét használja.

  1. Az alábbi példa egy egész számindex használatával lekéri az adatsor értékét.

    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

    Ne feledje, hogy az automatikusan létrehozott index 0-kor kezdődik. Használjon tartományon kívüli indexértéket, és nézze meg, mi történik.

  2. Most szerezzen egyetlen értéket a másik adatkeretből egy karakterlánc index használatával.

    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

    Ha numerikus index használatával próbál értéket lekérni ebből az adatsorból, hibaüzenet jelenik meg.

Következő lépések

A speciális Python-függvények SQL-gépi tanulással való írásáról az alábbi rövid útmutatót követve tájékozódhat: