Tutorial Python: Menjelajahi dan memvisualisasikan data

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

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 mengoprasionalkan 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 (anonim).

Catatan perjalanan dan tarif

Setiap catatan perjalanan mencakup lokasi dan waktu penjemputan dan pengantaran, serta 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 nilai yang mungkin 0 dan 1

    Jika tip_amount> 0, tipped = 1; jika tidak tipped = 0

  • Kolom label tip_class memiliki kemungkinan nilai kelas 0-4

    Kelas 0: tip_amount = $0

    Kelas 1: tip_amount> $0 dan tip_amount<= $5

    Kelas 2: tip_amount> $5 dan tip_amount<= $10

    Kelas 3: tip_amount> $10 dan tip_amount<= $20

    Kelas 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 ampuh 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.

  1. Buat prosedur tersimpan PyPlotMatplotlib.

    Jalankan skrip berikut:

    • Variabel @query menentukan teks SELECT tipped FROM nyctaxi_samplekueri , yang diteruskan ke blok kode Python sebagai argumen ke variabel input skrip, @input_data_1.
    • Skrip Python cukup sederhana: objek matplotlibfigure digunakan untuk membuat histogram dan plot sebar, dan objek-objek ini kemudian diserialisasikan menggunakan pickle 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
    
  2. Sekarang jalankan prosedur tersimpan tanpa argumen untuk menghasilkan plot dari data yang dikodekan secara permanen sebagai kueri input.

    EXEC [dbo].[PyPlotMatplotlib]
    
  3. Hasilnya harus seperti ini:

    plot
    0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
    
  4. 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 dan PWD dengan Trusted_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 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())
    
  5. Jika koneksi berhasil, Anda akan melihat pesan seperti berikut ini:

    Plot disimpan dalam direktori: xxxx

  6. 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.

    Jumlah tip vs jumlah Tip jumlah tarif

Langkah berikutnya

Dalam artikel ini, Anda:

  • Meninjau data sampel
  • Membuat plot menggunakan Python di T-SQL