Convertir código Python a código sas
, Python y SAS son dos herramientas de minería de datos muy utilizadas. Python es de código abierto, gratuito, tiene ricas bibliotecas de terceros y, en general, se utiliza ampliamente en las empresas de Internet. SAS requiere pago y el costo es relativamente alto. Generalmente, las empresas de Internet no pueden permitírselo. Se usa principalmente en instituciones financieras tradicionales como los bancos. Sin embargo, debido a la popularidad de Python en los últimos dos años, quienes originalmente usaban SAS. han comenzado a recurrir gradualmente a Python.
Al adoptar el código abierto, cada vez más entusiastas están creando excelentes ruedas Python, como los populares modelos de aceite de serpiente Xgboost y LightGBM, que se utilizan en soluciones de alto nivel en diversas competiciones. El ritmo de SAS es relativamente lento y no puede proporcionar directamente algunas cosas nuevas, por lo que es muy incómodo para aquellos amigos que usan SAS.
Muchos fanáticos siempre le han hecho esta pregunta al hermano Dong: ¿Existe alguna herramienta que pueda convertir modelos de Python en SAS?
Como poseo ambas habilidades, normalmente las uso juntas en el trabajo real y rara vez pienso en la conversión. Sin embargo, recientemente Dong Ge encontró una operación interesante mientras visitaba el foro de tecnología. Con la ayuda de la biblioteca de terceros m2cgen de Python y los scripts de Python, se puede completar la conversión del modelo Python a SAS.
¿Qué es m2cgen?
m2cgen es una biblioteca de terceros para Python. Su función principal es convertir modelos entrenados en Python a otros lenguajes, como R y VBA. Desafortunadamente, m2cgen actualmente no es compatible con SAS, pero esto no afecta nuestra eventual conversión a SAS.
Todavía usamos m2cgen y necesitamos usarlo para convertir indirectamente a SAS. El plan específico es convertir primero el modelo Python en código VBA y luego cambiar el código VBA a un script SAS para salvar el país.
¿Cómo utilizar m2cgen?
Utilizaré directamente un ejemplo para explicar cómo operar.
Para los datos, utilizamos el conjunto de datos de iris que viene con sklearn. El enlace es el siguiente:
El conjunto de datos de Iris: documentación de scikit-learn 1.1.1
<. p>Ahora, demostremos cómo convertir el modelo XGBoost de Python en código SAS.Primero importe los paquetes y datos de la biblioteca necesarios.
# Importar biblioteca
importar pandas como pd
importar numpy como np
importar sistema operativo
importar re
desde sklearn importar conjuntos de datos
desde xgboost importar XGBClassifier
desde sklearn.model_selection importar train_test_split
desde sklearn.metrics importar precision_score p>
importar m2cgen como m2c
# Importar datos
iris = datasets.load_iris()
X = iris.data
Y = iris.target
Copiar después de iniciar sesión
Luego, dividimos el conjunto de datos y lo arrojamos directamente a XGBoost para establecer el modelo base.
# Divida los datos en conjunto de entrenamiento y conjunto de prueba
seed = 2020
test_size = 0.3
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size, random_state=seed)
# Datos de entrenamiento
modelo = XGBClassifier()
model.fit(X_train , y_train)
Copiar después de iniciar sesión
Luego, convierta el modelo XGBoost a VBA. Utilice el método export_to_visual_basic de m2cgen para convertir directamente a VBA. Lo mismo ocurre con la conversión a escrituras de otros idiomas, es muy sencillo.
code = m2c.export_to_visual_basic(model, function_name = 'pred')
Copiar después de iniciar sesión
¡Aquí viene la operación principal!
m2cgen no soporta SAS, pero podemos cambiar ligeramente el código VBA para convertirlo en un código que cumpla con el estándar SAS. No es necesario realizar manualmente este cambio uno por uno. Puede convertir el script VBA en un script SAS escribiendo un script Python.
No hay muchos cambios, que incluyen principalmente: eliminar código que no se puede usar en el entorno SAS, como el Módulo xxx, Función yyy, Dim var Z As Double en los resultados anteriores, y agregar al final de la declaración;, estos deben seguir las reglas de sintaxis de SAS.
El siguiente es el script Python de conversión, que puede realizar automáticamente la operación de conversión mencionada anteriormente.
# 1. Eliminar códigos que no se pueden utilizar en SAS
code = re.sub('Dim var.* As Double', '', code)
code = re.sub('End If', '', code)
# Las siguientes operaciones modificarán el código para cumplir con SAS
# 2. Inicio de la modificación
p>code = re.sub('Modelo de módulo\nFunción pred(ByRef inputVector() As Double) As Double()\n',
'DATOS pred_result;\nSET dataset_name;', code)
# 3. Modificar el final
code = re.sub('End Function\nEnd Module\n', 'RUN;', code)
# 4. Añade un punto y coma ';' al final
all_match_list = re.findall('[0-9]+\n', código)
para idx en el rango (len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1]+';\n'
code = code.replace(original_str, new_str)
all_match_list = re.findall(')\n', code)
para idx en el rango(len (all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1]+';\n'
código = code.replace( original_str, new_str)
# Use var para reemplazar inputVector
diccionario = {'inputVector(0)':'sepal_length',
'inputVector(1) ':'sepal_width',
'inputVector(2)':'petal_length',
'inputVector(3)':'petal_width'}
para clave en diccionario.keys():
código = code.replace(clave, diccionario[clave])
# Modificar la etiqueta de predicción
código = re.sub('Math.Exp', 'Exp', código)
código = re.sub('pred = .*\n', '', código)
temp_var_list = re.findall(r"var[0-9]+(\d)", código)
para var_idx en rango(len(temp_var_list)):
código = re.sub(re.sub('\(', '\(', re.sub('\)'
, '\)', temp_var_list[var_idx])), iris.target_names[var_idx]+'_prob', code)
Copiar después de iniciar sesión
Explicación paso a paso de lo anterior guión una vez.
1. Principio, final, nombre de salida
Las primeras tres partes son muy simples. Utilice una expresión regular para eliminar las líneas adicionales y cambiar el comienzo del script a DATA pred_result;\nSETdataset_name;.
Los estudiantes que hayan usado SAS estarán familiarizados con él. pred_result es el nombre de la tabla de salida después de ejecutar el script SAS, y dataset_name es el nombre de la tabla de entrada que necesitamos predecir.
Finalmente, cambie el final del script a RUN;.
# Eliminar código que no se puede utilizar en SAS
code = re.sub('Dim var.* As Double', '', code)
code = re.sub('End If', '', code)
# Las siguientes operaciones modificarán el código para ajustarlo a SAS
# Inicio de la modificación
code = re.sub('Modelo de módulo\nFunción pred(ByRef inputVector() As Double) As Double()\n',
'DATA pred_result;\nSET dataset_name;', código) p>
# Modificar el final
code = re.sub('End Function\nEnd Module\n', 'RUN;', code)
Copiar después iniciar sesión
p>2. Agregue un punto y coma al final de la declaración
Para seguir las reglas gramaticales en SAS, debe agregar al final de cada declaración. Todavía use expresiones regulares y luego agregue el carácter al final de cada línea en un bucle for.
# Agregar un punto y coma ';' al final
all_match_list = re.findall('[0-9]+\n', código)
para idx en rango(len(all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1]+';\n' p>
código = code.replace(original_str, new_str)
all_match_list = re.findall(')\n', código)
para idx en rango(len( all_match_list)):
original_str = all_match_list[idx]
new_str = all_match_list[idx][:-1]+';\n'
código = code.replace(original_str, new_str)
Copiar después de iniciar sesión
3. Asignación de nombres de variables
Utilice un diccionario para asignar el Vector de entrada y los nombres de las variables al archivo. conjunto de datos de entrada. Cambie todos los vectores de entrada a la vez.
# Utilice var para reemplazar inputVector
diccionario = {'inputVector(0)':'sepal_length',
'inputVector(1)':'sepal_width ',
'inputVector(2)':'petal_length',
'inputVector(3)':'petal_width'}
para clave en el diccionario. llaves():
código = code.replace(clave, diccionario[clave])
Copiar después de iniciar sesión
4. >
El último paso es cambiar la etiqueta de predicción.
# Modificar etiqueta de predicción
code = re.sub('Math.Exp', 'Exp', code)
code = re.sub(' pred = .*\n', '', código)
temp_var_list = re.findall(r"var[0-9]+(\d)", código)
para var_idx en range(len(temp_var_list)):
código = re.sub(re.sub('\(', '\(', re.sub('\)', '\) ', temp_var_list[var_idx])), iris.target_names[var_idx]+'_prob', code)
Copiar después de iniciar sesión
Luego guarde el archivo del modelo sas.
#Guardar salida
vb = open('vb1.sas', 'w')
vb.write(código)
vb.close()
Copiar después de iniciar sesión
Finalmente, para verificar si el script sas es correcto, comparamos los resultados de predicción del modelo sas con los resultados de Pitón.
# predicción de Python
python_pred = pd.DataFrame(model.predict_proba(X_test))
python_pred.columns = ['setosa_prob','versicolor_prob', 'virginica_prob']
python_pred
# predicción sas
sas_pred = pd.read_csv('pred_result.csv')
sas_pred = sas_pred.iloc[:,-3:]
sas_pred
(abs(python_pred - sas_pred) > 0.00001).sum()
Copiar después de iniciar sesión
Como puede ver, los resultados de las dos predicciones son básicamente los mismos y básicamente no hay ningún problema. Podemos ejecutar el modelo xgboost en sas.
Resumen
Lo anterior es solo el ejemplo más simple, sin funciones de procesamiento. Para procesos de modelado complejos, como la ingeniería de muchas características, es necesario ajustar aún más el script de Python.
Lo anterior es todo el contenido compartido esta vez. Si cree que el artículo no es malo, bienvenido a seguir la cuenta oficial: Python Programming Learning Circle, comparta información útil diaria y envíe "J" para recibir un mensaje. Gran cantidad de materiales de aprendizaje, contenido que cubre libros electrónicos de Python, tutoriales, programación de bases de datos, Django, rastreadores, computación en la nube, etc.
O vaya a Programming Learning Network para obtener más información sobre la tecnología de programación.
python
Aprendizaje automático
Minería de datos
Vídeo tutorial - Análisis completo de datos de Python y SAS - Big Data
422 lecturas·0 comentarios·0 me gusta
28 de mayo de 2020
Python accede a la biblioteca lógica sas, a la biblioteca lógica SAS | y al conjunto de datos SAS
460 lee·0 comentarios·0 me gusta
26 de abril de 2021
Notas de estudio de Python---Linux/windows llama al programa SAS
875 lee·0 comentarios· 0 me gusta
24 de octubre de 2019
¿Puede Python reemplazar a sas_Python, lenguaje R, SAS y SPSS? ¿Comparando las ventajas y desventajas? (Repost)
604 lecturas · 0 comentarios · 1 me gusta
17 de diciembre de 2020
Python accede a la biblioteca lógica sas_Conceptos básicos de programación SAS-Bibliotecas y conjuntos de datos lógicos
p>
138 lecturas · 0 comentarios · 0 me gusta
9 de diciembre de 2020
Implementación del servidor sas_cómo utilizar Alibaba Cloud SAS Implementación de un sitio web de WordPress
1429 lecturas·0 comentarios·0 me gusta
29 de agosto de 2020
Usando python y sas juntos_¡qué genial! El modelo Python cambia perfectamente a SAS y aún se puede jugar así. .
1963 lecturas · 0 comentarios · 2 me gusta
14 de enero de 2021
Python importa variables sas data set_pass de SAS a Python
344 lecturas · 0 comentarios · 0 me gusta
3 de febrero de 2021
python access sas logiclibrary_SAS rock teoría usada en Jupyter Notebook SAS
429 vistas·0 comentarios·0 me gusta
9 de diciembre de 2020
#sas modeling-Introducción al modelaje
2257 lecturas·0 comentarios·2 me gusta
18 de septiembre de 2019
#sas modeling: una introducción al proceso de modelado
2805 lecturas ·1 comentario·0 me gusta
18 de septiembre de 2019 p>
Python llama a sas_SAS declaraciones utilizadas diariamente y expresiones de Python predeterminadas
370 lecturas ·0 comentarios ·0 me gusta
8 de diciembre de 2020
Lecturas de Python el módulo sas data set_SASpy y usa Python para operar SAS
1432 lecturas ·0 comentarios ·0 me gusta
26 de noviembre de 2020
Python puede reemplazar sas, transpuesto marco de datos de Python como SAS
156 lecturas ·0 comentarios ·0 me gusta
27 de abril de 2021
La diferencia entre sas y python Zhihu_¿Por qué la industria bancaria prefiere ¿Usar sas en lugar de python?
1559 lecturas · 0 comentarios · 0 me gusta
9 de diciembre de 2020
Escritura de código Python y sas_Cómo escribir declaraciones if de SAS a python
329 lecturas·0 comentarios·0 me gusta
29 de enero de 2021
saspythonzhihu_pyt