Machine Learning – de lo Místico a lo Práctico: Como eliminar brechas de datos con Python & SAP Hana

Durante la implementación de los Proyectos de Data Science, siempre afrontamos casos donde tenemos que decidirnos por el mejor método de implementación para que sea integrado sin problemas en el pipeline. La meta es lograr la implementación más simplista ya que el diseño general es siempre complejo. Nos centramos en simplificar nuestros enfoques tanto como sea posible para mantener el control sobre todos los pasos y modificarlos fácilmente con tiempos mínimos de implementación / modificación.      

En el post de hoy, discutiremos un caso que hemos mostrado antes pero con mayor detalle. Te enseñaremos cómo usar Python para simplificar nuestros pasos con una poderosa Biblioteca de Integración de Python & SAP Hana llamada HDBCLI.

Primero, pongamos las cosas en contexto. El caso al que nos enfrentamos durante la implementación estaba teniendo algunos NULOS en la Columna de Nacionalidad en cada una de las áreas geográficas independientes. Estos NULOS eran alrededor del 5% - 15%. Por ello, como enfoque rápido, decidimos aplicar el método de redistribución que puede tomar la población entera y la distribución de sus Nacionalidades y reaplicarlas a los NULOS. Puedes encontrar más detalles sobre el enfoque lógico aquí.

Sería difícil aplicar esta solución usando el enfoque de SAP HANA SQL, por ello decidimos optar por una implementación de Python para este paso, y habrían dos métodos para lograr esto:

  1. Método 1:

    • Exportar los datos a un archivo de Valores Separados por Comas (CSV) usando los Servicios de Datos de SAP.

    • Cargar el CSV con Python, aplicar nuestra solución, exportarla dentro de otro CSV.

    • Cargar los datos desde el CSV en una table SAP HANA con los Servicios de Datos de SAP.

  2. Método 2 (Actualmente Usado):

    • Instalar la Biblioteca HDBCLI en Python.

    • Conectar directamente con SAP HANA usando nuestras Credenciales y la dirección IP del servidor.

    • Cargar la tabla directamente usando el Lenguaje de Consulta Estructurado (SQL) con un cursor en Python a una Trama de Datos Panda.

    • Ampliar nuestra solución, exportar los datos a CSV.

    • Cargar los datos en una Tabla SAP HANA usando los Servicios de Datos de SAP, que actualizará las tablas que han sido modificadas de NULOS a valores reales automáticamente.

Para minimizar el número de archivos y simplificar el enfoque, decidimos usar el segundo método. Tratamos de cargar los datos directamente a SAP HANA a través de HDBCLI usando Actualización de Tablas de Consulta pero, debido a la conexión y número de filas, era muy lento. Entonces, cargamos la tabla usando una ETL (extraer, transformar y cargar). Pero cuando recuperamos valores de SAP HANA, podemos simplemente responder en HDBCLI ya que es mucho más rápido y elimina la necesidad de archivos planos.

Antes que todo, creamos una clase que es responsable por cualquier comunicación de base de datos y la llamamos Proveedor de Solicitudes. Esta clase toma entradas estándar para conectarse con cualquier servidor, esta es una captura de pantalla del código :

query_provider_1.PNG

Ahora, usando esta clase, podemos simplemente conectarnos a cualquier Servidor SAP HANA. Una vez que iniciamos la conexión, necesitamos recuperar la tabla que requerimos usando la siguiente función de muestreo:

query_provider_2.PNG

Como puedes ver, el enfoque es muy simple. Solo copiamos y pegamos nuestra solicitud como un hilo y ejecutamos la solicitud usando el cursor y, una vez que obtenemos los elementos, podemos cerrar el cursor y devolver los elementos que seleccionamos. La razón por la que publicamos el resultado fetchall() en una variable es que a veces podríamos querer hacer algunas modificaciones antes de devolver la tabla.

Now that we have our table, that has all the data we need, we proceed to insert it into a Pandas Data Frame (DF for short). A pandas DF acts like a table, it has columns and we can call a column by its name and apply any modifications we need to it like a data base, as well as the following functions such as:

  1. Agregaciones

  2. Asociaciones

  3. Sumas

El siguiente código muestra cómo podemos tomar el resultado de una tabla recuperada por el cursor e insertarla en un DF Panda:

Pandas_DF.PNG

Este es el código que usamos cuando nos preparábamos para entrenar nuestro modelo. Puedes ver que llamamos la clase que creamos anteriormente HanaController, luego el nombre de la función que recupera la tabla. Cuando la tabla es recuperada, las columnas son nombradas por sus índices: 0,1,2,3. Por ello, necesitamos renombrarlas para que coincidan con la base de datos y podamos trabajar apropiadamente sin confundir las columnas. Y podemos hacerlo tan solo llamando a la función de Rename().

Ya que tenemos nuestros datos en formato tabular y las columnas están nombradas correctamente en Python, les podemos aplicar cualquier lógica compleja / específica. Como verás, la redistribución compleja basada en el área será muy sencilla ya que en Python podemos usar una biblioteca de Álgebra lineal muy fuerte llamada NumPy. Tiene la siguiente función:

NumPy.PNG

La función previa, np.random.choice, hace una elección basada en la probabilidad de las ocurrencias de cada elemento en la lista, así que le pasaremos a la función los siguientes valores:

  1. Lista de Elementos: [“Egypt”, “India”, “KSA”].

  2. Probabilidad de Ocurrencias (“Necesita añadirse hasta 1”): [0.6, 0.2, 0.2].

De esta manera, en cada iteración, la función hará una elección basada en la probabilidad del elemento único, manteniendo la integridad de la distribución intacta en el proceso. Por favor nota que posteamos estos datos en una nueva columna y no sobrescribimos los datos originales en la Columna de Nacionalidad. La nueva columna se llama Sub_Region_Distributed.

Ahora que tenemos nuestra nueva columna en el DF Panda, podemos imprimirla con una línea en un archivo que usaremos para cargarla con la Herramienta de Servicios de Datos de ETL en nuestra Tabla SAP HANA, la siguiente función es utilizada para imprimir el archivo:

Pandas_DF_2.PNG

Finalmente, necesitamos integrarla con el pipeline. La siguiente imagen es una captura de pantalla de todo el pipeline:

pipeline.PNG

El área resaltada en verde es donde hemos integrado nuestro paso en Python. Primero, ejecutamos el script de Python usando la función: #exec('cmd','python PATH\PYTHON_FILE.py',8 ); Luego, cargamos el archivo en nuestra Base de Datos de SAP HANA.

Este es un procedimiento de resolución del problema que funciona muy bien y es muy beneficioso. Durante la implementación de un proyecto de Data Science, siempre afrontamos desafíos y problemas donde la solución necesita ser efectiva y eficiente. Si una solución toma días en ser implementada, entonces quizás no sea la mejor. SIempre mantenemos nuestras mentes abiertas ante todo tipo de herramientas que nos permitan resolver problemas de la mejor manera posible. Es un proceso empírico que ofrece grandes resultados.

¡Háznoslo saber si tienes alguna sugerencia o comentario!


EspañolEnglish