Janeiro de 2018

Volume 33 – Número 1

Office - Análise de Dados, Machine Learning e Microsoft Excel

Por Michael Saunders | Janeiro de 2018

Pare uns segundos para pensar sobre o Excel como um todo — ele é uma ferramenta flexível, avançada e universal para análise de dados, que serve tanto para criar uma planilha simples de tarefas quanto para criar pastas de trabalho com modelos financeiros pesadas com 100MB usadas pelos principais bancos em todo o mundo. E por baixo de todos esses recursos sofisticados, por trás de gráficos e formatações elegantes, o valor real do Excel é o cálculo, chamado internamente de “Calc”. Calc é o que permite que você crie relações entre células: Você expressa modelos complexos escrevendo fórmulas simples para descrever as árvores de dependência entre os valores (veja a Figura 1). E então, assim que você fizer a alteração, o Calc atualiza os valores dependentes com base nessas fórmulas.

O Calc permite que você crie relações entre células
Figura 1 O Calc permite que você crie relações entre células

O Excel fornece toneladas de funções úteis para serem usadas em suas fórmulas, da função AVERAGE essencial (bit.ly/1Tjynwl), a funções de análise de cadeia de caracteres como SEARCH para encontrar subcadeias de caracteres (bit.ly/2jhcEuV) e a cálculos mais complexos como a função estatística T.TEST (bit.ly/2ipowKE). Pessoas no trabalho e na escola aprendem funções do Excel para usar em fórmulas, e interagem com elas naturalmente de acordo com suas necessidades de cálculo do dia a dia. Por isso, se você quiser fornecer um recurso avançado que o Excel ainda não tem, considere compilar uma função do Excel para essa finalidade. Veja um exemplo na Figura 2: A Contoso Cryptographers Corp. quer lançar uma solução que ajuda detetives a analisar dados no Excel para decodificar mensagens. E uma das ferramentas práticas para interromper código é reconhecer números primos primeiro, por isso, a Contoso adoraria ter uma função ISPRIME para os milhões de detetives que já usam o Excel. Mais tarde neste artigo você verá como a Contoso compila esta função e os outros recursos de que precisa para seus suplementos.

A função da Contoso para identificar números primos
Figura 2 A função da Contoso para identificar números primos

O que posso compilar?

Antes de iniciar a compilação, considere que nem todas as extensões para a funcionalidade do Excel usam fórmulas do Excel. Para decidir se a sua deveria usar, pergunte-se o seguinte: “Minha função precisa mudar algo além do valor do Excel que está sendo retornado?” Em outras palavras, a minha função tem efeitos colaterais? No Excel, as pessoas não esperam que as fórmulas mudem nada além da célula na qual elas foram inseridas. Essa mudança pode acionar outras mudanças, mas as elas também seriam o resultado de fórmulas autônomas sem efeitos colaterais. Ao digitar “=SUM()” na célula A1, você não espera que um gráfico apareça em qualquer lugar na planilha ou uma nova linha seja adicionada por baixo ou um número seja alterado em um banco de dados financeiro na Internet, embora você possa controlar todos esses comportamentos como parte de uma solução que você compilou, o que pode conter funções e outros recursos.

O tipo de solução que você deve compilar para criar a função do Excel depende de suas habilidades e objetivos. Se você for um desenvolvedor profissional, seja vendendo externamente como a Contoso Cryptographers ou compilando para pessoas em sua organização, um suplemento é a ferramenta certa para soluções de análises de dados no Excel, conforme explicado nas “Funções personalizadas do JavaScript na seção de suplementos do Excel”. Se você é um desenvolvedor de IA ou cientista de dados procurando compilar modelos inteligentes para que analistas de dados possam usar em sua empresa, confira a seção “Funções de Machine Learning do Azure” mais à frente neste artigo. E se você não tiver nenhuma dessas habilidades, a Microsoft terá soluções para você no futuro!

Funções personalizadas do JavaScript em suplementos do Excel

