Mulai cepat: Struktur dan objek data menggunakan Python dengan pembelajaran mesin SQL

Berlaku untuk: SQL Server 2017 (14.x) dan yang lebih baru Azure SQL Managed Instance

Dalam mulai cepat ini, Anda akan mempelajari cara menggunakan struktur data dan jenis data saat menggunakan Python di SQL Server Machine Learning Services, Azure SQL Managed Instance Machine Learning Services, atau di SQL Server Kluster Big Data. Anda akan mempelajari tentang memindahkan data antara Python dan SQL Server, dan masalah umum yang mungkin terjadi.

Pembelajaran mesin SQL bergantung pada paket panda Python, yang bagus untuk bekerja dengan data tabular. Namun, Anda tidak dapat meneruskan skalar dari Python ke database Anda dan mengharapkannya hanya berfungsi. Dalam mulai cepat ini, Anda akan meninjau beberapa definisi struktur data dasar, untuk mempersiapkan Anda untuk masalah tambahan yang mungkin Anda jalankan saat meneruskan data tabular antara Python dan database.

Konsep untuk mengetahui di depan meliputi:

  • Bingkai data adalah tabel dengan beberapa kolom.
  • Kolom tunggal bingkai data adalah objek seperti daftar yang disebut seri.
  • Satu nilai bingkai data disebut sel dan diakses oleh indeks.

Bagaimana Anda mengekspos satu hasil perhitungan sebagai bingkai data, jika data.frame memerlukan struktur tabular? Salah satu jawabannya adalah mewakili nilai skalar tunggal sebagai seri, yang mudah dikonversi ke bingkai data.

Catatan

Saat mengembalikan tanggal, Python di SQL menggunakan DATETIME yang memiliki rentang tanggal terbatas 1753-01-01(-53690) hingga 9999-12-31(2958463).

Prasyarat

Anda memerlukan prasyarat berikut untuk menjalankan mulai cepat ini.

Nilai skalar sebagai seri

Contoh ini melakukan beberapa matematika sederhana dan mengonversi skalar menjadi seri.

  1. Seri memerlukan indeks, yang dapat Anda tetapkan secara manual, seperti yang ditunjukkan di sini, atau secara terprogram.

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

    Karena seri belum dikonversi ke data.frame, nilai dikembalikan di jendela Pesan, tetapi Anda dapat melihat bahwa hasilnya dalam format yang lebih tabular.

    Hasil

    STDOUT message(s) from external script: 
    0.5
    simple math example 1    0.5
    dtype: float64
    
  2. Untuk menambah panjang seri, Anda dapat menambahkan nilai baru, menggunakan array.

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

    Jika Anda tidak menentukan indeks, indeks dihasilkan yang memiliki nilai yang dimulai dengan 0 dan diakhir dengan panjang array.

    Hasil

    STDOUT message(s) from external script:
    0    0.5
    1    2.0
    dtype: float64
    
  3. Jika Anda menambah jumlah nilai indeks , tetapi tidak menambahkan nilai data baru, nilai data diulang untuk mengisi seri.

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

    Hasil

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

Mengonversi seri ke bingkai data

Setelah mengonversi hasil matematika skalar menjadi struktur tabular, Anda masih perlu mengonversinya ke format yang dapat ditangani pembelajaran mesin SQL.

  1. Untuk mengonversi seri menjadi data.frame, panggil metode pandas DataFrame .

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

    Hasilnya ditunjukkan di bawah ini. Bahkan jika Anda menggunakan indeks untuk mendapatkan nilai tertentu dari data.frame, nilai indeks bukan bagian dari output.

    Hasil

    ResultValue
    0,5
    2

Nilai output ke dalam data.frame

Sekarang Anda akan menghasilkan nilai tertentu dari dua seri hasil matematika dalam data.frame. Yang pertama memiliki indeks nilai berurutan yang dihasilkan oleh Python. Yang kedua menggunakan indeks nilai string arbitrer.

  1. Contoh berikut mendapatkan nilai dari seri menggunakan indeks bilangan bulat.

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

    Hasil

    ResultValue
    2.0

    Ingatlah bahwa indeks yang dihasilkan secara otomatis dimulai pada 0. Coba gunakan nilai indeks di luar rentang dan lihat apa yang terjadi.

  2. Sekarang dapatkan satu nilai dari bingkai data lain menggunakan indeks string.

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

    Hasil

    ResultValue
    0.5

    Jika Anda mencoba menggunakan indeks numerik untuk mendapatkan nilai dari seri ini, Anda mendapatkan kesalahan.

Langkah berikutnya

Untuk mempelajari tentang menulis fungsi Python tingkat lanjut dengan pembelajaran mesin SQL, ikuti mulai cepat ini: