Tutorial do Python: Criar recursos de dados usando o T-SQL
Aplica-se a: SQL Server 2017 (14.x) e versões posteriores Instância Gerenciada de SQL do Azure
Na terceira parte desta série de tutoriais em cinco partes, você aprenderá a criar recursos por meio de dados brutos usando uma função do Transact-SQL. Você chamará essa função por meio de um procedimento armazenado do SQL para criar uma tabela que contém os valores de recurso.
O processo de engenharia de recursos, que consiste na criação de recursos a partir de dados brutos, pode ser uma etapa crítica na modelagem de análise avançada.
Neste artigo, você vai:
- Modificar uma função personalizada para calcular a distância de viagem
- Salvar os recursos usando outra função personalizada
Na parte um, você instalou os pré-requisitos e restaurou o banco de dados de exemplo.
Na parte dois, você explorou os dados de exemplo e gerou alguns gráficos.
Na parte quatro, 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 parte cinco, você aprenderá a operacionalizar os modelos treinados e salvos na parte quatro.
Definir a função
Os valores de distância relatados nos dados originais baseiam-se na distância do medidor relatado e não representam necessariamente a distância geográfica nem a distância percorrida. Portanto, você precisará calcular a distância direta entre os pontos de embarque e desembarque de passageiros, usando as coordenadas disponíveis no conjunto de dados NYC Taxi de origem. Você pode fazer isso usando a fórmula de Haversine em uma função personalizada Transact-SQL.
Você usará uma função personalizada do T-SQL, fnCalculateDistance, para calcular a distância usando a fórmula de Haversine e usará uma segunda função personalizada do T-SQL, fnEngineerFeatures, para criar uma tabela que contém 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 examinar o código:
No Management Studio, expanda Programação, Funções e Funções de valor escalar.
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.
Ele deverá ser semelhante a este:
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
Observações:
- A função é uma função de valor escalar, retornando um único valor de dados de um tipo predefinido.
- A função assume valores de latitude e longitude como entradas, obtidas de locais de saída e de partida de viagem. A fórmula de Haversine converte locais em radianos e usa esses valores para calcular a distância direta em milhas entre os dois locais.
Salvar os recursos usando fnEngineerFeatures
Para adicionar o valor calculado a uma tabela que pode ser usada para treinar o modelo, você usará a função T-SQL personalizada, fnEngineerFeatures. Essa função é uma função com valor de tabela que usa várias colunas como entradas e gerar uma tabela com várias colunas de recurso. A finalidade dessa função é criar um conjunto de recursos para uso na criaçã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 de passageiros.
Reserve um minuto para examinar 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 dessas corridas em que a distância limitada era 0, mas os locais de embarque e desembarque de passageiros 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 a engenharia de recursos é importante.
Na próxima parte, você aprenderá a usar esses recursos de dados para criar e treinar um modelo de machine learning usando o Python.
Próximas etapas
Neste artigo você:
- Modificou uma função personalizada para calcular a distância de viagem
- Salvou os recursos usando outra função personalizada