Compartir vía


Tutorial de R: Crear características de datos

Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Managed Instance

En la parte tres de esta serie de tutoriales de cinco partes, aprenderá a crear características a partir de datos sin procesar mediante una función Transact-SQL. Después, llamará a esa función desde un procedimiento almacenado de SQL para crear una tabla que contenga los valores de las características.

En este artículo, hará lo siguiente:

  • Modificará una función personalizada para calcular la distancia de la carrera
  • Guardará las características mediante otra función personalizada

En la parte uno, ha instalado los requisitos previos y ha restaurado la base de datos de ejemplo.

En la parte dos, revisó los datos de ejemplo y generó algunos trazados.

En la parte cuatro, cargará los módulos y llamará a las funciones necesarias para crear y entrenar el modelo mediante un procedimiento almacenado de SQL Server.

En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

En la parte cinco, aprenderá a poner en marcha los modelos entrenados y guardados en la parte cuatro.

Acerca de la ingeniería de características

Después de varias series de exploración de datos, ha recopilado conocimientos de los datos y está listo para pasar a la ingeniería de funciones. Este proceso de creación de características significativas a partir de los datos sin procesar es un paso fundamental a la hora de crear modelos analíticos.

En este conjunto de datos, los valores de distancia se basan en la distancia notificada del taxímetro, y no representan necesariamente la distancia geográfica o la distancia recorrida realmente. Por tanto, debe calcular la distancia directa entre los puntos de origen y destino, usando las coordenadas disponibles en el conjunto de datos de origen NYC Taxi. Puede hacerlo mediante la fórmula Haversine en un función personalizada de Transact-SQL.

Usará una función personalizada de T-SQL, fnCalculateDistance, para calcular la distancia usando la fórmula Haversine, y una segunda función personalizada de T-SQL, fnEngineerFeatures, para crear una tabla que contiene todas las características.

El proceso general consiste en lo siguiente:

  • Crear la función de T-SQL que realiza los cálculos

  • Llamar a la función para generar los datos de característica

  • Guardar los datos de característica en una tabla

Cálculo de la distancia del trayecto con fnCalculateDistance

La función fnCalculateDistance debe haberse descargado y registrado con SQL Server como parte de la preparación de este tutorial. Tómese un minuto para revisar el código.

  1. En Management Studio, expanda Programación, expanda Funciones y, después, Funciones escalares.

  2. Haga clic con el botón derecho en fnCalculateDistance y seleccione Modificar para abrir el script de Transact-SQL en una nueva ventana de consulta.

    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
    
    • La función es una función escalar y devuelve un único valor de datos de un tipo predefinido.

    • Toma los valores de latitud y longitud como entradas, obtenidos de las ubicaciones de origen y destino de los viajes. La fórmula Haversine convierte ubicaciones en radianes y usa esos valores para calcular la distancia directa en millas entre las dos ubicaciones.

Generación de las características con fnEngineerFeatures

Para agregar los valores calculados a una tabla y poder usarlos para entrenar el modelo, deberá usar otra función, fnEngineerFeatures. La nueva función llama a la función de T-SQL creada anteriormente, fnCalculateDistance, para obtener la distancia directa entre las ubicaciones de origen y destino.

  1. Tómese un minuto para revisar el código de la función personalizada de T-SQL, fnEngineerFeatures, que debe haberse creado como parte de la preparación para este tutorial.

    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
    
    • Esta función es una función con valores de tabla que toma varias columnas como entradas y genera una tabla con varias columnas de características.

    • El propósito de esta función es crear características para usarlas en la creación de un modelo.

  2. Para comprobar que esta función funciona, úsela para calcular la distancia geográfica de los trayectos en los que la distancia medida era 0, pero las ubicaciones de origen y destino eran diferentes.

        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
    

    Como puede ver, la distancia notificada por el taxímetro no siempre se corresponde con la distancia geográfica. Por eso es tan importante la ingeniería de características. Estas características de datos se pueden usar para entrenar un modelo de Machine Learning con R.

Pasos siguientes

En este artículo:

  • Se modificó una función personalizada para calcular la distancia de la carrera
  • Se guardaron las características mediante otra función personalizada