Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2016 (13.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.
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ê revisou 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.
Na quinta parte, você aprenderá a operacionalizar os modelos que treinou e salvou na quarta parte.
Sobre a engenharia de características
Após várias rodadas de exploração de dados, você coletou alguns insights dos dados e está pronto para passar para a engenharia de recursos. Esse processo de criação de recursos significativos a partir dos dados brutos é uma etapa crítica na criação de modelos analíticos.
Neste conjunto de dados, os valores da distância baseiam-se na distância do metro comunicada e não representam necessariamente a distância geográfica ou a distância real 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.
O processo global é o seguinte:
Criar a função T-SQL que executa os cálculos
Chame a função para gerar os dados da funcionalidade
Salvar os dados do recurso em uma tabela
Calcular a distância da viagem usando fnCalculateDistance
A função fnCalculateDistance deve ter sido baixada e registrada no SQL Server como parte da preparação para este tutorial. Reserve um minuto para rever o código.
No Management Studio, expanda Programabilidade, expanda Funções e, em seguida, Funções com 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.
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 GOA função é uma função com valor escalar, retornando um único valor de dados de um tipo predefinido.
Utiliza valores de latitude e longitude como dados de entrada, que são obtidos a partir dos pontos de recolha e entrega 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.
Gere os recursos usando fnEngineerFeatures
Para adicionar os valores computados a uma tabela que pode ser usada para treinar o modelo, você usará outra função, fnEngineerFeatures. A nova função 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 revisar o código para a função T-SQL personalizada, fnEngineerFeatures, que deve ter sido criada para você como parte da preparação para este passo a passo.
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 ) GOEsta 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 novos recursos para uso na construção de um modelo.
Para verificar se essa função funciona, use-a 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 DESCComo você pode ver, a distância relatada pelo medidor nem sempre corresponde à distância geográfica. É por isso que a engenharia de características é tão importante. Você pode usar esses recursos de dados aprimorados para treinar um modelo de aprendizado de máquina usando R.
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