Aracılığıyla paylaş


Python öğreticisi: T-SQL kullanarak Veri Özellikleri oluşturma

Ş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 üçüncü bölümünde, bir Transact-SQL işlevi kullanarak ham verilerden özellik oluşturmayı öğreneceksiniz. Ardından bu işlevi sql saklı yordamından çağırarak özellik değerlerini içeren bir tablo oluşturacaksınız.

Ham verilerden özellik oluşturan özellik mühendisliği süreci, gelişmiş analiz modellemesinde kritik bir adım olabilir.

Bu makalede şunları yapacaksınız:

  • Seyahat mesafesini hesaplamak için özel bir işlevi değiştirme
  • Başka bir özel işlev kullanarak özellikleri kaydetme

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

İkinci bölümde örnek verileri incelediniz ve bazı çizimler 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.

İşlevi Tanımlama

Özgün verilerde bildirilen uzaklık değerleri, bildirilen ölçüm uzaklığı temelindedir ve coğrafi uzaklığı veya kat edilen mesafeyi temsil etmemektedir. Bu nedenle, kaynak NYC Taxi veri kümesinde bulunan koordinatları kullanarak teslim alma ve bırakma noktaları arasındaki doğrudan mesafeyi hesaplamanız gerekir. Özel bir Transact-SQL işlevinde Haversine formülünü kullanarak bunu yapabilirsiniz.

Haversine formülünü kullanarak uzaklığı hesaplamak için fnCalculateDistance adlı bir özel T-SQL işlevi kullanacak ve tüm özellikleri içeren bir tablo oluşturmak için fnEngineerFeatures adlı ikinci bir özel T-SQL işlevi kullanacaksınız.

fnCalculateDistance kullanarak seyahat mesafesini hesaplama

fnCalculateDistance işlevi örnek veritabanına eklenir. Kodu gözden geçirmek için bir dakika bekleyin:

  1. Management Studio'da Programlanabilirlik'i genişletin, İşlevler'i ve ardından Skaler değerli işlevler'i genişletin.

  2. fnCalculateDistance öğesine sağ tıklayın ve değiştir'i seçerek Transact-SQL betiğini yeni bir sorgu penceresinde açın.

    Şuna benzer şekilde görünecektir:

    CREATE FUNCTION [dbo].[fnCalculateDistance] (@Lat1 float, @Long1 float, @Lat2 float, @Long2 float)
    -- User-defined function that calculates the direct distance between two geographical coordinates
    RETURNS float
    AS
    BEGIN
      DECLARE @distance decimal(28, 10)
      -- Convert to radians
      SET @Lat1 = @Lat1 / 57.2958
      SET @Long1 = @Long1 / 57.2958
      SET @Lat2 = @Lat2 / 57.2958
      SET @Long2 = @Long2 / 57.2958
      -- Calculate distance
      SET @distance = (SIN(@Lat1) * SIN(@Lat2)) + (COS(@Lat1) * COS(@Lat2) * COS(@Long2 - @Long1))
      --Convert to miles
      IF @distance <> 0
      BEGIN
        SET @distance = 3958.75 * ATAN(SQRT(1 - POWER(@distance, 2)) / @distance);
      END
      RETURN @distance
    END
    GO
    

Notlar:

  • İşlev, skaler değerli bir işlevdir ve önceden tanımlanmış türde tek bir veri değeri döndürür.
  • işlevi, enlem ve boylam değerlerini giriş olarak alır ve seyahat toplama ve bırakma konumlarından elde edilir. Haversine formülü, konumları radyanlara dönüştürür ve bu iki konum arasındaki doğrudan uzaklığı hesaplamak için bu değerleri kullanır.

fnEngineerFeatures kullanarak özellikleri kaydetme

Hesaplanan değeri modeli eğitmek için kullanılabilecek bir tabloya eklemek için fnEngineerFeatures adlı özel T-SQL işlevini kullanacaksınız. Bu işlev, birden çok sütunu giriş olarak alır ve birden çok özellik sütunu içeren bir tabloyu çıkış olarak verir. Bu işlevin amacı, model oluştururken kullanılmak üzere bir özellik kümesi oluşturmaktır. fnEngineerFeatures işlevi, teslim alma ve bırakma konumları arasındaki doğrudan mesafeyi almak için daha önce oluşturulmuş olan fnCalculateDistance T-SQL işlevini çağırır.

Kodu gözden geçirmek için bir dakika bekleyin:

CREATE FUNCTION [dbo].[fnEngineerFeatures] (
@passenger_count int = 0,
@trip_distance float = 0,
@trip_time_in_secs int = 0,
@pickup_latitude float = 0,
@pickup_longitude float = 0,
@dropoff_latitude float = 0,
@dropoff_longitude float = 0)
RETURNS TABLE
AS
  RETURN
  (
  -- Add the SELECT statement with parameter references here
  SELECT
    @passenger_count AS passenger_count,
    @trip_distance AS trip_distance,
    @trip_time_in_secs AS trip_time_in_secs,
    [dbo].[fnCalculateDistance](@pickup_latitude, @pickup_longitude, @dropoff_latitude, @dropoff_longitude) AS direct_distance
  )
GO

Bu işlevin çalıştığını doğrulamak için bunu kullanarak tarifeli mesafenin 0 olduğu ancak teslim ve bırakma konumlarının farklı olduğu yolculukların coğrafi uzaklıklarını hesaplayabilirsiniz.

    SELECT tipped, fare_amount, passenger_count,(trip_time_in_secs/60) as TripMinutes,
    trip_distance, pickup_datetime, dropoff_datetime,
    dbo.fnCalculateDistance(pickup_latitude, pickup_longitude,  dropoff_latitude, dropoff_longitude) AS direct_distance
    FROM nyctaxi_sample
    WHERE pickup_longitude != dropoff_longitude and pickup_latitude != dropoff_latitude and trip_distance = 0
    ORDER BY trip_time_in_secs DESC

Gördüğünüz gibi ölçüm tarafından bildirilen mesafe her zaman coğrafi mesafeye karşılık gelmez. Bu nedenle özellik mühendisliği önemlidir.

Sonraki bölümde, Python kullanarak makine öğrenmesi modeli oluşturmak ve eğitmek için bu veri özelliklerini kullanmayı öğreneceksiniz.

Sonraki Adımlar

Bu makalede şunları yapacaksınız:

  • Seyahat mesafesini hesaplamak için özel bir işlev değiştirildi
  • Özellikleri başka bir özel işlev kullanarak kaydetti