Inicio rápido: Funciones de Python con aprendizaje automático de SQL

Se aplica a: SQL Server 2017 (14.x) y versiones posteriores Azure SQL Managed Instance

En este inicio rápido, aprenderá a usar las funciones matemáticas y de utilidad de Python con SQL Server Machine Learning Services, Machine Learning Services en Azure SQL Managed Instance o Clústeres de macrodatos de SQL Server. Las funciones estadísticas suelen ser complicadas de implementar en T-SQL, pero esto se puede hacer en Python con solo unas pocas líneas de código.

Prerrequisitos

Para ejecutar este inicio rápido, debe cumplir los siguientes requisitos previos.

Creación de un procedimiento almacenado para generar números aleatorios

Para simplificar, vamos a usar el paquete numpy de Python, que se instala y carga de forma predeterminada. El paquete contiene cientos de funciones para tareas estadísticas comunes, entre otras, la función random.normal, que genera una cantidad determinada de números aleatorios que usan la distribución normal, dadas una desviación estándar y la media.

Por ejemplo, el siguiente código de Python devuelve 100 números en una media de 50, lo cual da una desviación estándar de 3.

numpy.random.normal(size=100, loc=50, scale=3)

Para llamar a esta línea de Python desde T-SQL, agregue la función de Python en el parámetro de script de Python de sp_execute_external_script. La salida espera una trama de datos, por lo que debe usar pandas para convertirla.

EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import numpy
import pandas
OutputDataSet = pandas.DataFrame(numpy.random.normal(size=100, loc=50, scale=3));
'
    , @input_data_1 = N'   ;'
WITH RESULT SETS(([Density] FLOAT NOT NULL));

¿Qué ocurriría si quisiera facilitar la generación de un conjunto diferente de números aleatorios? Defina un procedimiento almacenado que obtenga los argumentos del usuario y, a continuación, pase los argumentos al script de Python como variables.

CREATE PROCEDURE MyPyNorm (
      @param1 INT
    , @param2 INT
    , @param3 INT
    )
AS
EXECUTE sp_execute_external_script @language = N'Python'
    , @script = N'
import numpy
import pandas
OutputDataSet = pandas.DataFrame(numpy.random.normal(size=mynumbers, loc=mymean, scale=mysd));
'
    , @input_data_1 = N'   ;'
    , @params = N' @mynumbers int, @mymean int, @mysd int'
    , @mynumbers = @param1
    , @mymean = @param2
    , @mysd = @param3
WITH RESULT SETS(([Density] FLOAT NOT NULL));
  • La primera línea define cada uno de los parámetros de entrada de SQL que son necesarios cuando se ejecuta el procedimiento almacenado.

  • La línea que empieza con @params define todas las variables que usa el código de Python y los correspondientes tipos de datos SQL.

  • Las líneas que siguen inmediatamente asignan los nombres de parámetro SQL a los valores de variables de Python correspondientes.

Ahora que ha ajustado la función de Python en un procedimiento almacenado, puede llamar a la función y pasar distintos valores fácilmente de la manera siguiente:

EXECUTE MyPyNorm @param1 = 100,@param2 = 50, @param3 = 3

Usar funciones de utilidad de Python para solucionar problemas

Los paquetes de Python proporcionan una variedad de funciones de utilidad para investigar el entorno de Python actual. Estas funciones pueden ser útiles si encuentra discrepancias en la forma en que el código de Python se ejecuta en SQL Server y en entornos externos.

Por ejemplo, puede usar las funciones de temporización del sistema en el paquete time para medir la cantidad de tiempo que usan los procesos de Python y analizar los problemas de rendimiento.

EXECUTE sp_execute_external_script
      @language = N'Python'
    , @script = N'
import time
start_time = time.time()

# Run Python processes

elapsed_time = time.time() - start_time
'
    , @input_data_1 = N' ;';

Pasos siguientes

Para crear un modelo de aprendizaje automático usando Python con aprendizaje automático de SQL, siga este inicio rápido: