AMOSTRA PythonParaExcel
AMOSTRA PythonParaExcel
A
R
ST
Felix Zumstein
O
AM
Prefácio xiii
Por que Escrevi Este Livro xiv
Para Quem É Este Livro xiv
A
Como Este Livro É Organizado xv
Versões do Python e do Excel xvii
Convenções Usadas Neste Livro xvii
Usando Exemplos de Código xviii
R
Agradecimentos xix
PARTE I
ST
Introdução ao Python
CAPÍTULO 1 3
Por que Python para Excel? 3
O
CAPÍTULO 2 21
Ambiente de Desenvolvimento 21
Distribuição Anaconda Python 22
Instalação 22
Prompt do Anaconda 22
Python REPL: Uma Sessão Interativa do Python 26
Gerenciadores de pacotes: Conda e pip 27
Ambientes Conda 29
Jupyter Notebooks 29
CAPÍTULO 3 45
A
Primeiros Passos com Python 45
Tipos de Dados 45
Objetos 46
R
Atributos e métodos 47
Tipos Numéricos 47
Booleanos 49
Strings 50
ST
Indexação e Fatiamento 52
Indexação 52
Fatiamento 53
Estruturas de Dados 53
Listas 54
Dicionários 55
O
Tuplas 57
Sets 57
Fluxo de Controle 58
AM
PARTE II
Introdução ao pandas
CAPÍTULO 4 77
Fundamentos do NumPy 77
Primeiros Passos com o NumPy 77
Array NumPy 77
Vetorização e Transmissão 79
Funções Universais (ufunc) 80
A
Criando e Manipulando Arrays 81
Obtendo e Definindo Elementos do Array 81
Construtores de Array Úteis 82
R
Visualizar versus Copiar 83
Conclusão 83
CAPÍTULO 5 85
ST
Análise de Dados com pandas 85
DataFrame e Série 85
Índice 88
Colunas 90
Manipulação de Dados 91
O
Selecionando Dados 92
Definindo Dados 97
Dados Ausentes 100
Dados Duplicados 101
AM
CAPÍTULO 6 123
Análise de Séries Temporais com pandas 123
DatetimeIndex 124
Criando um DatetimeIndex 124
Filtrando um DatetimeIndex 126
Trabalhando com Fusos Horários 127
Manipulações Comuns de Séries Temporais 128
Deslocamento e Mudanças Percentuais 128
Rebaseamento e Correlação 130
Amostragem 133
A
Janelas Contínuas 135
Limitações com pandas 136
Conclusão 136
R
PARTE III
ST
Lendo e Gravando Arquivos do Excel sem Excel
CAPÍTULO 7 139
Manipulação de Arquivos do Excel com pandas 139
Estudo de Caso: Relatórios em Excel 139
Lendo e Gravando Arquivos do Excel com o pandas 143
O
CAPÍTULO 8 151
Manipulação de Arquivos do Excel com Pacotes de Leitura e Gravação 151
Os Pacotes de Leitura e Gravação 151
Quando Usar Qual Pacote 152
O Módulo excel.py 153
OpenPyXL 155
XlsxWriter 159
pyxlsb 161
xlrd, xlwt e xlutils 162
Tópicos Avançados de Leitura e Gravação 164
Trabalhando com Arquivos Grandes do Excel 164
Formatando DataFrames no Excel 168
Formatando a parte dos dados de um DataFrame 171
Estudo de Caso (Revisitado): Relatórios em Excel 173
Conclusão 174
PARTE IV
A
Conversores, Opções e Coleções 188
Trabalhando com DataFrames 188
Conversores e Opções 189
R
Gráficos, Imagens e Nomes Definidos 191
Gráficos do Excel 192
Estudo de Caso (Re-revisitado): Relatórios em Excel 195
Tópicos Avançados do xlwings 197
ST
Fundamentos do xlwings 197
Melhorando o Desempenho 199
Como Lidar com uma Funcionalidade Ausente 200
Conclusão 201
CAPÍTULO 10 203
O
CAPÍTULO 11 219
Python Package Tracker 219
O Que Construiremos 219
Funcionalidade Principal 221
APIs da Web 222
Bancos de Dados 225
Exceções 234
CAPÍTULO 12 247
Funções Definidas Pelo Usuário (UDFs) 247
Primeiros Passos com UDFs 247
Início Rápido de UDFs 248
Estudo de Caso: Google Trends 253
A
Introdução ao Google Trends 253
Trabalhando com DataFrames e Arrays Dinâmicos 254
Buscando Dados no Google Trends 260
R
Plotando com UDFs 264
Depurando UDFs 265
Tópicos Avançados em UDF 267
ST
Otimização Básica do Desempenho 268
Armazenando em cache 270
O Decorador Sub 272
Conclusão 274
APÊNDICE A 277
O
APÊNDICE B 281
AM
APÊNDICE C 287
Conceitos Avançados do Python 287
Classes e Objetos 287
Trabalhando com Objetos datetime com Fuso Horário 289
Objetos Python Mutáveis versus Imutáveis 290
Chamando Funções com Objetos Mutáveis como Argumentos 291
Funções com Objetos Mutáveis como Argumentos Padrão 293
Índice 295
A
tas de trabalho do Excel contêm tantos dados e fórmulas que se tornam lentas
ou, na pior das hipóteses, travam. No entanto, faz sentido questionar sua confi-
guração antes que as coisas deem errado: se você trabalha em pastas de trabalho
R
de importância vital, nas quais os erros podem resultar em danos financeiros
ou de reputação, ou se você gasta horas todos os dias atualizando manualmente
as pastas de trabalho do Excel, deve aprender a automatizar seus processos com
ST
uma linguagem de programação. A automação elimina o risco de erro humano e
permite que você gaste seu tempo em tarefas mais produtivas do que copiar/colar
dados em uma planilha do Excel.
Neste capítulo, apresentarei algumas razões pelas quais o Python é uma excelen-
te escolha em combinação com o Excel e quais vantagens são comparadas à lin-
O
A
dizado de máquina.
O fato de o Python e o Excel terem sido inventados há muito tempo não é a única
coisa que eles têm em comum: também são uma linguagem de programação.
R
Embora você provavelmente não fique surpreso ao ouvir isso sobre o Python,
pode necessitar de uma explicação para o Excel, que darei a seguir.
ST
O Excel É uma Linguagem de Programação
Esta seção começa apresentando o Excel como uma linguagem de programação,
que o ajudará a entender por que os problemas de planilhas aparecem regular-
mente nas notícias. Em seguida, veremos algumas práticas recomendadas que
surgiram na comunidade de desenvolvimento de software e podem evitar muitos
O
erros típicos do Excel. Concluiremos com uma breve introdução ao Power Query
e ao Power Pivot, duas ferramentas modernas do Excel que cobrem o tipo de
funcionalidade para a qual usaremos o pandas.
AM
Se você usa o Excel para mais do que sua lista de compras, definitivamente está
usando funções como =SOMA(A1:A4) para somar um intervalo de células. Se pen-
sar um pouco sobre como isso funciona, notará que o valor de uma célula ge-
ralmente depende de uma ou mais células, que podem novamente usar funções
que dependem de uma ou mais células, e assim por diante. Fazer essas chamadas
de função aninhadas não é diferente de como outras linguagens de programa-
ção funcionam, você apenas escreve o código em células em vez de arquivos de
texto. E se isso ainda não o convenceu: no fim de 2020, a Microsoft anunciou a
introdução das funções lambda, que permitem escrever funções reutilizáveis na
própria linguagem de fórmulas do Excel, ou seja, sem precisar depender de uma
linguagem diferente, como o VBA. De acordo com Brian Jones, chefe de produto
do Excel, essa era a peça que faltava para finalmente tornar o Excel uma lin-
guagem de programação “real”.1 Isso também significa que os usuários do Excel
deveriam realmente ser chamados de programadores do Excel!
A
mente não são documentadas nem testadas. Às vezes, esses problemas podem
ter consequências devastadoras: se você esquecer de recalcular sua planilha de
trading antes de fazer uma negociação, poderá comprar ou vender o número
R
errado de ações, o que pode fazer com que perca dinheiro. E, se não é apenas seu
próprio dinheiro que você está negociando, poderemos ler sobre isso nas notí-
cias, como veremos a seguir.
ST
Excel no Noticiário
O Excel é um convidado regular nas notícias e, durante a redação deste artigo,
duas novas histórias chegaram às manchetes. A primeira foi sobre o HUGO Gene
Nomenclature Committee, que renomeou alguns genes humanos para que não
fossem mais interpretados pelo Excel como datas. Por exemplo, para evitar que
O
o gene MARCH1 fosse transformado em 1-Mar, ele foi renomeado como MARCHF1.2
Na segunda história, o Excel foi responsabilizado pelo atraso na comunicação
de 16 mil resultados de testes de Covid-19 na Inglaterra. O problema foi causado
porque os resultados do teste foram gravados no formato de arquivo do Excel
AM
2 James Vincent, “Scientists rename human genes to stop Microsoft Excel from misreading them
as dates”, The Verge, 6 de agosto de 2020, https://oreil.ly/0qo-n (conteúdo em inglês).
3 Leo Kelion, “Excel: Why using Microsoft’s tool caused COVID-19 results to be lost”, BBC News,
5 de outubro de 2020, https://oreil.ly/vvB6o (conteúdo em inglês).
Regarding 2012 CIO Losses4 (2013) menciona que “o modelo operava por meio de
uma série de planilhas Excel, que precisavam ser preenchidas manualmente, por
um processo de copiar e colar dados de uma planilha para outra”. Além desses
problemas operacionais, elas tinham um erro lógico: em um cálculo, elas esta-
vam dividindo por uma soma, em vez de por uma média.
Se você quiser ver mais dessas histórias, dê uma olhada em Horror Stories,
uma página da web mantida pelo European Spreadsheet Risks Interest Group
(EuSpRIG).
Para evitar que sua empresa acabe virando notícia com uma história semelhante,
A
daremos uma olhada em algumas das melhores práticas recomendadas a seguir
que tornam seu trabalho com o Excel muito mais seguro.
R
Esta seção apresentará as melhores práticas de programação mais importantes, in-
cluindo a separação de conceitos, o princípio DRY, testes e controle de versão. Como
veremos, segui-las será mais fácil quando você começar a usar o Python junto do Excel.
ST
Separação de conceitos
Um dos princípios de design mais importantes na programação é a separação de con-
ceitos, às vezes também chamada de modularidade. Isso significa que um conjunto
relacionado de funcionalidades deve ser cuidado por uma parte independente do
programa para que possa ser facilmente substituído sem afetar o restante do aplicati-
O
vo. No nível mais alto, um aplicativo geralmente é dividido nas seguintes camadas:5
• Camada de apresentação
AM
• Camada de negócios
• Camada de dados
4 A Wikipédia tem o link para o documento em uma das notas de rodapé em seu artigo sobre
o caso. Disponível em https://en.wikipedia.org/wiki/2012_JPMorgan_Chase_trading_loss#ci-
te_note-35 (conteúdo em inglês).
5 A terminologia é retirada do Guia de Arquitetura de Aplicativos da Microsoft, 2ª edição. Dispo-
nível em https://learn.microsoft.com/en-us/previous-versions/msp-n-p/ff650706(v=pandp.10)
(conteúdo em inglês).
Camada de apresentação
É o que você vê e interage, ou seja, a interface do usuário: os valores das
células A4, B4 e D4 junto aos seus rótulos constroem a camada de apre-
sentação do conversor de moeda.
Camada de negócios
Essa camada cuida da lógica específica do aplicativo: a célula D4 define
como o valor é convertido em USD. A fórmula =A4 * PROCV(B4, F4:G11,
2, FALSE) se traduz em Valor vezes Taxa de câmbio.
Camada de dados
A
Como o nome sugere, essa camada cuida do acesso aos dados: a parte
PROCV da célula D4 faz esse trabalho
R
A camada de dados acessa os dados da tabela de câmbio que inicia na célula F3
e funciona como o banco de dados desse pequeno aplicativo. Se você prestou
bastante atenção, provavelmente notou que a célula D4 aparece em todas as três
ST
camadas: esse aplicativo simples mistura as camadas de apresentação, de negó-
cios e de dados em uma única célula.
Princípio DRY
A
O livro O Programador Pragmático, de Hunt e Thomas (Bookman), popularizou
o princípio DRY: don’t repeat yourself [não se repita, em tradução livre]. Nenhum
código duplicado significa menos linhas de código e menos erros, o que facilita
R
a manutenção do código. Se a sua lógica de negócios estiver nas fórmulas da sua
célula, é praticamente impossível aplicar o princípio DRY, pois não haverá um
mecanismo que permita reutilizá-lo em outra pasta de trabalho. Isso, infeliz-
ST
mente, significa que uma maneira comum de iniciar um novo projeto do Excel é
copiar a pasta de trabalho do projeto anterior ou de um modelo.
Se você escreve VBA, a parte mais comum do código reutilizável é uma função.
Uma função dá acesso ao mesmo bloco de código de várias macros, por exem-
plo. Se você tiver várias funções que usa o tempo todo, talvez queira comparti-
lhá-las entre as pastas de trabalho. O instrumento padrão para compartilhar o
O
Excel para resolver esse problema, isso só funciona com suplementos baseados
em JavaScript, portanto não é uma opção para os codificadores VBA. Isso signi-
fica que ainda é muito comum usar a abordagem copiar/colar com VBA: iremos
supor que você precise de uma função spline cúbica no Excel. Essa função é uma
maneira de interpolar uma curva com base em alguns pontos em um sistema de
coordenadas e é frequentemente usada por operadores de renda fixa para derivar
uma curva da taxa de juros para todos os vencimentos com base em algumas
combinações conhecidas de vencimento/taxa de juros. Se você pesquisar por
“Spline Cúbica Excel” na internet, não demorará muito até ter uma página de
código VBA que faça o que deseja. O problema com isso é que, muito comumen-
te, essas funções foram escritas por uma única pessoa, provavelmente com boas
intenções, mas sem documentação formal ou teste. Talvez elas funcionem para
a maioria das entradas, mas e os casos extremos? Se você está negociando uma
carteira de renda fixa multimilionária, quer ter algo que sabe que pode confiar.
Pelo menos, é isso que você ouvirá de seus auditores internos quando descobri-
rem de onde vem o código.
O Python facilita a distribuição de código usando um gerenciador de pacotes,
como veremos na última seção deste capítulo. Antes de chegarmos lá, no entanto,
continuaremos com os testes, um dos pilares do desenvolvimento de software
sólido.
Testes
Quando você diz a um desenvolvedor do Excel para testar suas pastas de traba-
lho, ele provavelmente realizará algumas verificações aleatórias: clicará em um
A
botão e verá se a macro ainda faz o que deveria fazer ou alterará algumas entra-
das e verificará se a saída parece razoável. No entanto, é uma estratégia arriscada:
o Excel facilita a introdução de erros difíceis de detectar. Por exemplo, você pode
R
substituir uma fórmula por um valor codificado diretamente. Ou se esquecer de
ajustar uma fórmula em uma coluna oculta.
Quando você diz a um desenvolvedor de software profissional para testar seu có-
ST
digo, ele escreve testes de unidade. Como o nome sugere, é um mecanismo para
testar componentes individuais do programa. Por exemplo, os testes de unidade
garantem que uma única função de um programa opere corretamente. A maioria
das linguagens de programação oferece uma maneira de executar testes de uni-
dade automaticamente. A execução de testes automatizados aumentará drastica-
mente a confiabilidade de sua base de código e dará uma segurança razoável de
O
que você não violará nada que funciona atualmente ao editar seu código.
Se você observar a ferramenta de conversão de moeda na Figura 1-1, poderá es-
crever um teste que verifica se a fórmula na célula D4 retorna corretamente USD
AM
105 com as seguintes entradas: 100EUR como valor e 1,05 como taxa de câmbio
EURUSD. Por que isso ajuda? Suponha que você exclua acidentalmente a célula
D4 com a fórmula de conversão e precise reescrevê-la: em vez de multiplicar o
valor pela taxa de câmbio, você divide por ela — afinal, trabalhar com moedas
pode ser confuso. Ao executar o teste acima, você obterá uma falha no teste, pois
100EUR/1,05 não resultará mais em 105USD, como o teste espera. Assim, você
pode detectar e corrigir a fórmula antes de entregar a planilha aos seus usuários.
Praticamente todas as linguagens de programação tradicionais oferecem uma
ou mais estruturas de teste para escrever testes de unidade sem muito esforço —
mas não o Excel. Felizmente, o conceito de testes de unidade é bastante simples e,
ao conectar o Excel com o Python, você obtém acesso às poderosas estruturas de
teste unitário do Python. Embora uma apresentação mais aprofundada dos tes-
tes de unidade esteja além do escopo deste livro, convido você a dar uma olhada
na postagem em meu blog,6 na qual eu apresento o tópico com exemplos práticos.
Os testes de unidade geralmente são configurados para serem executados auto-
maticamente quando você envia seu código para o sistema de controle de versão.
A próxima seção explica o que são sistemas de controle de versão e por que eles
são difíceis de usar com arquivos do Excel.
Controle de versão
Outra característica dos programadores profissionais é que eles utilizam um sis-
tema de controle de versão ou controle de fonte. Um sistema de controle de versão
A
[em inglês, version control system — VCS] rastreia as alterações em seu código-
-fonte ao longo do tempo, permitindo que você veja quem alterou o quê, quando
e por que, e permite reverter para versões antigas a qualquer momento. O sistema
R
de controle de versão mais popular hoje é o Git. Ele foi originalmente criado
para gerenciar o código-fonte do Linux e, desde então, conquistou o mundo da
programação — até a Microsoft adotou o Git em 2017 para gerenciar o código-
ST
-fonte do Windows. No mundo do Excel, por outro lado, o sistema de controle
de versão de longe mais popular vem na forma de uma pasta na qual os arquivos
são arquivados assim:
currency_converter_v1.xlsx
currency_converter_v2_2020_04_21.xlsx
currency_converter_final_edits_Bob.xlsx
O
currency_converter_final_final.xlsx
pectos importantes do controle de fonte com uma colaboração mais fácil, revi-
sões dos colegas, processos de aprovação e logs de auditoria. E, se você deseja
tornar suas pastas de trabalho mais seguras e estáveis, não pode ficar de fora
disso. Mais comumente, os programadores profissionais usam o Git junto com
uma plataforma na Web, como GitHub, GitLab, Bitbucket ou Azure DevOps.
Essas plataformas permitem que você trabalhe com os chamados pull requests
ou merge requests. Eles permitem que os desenvolvedores solicitem formalmen-
te que suas alterações sejam mescladas na base de código principal. Um pull
request oferece as seguintes informações:
• Quem é o autor das alterações.
• Quando foram feitas as alterações.
6
Disponível em https://www.xlwings.org/blog/unittests-for-microsoft-excel (conteúdo em
inglês).