Curso
Excel, meu velho amigo
Eu sou do tipo de pessoa que manipula dados em planilhas só porque pode. Na semana passada, meu líder de time enviou uma lista de funcionários que não tinham atualizado seus checklists de projeto e eu imediatamente abri o arquivo, comecei a montar tabelas e a calcular estatísticas de resumo por pessoa e, em seguida, mandei para ele um panorama com os dados resumidos, detalhado por colaborador. Provavelmente deixei-o um pouco louco, mas não consigo evitar: eu amo análise de dados e amo Excel. Uso Excel desde 2001 e, até poucos meses atrás, era minha ferramenta preferida para organização, análise e visualização de dados. Ele é ótimo para organizar informações, fazer cálculos e análises e até funciona como um banco de dados simples. Já usei para tudo: controlar orçamento pessoal, despesas e treinos, até relatórios extensos de efetivo no Exército. Na maior parte do tempo, o Excel deu conta — e era a única opção. Por questões de segurança, eu não tinha acesso a VBA, Python ou qualquer outro tipo de automação. Os conjuntos de dados também eram pequenos o suficiente para ele aguentar.
Quase um ano atrás, comecei a trabalhar no Abilities Lab da Cerner como engenheiro de sistemas em testes de performance de software. Em resumo: testes de performance. Testamos softwares novos e atualizados antes de irem para os clientes e testamos tudo: CPU e memória em Windows e Unix, desempenho da Java Virtual Machine, tempos de resposta tanto de serviços de backend quanto da interface do usuário, performance de banco de dados, impacto no nosso software atual, rede e praticamente qualquer outra coisa que você imaginar. Nenhum teste fica restrito a uma única máquina; quase sempre é uma combinação de dispositivos Windows e Unix (físicos e virtuais), estações de usuário e servidores. Em um dos projetos de que participei, tínhamos mais de 20 sistemas dos quais precisávamos coletar dados.
Dependendo da duração do projeto, pode haver mais de 50 testes para revisar, analisar e reportar. Todos esses dados precisam ser resumidos em um relatório final de resultados que é publicado em uma página interna do Jira para o time de desenvolvimento consumir. Temos algumas ferramentas internas que agregam boa parte dos dados, mas não tudo, e os relatórios gerados nelas não permitem a personalização no nível que eu precisava para o tipo de teste que faço. Minha ferramenta preferida para escrever e entregar esses relatórios era o Excel — e por que não? Venho de um background forte em Excel e acreditava que conseguiria fazer qualquer coisa com ele.
Excel, temos um problema...
Não vou entrar no processo cansativo de levar dados das nossas ferramentas internas para o Excel, mas era algo de muitas horas — e eu sou muito proficiente em Excel. Os dados tinham que ser copiados, limpos, classificados e filtrados. Não importava como eu escrevia minhas fórmulas, quase sempre precisavam de ajuste; depois as tabelas e os gráficos tinham que ser adequados ao número de testes, nós e diversos tempos de resposta registrados no projeto. Em seguida, vinha o ritual de localizar e substituir para acertar os nomes dos testes, garantir que os formatos numéricos e os destaques estavam corretos em cada linha de cada aba — e a limpeza geral dos dados. Tentei criar modelos, macros e scripts em VBA. Nada do que eu fazia era flexível o suficiente para lidar com quantidades variáveis de testes, dispositivos e métricas de performance sem exigir uma bela faxina a cada rodada. Consegui montar um template que acelerou um pouco, mas ainda levava meio dia para deixar tudo no ponto.
Dou risada hoje lembrando de algumas fórmulas ridiculamente complicadas e scripts de VBA que entraram naquele modelo. Ficou pior quando atualizamos as versões do Java e nossas ferramentas internas não conseguiam processar os logs corretamente. Migramos para uma ferramenta externa chamada GC Easy, que faz um ótimo trabalho ao transformar logs em um arquivo JSON que pode ser carregado no Excel. Esses JSONs podem ser importados com PowerQuery, mas é um processo lento e maçante — e quando você tenta analisar 50+ arquivos JSON com mais de um milhão de linhas cada, acaba travando o Excel com frequência. Some a isso a necessidade de automatizar o processo e eu simplesmente não encontrava uma boa forma. Mesmo quando eu conseguia carregar os dados no Excel, as visualizações (gráficos de área empilhada representando o Heap Size ao longo do tempo) congelavam e causavam mais travamentos. E, ainda que eu resolvesse isso, os JSONs eram só o começo.
Copiar, limpar e analisar dados manualmente vai gerar erros. Somos humanos: deixamos passar, nos distraímos, clicamos errado. Meu processo não funcionava — e nunca funcionaria para todo mundo sem um treinamento pesado em Excel para a equipe inteira. Talvez seja meu histórico militar, talvez seja só um traço de personalidade, mas estou sempre procurando como melhorar processos e ganhar eficiência, então comecei a pensar em como enxugar tudo isso.
Na época, nossa ferramenta interna não tinha API nem função de exportação que prestasse. Eu não tinha como puxar dados diretamente sem copiar e colar. Minha próxima ideia foi ir direto à fonte: os arquivos de log de cada dispositivo no teste. Isso significava varrer um diretório de teste e suas muitas subpastas, puxar dados de vários tipos de arquivo em formatos diferentes, fazer todos os cálculos e escrever no Excel no formato necessário — com visualizações e formatação condicional.
Os tipos de arquivo que eu precisava analisar eram .txt, .csv, .json (várias estruturas), .xml (várias estruturas), .dat, .html e ainda havia dados que vinham de um banco Oracle. Eu tinha que levar em conta uma estrutura de diretórios variável, quantidades e estruturas de arquivos diferentes, arquivos .xml sem tags de fechamento e tamanhos passando de 10 GB. O processo também precisava ser fácil de seguir, automatizado ao máximo e suportar milhões de linhas. O Excel definitivamente não daria conta disso tudo, então parti para ferramentas de BI populares: Power BI e Tableau. Não quero transformar isso em review de produto, então vamos resumir: categoricamente não atenderam às minhas necessidades.
Então, qual ferramenta faz tudo que o Excel faz, consegue escrever relatórios em Excel e ainda atende a todos os requisitos que listei?
Conheça meus novos amigos: Python e pandas
Se você tem alguma familiaridade com Excel, tenho certeza de que vai adorar o pandas para Python. O pandas une a funcionalidade do Excel ao poder da linguagem Python. Colunas do Excel viram Series do pandas, tabelas viram DataFrames e fórmulas complexas viram funções em Python. O pandas faz tudo o que o Excel faz:
Leitura de dados
O Excel até que lê bem arquivos planos e, com o PowerQuery, tem alguma capacidade de consultar bancos de dados e ler certos arquivos .xml e .json. Lendo a documentação, parece a ferramenta perfeita para quase tudo, mas na prática não é bem assim. A interface é truncada e exige muita adaptação, não há um bom jeito de automatizar o processo e a limpeza de dados é quase tão divertida quanto ir ao dentista. Já o pandas torna a leitura de dados muito mais simples.
Essa biblioteca de manipulação de dados em Python consegue ler nativamente dados de uma infinidade de fontes. Confira a página de documentação para a lista completa. O melhor é que, se o pandas não lê nativamente, há uma boa chance de você encontrar um pacote Python que leia — ou resolver com poucas linhas de código. Confira a série de cursos da DataCamp Importing Data in Python, entre outros, para aprofundar no tema.
Consegui usar pandas para ler todos os tipos de arquivo que mencionei, incluindo aqueles .xml sem tags de fechamento. Com um pouco de processamento de linguagem natural criativo, também consigo extrair todos os metadados de teste dos .txt brutos — algo que eu não conseguia fazer no Excel por não estarem formatados como dados. A versão do script que uso hoje não só lê todos os tipos que eu precisava como, com algumas linhas extras em Python, passa a buscar automaticamente os logs .json de Garbage Collection do Java no GC Easy via API — algo impossível no Excel. E como isso se compara? Usando pandas posso vasculhar um diretório inteiro de testes e receber todos os dados de volta em DataFrames limpos e organizados em questão de minutos. Ele encara com facilidade logs acima de 10 GB. Pode não parecer muito, mas tente abrir algo desse tamanho no Excel.
Também comecei a migrar da leitura de arquivos planos para puxar dados de um banco Oracle de múltiplos terabytes. Não consigo comparar esse processo ao Excel; além de um teste rápido, sempre evitei consultas a banco no Excel. Pelo que me lembro, não é uma experiência que eu queira repetir. Conectar via Python, por outro lado, é simples com o SQLAlchemy. A conexão é fácil e a velocidade das consultas dá um baile no Excel. Veja Introduction to Relational Databases in Python para uma ótima introdução.
Limpeza de dados
Visualizações à parte, acredito firmemente que os dados devem estar em tabelas limpas, organizadas, formatadas e rotuladas. O pandas tem ótimas opções para limpeza e apresentação de tabelas bem formatadas. A página de Styling no site oficial do pandas é meu guia favorito para formatar DataFrames. Com poucas linhas de código você define casas decimais, formata números, adiciona formatação por linha e condicional — e o processo é repetível em um número infinito de documentos. Automatizar partes da limpeza, independentemente do tamanho, já me salvou incontáveis horas.
Sendo justo, dá para limpar dados no Excel, sim. Ele tem várias ferramentas nativas para isso — e era exatamente o que eu tinha que fazer sempre que (finalmente) conseguia carregar tudo nele. Era um processo majoritariamente manual, com cliques demais e, de novo, muito propenso a erros e demorado. Mesmo sendo extremamente proficiente em todas as ferramentas do Excel, deslizes acontecem. Há jeitos de acelerar com fórmulas, macros e scripts VBA (já chego lá), mas está longe de ser a solução ideal.
Análise de dados
Vou ser direto: o pandas dá um baile no Excel quando o assunto é analisar dados. Não há comparação justa. No Excel você pode escrever fórmulas e usar funções nativas para analisar dados; fiz isso por anos e funcionava. Dei aulas de análise de dados no Excel, defendi seu uso algumas vezes e até fiz uma disciplina de estatística em que o Excel era a ferramenta padrão. Não estou dizendo que ele não sirva para análise. Mas compará-lo ao pandas é como comparar papel e lápis a uma calculadora: não jogam na mesma liga.
Em agosto do ano passado, o Kaggle reportou que Python tinha ultrapassado R em Data Science e, em dezembro, a Quartz chamou o pandas de "a ferramenta mais importante em Data Science". Acho que não preciso dizer muito mais.
Macros e VBA
Em 2012 eu ainda estava na ativa e precisei ir a uma consulta de rotina no dentista, em Fort Bliss, El Paso, Texas. Quando sentei na cadeira, o dentista comentou que meus sisos precisavam ser retirados e, como tinha horário, fez o procedimento na hora, só com anestesia local. Foi uma experiência terrível e fiquei com dor por vários dias. Se eu tivesse que escolher entre fazer isso de novo ou trabalhar com Macros do Excel ou Visual Basic, preferia arrancar mais dentes.
Há muita gente muito boa nessas áreas, e já vi coisas incríveis com scripts criativos em VBA — meus parabéns a eles. Eu, claramente, não sou fã e não recomendo a ninguém, especialmente quando você pode usar Python no lugar. É uma alternativa tão popular ao VBA que a Microsoft está considerando incorporar Python como linguagem oficial de script no Excel.
Mas eu ainda preciso usar Excel
Por mais que eu quisesse fazer tudo em Python, na minha realidade isso não é prático. Por enquanto, os resultados da análise ainda precisam ser entregues em Excel. Felizmente, existem pacotes como o OpenPyXL e o XlsxWriter feitos para isso. Eu uso o XlsxWriter diariamente para converter DataFrames em relatórios profissionais no Excel — sem fórmulas, macros ou scripts VBA. E ele ainda faz visualizações.
Falando em visualizar dados...
Chega de gráficos sem graça
Nunca fui entusiasta de visualização. Sempre preferi ver dados em linhas e colunas, com destaques nas áreas de interesse — talvez um gráfico de barras aqui e ali. O Excel dá conta e oferece várias opções de visualização, mas meu repertório se resumia a gráficos de área empilhada, barras e linhas. Para cada um, eu selecionava os dados, clicava em “Inserir gráfico” e escolhia o que precisava. Dali, fazia um ou outro filtro e adicionava um título — e parava por aí.
Para ser transparente: há uma infinidade de opções de personalização no Excel, mas o processo pode ser bem difícil e a curva de aprendizado é íngreme. Eu ainda não gosto de criar gráficos no Excel, mas com Python a história é diferente.
Hoje sou um defensor de visualização e me esforço para criar ótimas representações para análise. Quando comecei a fazer cursos na DataCamp e conheci pacotes como Matplotlib e Bokeh, entendi o real poder e propósito de visualizar dados. Com o Matplotlib, as visualizações podem ser geradas facilmente dentro do pandas ou importando o pyplot. A lista de possibilidades no pyplot é enorme e praticamente todos os aspectos de um gráfico podem ser personalizados. O curso Introduction to Data Visualization With Python mostra como criar ótimas visualizações com Matplotlib.
Por melhor que o Matplotlib seja, eu precisava de mais interatividade. Queria poder selecionar, dar zoom, passar o mouse, ordenar e filtrar dados na própria visualização — e certamente não queria aprender react.js ou D3. Aprender Python foi (e continua sendo) um prazer, mas JavaScript não é meu forte. Felizmente, Python salva de novo com pacotes como Bokeh e Dash.
Bokeh, mantido pela Anaconda, integra D3.js e Python para criar gráficos totalmente interativos que podem ser exportados como documentos HTML autônomos, incorporados em páginas ou executados em um Bokeh Server. Apesar da curva de aprendizado mais íngreme que a do Matplotlib, vale muito o esforço — basta olhar a galeria e conferir. Ainda não tenho metade da habilidade em Bokeh que pretendo ter, mas virou um dos meus pacotes favoritos desde a primeira aula do curso Interactive Data Visualization With Bokeh. Se o Bokeh não atender ao que você precisa, tem o Dash do pessoal da Plotly.
Dash é outra ferramenta gratuita e open source de visualização em Python que usa React.js em vez de D3. Descobri o Dash recentemente e ele também produz visualizações interativas excelentes — sem precisar aprender uma linha de JavaScript. É difícil comparar Dash e Bokeh, já que ambos entregam ótimos resultados. Minha única ressalva com o Dash até agora é que só consegui rodar as visualizações em um servidor Dash. Não consegui incorporá-las em documentos independentes, páginas HTML ou notebooks Jupyter. Ainda assim, o potencial é grande, como você pode ver na galeria deles.
Economize tempo com agendamento e automação de tarefas
No verão de 2014, tivemos um problema na organização em que eu trabalhava. A Reserva do Exército é guiada por uma série de números chamados coletivamente de “Readiness”. É a porcentagem de pessoal de uma organização que pode ser convocada para um deslocamento. Esse número é determinado por várias categorias de dados, incluindo saúde, odontologia, educação, aptidão física e um monte de outras métricas. Não posso divulgar o número aqui, mas o nosso estava longe do ideal.
Minha solução foi um relatório em Excel com várias abas, contendo diversas tabelas e gráficos compilados de diferentes bases de pessoal. Ele trazia um resumo da organização, informações individuais em cada categoria de medição e projeções de onde esse número estaria nos três meses seguintes, com base nas ações em curso naquela semana. Deu muito certo: nosso “Readiness” aumentou bastante e permaneceu alto por muito tempo.
Apesar de funcionar, era um caos. Eu chegava cedo na segunda-feira e puxava manualmente as informações de todas as fontes, limpava os dados e copiava para o relatório da semana. Depois, gastava pelo menos uma hora conferindo erros e limpando mais dados. Em seguida, precisava enviar por e-mail para a equipe administrativa validar as informações e incluir atualizações que ainda não tinham ido para os bancos. Em média, eram três dias para soltar o relatório. O custo em horas de trabalho era excessivo e desnecessário.
Com alguns scripts em Python, eu poderia ter puxado automaticamente todos os dados das várias fontes, compilado tudo em DataFrames do pandas, gerado o relatório inteiro em Excel e enviado por e-mail para a equipe administrativa — tudo automático. O melhor: isso poderia ser agendado para rodar às 00:01 da segunda-feira e economizar horas de trabalho. Em sistemas Linux, é muito simples agendar scripts Python para horários específicos com o crontab. No meu trabalho atual lidamos com tantos sistemas que o crontab é essencial — e agendar tarefas é uma habilidade básica. Então, se você precisa puxar dados toda noite à meia-noite e carregá-los em um relatório, no Linux o crontab é o caminho.
Sou fã de Linux, mas a maior parte do meu trabalho é em Windows — meu sistema preferido. Nele, você tem várias opções para agendamento via Agendador de Tarefas do Windows, Schtask.exe ou Powershell. Com qualquer uma delas, você programa seus scripts para rodar nos horários de menor uso, quando há mais recursos disponíveis, ou logo após a atualização de uma fonte de dados. É uma opção que eu queria muito ter tido alguns anos atrás.
Minha ferramenta favorita: Jupyter Notebooks
Depois de tantos anos usando Excel, aprender Python foi como viver só com um alicate e, de repente, descobrir uma caixa de ferramentas completa e novinha. Cada ferramenta tem seu valor, mas se tem uma que eu uso mais que todas, é o Jupyter Notebooks. Tudo o que escrevi em Python nasceu em um Notebook, seja para consumo direto, seja para virar script standalone depois. O Jupyter é excelente para escrever funções, testar código, fazer análise exploratória e até apresentar o produto final. Dá até para escrever posts (como este) ou publicar no Github com Pages. Se você navegar pelos tutoriais da DataCamp, verá que muitos foram criados assim.
Por que mencionar isso numa conversa sobre Excel?
Os Jupyter Notebooks podem substituir o Excel como produto da sua análise. Você escreve o código, exibe DataFrames do pandas, visualizações e conclusões em uma única página, que pode ser convertida para HTML com um clique. Uma das minhas metas pessoais é abandonar completamente o Excel e usar Jupyter para enviar relatórios concluídos. Isso ficou ainda mais viável com o lançamento do JupyterLab. Com ele e com widgets, você transforma um Notebook em uma aplicação interativa de análise de dados.
Considerações finais
Eu ainda uso Excel todos os dias — é uma ótima ferramenta, enraizada em muitas organizações, inclusive onde trabalho. Quase todo mundo conhece e consegue consumir informações e fazer análises simples com ele. O que muita gente não sabe é que fazer a mesma análise com pandas e Python não só é mais eficiente: é mais fácil.
Minha meta é abandonar o Excel de vez até o fim do ano, e vou conseguir usando as ferramentas que mencionei neste artigo. Você não vai virar expert do dia para a noite, mas com Excel também não foi assim. Espero que este texto te inspire a dar esse passo e experimentar algumas das novas ferramentas que citei. Você vai ganhar eficiência, produtividade e, no fim das contas, vai acelerar muito o seu fluxo de trabalho.
