Delen via


Quickstart: Gegevensstructuren en -objecten met behulp van Python met SQL Machine Learning

Van toepassing op: SQL Server 2017 (14.x) en latere versies van Azure SQL Managed Instance

In deze quickstart leert u hoe u gegevensstructuren en gegevenstypen gebruikt wanneer u Python gebruikt in SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services of op BIG Data-clusters van SQL Server. U leert hoe u gegevens verplaatst tussen Python en SQL Server en de veelvoorkomende problemen die kunnen optreden.

SQL Machine Learning is afhankelijk van het Python Pandas-pakket . Dit is ideaal voor het werken met tabelgegevens. U kunt echter geen scalaire gegevens doorgeven van Python aan uw database en verwachten dat deze alleen werkt. In deze quickstart bekijkt u enkele basisdefinities voor gegevensstructuur om u voor te bereiden op aanvullende problemen die u kunt tegenkomen bij het doorgeven van tabelgegevens tussen Python en de database.

Concepten die u vooraf moet kennen, zijn onder andere:

  • Een gegevensframe is een tabel met meerdere kolommen.
  • Eén kolom van een gegevensframe is een lijstachtig object dat een reeks wordt genoemd.
  • Een enkele waarde van een gegevensframe wordt een cel genoemd en wordt benaderd via de index.

Hoe zou u het enige resultaat van een berekening als een gegevensframe weergeven als een data.frame een tabellaire structuur vereist? Eén antwoord is het weergeven van de enkele scalaire waarde als een reeks, die eenvoudig wordt geconverteerd naar een gegevensframe.

Opmerking

Bij het retourneren van datums maakt Python in SQL gebruik van DATETIME met een beperkt datumbereik van 1753-01-01(-53690) tot en met 9999-12-31(2958463).

Vereiste voorwaarden

U hebt de volgende vereisten nodig om deze quickstart uit te voeren.

Scalaire waarde als een reeks

In dit voorbeeld wordt een aantal eenvoudige wiskundige bewerkingen voltooid en wordt een scalaire waarde omgezet in een reeks.

  1. Voor een reeks is een index vereist, die u handmatig kunt toewijzen, zoals hier wordt weergegeven of programmatisch.

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

    Omdat de reeks niet is geconverteerd naar een data.frame, worden de waarden geretourneerd in het venster Berichten, maar u kunt zien dat de resultaten een meer tabellaire indeling hebben.

    resultaten

    STDOUT message(s) from external script: 
    0.5
    simple math example 1    0.5
    dtype: float64
    
  2. Als u de lengte van de reeks wilt verhogen, kunt u nieuwe waarden toevoegen met behulp van een matrix.

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

    Als u geen index opgeeft, wordt er een index gegenereerd met waarden die beginnen met 0 en eindigen op de lengte van de matrix.

    resultaten

    STDOUT message(s) from external script:
    0    0.5
    1    2.0
    dtype: float64
    
  3. Als u het aantal indexwaarden verhoogt, maar geen nieuwe gegevenswaarden toevoegt, worden de gegevenswaarden herhaald om de reeks te vullen.

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

    resultaten

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

Reeks converteren naar gegevensframe

Nadat u de scalaire wiskundige resultaten hebt geconverteerd naar een tabellaire structuur, moet u ze nog steeds converteren naar een indeling die met SQL Machine Learning kan worden verwerkt.

  1. Als u een reeks wilt converteren naar een data.frame, roept u de pandas DataFrame-methode aan.

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

    Het resultaat wordt hieronder weergegeven. Zelfs als u de index gebruikt om specifieke waarden op te halen uit data.frame, maken de indexwaarden geen deel uit van de uitvoer.

    resultaten

    ResultValue
    0,5
    2

Uitvoerwaarden in data.frame

Nu voert u specifieke waarden uit twee reeks wiskundige resultaten uit in een data.frame. De eerste bevat een index van sequentiële waarden die zijn gegenereerd door Python. De tweede maakt gebruik van een willekeurige index van tekenreekswaarden.

  1. In het volgende voorbeeld wordt een waarde uit de reeks opgehaald met behulp van een gehele getalindex.

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

    resultaten

    ResultValue
    2.0

    Houd er rekening mee dat de automatisch gegenereerde index begint bij 0. Probeer een buiten bereikindexwaarde te gebruiken en kijk wat er gebeurt.

  2. Haal nu één waarde op uit het andere gegevensframe met behulp van een tekenreeksindex.

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

    resultaten

    ResultValue
    0,5

    Als u probeert een numerieke index te gebruiken om een waarde op te halen uit deze reeks, krijgt u een foutmelding.

Volgende stappen

Volg deze quickstart voor meer informatie over het schrijven van geavanceerde Python-functies met SQL Machine Learning: