R-Tutorial: Erstellen von Datenfeatures

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL Managed Instance

In Teil drei dieser fünfteiligen Tutorialreihe erfahren Sie, wie Sie mithilfe einer Transact-SQL-Funktion Features aus Rohdaten erstellen. Anschließend rufen Sie diese Funktion aus einer gespeicherten SQL-Prozedur auf, um eine Tabelle zu erstellen, die die Funktionswerte enthält.

In diesem Artikel führen Sie Folgendes durch:

  • Ändern einer benutzerdefinierten Funktion zum Berechnen eine Fahrtstrecke
  • Speichern der Features mithilfe einer weiteren benutzerdefinierten Funktion

In Teil 1 haben Sie die Voraussetzungen installiert und die Beispieldatenbank wiederhergestellt.

In Teil zwei haben Sie die Beispieldaten überprüft und einige Plots generiert.

In Teil vier laden Sie die Module und rufen die erforderlichen Funktionen auf, um das Modell mithilfe einer gespeicherten SQL Server-Prozedur zu erstellen und zu trainieren.

In Teil fünf erfahren Sie, wie Sie die Modelle operationalisieren können, die Sie in Teil vier trainiert und gespeichert haben.

In Teil fünf erfahren Sie, wie Sie die Modelle operationalisieren können, die Sie in Teil vier trainiert und gespeichert haben.

Über die Featureentwicklung

Nachdem Sie eine Zeit damit verbracht haben, Daten zu durchsuchen, haben Sie einige Einsichten in die Daten gesammelt und sind nun bereit, mit der Featureentwicklungfortzufahren. Das Erstellen nützlicher Features aus den Rohdaten ist ein wichtiger Schritt bei der Erstellung von Analysemodellen.

In diesem Dataset basieren die Entfernungswerte auf der vom Taxameter angezeigten Entfernung und stellen nicht zwangsläufig die geografische Distanz oder tatsächlich zurückgelegte Entfernung dar. Aus diesem Grund müssen Sie die direkte Entfernung zwischen den Abhol- und den Zielorten berechnen, indem Sie die verfügbaren Koordinaten in im Quell-Dataset NYC Taxi verwenden. Sie erreichen dies, indem Sie die Haversine-Formel in einer benutzerdefinierten Transact-SQL-Funktion verwenden.

Verwenden Sie eine benutzerdefinierte T-SQL-Funktion, fnCalculateDistance, um die Entfernung mithilfe der Haversine-Formel zu berechnen, und verwenden Sie eine zweite benutzerdefinierte T-SQL-Funktion, fnEngineerFeatures, um eine Tabelle mit allen Funktionen zu erstellen.

Der Gesamtprozess sieht folgendermaßen aus:

  • Erstellen Sie die T-SQL-Funktion, die die Berechnungen durchführt.

  • Rufen Sie die Funktion auf, um die Featuredaten zu generieren.

  • Speichern Sie die Featuredaten in einer Tabelle.

Berechnen der Fahrstrecke mithilfe von fnCalculateDistance

Die Funktion fnCalculateDistance sollte heruntergeladen und bei SQL Server als Teil der Vorbereitung für dieses Tutorial registriert worden sein. Überprüfen Sie kurz den Code.

  1. Erweitern Sie in Management StudioProgrammierbarkeit, erweitern Sie Funktionen und anschließend Skalarwertfunktionen.

  2. Klicken Sie mit der rechten Maustaste auf fnCalculateDistance, und wählen Sie Ändern aus, um das Transact-SQL-Skript in einem neuen Abfragefenster zu öffnen.

    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
    
    • Die Funktion ist eine Skalarwertfunktion, die einen einzelnen Datenwert eines vordefinierten Typs zurückgibt.

    • Sie übernimmt die Werte der Längen- und Breitengrade als Eingaben, die sie von den Abhol- und Zielorten der Fahrten erhält. Die Haversine-Formel wandelt Orte ins Bogenmaß um und verwendet diese Werte, um die direkte Entfernung zwischen zwei Orten in Meilen zu berechnen.

Generieren der Features mithilfe von fnEngineerFeatures

Verwenden Sie eine andere Funktion, fnEngineerFeatures, um die berechneten Werte einer Tabelle hinzuzufügen, die zum Trainieren des Modells verwendet werden kann. Die neue Funktion ruft die zuvor erstellte T-SQL-Funktion fnCalculateDistance auf, um die direkte Entfernung zwischen den Abhol- und Zielorten abzurufen.

  1. Nehmen Sie sich ein paar Minuten Zeit, um den Code für die benutzerdefinierte T-SQL-Funktion fnEngineerFeatureszu überprüfen, die für Sie als Teil der Vorbereitung für diese exemplarische Vorgehensweise erstellt wurde.

    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
    
    • Diese Tabellenwertfunktion akzeptiert mehrere Spalten als Eingaben und gibt eine Tabelle mit mehreren Featurespalten aus.

    • Der Zweck dieser Funktion ist die Erstellung neuer Features, die beim Erstellen eines Modells verwendet werden können.

  2. Sie können sicherstellen, dass diese Funktion funktioniert, indem Sie sie zum Berechnen der geografischen Distanz für diese Fahrten verwenden, bei denen die gemessene Distanz 0 war, aber die Abhol- und Zielorte unterschiedlich waren.

        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
    

    Wie Sie sehen können, entspricht die vom Taxameter angezeigte Entfernung nicht immer der geografischen Distanz. Daher ist die Featureentwicklung so wichtig. Sie können diese Datenfeatures verwenden, um ein Machine Learning-Modell mit R zu trainieren.

Nächste Schritte

In diesem Artikel führen Sie folgende Schritte aus:

  • Ändern einer benutzerdefinierten Funktion zum Berechnen einer Fahrtstrecke
  • Speichern der Features mithilfe einer weiteren benutzerdefinierten Funktion