Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              Gäller för: SQL Server 2016 (13.x) och senare versioner 
Azure SQL Managed Instance
I del tre i den här självstudieserien i fem delar får du lära dig hur du skapar funktioner från rådata med hjälp av en Transact-SQL funktion. Sedan anropar du funktionen från en SQL-lagrad procedur för att skapa en tabell som innehåller funktionsvärdena.
I den här artikeln ska du:
- Ändra en anpassad funktion för att beräkna reseavstånd
 - Spara funktionerna med en annan anpassad funktion
 
I del ett installerade du förhandskraven och återställde exempeldatabasen.
I del två granskade du exempeldata och genererade några diagram.
I del fyra läser du in modulerna och anropar nödvändiga funktioner för att skapa och träna modellen med hjälp av en lagrad SQL Server-procedur.
I del fem får du lära dig hur du operationaliserar de modeller som du har tränat och sparat i del fyra.
I del fem får du lära dig hur du operationaliserar de modeller som du har tränat och sparat i del fyra.
Om funktionsutveckling
Efter flera omgångar av datautforskning har du samlat in några insikter från data och är redo att gå vidare till funktionsframställning. Den här processen med att skapa meningsfulla funktioner från rådata är ett viktigt steg för att skapa analysmodeller.
I den här datamängden baseras avståndsvärdena på det rapporterade mätaravståndet och representerar inte nödvändigtvis geografiskt avstånd eller det faktiska avståndet som färdas. Därför måste du beräkna det direkta avståndet mellan upphämtnings- och avlämningspunkterna med hjälp av koordinaterna som är tillgängliga i nyc taxi-källdatauppsättningen. Du kan göra detta med hjälp av Haversine-formeln i en anpassad Transact-SQL funktion.
Du använder en anpassad T-SQL-funktion, fnCalculateDistance, för att beräkna avståndet med hjälp av Haversine-formeln och använda en andra anpassad T-SQL-funktion, fnEngineerFeatures, för att skapa en tabell som innehåller alla funktioner.
Den övergripande processen är följande:
Skapa T-SQL-funktionen som utför beräkningarna
Anropa funktionen för att generera funktionsdata
Spara funktionsdata i en tabell
Beräkna reseavstånd med fnCalculateDistance
Funktionen fnCalculateDistance ska ha laddats ned och registrerats med SQL Server som en del av förberedelserna för den här självstudien. Det tar en minut att granska koden.
I Management Studio expanderar du Programmability, expanderar Functions och sedan Scalar-värderade funktioner.
Högerklicka på fnCalculateDistance och välj Ändra för att öppna skriptet Transact-SQL i ett nytt frågefönster.
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 GOFunktionen är en skalärvärdesfunktion som returnerar ett enda datavärde av en fördefinierad typ.
Det tar latitud- och longitudvärden som indata som hämtas från platser för upphämtning och avlämning av resor. Haversine-formeln konverterar platser till radianer och använder dessa värden för att beräkna det direkta avståndet i miles mellan dessa två platser.
Generera funktionerna med fnEngineerFeatures
Om du vill lägga till de beräknade värdena i en tabell som kan användas för att träna modellen använder du en annan funktion, fnEngineerFeatures. Den nya funktionen anropar den tidigare skapade T-SQL-funktionen , fnCalculateDistance, för att få det direkta avståndet mellan upphämtnings- och avlämningsplatser.
Ta en minut att granska koden för den anpassade T-SQL-funktionen , fnEngineerFeatures, som borde ha skapats åt dig som en del av förberedelserna för den här genomgången.
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 ) GODen här tabellvärdesfunktionen som tar flera kolumner som indata och matar ut en tabell med flera funktionskolumner.
Syftet med den här funktionen är att skapa nya funktioner som ska användas för att skapa en modell.
För att kontrollera att den här funktionen fungerar använder du den för att beräkna det geografiska avståndet för de resor där det uppmätta avståndet var 0, men upphämtnings- och avlämningsplatserna var olika.
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 DESCSom du ser motsvarar avståndet som rapporteras av mätaren inte alltid det geografiska avståndet. Det är därför funktionsutveckling är så viktigt. Du kan använda dessa förbättrade datafunktioner för att träna en maskininlärningsmodell med hjälp av R.
Nästa steg
I den här artikeln kommer du att:
- Ändrade en anpassad funktion för att beräkna reseavstånd
 - Sparade funktionerna med en annan anpassad funktion