Os suplementos do Excel são ferramentas que desenvolvedores profissionais podem compilar para estender o Excel e interagir com os dados em pastas de trabalho (bit.ly/2AUOsZk). Milhares de suplementos já estão disponíveis e todos são executados em plataformas do Excel, incluindo Windows, Mac, Excel Online e mesmo iOS. Qualquer pessoa familiarizada com as tecnologias da Web encontrará suplementos fáceis de compilar, pois eles são escritos como páginas da Web: Os suplementos executam HTML, JavaScript e CSS, e têm a capacidade de chamar servidores Web externos. E, o melhor de tudo, é que os suplementos não precisam de nenhuma alteração de código para serem executados em todas as diversas plataformas. (O Excel também oferece suporte a outros tipos de suplementos, conform descrito em bit.ly/2qsPfLe, mas eles não pode ser executados em todas as plataformas ou ser implantados na Store.) A Figura 3 mostra os principais componentes de um suplemento. O principal componente é o arquivo manifest.xml, que especifica o local da Web onde se encontra o resto dos suplementos e outros metadados. O resto do código é implantado pelo desenvolvedor, assim como com qualquer outro aplicativo Web.

Os principais componentes de um suplemento
Figura 3 Os principais componentes de um suplemento

Os suplementos fornecem muitas formas úteis de estender o Excel (consulte a documentação em bit.ly/2AV47rw). Eles podem ser elementos da interface do usuário, como botões da faixa de opções, opções do menu de contexto, e painéis e diálogos de tarefas HTML. Eles podem interagir com as pastas de trabalho por meio de milhares de APIs, como as capacidades para adicionar e remover linhas, inserir e editar gráficos, assim como aplicar formatações em células. E agora, com a nova versão prévia das funções personalizadas do JavaScript, é possível estender as fórmulas do Excel.

As funções personalizadas permitem que os desenvolvedores adicionar qualquer função do JavaScript ao Excel usando um suplemento (bit.ly/2AYtNUW). Assim, os usuários podem acessar funções personalizadas como qualquer outra função nativa no Excel (como AVERAGE). Vamos dar uma olhada mais de perto na função ISPRIME da Contoso Cryptographers para ver como ela é escreta (também é possível verificar a primalidade usando apenas as funções integradas do Excel, mas isso é muito mais difícil para a pessoa que solicita o 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;
}

A função simplesmente verifica todos os divisores possíveis até a raiz quadrada para determinar se a entrada é um número primo — algumas linhas de JavaScript. Toda a lógica atual já está pronta. Mas há mais para escrever do que apenas a função. Para se tornarem um ponto de extensão eficaz, as funções personalizadas devem ser parecer tal como as nativas. E as funções nativas têm um monte de informações personalizadas. Veja na Figura 4 um exemplo com a função ISPRIME da Contoso Crypographers: Além do próprio nome da função, O Excel exibe uma descrição útil para esclarecer o propósito da função.        

As funções personalizadas e as funções nativas são concluídas automaticamente enquanto você digita
Figura 4 As funções personalizadas e as funções nativas são concluídas automaticamente enquanto você digita

Você pode ser outro exemplo na Figura 5. Depois que a CONTOSO.ISPRIME é selecionada, o Excel mostra o nome do parâmetro (neste caso, n) para facilitar a escolha das entradas certas.

Figura 5 A função ISPRIME da 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 }
};

Essas duas informações e muitas outras são fornecidas ao desenvolvedor na definição do JavaScript dos metadados da função, como você pode ver na Figura 5.

Você pode ver que a descrição é especificada como uma cadeia de caracteres, assim como o nome de cada parâmetro. Eu não discutirei todos os metadados aqui, mas você pode consultar a documentação para mais informações. Se você estiver familiarizado com o modelo do suplemento, é provável que se pergunte por que esta informação é fornecida em JavaScript em vez de ser inserida em código fixo em algum lugar de forma estática, como no arquivo manifest.xml. A razão é flexibilidade. No caso da Contoso, as funções de criptografia são definidas e bem conhecidas de antemão. Mas, em alguns casos, você poderá querer ter a capacidade de habilitar diversas funções em diversas situações.

A Contoso Cryptographers adora a simplicidade de sua função ISPRIME, mas seu próximo objetivo é um pouco mais difícil: Eles querem compilar uma função para gerar números aleatórios para texto criptografado. O Excel tem uma função RAND excelente, mas o problema é que o RAND não é ideal para criptografia porque seus valores são pseudoaleatórios, e gerados de forma procedimental. Em contraste, o uso dos números gerados no random.org são seguros para esta finalidade, pois são gerados a partir de um ruído atmosférico. É claro que não é bom codificar números aleatórios. Em vez disso, a Contoso deve criar uma função que pode chamar o random.org para buscar números aleatórios por meio da solicitação HTTP. Felizmente, as funções personalizadas são fáceis de incluir nas solicitações da Web. É assim que se parece a função assíncrona RANDOM da 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);
    });
  });
}

A principal diferença entre esta função e a ISPRIME é que a função RANDOM é assíncrona, ou seja, em vez de retornar um valor para o Excel, ela retorna imediatamente uma promessa JavaScript e, em seguida, uma função XMLHttpRequest (não visível na função, que está no método sendRandom­OrgHTTP) para o serviço random.org. Em seguida, quando o serviço Web tiver respondido, a Contoso resolve a promessa com o número do random.org para escrevê-lo na célula. Trazer os dados Web para o Excel é uma das principais razões de as empresas desejarem estender as funções do Excel, por isso, a Microsoft espera que as funções assíncronas se tornem populares.

Um aspecto comum de todas as funções assíncronas é que elas levam algum tempo para retornar seus resultados, por isso, o Excel mostra uma mensagem #GETTING_DATA na célula enquanto aguarda que a função seja resolvida (veja a Figura 6).

Aguardando o retorno de uma função assíncrona
Figura 6 Aguardando o retorno de uma função assíncrona

Neste caso, a solicitação HTTP pode ser concluída rapidamente, em cerca de um décimo de segundo. Mas, se necessário, a função pode fazer muitas chamadas e levar mais tempo do que isso para avaliar. Para as funções personalizadas do JavaScript, resolver o valor no JavaScript faz com que ele seja imediatamente exibido na célula. A Figura 7 mostra uma exibição do Excel da mesma função RANDOM depois de o valor ser retornado.

Uma exibição do Excel da mesma função RANDOM depois de o valor ser retornado
Figura 7 Uma exibição do Excel da mesma função RANDOM depois de o valor ser retornado

É claro, um suplemento usando funções personalizadas poderia ter muitos outros recursos também: A Contoso Cryptographers poderá desejar criar um painel de tarefas e um guia de faixa de opções para oferecer a seus clientes fácil acesso às suas funções personalizadas, além de configurações de comportamento e orientações sobre como usá-las. Talvez a API do JavaScript poderia até mesmo ser usada para deixar os clientes criptografarem toda uma planilha de dados com um simples clique de botão. Não importa o que decidam, eles podem estar confiantes de que todo o suplemento será executado nas plataformas do Excel sem alterações no código.

Existem duas principais maneiras de implantar um suplemento contendo essas funções personalizadas do JavaScript, dependendo do público. A Office Store pública (bit.ly/2A70L5o) está disponível a todos que têm o Excel — existe até mesmo um botão para navegar na Store na faixa do Excel. A Store oferece suporte a suplementos gratuitos e pagos, e requer o envio e a validação pela Microsoft. No entanto, a Contoso Cryptographers Corp. implanta diretamente esses suplementos em seus clientes empresariais pequenos para que eles não tenham que clicar em nada para instalá-los. Em vez disso, ela fornece a cada cliente um arquivo de manifesto. Em seguida, um administrador de TI pode escolher quais usuários obtêm acesso por meio do centro de administração do O365 (veja a interface na Figura 8). Esses usuários obtêm um suplemento instalado automaticamente.

Implantando uma função personalizada em uma organização
Figura 8 Implantando uma função personalizada em uma organização

Felizmente, você foi inspirado pela engenhosidade da Contoso Cryptographers para escrever suas próprias funções personalizadas (use o guia e as amostras em aka.ms/customfunctions). Em seguida, vou explorar outra nova maneira de estender fórmulas do Excel.

Funções de machine learning do Azure

O segundo tipo de função extensível que a Microsoft anunciou são as funções de Machine Learning do Azure (abreviadas como Azure ML). Em contraste com as funções personalizadas do JavaScript, as funções do Azure Machine Learning são criadas pelos desenvolvedores de IA (frequentemente cientistas de dados e outros especialistas) para que os analistas possam usá-las em suas organizações. Como resultado, não há necessidade de criar um pacote de suplemento para implantar uma função do Azure Machine Learning.

A função do Azure Machine Learning é baseada em um serviço que calcula ou prevê valores com base no modelos de Machine Learning (ML). Quando o modelo é compilado, os criadores podem habilitá-lo para qualquer pessoa que escolherem. Em seguida, toda a vez que alguém desejar executar a função, basta digitar em uma célula, como em qualquer outra função do Excel. A função chama um serviço Web ao vivo na assinatura Azure da empresa e retorna o resultado de forma assíncrona.

Por exemplo, um analista de marketing em uma revendedora poderá desejar solicitar novos produtos em vários pontos geográficos. O analista tem alguns dados sobre o produto e os mercados-alvo no Excel. O objetivo é obter uma função simples que permite que o analista obtenha uma previsão da demanda em cada mercado sem ter que sair do Excel. A Figura 9 mostra um modelo de planilha com este tipo de dado.

Produto de amostra e dados do mercado que serão analisados com uma função do Azure Machine Learning
Figura 9 Produto de amostra e dados de mercado que serão analisados com uma função do Azure Machine Learning

Uma desenvolvedora de IA nessa organização usa os serviços do Azure Machine Learning (bit.ly/2nwa0WP) para criar o modelo: Ele começa a preparar os dados de treinamento, normalmente de um banco de dados externo, para compilar um experimento de Machine Learning baseado no histórico de vendas para novos produtos. O Azure Machine Learning Workbench é uma ferramenta que simplifica a preparação de dados e permite que o cientista de dados escreva código Python para treinar e avaliar modelos. A Figura 10 é a exibição da opção Executar Dashboard no Azure Machine Learning Workbench, mostrando estatísticas em um experimento.

Azure Machine Learning Workbench
Figura 10 Azure Machine Learning Workbench

Assim que o modelo estiver pronto, ele pode ser implantado como um serviço Web na assinatura Azure da organização, com permissões para o conjunto certo de usuários a acessá-lo. Em vez de definir os metadados em JavaScript que são executados localmente, os metadados são definidos em um formato Swagger (API RESTful) que é criado automaticamente junto com o serviço implantado. Tudo o que é necessário para o serviço aparecer como uma função no Excel é que o analista em Excel tenha permissão para acessá-lo. A Figura 11 mostra as funções implantadas que aparecem para os analistas de dados no Excel. Assim, os analistas podem executar a função normalmente. Assim como com as funções personalizadas assíncronas do JavaScript, a célula mostra uma mensagem #GETTING_DATA enquanto o serviço calcula o resultado.

As funções implantadas exibidas no Excel
Figura 11 As funções implantadas exibidas no Excel

O futuro das funções extensíveis no Excel

Espero que você experimente as versões prévias da tecnologia para funções extensíveis no Excel: as funções personalizadas JavaScript e os suplementos, se você é um fornecedor de software ou de serviços, e as funções do Azure Machine Learning se você e um desenvolvedor de IA ou cientista de dados. A Microsoft ouve com atenção todos os comentários durante a versão prévia (publique ideias na página do UserVoice page em bit.ly/2jRJQsu) para que, além de você obter uma vantagem inicial, também possa ter a oportunidade de moldar o produto final lançado. Existem muito mais aprimoramentos chegando para esses dois tipos de função, assim como outros totalmente novos. Por isso, fique antenado nos próximos comunicados!


Michael Saunders é gerente de programa na equipe do Office, responsável por compilar recursos do Excel para desenvolvedores. Ele é originalmente de Toronto, no Canadá, e estudou Administração e Engenharia de Ciência de Materiais na Universidade da Pensilvânia e em Wharton. Durante seu tempo livre, Saunders canta com a Seattle Esoterics e desenvolve suplementos.

Agradecemos aos seguintes especialistas técnicos da Microsoft pela revisão deste artigo: Yina Arenas, Ashvini Sharma, Sandhya Vankamamidi
Yina Arenas é uma das principais gerentes de programa na Microsoft e uma líder do Microsoft Graph. Ela está transportando o Office e as APIs da Microsoft de tecnologias legadas e desarticuladas para um novo mundo unificado da API.
Ashvini Sharma é gerente-chefe de programa na equipe do Excel responsável pela visão e estratégia de análise do Excel.
Sandhya Vankamamidi é gerente de programa sênior na equipe de Experiências de Consumo de Conteúdo. Sandhya é responsável por projetar e fornecer experiências imersivas em toda a família de aplicativos do Bing.


Discuta esse artigo no fórum do MSDN Magazine