Partilhar via


Tutorial do Python: Criar recursos de dados usando T-SQL

Aplica-se a: SQL Server 2017 (14.x) e versões posteriores Instância Gerenciada SQL do Azure

Na terceira parte desta série de tutoriais de cinco partes, você aprenderá como criar recursos a partir de dados brutos usando uma função Transact-SQL. Em seguida, você chamará essa função de um procedimento armazenado SQL para criar uma tabela que contenha os valores do recurso.

O processo de engenharia de recursos, criando recursos a partir dos dados brutos, pode ser uma etapa crítica na modelagem analítica avançada.

Neste artigo, você:

  • Modificar uma função personalizada para calcular a distância da viagem
  • Salve os recursos usando outra função personalizada

Na primeira parte, você instalou os pré-requisitos e restaurou o banco de dados de exemplo.

Na segunda parte, você explorou os dados de amostra e gerou alguns gráficos.

Na quarta parte, você carregará os módulos e chamará as funções necessárias para criar e treinar o modelo usando um procedimento armazenado do SQL Server.

Na quinta parte, você aprenderá a operacionalizar os modelos que treinou e salvou na quarta parte.

Definir a função

Os valores de distância relatados nos dados originais são baseados na distância do metro relatada e não representam necessariamente a distância geográfica ou a distância percorrida. Portanto, você precisará calcular a distância direta entre os pontos de embarque e desembarque, usando as coordenadas disponíveis no conjunto de dados do NYC Taxi de origem. Você pode fazer isso usando a fórmula de Haversine em uma função Transact-SQL personalizada.

Você usará uma função T-SQL personalizada, fnCalculateDistance, para calcular a distância usando a fórmula Haversine, e usará uma segunda função T-SQL personalizada, fnEngineerFeatures, para criar uma tabela contendo todos os recursos.

Calcular a distância da viagem usando fnCalculateDistance

A função fnCalculateDistance está incluída no banco de dados de exemplo. Reserve um minuto para rever o código:

  1. No Management Studio, expanda Programabilidade, expanda Funções e, em seguida, Funções com valor escalar.

  2. Clique com o botão direito do mouse em fnCalculateDistance e selecione Modificar para abrir o script Transact-SQL em uma nova janela de consulta.

    Deve ter um aspeto semelhante a:

    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
    

Notas:

  • A função é uma função com valor escalar, retornando um único valor de dados de um tipo predefinido.
  • A função usa valores de latitude e longitude como entradas, obtidos a partir de locais de embarque e desembarque da viagem. A fórmula de Haversine converte locais em radianos e usa esses valores para calcular a distância direta em milhas entre esses dois locais.

Salve os recursos usando fnEngineerFeatures

Para adicionar o valor computado a uma tabela que pode ser usada para treinar o modelo, você usará a função T-SQL personalizada, fnEngineerFeatures. Esta função é uma função com valor de tabela que usa várias colunas como entradas e produz uma tabela com várias colunas de recursos. O objetivo desta função é criar um conjunto de recursos para uso na construção de um modelo. A função fnEngineerFeatures chama a função T-SQL criada anteriormente, fnCalculateDistance, para obter a distância direta entre os locais de embarque e desembarque.

Reserve um minuto para rever o código:

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

Para verificar se essa função funciona, você pode usá-la para calcular a distância geográfica para as viagens em que a distância medida era 0, mas os locais de embarque e desembarque eram 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 você pode ver, a distância relatada pelo medidor nem sempre corresponde à distância geográfica. É por isso que a engenharia de características é importante.

Na próxima parte, você aprenderá como usar esses recursos de dados para criar e treinar um modelo de aprendizado de máquina usando Python.

Próximos passos

Neste artigo, você:

  • Modificada uma função personalizada para calcular a distância da viagem
  • Salvou os recursos usando outra função personalizada