Tipos de dados para profissionais de marketing: números, strings e booleanos
Publicados: 2017-08-10Observação: esta postagem de blog é a terceira de uma série escrita por nosso analista da Web sênior, Adrian Palacios, e foi projetada para fornecer aos profissionais de marketing as informações e instruções necessárias para instalar a linguagem de programação Python. Caso você tenha perdido, o primeiro post de Adrian explica por que os profissionais de marketing devem considerar fazê-lo em primeiro lugar e seu segundo post explica como instalar o Python.
Quando comecei a aprender a programar, tive muitos problemas com o conceito de “tipos de dados”. Sempre foi um dos primeiros tópicos discutidos, mas também um dos mais abstratos. Por frustração por não entender, eu geralmente pulava qualquer discussão sobre tipos de dados e a racionalizava dizendo a mim mesmo: “O que eles importam?” Mas depois de alguns anos tornando a programação parte do meu trabalho diário, os tipos de dados (lentamente) começaram a fazer sentido.
O que são tipos de dados?
Os tipos de dados são um conjunto de regras que regem o que você pode (e não pode) fazer com o Python. Você enfrenta restrições semelhantes no mundo real todos os dias: tente pagar uma refeição com cartão de crédito quando o restaurante só aceita dinheiro. Tente andar de bicicleta descendo um rio em vez de usar uma canoa ou caiaque. Ou tente assar um bolo com sal no lugar de açúcar. Você poderia tentar essas coisas se realmente quisesse, mas duvido que ficaria feliz com o resultado.
Da mesma forma, se você pensa em programação como cozimento, os tipos de dados são os principais ingredientes de qualquer código Python, assim como ovos, farinha, manteiga, fermento em pó e açúcar são ingredientes essenciais para fazer um bolo. Ou talvez você queira uma torta? Use menos farinha, elimine o fermento completamente, talvez adicione um recheio de frutas e pronto, você está no caminho para fazer uma torta. Veja onde isso está indo? Entender do que cada tipo de dados é capaz e como combiná-los é a chave para ser um programador melhor.
Aqui estão apenas alguns tipos de dados comuns em Python:
Números, que são subdivididos em outros tipos, como:
Inteiros: 0, 1, 2, 3
Flutuantes: 0,0, 1,0, 2,5, 3,145
Strings: 'Pense diferente', 'Netflix and Chill'
Booleanos: Verdadeiro, Falso
Existem muitos outros tipos de dados em Python, mas por enquanto vamos nos concentrar nesses três.
Neste post, você aprenderá algumas das coisas que pode fazer com os tipos de dados básicos em Python e por que os tipos de dados são importantes.
Na minha experiência, essa tende a ser a parte mais chata de qualquer livro/vídeo/curso online “Aprenda a programar”, mas como os tipos de dados são tão cruciais para a programação, eu recomendo não pular este post.
Números
Os dois principais tipos de números em Python são inteiros (números inteiros) e floats. Floats podem ser considerados decimais, mas existem algumas grandes diferenças, uma das quais será discutida mais adiante.
A coisa mais óbvia que podemos fazer com números é... matemática! Aqui estão alguns caracteres especiais usados para fazer matemática em Python:
Com essas operações básicas, agora podemos trabalhar com alguns cenários.
Cenário 1
Sua equipe de conteúdo informou que o blog gerou 80.000 visualizações de página há duas semanas e esta semana gerou 105.000 visualizações de página; qual é o crescimento semanal nas visualizações de página? Lembre-se que para calcular a variação percentual que você pode fazer (Novo Número – Número Antigo) ÷ Número Antigo:
Bem, isso não parece muito certo. Por que não? Como qualquer bom matemático, Python seguiu a ordem das operações na instrução que digitamos. Aqui podemos usar parênteses para dizer ao Python a ordem que realmente queremos:
Isso é melhor. Lembre-se, estamos olhando para uma porcentagem, então, neste caso, mover a casa decimal duas casas para a direita nos dará o que precisamos. Parece que o tráfego para o blog cresceu 31,25% semana a semana.
Cenário 2
Você está trabalhando com um editor on-line para executar uma campanha especial que inclui banners de grande formato e anúncios em vídeo. O editor enviou uma proposta informando que o pacote tem um custo fixo de US$ 15.000 e espera que ele gere 550.000 impressões; você gostaria de calcular o CPM para comparar melhor esta proposta com outras opções.
Para encontrar o CPM, usamos a fórmula Custo da campanha ÷ (Total de impressões ÷ 1.000):
Desta vez acertamos a ordem das operações; parece que o CPM da campanha é de aproximadamente US$ 27,27.
Usar o Python assim é realmente tedioso, especialmente quando digitar fórmulas longas retorna apenas uma única métrica. Embora esses exemplos sejam simplistas, existem maneiras de aplicar operações matemáticas mais complicadas a centenas de milhares (ou até milhões) de linhas de dados.
Versões mais antigas do Python (versão 2.7 e inferior) dão algumas respostas estranhas quando se trata de dividir inteiros que resultariam em um float, como dividir 1 ÷ 3. Nestes dois exemplos, dividimos inteiros e terminamos com floats sem problemas, o que faz parte da mágica de usar uma versão mais recente do Python. Isso levanta a questão: por que os números com um ponto decimal são chamados de floats em vez de decimais? Jackie Kazil e Katharine Jarmul têm um ótimo exemplo em seu livro, Data Wrangling With Python : em muitas linguagens de programação, 0,1 + 0,2 não é igual a 0,3. Experimente você mesmo: digite 0,3 em seu terminal e siga-o por 0,1 + 0,2
Estranho, certo? Mark Lutz aprofunda essa estranheza em seu livro, Aprendendo Python , mas como os profissionais de marketing normalmente não precisam calcular números até o milionésimo grau, não é fundamental entender completamente esse problema e é bom o suficiente simplesmente saber que ele existe. Mas se você estiver realmente curioso, aqui estão alguns posts que explicam mais:
- Ponto Flutuante Desmistificado, Parte 1
- Ponto Flutuante Desmistificado, Parte 2
Cordas
Strings podem ser consideradas como caracteres entre aspas. Esta é uma definição grosseiramente simplificada porque ignora as nuances entre bytearrays, Unicode, ASCII, etc., mas acho que entrar nesse tipo de detalhe é desnecessário por enquanto.
Como inserir corretamente os caracteres entre aspas? Acontece que existem mais do que algumas maneiras diferentes. Por exemplo, na maioria das vezes não importa se você usa aspas simples ou aspas duplas, desde que permaneça consistente:
Ao começar com aspas duplas na terceira string e terminar com aspas simples, encontramos um erro. Você provavelmente não misturaria aspas simples e duplas de propósito, mas uma coisa a ser observada são os apóstrofos:
Observe que a primeira string, que estava entre aspas duplas, lidou bem com o apóstrofo, enquanto a segunda string não. Por quê? Uma vez que o Python encontrou a segunda aspa simples, ele esperava que a string terminasse, mas as letras continuaram. Cortar a frase silencia o erro:
Mas ter apenas parte de uma frase não é útil. Se você realmente quer usar aspas simples, uma opção é “escapar” do apóstrofo. Isso pode ser feito colocando uma barra invertida (\) imediatamente antes do apóstrofo em sua frase. Isso diz ao Python para tratar o próximo caractere de uma maneira especial:
Escapar o apóstrofo nos permitiu continuar usando aspas simples e um apóstrofo na mesma string.
Existe uma outra maneira de criar strings em Python: aspas triplas. Observe que quando você digita uma string de várias linhas, você precisa pressionar enter para iniciar a próxima linha; isso também muda o Terminal para exibir …: à esquerda de sua nova linha. Isso aparecerá novamente quando começarmos a digitar várias linhas de código.
Finalmente, você pode notar alguns caracteres estranhos na string: \n. Isso informa ao computador onde você inseriu uma nova linha; é útil se você precisar imprimir a string novamente e quiser ser preciso sobre a formatação.
Ok, agora que passamos todo esse tempo olhando como inserir corretamente uma string (eu sei, certo? Tanto trabalho para algo tão simples...), é hora de passar para a parte divertida: manipular strings.
Existem muitos, muitos outros métodos para strings; há também outros tópicos inteiros, como correspondência de padrões e fatiamento, que abordaremos mais tarde. Com o básico fora do caminho, vamos trabalhar com um exemplo real.
Cenário 1
Digamos que você tenha uma nova cópia que precisa ser carregada no Google AdWords, mas toda a cópia está em letras minúsculas e você não tem certeza se os títulos estão dentro do limite de 30 caracteres. Vamos verificar o comprimento e imprimir o título “voos mais baratos para paris” em maiúsculas:
O primeiro exemplo é tecnicamente uma função, enquanto o segundo é um método. A única coisa que nos importa agora é que cada um é digitado de forma diferente: com uma função, primeiro digitamos “len()”, depois a própria string e, finalmente, o último parêntese “)”. A boa notícia é que o título está dentro do limite de 30 caracteres imposto pelo AdWords.
Em seguida, com o método, primeiro digitamos a string e, em seguida, adicionamos .title() após as aspas de fechamento (sem espaços!).
Finalmente, você pode estar se perguntando “Por que estou fazendo isso em Python quando as mesmas fórmulas estão disponíveis no Excel?” Esse é um ponto justo.
Embora mexer com títulos seja um exemplo bobo, espero que o ponto esteja claro: existem muitas opções disponíveis para manipular texto com Python. E semelhante ao cenário anterior com o cálculo de CPMs ou alteração percentual, ser capaz de manipular milhares de caracteres de texto em apenas algumas linhas de código é uma ferramenta muito poderosa para ter à mão.
Por exemplo, a maior dor de cabeça que isso me salvou foi limpar milhões de linhas de URLs do Google Analytics. O segundo ponto deste exercício é apontar algo que pode poupar outras dores no futuro: se você sabe usar fórmulas no Excel ou no Google Docs, já está um passo à frente no entendimento de como programar. Há muitas semelhanças que serão traduzidas do Excel para o Python.
Booleanos
Os dois principais booleanos em Python são True e False. Seu significado é realmente direto: Verdadeiro significa verdadeiro e Falso significa falso.
Até mergulharmos no uso da lógica em Python, é melhor explicar os booleanos por meio de uma analogia. Ao criar uma campanha de anúncios em vídeo do Facebook, você precisa decidir qual criativo usar. Deve ser o novo vídeo moderno que visa o reconhecimento da marca ou você deve ficar com o vídeo antigo, mas testado em batalha, que tem uma chamada à ação clara? Depende do que você está tentando realizar, certo? Da mesma forma, haverá um ponto em que você precisará criar alguma lógica para informar ao seu computador qual caminho seguir, e os booleanos são uma maneira de realizar essa tarefa.
Existem outros objetos em Python que podem agir como booleanos, mas por enquanto apenas introduzir True e False será suficiente. Trataremos desse assunto com mais profundidade em um post futuro.
E daí?
No início deste post, mencionei que quando tentei aprender sobre tipos de dados pela primeira vez, o processo era tedioso e o assunto maçante. Assim como o adolescente impaciente na aula de geometria do ensino médio incitando um professor com a pergunta: “Quando vou precisar conhecer esse lixo inútil?”
Senti que passar por todas essas regras sobre tipos de dados era inútil. Mas aprendi a apreciar as regras porque quando você tenta quebrar essas regras (na maioria das vezes), ocorrerá um erro. Se você for um programador responsável e testar seu código com antecedência, encontrar esses erros pode evitar que você cometa erros críticos em seu código quando realmente importa. Vamos explorar algumas maneiras pelas quais os erros podem surgir.
Nos cenários em que você praticou matemática com tipos numéricos, você notou que nenhuma vírgula foi usada ao fazer esses cálculos? Você provavelmente está acostumado a digitar números com vírgulas (ou decimais para nossos amigos europeus!), mas se você tentar isso em Python, encontrará um comportamento estranho:
Hmmm; nada do que você esperava. Ao colocar uma vírgula neste número, sem saber, criamos uma “tupla”; não é necessário saber o que é uma tupla no momento, mas é importante ver que a vírgula divide o número em 500 e 0, o que é muito diferente de quinhentos mil.
Este exemplo também destaca um aspecto crucial da escrita de código: apenas um único caractere digitado incorretamente pode causar grandes problemas. A revisão de código é difícil no começo, mas com a prática, você ficará melhor. Resultados inesperados ou erros não são motivo de pânico; pode parecer assustador, mas geralmente significa apenas que algo foi perdido na tradução.
Uma regra que você provavelmente esperaria é que, ao tentar adicionar um inteiro e uma string, você receberia um erro:
E você estaria correto. Na segunda linha de código, tentamos adicionar o inteiro 1 à string '1', o que resultou em um erro. Você pode estar pensando consigo mesmo “Esse é um exemplo tosco; quando alguém tentaria adicionar um inteiro a uma string?” Você ficaria surpreso com quantas APIs retornam números como uma string. Existem boas razões para fazer isso, mas quando você está lidando com uma API, presumir que um número será um número não é uma aposta segura. Um ótimo exemplo é a mais nova API de relatórios do Google Analytics. Dê uma olhada na captura de tela dos dados que o Google Analytics fornece quando você solicita um relatório. Surpresa! Todos os números (veja os campos “valores”) estão entre aspas.
Isso meio que atrapalha as coisas, não é? Seria, mas se você ler a documentação da API com antecedência, estará esperando esse problema. Felizmente também existem algumas ferramentas em Python que podem nos ajudar, como a função int():
Ao colocar a string '1' dentro da função int(), estamos dizendo ao Python que queremos tratá-la como um inteiro; agora você pode somar esses números e seguir em frente com sua vida.
Essas são apenas algumas possibilidades de como os tipos de dados podem determinar o que você pode fazer em Python, mas também demonstram que quase sempre há uma maneira de contornar esses problemas. Entre em contato comigo no twitter se tiver alguma dúvida sobre os tipos de dados.