Mulai cepat: Struktur dan objek data menggunakan Python dengan pembelajaran mesin SQL
Berlaku untuk: SQL Server 2017 (14.x) dan Azure SQL Managed Instance yang lebih baru
Dalam mulai cepat ini, Anda akan mempelajari cara menggunakan struktur data dan jenis data saat menggunakan Python di SQL Server Pembelajaran Mesin Services, Azure SQL Managed Instance Pembelajaran Mesin 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 sangat 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 muka meliputi:
- Bingkai data adalah tabel dengan beberapa kolom.
- Satu kolom 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.
Database SQL pada salah satu platform ini:
- Layanan Pembelajaran Mesin SQL Server. Untuk menginstal, lihat panduan penginstalan Windows atau panduan penginstalan Linux.
- SQL Server Kluster Big Data. Lihat cara mengaktifkan Layanan Pembelajaran Mesin di Kluster Big Data SQL Server.
- Azure SQL Managed Instance Pembelajaran Mesin Services. Untuk informasi, lihat gambaran umum Azure SQL Managed Instance Pembelajaran Mesin Services.
Alat untuk menjalankan kueri SQL yang berisi skrip Python. Mulai cepat ini menggunakan Azure Data Studio.
Nilai skalar sebagai seri
Contoh ini melakukan beberapa matematika sederhana dan mengonversi skalar menjadi seri.
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
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
Jika Anda meningkatkan 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 ke struktur tabular, Anda masih perlu mengonversinya ke format yang dapat ditangani pembelajaran mesin SQL.
Untuk mengonversi seri ke 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.
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.
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: