Aracılığıyla paylaş


Python öğreticisi: Verileri keşfetme ve görselleştirme

Şunlar için geçerlidir: SQL Server 2017 (14.x) ve sonraki sürümleri Azure SQL Yönetimli Örnek

Bu beş bölümden oluşan öğretici serisinin ikinci bölümünde örnek verileri keşfedecek ve bazı çizimler oluşturacaksınız. Daha sonra Python'da grafik nesnelerini seri hale getirme ve ardından bu nesnelerin seri durumdan çıkarma ve çizimler yapma hakkında bilgi edineceksiniz.

Bu makalede şunları yapacaksınız:

  • Örnek verileri gözden geçirme
  • T-SQL'de Python kullanarak çizimler oluşturma

Birinci bölümde önkoşulları yüklemiş ve örnek veritabanını geri yüklemişsinizdir.

Üçüncü bölümde, bir Transact-SQL işlevi kullanarak ham verilerden özellik oluşturmayı öğreneceksiniz. Ardından bu işlevi saklı yordamdan çağırarak özellik değerlerini içeren bir tablo oluşturacaksınız.

Dördüncü bölümde, sql server saklı yordamını kullanarak modeli oluşturmak ve eğitmek için modülleri yükleyip gerekli işlevleri çağıracaksınız.

Beşinci bölümde, dördüncü bölümde eğitip kaydettiğiniz modelleri nasıl kullanıma hazır hale getirmeniz gerektiğini öğreneceksiniz.

Verileri gözden geçirme

İlk olarak, NYC Taxi verilerini kullanmayı kolaylaştırmak için bazı değişiklikler yaptığımızdan veri şemasına göz atmak için bir dakika bekleyin

  • Özgün veri kümesi, taksi tanımlayıcıları ve seyahat kayıtları için ayrı dosyalar kullandı. Madalyon, hack_license vepickup_datetime sütunlarında bulunan iki özgün veri kümesine katıldık.
  • Özgün veri kümesi birçok dosyaya yayılmış ve oldukça büyük. Özgün kayıt sayısının sadece %1'ini elde etmek için örneklemeyi düşürdük. Geçerli veri tablosunda 1.703.957 satır ve 23 sütun vardır.

Taksi tanımlayıcıları

Madalyon sütunu, taksinin benzersiz kimlik numarasını temsil eder.

hack_license sütunu taksi sürücüsünün lisans numarasını (anonimleştirilmiş) içerir.

Seyahat ve ücret kayıtları

Her seyahat kaydında teslim alma ve bırakma yeri ve zamanı ile seyahat mesafesi yer alır.

Her ücret kaydı, ödeme türü, toplam ödeme tutarı ve bahşiş tutarı gibi ödeme bilgilerini içerir.

Son üç sütun çeşitli makine öğrenmesi görevleri için kullanılabilir. tip_amount sütunu sürekli sayısal değerler içerir ve regresyon analizi için etiket sütunu olarak kullanılabilir. İşaretli sütun yalnızca "evet/hayır" değerlerine sahiptir ve ikili sınıflandırma için kullanılır. tip_class sütunu birden çok sınıf etiketine sahiptir ve bu nedenle çok sınıflı sınıflandırma görevleri için etiket olarak kullanılabilir.

Etiket sütunları için kullanılan değerlerin tümü, şu iş kuralları kullanılarak tip_amount sütununa dayanmaktadır:

  • Etiket sütunu tipped 0 ve 1 olası değerlerine sahiptir

    0 ise tip_amount> , tipped = 1; aksi takdirde tipped = 0

  • Etiket sütunu tip_class 0-4 olası sınıf değerlerine sahiptir

    Sınıf 0: tip_amount = $0

    Sınıf 1: tip_amount> $0 ve tip_amount<= $5

    Sınıf 2: tip_amount> $5 ve tip_amount<= $10

    Sınıf 3: tip_amount> $10 ve tip_amount<= $20

    Sınıf 4: tip_amount> $20

T-SQL'de Python kullanarak çizimler oluşturma

Veri bilimi çözümü geliştirmek genellikle yoğun veri keşfi ve veri görselleştirmeyi içerir. Görselleştirme, veri ve aykırı değerlerin dağılımını anlamak için çok güçlü bir araç olduğundan Python, verileri görselleştirmek için birçok paket sağlar. Matplotlib modülü görselleştirme için en popüler kitaplıklardan biridir ve histogramlar, dağılım çizimleri, kutu çizimleri ve diğer veri araştırma grafikleri oluşturmaya yönelik birçok işlev içerir.

Bu bölümde saklı yordamları kullanarak çizimlerle çalışmayı öğreneceksiniz. Görüntüyü sunucuda açmak yerine Python nesnesini plotvarbinary verileri olarak depolar ve sonra bunu başka bir yerde paylaşılabilen veya görüntülenebilen bir dosyaya yazarsınız.

Varbinary veri formatında bir çizim oluşturma

Saklı yordam, serileştirilmiş bir Python figure nesnesini varbinary veri akışı olarak döndürür. İkili verileri doğrudan görüntüleyemezsiniz, ancak verileri seri durumdan çıkarmak ve görüntülemek için istemcideki Python kodunu kullanabilir ve ardından görüntü dosyasını bir istemci bilgisayara kaydedebilirsiniz.

  1. PyPlotMatplotlib depolanmış yordamını oluşturun.

    Aşağıdaki komut dosyasında:

    • Değişken @query, SELECT tipped FROM nyctaxi_sample olarak betik giriş değişkenine bağımsız değişken olarak Python kod bloğuna geçirilen sorgu metnini tanımlar@input_data_1.
    • Python betiği oldukça basittir: matplotlibfigure nesneleri histogram ve dağılım çizimi yapmak için kullanılır ve bu nesneler daha sonra kitaplığı kullanılarak pickle serileştirilir.
    • Python grafik nesnesi çıktı için bir pandas DataFrame'e seri hale getirilir.
    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. Saklı yordamı hiçbir bağımsız değişken olmadan çalıştırarak, giriş sorgusu olarak hard-code edilmiş verilerden bir çizim oluşturun.

    EXEC [dbo].[PyPlotMatplotlib]
    
  3. Sonuçlar şuna benzer olmalıdır:

    plot
    0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
     0xFFD8FFE000104A4649...
    
  4. Bir Python istemcisinden artık ikili çizim nesnelerini oluşturan SQL Server örneğine bağlanabilir ve çizimleri görüntüleyebilirsiniz.

    Bunu yapmak için sunucu adını, veritabanı adını ve kimlik bilgilerini uygun şekilde değiştirerek aşağıdaki Python kodunu çalıştırın (Windows kimlik doğrulaması için UID ve PWD parametrelerini Trusted_Connection=True ile değiştirin). Python sürümünün istemcide ve sunucuda aynı olduğundan emin olun. Ayrıca istemcinizdeki Python kitaplıklarının (matplotlib gibi) sunucuda yüklü kitaplıklara göre aynı veya daha yüksek bir sürüm olduğundan emin olun. Yüklü paketlerin ve sürümlerinin listesini görüntülemek için bkz. Python paket bilgilerini alma.

    %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. Bağlantı başarılı olursa aşağıdakine benzer bir ileti görmeniz gerekir:

    Çizimler dizine kaydedilir: xxxx

  6. Çıkış dosyası Python çalışma dizininde oluşturulur. Çizimi görüntülemek için Python çalışma dizinini bulun ve dosyayı açın. Aşağıdaki görüntüde, istemci bilgisayara kaydedilmiş bir çizim gösterilmektedir.

    İpucu tutarı ile Fare tutarı

Sonraki Adımlar

Bu makalede şunları yapacaksınız:

  • Örnek veriler gözden geçirildi
  • T-SQL'de Python kullanılarak oluşturulan çizimler