Sdílet prostřednictvím


Kurz jazyka R: Vytváření datových funkcí

Platí pro: SQL Server 2016 (13.x) a novější verze Azure SQL Managed Instance

Ve třetí části této pětidílné série kurzů se naučíte vytvářet funkce z nezpracovaných dat pomocí funkce Transact-SQL. Potom tuto funkci zavoláte z uložené procedury SQL a vytvoříte tabulku obsahující hodnoty funkcí.

V tomto článku:

  • Úprava vlastní funkce pro výpočet vzdálenosti jízdy
  • Uložení funkcí pomocí jiné vlastní funkce

V první části jste nainstalovali požadavky a obnovili ukázkovou databázi.

Ve druhé části jste zkontrolovali ukázková data a vygenerovali několik grafů.

Ve čtvrté části načtete moduly a zavoláte potřebné funkce k vytvoření a trénování modelu pomocí uložené procedury SQL Serveru.

V 5. části se dozvíte, jak zprovoznit modely, které jste natrénovali a uložili ve čtvrté části.

V 5. části se dozvíte, jak zprovoznit modely, které jste natrénovali a uložili ve čtvrté části.

Informace o technice funkcí

Po několika kolech zkoumání dat jste shromáždili některé poznatky z dat a jste připraveni přejít k technikám funkcí. Tento proces vytváření smysluplných funkcí z nezpracovaných dat je důležitým krokem při vytváření analytických modelů.

V této datové sadě jsou hodnoty vzdálenosti založené na hlášené vzdálenosti měřiče a nemusí nutně představovat zeměpisnou vzdálenost nebo skutečnou vzdálenost, která se pohybuje. Proto budete muset vypočítat přímou vzdálenost mezi vyzvednutím a odkládacími body pomocí souřadnic dostupných ve zdrojové datové sadě taxi NYC. Můžete to provést pomocí vzorce Haversine ve vlastní funkci Transact-SQL.

K výpočtu vzdálenosti pomocí vzorce Haversine použijete jednu vlastní funkci T-SQL fnCalculateDistance a k vytvoření tabulky obsahující všechny funkce použijete druhou vlastní funkci T-SQL fnEngineerFeatures.

Celkový proces je následující:

  • Vytvoření funkce T-SQL, která provádí výpočty

  • Zavolejte funkci pro vygenerování dat vlastnosti

  • Uložení dat funkcí do tabulky

Výpočet vzdálenosti jízdy pomocí funkce fnCalculateDistance

Funkce fnCalculateDistance by měla být stažena a registrována s SQL Serverem v rámci přípravy na tento kurz. Projděte si kód za minutu.

  1. V aplikaci Management Studio rozbalte možnost Programovatelnost, rozbalte funkce a potom funkce vracející skalární hodnoty.

  2. Klikněte pravým tlačítkem na fnCalculateDistance a výběrem možnosti Upravit otevřete skript Transact-SQL v novém okně dotazu.

    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
    
    • Funkce je skalární funkce, která vrací jednu datovou hodnotu předdefinovaného typu.

    • Přebírá hodnoty zeměpisné šířky a délky jako vstupní hodnoty získané z umístění vyzvednutí a místa vysazení. Vzorec Haversine převede umístění na radiány a pomocí těchto hodnot vypočítá přímou vzdálenost mezi těmito dvěma umístěními.

Generování funkcí pomocí fnEngineerFeatures

Pokud chcete přidat vypočítané hodnoty do tabulky, kterou je možné použít k trénování modelu, použijete jinou funkci fnEngineerFeatures. Nová funkce volá dříve vytvořenou funkci T-SQL fnCalculateDistance, aby získala přímou vzdálenost mezi umístěními vyzvednutí a odkládacími místy.

  1. Chvíli si projděte kód vlastní funkce T-SQL , fnEngineerFeatures, který by měl být vytvořen pro vás jako součást přípravy tohoto názorného postupu.

    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
    
    • Tato tabulková funkce přijímá více sloupců jako vstupy a poskytuje tabulku s více sloupci funkcí.

    • Účelem této funkce je vytvořit nové funkce pro použití při vytváření modelu.

  2. Pokud chcete ověřit, že tato funkce funguje, použijte ji k výpočtu zeměpisné vzdálenosti pro tyto výlety, ve kterých byla měřená vzdálenost 0, ale umístění vyzvednutí a odkládacích míst se liší.

        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
    

    Jak vidíte, vzdálenost hlášená měřičem vždy neodpovídá zeměpisné vzdálenosti. Proto je inženýrství vlastností tak důležité. Tyto vylepšené datové funkce můžete použít k trénování modelu strojového učení pomocí jazyka R.

Další kroky

V tomto článku:

  • Úprava vlastní funkce pro výpočet vzdálenosti jízdy
  • Uložili jsme funkce pomocí jiné vlastní funkce.