Enero de 2018
Volumen 33, número 1
Office: Análisis de datos, Machine Learning y Microsoft Excel
Por Michael Saunders | Enero de 2018
Dedique un segundo a pensar en Excel como un todo (una herramienta extendida, flexible y eficaz para analizar datos, desde mi práctica hoja de cálculo con una breve lista de tareas pendientes hasta libros de modelos financieros masivos de 100 MB de los bancos más importantes del mundo). Y, debajo de todas las características sofisticadas, detrás de los gráficos y las opciones de formato profesionales, el valor real es el cálculo, que internamente se denomina "Calc". Calc es lo que permite establecer relaciones entre celdas: Para expresar modelos complejos, escribe fórmulas simples que describen los árboles de dependencias entre valores (consulte la Figura 1). Posteriormente, cuando realiza un cambio, Calc actualiza los valores dependientes de acuerdo con esas fórmulas.
Figura 1 Calc permite establecer relaciones entre celdas
Excel proporciona toneladas de funciones útiles para usar en sus fórmulas, desde la función imprescindible AVERAGE (bit.ly/1Tjynwl) hasta las funciones de análisis de cadenas, como SEARCH para buscar subcadenas, (bit.ly/2jhcEuV) o cálculos más complejos, como la función estadística T.TEST (bit.ly/2ipowKE). En la escuela y en el trabajo, las personas aprenden funciones de Excel para usarlas en fórmulas e interactúan con estas naturalmente para sus necesidades de cálculo diarias. Por tanto, si quiere proporcionar una funcionalidad eficaz que Excel no tenga todavía, considere la posibilidad de compilar una función de Excel para ese fin. Consulte la Figura 2 para obtener un ejemplo: Contoso Cryptographers Corp. quiere lanzar una solución que ayude a los detectives a analizar datos en Excel para descodificar mensajes. Una de las prácticas herramientas para la interrupción de código es el reconocimiento rápido de números primos, de modo que a Contoso le encantará tener una función ISPRIME para los millones de detectives que ya usan Excel. Más adelante en este artículo, verá cómo compila Contoso esta función y otras funcionalidades que necesita para su complemento.
Figura 2 Función de Contoso para identificar números primos
¿Qué puedo compilar?
Antes de empezar a compilar, tenga en cuenta que no todas las extensiones para la funcionalidad de Excel deben usar fórmulas de Excel. Para decidir si es así con la suya, pregúntese lo siguiente: "¿Mi función debe cambiar algo aparte del valor de Excel que se está devolviendo?" En otras palabras, ¿la función tiene algún efecto secundario? En Excel, los usuarios no esperan fórmulas para cambiar nada aparte de la celda en la que se encuentran. Ese cambio podría desencadenar otros, pero también serían el resultado de fórmulas autocontenidas sin efectos secundarios. Al escribir "=SUM()" en la celda A1, no espera que aparezca un gráfico en algún lugar de la hoja ni que se agregue una nueva fila debajo ni que cambie un número en una base de datos financiera en Internet, pero puede controlar todos esos comportamientos como parte de una solución compilada por usted, que puede contener funciones y otras funcionalidades.
El tipo de solución que debe compilar para crear la función de Excel depende de sus aptitudes y objetivos. Si es un desarrollador profesional, tanto si vende Contoso Cryptographers de manera externa o compila para personas de su propia organización, un complemento es la herramienta adecuada para las soluciones de análisis de datos en Excel, como se explica en la sección "Funciones JavaScript personalizadas en complementos de Excel". Si es un desarrollador de IA o un científico de datos que quiere compilar modelos inteligentes para que los analistas de datos los usen en su compañía, consulte la sección "Funciones de Azure Machine Learning" más adelante en este artículo. Y si no tiene ninguna de estas aptitudes, Microsoft tendrá soluciones para usted próximamente.
Funciones JavaScript personalizadas en complementos de Excel
Los complementos de Excel son herramientas que los desarrolladores profesionales pueden compilar para extender Excel e interactuar con los datos de los libros (bit.ly/2AUOsZk). Ya existen miles de complementos disponibles. Todos ellos se ejecutarán en las plataformas de Excel, incluidas Windows, Mac, Excel Online e incluso iOS. Cualquier persona que esté familiarizada con las tecnologías web encontrará que los complementos son fáciles de compilar, ya que se escriben igual que las páginas web: Los complementos ejecutan HTML, JavaScript y CSS, y tienen la capacidad de llamar a servidores web externos. Lo mejor de todo es que los complementos no necesitan cambios en el código para ejecutarse en todas las plataformas diferentes. (Excel también admite otros tipos de complementos, como se describe en bit.ly/2qsPfLe, pero no pueden ejecutarse entre plataformas ni implementarse en Store). En la Figura 3 se muestran las piezas clave de un complemento. La pieza principal es el archivo manifest.xml, que especifica la ubicación web del resto del complemento y otros metadatos. El resto del código lo implementa el desarrollador, igual que con cualquier otra aplicación web.
Figura 3 Piezas clave de un complemento
Los complementos proporcionan muchas maneras útiles de extender Excel (consulte la documentación en bit.ly/2AV47rw). Pueden agregar elementos de la interfaz de usuario, como botones de la cinta, opciones de menú contextual, y paneles y cuadros de diálogo de tareas HTML. Pueden actuar con libros a través de miles de API, como las capacidades de agregar y quitar filas, insertar y editar gráficos, e incluso aplicar formato a celdas. Ahora, con la nueva versión preliminar de las funciones personalizadas de JavaScript, es posible extender las fórmulas de Excel.
Las funciones personalizadas permiten a los desarrolladores agregar cualquier función de JavaScript a Excel mediante un complemento (bit.ly/2AYtNUW). Los usuarios pueden acceder entonces a las funciones personalizadas igual que a cualquier otra función nativa de Excel (como AVERAGE). Echemos un vistazo más profundo a la función ISPRIME de Contoso Cryptographers para ver cómo está escrita (también es posible comprobar los números primos solo con las funciones integradas de Excel, pero es mucho más difícil para la persona que solicita el cálculo):
function isPrime(n) {
var root = Math.sqrt(n);
if (n < 2) return false;
for (var divisor = 2; divisor <= root; divisor++){
if(n % divisor == 0) return false;
}
return true;
}
Esta función solo comprueba todos los divisores posibles hasta la raíz cuadrada para determinar si la entrada es un número primo (unas pocas líneas de JavaScript). Toda la lógica real ya está hecha. Sin embargo, hay más que escribir que la propia función solamente. Para que el punto de extensión sea efectivo, las funciones personalizadas deben parecerse a las nativas. Y las funciones nativas tienen un montón de información personalizada. Observe la Figura 4 para obtener un ejemplo de las función ISPRIME de Contoso Cryptographers: Además del nombre de la propia función, Excel muestra una descripción útil para aclarar su finalidad.
Figura 4 Funciones personalizadas y nativas que se completan automáticamente mientras escribe
Puede ver otro ejemplo en la Figura 5. Después de seleccionar CONTOSO.ISPRIME, Excel muestra el nombre del parámetro (en este caso, n) para facilitar la selección de las entradas correctas.
Figura 5 Función ISPRIME de Contoso
Excel.Script.CustomFunctions["CONTOSO"]["ISPRIME"] = {
call: isPrime,
description: "Determines whether the input is prime",
helpUrl: "https://example.com/help.html",
result: {
resultType: Excel.CustomFunctionValueType.boolean,
resultDimensionality: Excel.CustomFunctionDimensionality.scalar,
},
parameters: [{
name: "n",
description: "the number to be evaluated",
valueType: Excel.CustomFunctionValueType.number,
valueDimensionality: Excel.CustomFunctionDimensionality.scalar,
}],
options: { batched: false, streaming: false }
};
El desarrollador proporciona ambos datos y mucha información más en la definición JavaScript de los metadatos de la función, como puede ver en la Figura 5.
Puede ver que la descripción se especifica como una cadena, igual que el nombre de cada parámetro. No explicaré todos los metadatos aquí, pero puede consultar la documentación para obtener más información. Si está familiarizado con el modelo de complemento, es posible que se pregunte por qué esta información se proporciona en JavaScript en lugar de estar codificada de forma rígida y estática en cualquier otra ubicación, como el archivo manifest.xml. El motivo es la flexibilidad. En el caso de Contoso, las funciones criptográficas se definen y comprenden de antemano. No obstante, es posible que en ocasiones quiera tener la capacidad de habilitar funciones diferentes en distintas situaciones.
A Contoso Cryptographers le encanta la simplicidad de su función ISPRIME, pero su siguiente objetivo es un poco más difícil: Consiste en compilar una función para generar números aleatorios para cifrar texto. Excel tiene una función RAND excelente. El problema es que RAND no es ideal para el cifrado porque sus valores son pseudoaleatorios y se generan de manera procedimental. En cambio, los números que genera random.org se pueden usar de manera segura con este fin, ya que se generan a partir de ruido atmosférico. Obviamente, no conviene codificar números aleatorios de forma rígida; en su lugar, Contoso debe diseñar una función que llame a random.org para capturar números aleatorios por medio de una solicitud HTTP. Afortunadamente, las funciones personalizadas facilitan la inclusión de solicitudes web. A continuación, se muestra el aspecto de la función RANDOM asincrónica de Contoso:
function getRandom(min, max) {
return new OfficeExtension.Promise(function(setResult, setError){
sendRandomOrgHTTP(min, max, function(result){
if(result.number) setResult(number);
else setError(result.error);
});
});
}
La diferencia principal entre esta función e ISPRIME es que RANDOM es asincrónica: en lugar de devolver un valor a Excel, devuelve inmediatamente una promesa JavaScript y, a continuación, envía una solicitud XMLHttpRequest (no visible en la función, ya que se encuentra en el método sendRandomOrgHTTP) al servicio random.org. A continuación, una vez que el servicio web responde, Contoso resuelve la promesa con el número de random.org para su escritura en la celda. Poner datos web en Excel es uno de los principales motivos por los que las compañías quieren extender las funciones de Excel, por lo que Microsoft espera una gran popularidad de las funciones asincrónicas.
Un aspecto común de todas las funciones asincrónicas es que tardan algo de tiempo en devolver el resultado, por lo que Excel muestra un mensaje #GETTING_DATA en la celda mientras espera que la función se resuelva (consulte la Figura 6).
Figura 6 Espera de una función asincrónica para devolver
En este caso, la solicitud HTTP se puede completar rápidamente, en aproximadamente una décima de segundo. No obstante, si es necesario, la función puede realizar muchas llamadas y tardar más tiempo en evaluarse. Para las funciones JavaScript personalizadas, al resolver el valor en JavaScript, este se muestra inmediatamente en la celda. En la Figura 7 se muestra una vista de Excel de la misma función RANDOM después de la devolución del valor.
Figura 7 Vista de Excel de la función RANDOM después de la devolución del valor
Obviamente, un complemento que use funciones personalizadas también puede tener muchas otras características: Es posible que Contoso Cryptographers quiera crear un panel de tareas y una ficha de cinta para proporcionar a sus clientes acceso fácil a sus funciones personalizadas, opciones de configuración adaptadas a su comportamiento e instrucciones sobre cómo usarlas. Quizás la API de JavaScript podría usarse también para permitir a los clientes cifrar una hoja de cálculo de datos completa con solo hacer clic en un botón. Decidan lo que decidan, pueden confiar en que el complemento íntegro se ejecutará en las plataformas de Excel sin cambios en el código.
En función del público, existen dos maneras de implementar un complemento que contiene estas funciones JavaScript personalizadas. La Tienda Office pública (bit.ly/2A70L5o) está disponible para cualquiera que tenga Excel. Se incluye un botón para explorar la Tienda en la cinta de Excel. La Tienda admite complementos gratuitos y de pago, y exige el envío y la validación a través de Microsoft. No obstante, Contoso Cryptographers Corp. realiza la implementación directamente para sus clientes de pequeñas empresas, a fin de evitarles tener que hacer clic en ninguna opción para llevar a cabo la instalación. En su lugar, proporciona a todos los clientes el archivo de manifiesto. Luego, un administrador de TI puede decidir qué usuarios obtienen acceso a través del Centro de administración de O365 (consulte la interfaz en la Figura 8). El complemento se instala automáticamente para esos usuarios.
Figura 8 Implementación de una función personalizada en una organización
Esperamos que la riqueza de recursos de Contoso Cryptographers le haya inspirado para intentar escribir sus propias funciones personalizadas (use la guía y los ejemplos de aka.ms/customfunctions). A continuación, exploraré otra nueva manera de extender fórmulas de Excel.
Funciones de Azure Machine Learning
El segundo tipo de función extensible que ha anunciado Microsoft son las funciones de Azure Machine Learning (abreviado como Azure ML). A diferencia de las funciones JavaScript personalizadas, las funciones de Azure ML las crean desarrolladores de IA (a menudo científicos de datos y otros expertos) para que las usen los analistas de su organización. Como resultado, no es necesario crear un paquete de complementos para implementar una función de Azure ML.
La propia función de Azure ML se basa en un servicio que calcula o predice los valores en función de un modelo de Machine Learning (ML). Una vez compilado el modelo, los creadores pueden habilitarlo para quien elijan. Posteriormente, cada vez que alguien quiera ejecutar la función, solo tendrá que escribirla en una celda como lo haría con cualquier otra función de Excel. La función llama a un servicio web dinámico en la suscripción de Azure de la compañía y devuelve el resultado de manera asincrónica.
Por ejemplo, un analista de marketing en un comercio puede querer predecir la demanda de nuevos productos en distintas geografías. El analista tiene algunos datos sobre ese producto y los mercados de destino en Excel. El objetivo es obtener una función simple que permita al analista pronosticar la demanda en cada mercado sin salir de Excel. En la Figura 9 se muestra una hoja de cálculo de ejemplo con este tipo de datos.
Figura 9 Producto de ejemplo y datos de mercado que se analizarán con una función de Azure ML
Una desarrolladora de IA de esa organización usa los servicios de Azure ML (bit.ly/2nwa0WP) para crear el modelo: Comienza preparando datos de aprendizaje, por lo general de una base de datos externa, para crear un experimento de ML basado en las ventas históricas de nuevos productos. Azure Machine Learning Workbench es una herramienta que simplifica la preparación de datos y permite que un científico de datos escriba código de Python para entrenar y evaluar modelos. La Figura 10 corresponde a la vista del panel de ejecución de Azure ML Workbench, que muestra las estadísticas de un experimento.
Figura 10 Azure Machine Learning Workbench
Cuando el modelo está preparado, se puede implementar como un servicio web en la suscripción de Azure de la organización, con permisos de acceso para el conjunto de usuarios adecuado. En lugar de definir los metadatos de JavaScript que se ejecutan localmente, los metadatos se definen en un formato Swagger (API de RESTful) que se crea automáticamente con el servicio implementado. Todo lo necesario para que el servicio aparezca como una función en Excel es que el analista de Excel tenga permiso para acceder a este. En la Figura 11 se muestran las funciones implementadas que aparecen para los analistas de datos en Excel. A continuación, los analistas pueden ejecutar la función con normalidad. Del mismo modo que con las funciones personalizadas asincrónicas de JavaScript, la celda muestra el mensaje #GETTING_DATA mientras el servicio calcula el resultado.
Figura 11 Funciones implementadas que se muestran en Excel
El futuro de las funciones extensibles en Excel
Espero que pruebe las versiones preliminares tecnológicas para las funciones extensibles de Excel (funciones y complementos JavaScript personalizados si es proveedor de software o servicios, y funciones de Azure ML si es desarrollador de IA o un científico de datos). Microsoft estudia atentamente todos los comentarios durante la versión preliminar (publique ideas en la página de UserVoice en bit.ly/2jRJQsu), de modo que, además de empezar con ventaja, también tendrá la oportunidad de definir el producto final. Existen muchas más mejoras que se introducirán en estos tipos de funciones, algunas de ellas completamente nuevas, así que no se pierda futuros anuncios.
Michael Saunders es administrador de programas en el equipo de Office, donde compila características de Excel para desarrolladores. Es originario de Toronto, Canadá, y estudió Administración e Ingeniería en Ciencia de los Materiales en la Universidad de Pensilvania y en Wharton. En su tiempo libre, Saunders canta en el coro The Esoterics de Seattle y desarrolla complementos.
Gracias a los siguientes expertos técnicos de Microsoft por revisar este artículo: Yina Arenas, Ashvini Sharma y Sandhya Vankamamidi
Yina Arenas es la administradora de programas principal en Microsoft y responsable de Microsoft Graph. Lleva las API de Microsoft y Office de las tecnologías inconexas y heredadas a un nuevo mundo de API unificadas.
Ashvini Sharma es director de programas en el equipo de Excel responsable de la visión y el mapa de ruta de Análisis de Excel.
Sandhya Vankamamidi es directora jefe de programas en el equipo de experiencias de consumo de información y contenido. Sandhya es responsable de diseñar y entregar experiencias envolventes en la familia de aplicaciones de Bing.