Didacticiel R : Créer des caractéristiques de données
S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL Managed Instance
Dans cette troisième des cinq parties du tutoriel, vous allez découvrir comment créer des caractéristiques à partir de données brutes en utilisant une fonction Transact-SQL. Ensuite, vous appellerez cette fonction à partir d’une procédure stockée SQL pour créer une table qui contient les valeurs des caractéristiques.
Dans cet article, vous allez :
- Modifier une fonction personnalisée pour calculer la distance du trajet
- Enregistrer les fonctionnalités à l’aide d’une autre fonction personnalisée
Dans la première partie, vous avez installé les prérequis et restauré l’exemple de base de données.
Dans la deuxième partie, vous avez examiné les exemples de données et généré des tracés.
Dans la quatrième partie, vous chargez les modules et appelez les fonctions nécessaires pour créer et entraîner le modèle à l’aide d’une procédure stockée SQL Server.
Dans la cinquième partie, vous apprendrez à rendre opérationnels les modèles que vous avez formés et enregistrés dans la quatrième partie.
Dans la cinquième partie, vous apprendrez à rendre opérationnels les modèles que vous avez formés et enregistrés dans la quatrième partie.
À propos de l’ingénierie des caractéristiques
Après plusieurs séries d’exploration de données, vous avez recueilli des informations utiles grâce aux données et vous êtes prêt à passer à l’ingénierie des caractéristiques. Ce processus de création de caractéristiques pertinentes à partir des données brutes est une étape essentielle de la création de modèles analytiques.
Dans ce jeu de données, les valeurs de distance sont basées sur la distance signalée au compteur, et ne représentent pas nécessairement la distance géographique ou la véritable distance parcourue. Ainsi, vous devrez calculer la distance directe entre les lieux de prise en charge et de dépose, en utilisant les coordonnées disponibles dans le dataset source « NYC Taxi ». Vous pouvez pour cela utiliser la formule de Haversine dans une fonction Transact-SQL personnalisée.
Vous allez utiliser une fonction T-SQL personnalisée, fnCalculateDistance, pour calculer la distance à l’aide de la formule de Haversine, et utiliser une seconde fonction T-SQL personnalisée, fnEngineerFeatures, pour créer une table contenant toutes les caractéristiques.
Le processus global est le suivant :
Créer la fonction T-SQL qui effectue les calculs
Appeler la fonction pour générer les données de caractéristique
Enregistrer les données de caractéristique dans une table
Calcul de la distance des trajets à l’aide de fnCalculateDistance
La fonction fnCalculateDistance doit avoir été téléchargée et inscrite auprès de SQL Server dans le cadre de la préparation de ce didacticiel. Prenez le temps de passer le code en revue.
Dans Management Studio, développez Programmabilité, Fonctions puis Fonctions scalaires.
Cliquez avec le bouton droit sur fnCalculateDistance, puis sélectionnez Modifier pour ouvrir le script Transact-SQL dans une nouvelle fenêtre de requête.
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
La fonction est une fonction scalaire qui retourne une valeur de données unique d’un type prédéfini.
Elle accepte des valeurs de latitude et de longitude comme entrées, obtenues à partir des lieux de prise en charge et de dépose des passagers. La formule de Haversine convertit les emplacements en radians et utilise ces valeurs pour calculer la distance directe en miles entre ces deux emplacements.
Génération des caractéristiques à l’aide de fnEngineerFeatures
Pour ajouter les valeurs calculées à une table qui peut être utilisée pour l’apprentissage du modèle, vous allez utiliser une autre fonction, fnEngineerFeatures. La nouvelle fonction appelle la fonction T-SQL créée précédemment, fnCalculateDistance, pour obtenir la distance directe entre les lieux de prise en charge et de dépose des passagers.
Prenez une minute pour examiner le code de la fonction T-SQL personnalisée, fnEngineerFeatures, qui doit avoir été créé pour vous dans le cadre de la préparation de cette procédure pas à pas.
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
Cette fonction table prend plusieurs colonnes comme entrées et retourne une table avec plusieurs colonnes de caractéristiques.
Le rôle de cette fonction consiste à créer de nouvelles caractéristiques servant à générer un modèle.
Pour vérifier que cette fonction fonctionne, utilisez-la pour calculer la distance géographique des trajets où la distance au compteur était égale à 0, mais où les lieux de prise en charge et de dépose étaient différents.
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
Comme vous pouvez le voir, la distance signalée par le compteur ne correspond pas toujours à la distance géographique. C’est pourquoi l’ingénierie des caractéristiques est si importante. Vous pouvez utiliser ces caractéristiques de données améliorées pour former un modèle Machine Learning à l’aide de R.
Étapes suivantes
Dans cet article, vous découvrirez comment :
- Modifier une fonction personnalisée pour calculer la distance du trajet
- Enregistrer les fonctionnalités à l’aide d’une autre fonction personnalisée