Tutorial Python: Menjelajahi dan memvisualisasikan data
Berlaku untuk: SQL Server 2017 (14.x) dan Azure SQL Managed Instance yang lebih baru
Di bagian dua dari seri tutorial lima bagian ini, Anda akan menjelajahi data sampel dan menghasilkan beberapa plot. Nantinya, Anda akan mempelajari cara membuat serialisasi objek grafis di Python, lalu mendeserialisasi objek tersebut dan membuat plot.
Dalam artikel ini, Anda akan:
- Meninjau data sampel
- Membuat plot menggunakan Python di T-SQL
Di bagian satu, Anda menginstal prasyarat dan memulihkan database sampel.
Di bagian tiga, Anda akan mempelajari cara membuat fitur dari data mentah dengan menggunakan fungsi Transact-SQL. Anda kemudian akan memanggil fungsi tersebut dari prosedur tersimpan untuk membuat tabel yang berisi nilai fitur.
Di bagian empat, Anda akan memuat modul dan memanggil fungsi yang diperlukan untuk membuat dan melatih model menggunakan prosedur tersimpan SQL Server.
Di bagian lima, Anda akan mempelajari cara mengoperalisasi model yang Anda latih dan simpan di bagian empat.
Tinjau datanya
Pertama, luangkan waktu satu menit untuk menelusuri skema data, karena kami telah membuat beberapa perubahan untuk mempermudah penggunaan data Taksi NYC
- Himpunan data asli menggunakan file terpisah untuk pengidentifikasi taksi dan catatan perjalanan. Kami telah menggabungkan dua himpunan data asli pada medali kolom, hack_license, dan pickup_datetime.
- Himpunan data asli menyeluruh banyak file dan cukup besar. Kami telah melakukan downsampled untuk mendapatkan hanya 1% dari jumlah rekaman asli. Tabel data saat ini memiliki 1.703.957 baris dan 23 kolom.
Pengidentifikasi taksi
Kolom medali mewakili nomor ID unik taksi.
Kolom hack_license berisi nomor SIM taksi (dianonimkan).
Catatan perjalanan dan tarif
Setiap catatan perjalanan mencakup lokasi dan waktu penjemputan dan pengantaran, dan jarak perjalanan.
Setiap catatan tarif mencakup informasi pembayaran seperti jenis pembayaran, jumlah total pembayaran, dan jumlah tip.
Tiga kolom terakhir dapat digunakan untuk berbagai tugas pembelajaran mesin. Kolom tip_amount berisi nilai numerik berkelanjutan dan dapat digunakan sebagai kolom label untuk analisis regresi. Kolom berujung hanya memiliki nilai ya/tidak dan digunakan untuk klasifikasi biner. Kolom tip_class memiliki beberapa label kelas dan oleh karena itu dapat digunakan sebagai label untuk tugas klasifikasi multi-kelas.
Nilai yang digunakan untuk kolom label semuanya didasarkan pada tip_amount
kolom , menggunakan aturan bisnis ini:
Kolom label
tipped
memiliki kemungkinan nilai 0 dan 1Jika
tip_amount
> 0,tipped
= 1; jika tidaktipped
= 0Kolom label
tip_class
memiliki kemungkinan nilai kelas 0-4Kelas 0:
tip_amount
= $0Kelas 1:
tip_amount
> $0 dantip_amount
<= $5Kelas 2:
tip_amount
> $5 dantip_amount
<= $10Kelas 3:
tip_amount
> $10 dantip_amount
<= $20Kelas 4:
tip_amount
> $20
Membuat plot menggunakan Python di T-SQL
Mengembangkan solusi ilmu data biasanya mencakup eksplorasi data intensif dan visualisasi data. Karena visualisasi adalah alat yang sangat kuat untuk memahami distribusi data dan outlier, Python menyediakan banyak paket untuk memvisualisasikan data. Modul matplotlib adalah salah satu pustaka yang lebih populer untuk visualisasi, dan mencakup banyak fungsi untuk membuat histogram, plot sebar, plot kotak, dan grafik eksplorasi data lainnya.
Di bagian ini, Anda mempelajari cara bekerja dengan plot menggunakan prosedur tersimpan. Daripada membuka gambar di server, Anda menyimpan objek plot
Python sebagai data varbinary , lalu menulisnya ke file yang dapat dibagikan atau dilihat di tempat lain.
Membuat plot sebagai data varbinary
Prosedur tersimpan mengembalikan objek Python figure
berseri sebagai aliran data varbinary . Anda tidak dapat melihat data biner secara langsung, tetapi Anda dapat menggunakan kode Python pada klien untuk mendeserialisasi dan melihat gambar, lalu menyimpan file gambar di komputer klien.
Buat prosedur tersimpan PyPlotMatplotlib.
Jalankan skrip berikut:
- Variabel
@query
menentukan teksSELECT tipped FROM nyctaxi_sample
kueri , yang diteruskan ke blok kode Python sebagai argumen ke variabel input skrip,@input_data_1
. - Skrip Python cukup sederhana: objek matplotlib
figure
digunakan untuk membuat histogram dan plot sebar, dan objek-objek ini kemudian diserialisasikan menggunakanpickle
pustaka. - Objek grafis Python diserialisasikan ke DataFrame pandas untuk output.
DROP PROCEDURE IF EXISTS PyPlotMatplotlib; GO CREATE PROCEDURE [dbo].[PyPlotMatplotlib] AS BEGIN SET NOCOUNT ON; DECLARE @query nvarchar(max) = N'SELECT cast(tipped as int) as tipped, tip_amount, fare_amount FROM [dbo].[nyctaxi_sample]' EXECUTE sp_execute_external_script @language = N'Python', @script = N' import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt import pandas as pd import pickle fig_handle = plt.figure() plt.hist(InputDataSet.tipped) plt.xlabel("Tipped") plt.ylabel("Counts") plt.title("Histogram, Tipped") plot0 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"]) plt.clf() plt.hist(InputDataSet.tip_amount) plt.xlabel("Tip amount ($)") plt.ylabel("Counts") plt.title("Histogram, Tip amount") plot1 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"]) plt.clf() plt.hist(InputDataSet.fare_amount) plt.xlabel("Fare amount ($)") plt.ylabel("Counts") plt.title("Histogram, Fare amount") plot2 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"]) plt.clf() plt.scatter( InputDataSet.fare_amount, InputDataSet.tip_amount) plt.xlabel("Fare Amount ($)") plt.ylabel("Tip Amount ($)") plt.title("Tip amount by Fare amount") plot3 = pd.DataFrame(data =[pickle.dumps(fig_handle)], columns =["plot"]) plt.clf() OutputDataSet = plot0.append(plot1, ignore_index=True).append(plot2, ignore_index=True).append(plot3, ignore_index=True) ', @input_data_1 = @query WITH RESULT SETS ((plot varbinary(max))) END GO
- Variabel
Sekarang jalankan prosedur tersimpan tanpa argumen untuk menghasilkan plot dari data yang dikodekan secara permanen sebagai kueri input.
EXEC [dbo].[PyPlotMatplotlib]
Hasilnya harus seperti ini:
plot 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649... 0xFFD8FFE000104A4649...
Dari klien Python, Anda sekarang dapat terhubung ke instans SQL Server yang menghasilkan objek plot biner, dan melihat plot.
Untuk melakukan ini, jalankan kode Python berikut, ganti nama server, nama database, dan kredensial yang sesuai (untuk autentikasi Windows, ganti
UID
parameter danPWD
denganTrusted_Connection=True
). Pastikan versi Python sama pada klien dan server. Pastikan juga bahwa pustaka Python pada klien Anda (seperti matplotlib) adalah versi yang sama atau lebih tinggi yang relatif terhadap pustaka yang diinstal di server. Untuk melihat daftar paket yang diinstal dan versinya, lihat Mendapatkan informasi paket Python.%matplotlib notebook import pyodbc import pickle import os cnxn = pyodbc.connect('DRIVER=SQL Server;SERVER={SERVER_NAME};DATABASE={DB_NAME};UID={USER_NAME};PWD={PASSWORD}') cursor = cnxn.cursor() cursor.execute("EXECUTE [dbo].[PyPlotMatplotlib]") tables = cursor.fetchall() for i in range(0, len(tables)): fig = pickle.loads(tables[i][0]) fig.savefig(str(i)+'.png') print("The plots are saved in directory: ",os.getcwd())
Jika koneksi berhasil, Anda akan melihat pesan seperti berikut:
Plot disimpan dalam direktori: xxxx
File output dibuat di direktori kerja Python. Untuk melihat plot, temukan direktori kerja Python, dan buka file. Gambar berikut menunjukkan plot yang disimpan di komputer klien.
Langkah berikutnya
Dalam artikel ini, Anda:
- Meninjau data sampel
- Membuat plot menggunakan Python di T-SQL