A Estatística na Ciência de Dados e a Anatomia dos Dados

por Frank de Alcantara em 20/07/2026

A Estatística na Ciência de Dados e a Anatomia dos Dados

Nesta série, a curiosa leitora vai construir, tijolo por tijolo, o edifício da estatística que sustenta a ciência de dados. Do primeiro resumo de uma coluna de números até a regressão múltipla que separa causas emaranhadas, passando por probabilidade, amostragem, testes de hipótese e correlação. É uma disciplina inteira, e como toda disciplina séria, ela não começa com um algoritmo. Começa com uma pergunta incômoda: o que, afinal, são os dados que temos em mãos?

Índice da Série: Estatística Orientada à Ciência de Dados

  • 1. A Estatística na Ciência de Dados e a Anatomia dos Dados (Você está aqui)

A pergunta parece boba até a leitora tentar respondê-la com precisão. Um número numa planilha pode ser uma idade, um código postal, uma nota de $1$ a $5$ ou um identificador de cliente. Os quatro são números, e apenas em um deles faz sentido calcular a média. Confundir esses casos é o erro mais barato e mais comum da ciência de dados, e é o primeiro que vamos aprender a não cometer.

O combinado desta série é o mesmo das séries Transformers e Inteligência Artificial Aplicada: os exemplos de código eu faço em C++20 ou C++23. Depois, a leitora refaz em Python, C, JavaScript, Haskell ou qualquer linguagem que desejar. Nos laboratórios da disciplina, a implementação de referência é Python no Google Colaboratory, com pandas, NumPy, SciPy e Matplotlib, porque é onde a turma vai rodar tudo. Se estiver de acordo, continuamos.

1. Por que estatística em ciência de dados

A ciência de dados vive de uma tensão que a estatística passou dois séculos aprendendo a administrar: quase nunca temos os dados que gostaríamos, e sempre queremos concluir mais do que os dados que temos permitem. A estatística é o conjunto de ferramentas que torna essa passagem, do pouco que se vê para o muito que se afirma, honesta e mensurável.

Convém separar desde já dois modos de usar dados que a série inteira vai alternar. O primeiro é a estatística descritiva: resumir, organizar e apresentar o que está diante de nós. Quando calculamos a média salarial de uma equipe, desenhamos o histograma das idades ou tabelamos quantos clientes vieram de cada canal, estamos descrevendo. Não há salto para o desconhecido; há compressão do conhecido. O segundo modo é a estatística inferencial: usar uma amostra para dizer algo sobre uma população que não medimos por inteiro. Quando estimamos a taxa de conversão de um site a partir de mil visitantes, ou decidimos se uma nova versão do produto é melhor que a antiga com base em um experimento de duas semanas, estamos inferindo. Aqui há salto, e todo salto tem risco. A estatística inferencial é, em grande medida, a contabilidade desse risco.

Uma análise de dados séria costuma percorrer, nesta ordem, um ciclo de quatro etapas. Primeiro, a coleta: de onde vêm os dados, com que instrumento, com que vieses embutidos. Segundo, a descrição: o que os dados dizem sobre si mesmos, em medidas e gráficos. Terceiro, a inferência: o que a amostra permite afirmar sobre a população, e com que grau de confiança. Quarto, a modelagem: como uma variável ajuda a explicar ou prever outra. Esta série percorre exatamente esse ciclo, e a leitora fará bem em guardar o mapa: os artigos 1 a 3 tratam de descrição, os artigos 4 a 5 constroem a linguagem da probabilidade, os artigos 6 a 11 fazem inferência, e os artigos 12 e 13 modelam.

Para que nada disso seja abstrato, vamos adotar um exemplo pequeno e concreto, que reaparecerá ao longo de todo o artigo. Considere uma equipe de oito pessoas em uma empresa de software, descrita por seis características:

nome idade salário (R$ mil) linguagem nível remoto
Ana 23 6,5 Python júnior sim
Bruno 29 9,0 C++ pleno não
Célia 34 12,0 Haskell pleno sim
Davi 41 15,5 C++ sênior não
Elis 28 8,2 Python júnior sim
Frank 52 22,0 C++ sênior não
Gina 26 7,1 JavaScript júnior sim
Hugo 38 13,4 Python pleno não

Oito linhas, seis colunas. Parece trivial, e é justamente por ser trivial que serve: tudo o que a estatística faz com milhões de linhas, ela faz primeiro com oito, e é com oito que se entende. Antes de resumir qualquer coisa, precisamos saber que tipo de número, ou de não número, mora em cada coluna.

1.1 Exercícios da Seção 1

Exercício 1. Classifique como descritiva ou inferencial: (a) a média salarial dos oito membros da equipe; (b) a estimativa da média salarial de todas as equipes de software a partir dessas oito pessoas; (c) o histograma das idades observadas; (d) a previsão da taxa de trabalho remoto no setor.

Resolução. (a) e (c) apenas resumem dados observados, portanto são descritivas. (b) e (d) saltam da amostra para uma população ou resultado não observado, portanto são inferenciais. O cálculo usado pode até ser a mesma média; é o alcance da afirmação que muda sua natureza.

Exercício 2. Uma empresa primeiro treina um modelo e só depois investiga como os dados foram coletados. Qual etapa do ciclo foi invertida e que risco nasce daí?

Resolução. A coleta deveria ser examinada antes da modelagem. Se o instrumento excluiu trabalhadores terceirizados, por exemplo, o modelo aprenderá uma população truncada; nenhuma sofisticação posterior recupera pessoas que nunca entraram nos dados.

Exercício 3. Explique por que “a conversão foi $8\%$ ontem” não informa, sozinha, se a frase é descritiva ou inferencial.

Resolução. Se os $8\%$ resumem todos os visitantes de ontem, a frase é descritiva para aquele dia. Se são usados como estimativa da conversão futura ou de todos os visitantes possíveis, tornam-se uma estatística amostral em uma afirmação inferencial. Falta declarar população e período-alvo.

Exercício 4. Dê um exemplo de conclusão que os oito salários permitem e outro que não permitem.

Resolução. Eles permitem afirmar que a média da equipe observada é $11{,}7125$ mil reais. Não permitem, sem um plano amostral, afirmar que a média de todas as equipes brasileiras é próxima desse valor. O primeiro enunciado comprime o conhecido; o segundo extrapola para o desconhecido.

Exercício 5. Uma pesquisa voluntária sobre satisfação recebe respostas apenas de quem quis participar. Localize coleta, descrição, inferência e modelagem num estudo possível e identifique o problema central.

Resolução. Coleta é o formulário voluntário; descrição, a distribuição das notas recebidas; inferência, a tentativa de estimar a satisfação de todos; modelagem, relacionar satisfação a cargo ou salário. O problema central é viés de autoseleção: respondentes podem diferir sistematicamente dos silenciosos, de modo que a inferência não é garantida pela quantidade de respostas.

2. Tipos de dados

A distinção mais importante da análise de dados não está em nenhuma fórmula: está na classificação da variável. O tipo de uma variável determina quais operações fazem sentido sobre ela, quais gráficos a representam e quais métodos estatísticos são legítimos. Errar o tipo é errar tudo o que vem depois.

Há duas grandes famílias. A primeira é a dos dados numéricos, aqueles em que o número significa quantidade e a aritmética tem sentido. Dentro dela, distinguimos os contínuos, cujo modelo admite qualquer valor real num intervalo, como temperatura ou duração, dos discretos, cujo conjunto de valores possíveis é separado ou contável, como o número de commits em um dia. A fronteira observada depende também de como medimos: a idade varia continuamente, mas uma coluna registrada apenas em anos completos é discreta. E há uma sutileza útil. Ninguém observa $3{,}5$ commits num dia, mas a média pode perfeitamente ser $3{,}5$ commits por dia; o domínio das observações não precisa coincidir com o domínio de uma estatística calculada sobre elas.

A segunda família é a dos dados categóricos, aqueles em que o valor indica pertencimento a uma classe, e não uma quantidade. Aqui a aritmética é ilegítima, e essa é a lição central desta seção. Dentro dos categóricos, distinguimos três subtipos por grau crescente de estrutura. Os nominais são categorias sem ordem: a linguagem de programação da nossa equipe, Python, C++, Haskell, JavaScript, não admite um “maior” ou “menor”. Os ordinais têm ordem, mas não distância definida: o nível júnior, pleno, sênior claramente cresce, mas não podemos afirmar que a diferença entre júnior e pleno é igual à diferença entre pleno e sênior, nem que sênior é “o dobro” de júnior. Os binários são o caso especial de exatamente duas categorias, como a coluna remoto, com valores sim e não; costumamos codificá-los como $0$ e $1$ por conveniência, e essa codificação, veremos no artigo 4, tem uma propriedade agradável.

A tentação de tratar todo número como numérico é forte e perigosa. Se codificarmos o nível como júnior $=1$, pleno $=2$, sênior $=3$ e calcularmos a “média de nível” da equipe, obteremos um número, digamos $1{,}875$, que não significa absolutamente nada: não existe o nível $1{,}875$, e a distância entre os códigos foi inventada por nós, não medida no mundo. A operação é sintaticamente possível e semanticamente vazia. A regra, portanto, é dura: sobre nominais, só contamos frequências e identificamos a moda; sobre ordinais, além disso, podemos ordenar e tomar medianas e percentis; só sobre numéricos podemos somar, tirar médias e calcular desvios padrão. Cada artigo desta série respeitará essa hierarquia, e a leitora deve desconfiar de qualquer análise que a viole.

2.1 Exercícios da Seção 2

Exercício 1. Classifique idade, salário, linguagem, nível e remoto; para as numéricas, diga se o registro usado é discreto ou contínuo.

Resolução. idade registrada em anos completos é numérica discreta, embora o fenômeno idade seja contínuo; salário é numérico contínuo no modelo, ainda que a moeda imponha resolução; linguagem é nominal; nível é ordinal; remoto é binário. A classificação pertence à variável observada e à pergunta, não à aparência do valor.

Exercício 2. Um código postal é armazenado como inteiro. Quais operações continuam legítimas?

Resolução. Igualdade, contagem de frequências e moda continuam legítimas; ordenar pode ser útil administrativamente, mas não representa distância geográfica. Soma, média e desvio padrão dos códigos não medem localização. O tipo de armazenamento é inteiro; o tipo estatístico é categórico nominal.

Exercício 3. Por que a mediana de júnior < pleno < sênior pode fazer sentido, mas a média dos códigos $1,2,3$ não?

Resolução. A mediana usa apenas a ordem e identifica a categoria central. A média usa também as distâncias entre códigos; atribuir $1,2,3$ impõe intervalos iguais que a carreira não forneceu. Outra codificação crescente preservaria a mediana e poderia alterar a média.

Exercício 4. Codifique remoto como $1$ para sim e $0$ para não. Mostre por que a média é $0{,}5$ e interprete-a.

Resolução. A soma dos oito indicadores é o número de sim, isto é, $4$. Dividir por $8$ dá $4/8=0{,}5$, exatamente a proporção remota. Se a codificação fosse invertida, a média seria a proporção de não; a interpretação depende de qual categoria recebeu $1$.

Exercício 5. A nota de satisfação de $1$ a $5$ é ordinal ou numérica? Dê uma resposta que respeite a pergunta de pesquisa.

Resolução. Uma resposta individual é seguramente ordinal: $5>4$, mas igualdade de intervalos não vem garantida. Em escalas construídas e validadas, a analista pode adotar um modelo aproximadamente intervalar para médias, declarando essa hipótese e examinando sensibilidade com medianas e frequências. O erro não é escolher um modelo; é escondê-lo.

3. O retângulo de dados

Quando a leitora olha a tabela da equipe, vê uma estrutura tão familiar que quase não a percebe: um retângulo. Linhas de um lado, colunas do outro, um valor em cada célula. Essa estrutura tem nome técnico, data frame, e é o formato de trabalho quase universal da ciência de dados, ao ponto de bibliotecas inteiras, como o pandas em Python, existirem para manipulá-la.

No vocabulário que usaremos, cada linha é um registro, também chamado de observação, e representa uma unidade sobre a qual medimos coisas: no nosso caso, uma pessoa. Cada coluna é uma característica, quase sempre chamada pelo termo em inglês feature, e representa uma dimensão de medida: idade, salário, linguagem. A interseção, a célula, é o valor daquela característica para aquele registro. Um data frame é, então, uma coleção de registros descritos pelo mesmo conjunto de features, e a estatística que faremos consiste, essencialmente, em fazer perguntas sobre colunas (como uma feature se distribui) e sobre relações entre colunas (como duas features variam juntas).

Nem todo dado é retangular, e vale registrar o contraste para não criar a ilusão de que o mundo chega arrumado. Um texto livre, uma imagem, um grafo de conexões entre usuários, uma série de eventos com estrutura aninhada, nada disso cabe naturalmente num retângulo. A ciência de dados gasta uma fração enorme do seu tempo justamente em transformar dados não retangulares em retangulares, extraindo features de objetos bagunçados, porque é sobre o retângulo que as ferramentas estatísticas operam. Nesta série, para nos concentrarmos na estatística, partiremos quase sempre de dados já retangulares. A leitora deve apenas lembrar que essa arrumação, na vida real, tem um custo, e que vieses introduzidos na arrumação contaminam tudo o que vem depois, um ponto ao qual voltaremos no artigo 7.

3.1 Exercícios da Seção 3

Exercício 1. Na tabela da equipe, identifique unidade observacional, registro, feature e célula para o valor 13,4 de Hugo.

Resolução. A unidade observacional é uma pessoa; o registro é a linha de Hugo; a feature é salário; a célula contém 13,4 mil reais. Nomear os quatro níveis evita comparar células como se fossem unidades independentes.

Exercício 2. Uma tabela possui uma linha por compra, mas a pergunta é “qual cliente compra mais?”. Qual é a unidade observacional do arquivo e qual deve ser a do resumo?

Resolução. No arquivo, a unidade é a compra. Para responder à pergunta, precisamos agrupar compras por cliente e construir uma tabela derivada com uma linha por cliente. Confundir as unidades inflaria clientes frequentes e produziria pseudorreplicação.

Exercício 3. Transforme conceitualmente uma coleção de currículos em um retângulo com três features e indique uma perda possível.

Resolução. Podemos extrair anos de experiência, maior titulação e número de linguagens, uma linha por candidata. Perdemos contexto: dez anos podem estar desatualizados, e contar linguagens não mede proficiência. A extração cria variáveis e, junto com elas, pressupostos.

Exercício 4. Por que armazenar telefone_1, telefone_2, telefone_3 como três colunas pode ser inadequado?

Resolução. A quantidade de telefones varia entre pessoas, logo a estrutura é repetida e potencialmente não limitada. Uma tabela separada de telefones, ligada por identificador da pessoa, preserva uma observação por telefone sem inventar um máximo rígido nem espalhar valores ausentes.

Exercício 5. Dê um exemplo de viés introduzido durante a transformação de texto em features.

Resolução. Um classificador que conta apenas palavras de um dicionário formal pode atribuir menor competência a currículos com variantes regionais ou abreviações. O viés não estava numa média posterior: entrou quando a linguagem foi convertida em colunas e certas expressões deixaram de contar.

4. População, amostra e a notação da série

Chegamos à distinção que dá sentido a toda a estatística inferencial, e por isso esta é a primeira seção matemática da série. A leitora atenta deve lê-la devagar, porque a confusão entre os dois conceitos que vamos separar aqui é a raiz de metade dos erros estatísticos cometidos por profissionais competentes.

Uma população é o conjunto completo de todos os elementos sobre os quais queremos concluir algo: todos os desenvolvedores do Brasil, todos os visitantes que um site terá, todos os parafusos que uma fábrica produzirá. Uma amostra é o subconjunto que efetivamente observamos: os oito da nossa tabela, os mil visitantes de ontem, os cem parafusos que testamos. A população é o objeto de interesse; a amostra é o que temos. Quase sempre a população é grande demais, cara demais ou até infinita, e a amostra é tudo a que temos acesso.

A população, ou a distribuição que a representa, possui quantidades fixas que a descrevem; cada uma dessas quantidades é um parâmetro. A média de idade de todos os desenvolvedores do Brasil é um parâmetro, mas também o é a proporção que trabalha remotamente. O parâmetro é fixo para a população definida, embora em geral seja desconhecido. Quando calculamos uma quantidade a partir da nossa amostra de oito pessoas, obtemos uma estatística: um valor conhecido depois que os dados foram observados, mas sujeito a mudar quando muda a amostra. Usamos estatísticas para estimar parâmetros, e a distância entre umas e outros é o assunto de toda a inferência.

Para não confundir os dois, seguiremos pares convencionais de notação. A média populacional é $\mu$ e a média amostral observada é $\bar{x}$; o desvio padrão populacional é $\sigma$ e o amostral é $s$; a proporção populacional é $p$ e a amostral é $\hat{p}$. Não existe uma lei segundo a qual todo parâmetro use letra grega — o próprio $p$ já desmentiria a lei na mesma frase. Existe uma convenção local que declaramos e manteremos. Quando a leitora vir $\mu$, deve pensar “parâmetro fixo da população”; quando vir $\bar{x}$, “valor calculado nos dados observados”.

Formalmente, para uma população finita ${x_0, x_1, \ldots, x_{N-1}}$ de tamanho $N$, a média populacional é o parâmetro

\[\mu = \frac{1}{N}\sum_{i=0}^{N-1} x_i,\]

na qual $N$ é o número total de elementos da população e $x_i$ é o valor no índice $i$. Para uma amostra observada ${x_0, x_1, \ldots, x_{n-1}}$ de tamanho $n$, com $n \le N$ quando não há reposição, a média amostral observada é

\[\bar{x} = \frac{1}{n}\sum_{i=0}^{n-1} x_i,\]

na qual $n$ é o tamanho da amostra. As duas fórmulas são quase idênticas, e essa semelhança esconde a diferença conceitual gigantesca: $\mu$ é um número fixo que não conhecemos, enquanto $\bar{x}$ é um número que muda a cada amostra que sorteamos.

Antes de observarmos a amostra, representamos cada observação por uma variável aleatória $X_i$ e a média produzida pela regra por $\bar{X}$. Essa regra aleatória é um estimador de $\mu$. Depois de observarmos valores concretos $x_i$, o número $\bar{x}$ é a estimativa realizada. Se sortearmos outra amostra, obteremos outra realização. A distinção tipográfica é pequena, mas conceitual: $\bar{X}$ descreve o comportamento do procedimento de amostragem; $\bar{x}$ é o resultado que temos na mão.

Sob uma condição que não pode ficar escondida, a média amostral é não viesada. Precisamos de um mecanismo aleatório no qual cada posição amostral tenha a distribuição correta da população, de modo que $\mathbb{E}[X_i]=\mu$. Isso ocorre, por exemplo, em sorteios independentes com reposição e também em amostragem aleatória simples sem reposição, embora nesse segundo caso as observações não sejam independentes. Uma amostra por conveniência não recebe essa garantia por osmose. Nessas condições,

\[\mathbb{E}[\bar{X}] = \mathbb{E}\!\left[\frac{1}{n}\sum_{i=0}^{n-1} X_i\right] = \frac{1}{n}\sum_{i=0}^{n-1} \mathbb{E}[X_i] = \frac{1}{n}\sum_{i=0}^{n-1} \mu = \mu.\]

O terceiro passo usa exatamente a hipótese $\mathbb{E}[X_i]=\mu$; a linearidade da esperança não exige independência. Não é viés zero porque tivemos sorte, mas porque o plano amostral preserva a média da população em cada posição. A igualdade não diz que $\bar{x}$ de uma amostra específica é igual a $\mu$: diz que a distribuição de $\bar{X}$ está centrada em $\mu$. Numa única amostra, $\bar{x}$ quase sempre difere do parâmetro, e medir essa diferença é o assunto dos artigos 7 e 8.

Um exemplo minúsculo torna tudo concreto, e vamos reutilizá-lo nos exercícios. Tome a população ${2, 4, 6}$, com $N = 3$. Seu parâmetro de média é $\mu = (2+4+6)/3 = 4$, exato e conhecido porque, excepcionalmente, temos a população inteira. Agora finja que só podemos observar amostras de tamanho $2$, sorteadas com reposição. Há $3^2 = 9$ amostras igualmente prováveis, e cada uma dá um $\bar{x}$:

amostra $(2,2)$ $(2,4)$ $(2,6)$ $(4,2)$ $(4,4)$ $(4,6)$ $(6,2)$ $(6,4)$ $(6,6)$
$\bar{x}$ $2$ $3$ $4$ $3$ $4$ $5$ $4$ $5$ $6$

Nenhum $\bar{x}$ individual é obrigado a valer $4$: os valores vão de $2$ a $6$. Mas a média dos nove valores de $\bar{x}$ é $(2+3+4+3+4+5+4+5+6)/9 = 36/9 = 4 = \mu$. O estimador erra em quase toda amostra e acerta na média das amostras. Essa é, em miniatura, a ideia inteira da estimação estatística, e a leitora que a compreendeu aqui compreenderá o teorema central do limite quando ele chegar.

4.1 Exercícios da Seção 4

Exercício 1. Classifique cada afirmação como referente a um parâmetro ou a uma estatística: (a) a idade média dos oito da nossa tabela é $33{,}875$ anos; (b) a idade média de todos os desenvolvedores do Brasil é desconhecida; (c) o desvio padrão dos salários da amostra é $s$; (d) a proporção de todos os desenvolvedores que trabalham remotamente é $p$; (e) $\hat{p} = 0{,}5$ na nossa equipe.

Resolução. Parâmetros descrevem a população, estatísticas descrevem a amostra. (a) estatística ($\bar{x}$, calculada dos oito); (b) parâmetro ($\mu$, da população); (c) estatística ($s$, da amostra); (d) parâmetro ($p$, da população); (e) estatística ($\hat{p}$, da amostra). O contexto e os pares declarados denunciam o tipo; o alfabeto sozinho não, pois $p$ é latino e populacional.

Exercício 2. Para a população ${2, 4, 6}$, calcule $\mu$ e $\sigma$. Depois, para a amostra específica $(2, 4)$, calcule $\bar{x}$ e comente a diferença.

Resolução. O parâmetro de média é $\mu = (2+4+6)/3 = 4$. A variância populacional é $\sigma^2 = \frac{1}{3}\big[(2-4)^2 + (4-4)^2 + (6-4)^2\big] = \frac{1}{3}(4 + 0 + 4) = \frac{8}{3} \approx 2{,}667$, e o desvio padrão é $\sigma = \sqrt{8/3} \approx 1{,}633$. A estatística da amostra $(2,4)$ é $\bar{x} = (2+4)/2 = 3$. Temos $\bar{x} = 3 \ne 4 = \mu$: esta amostra específica subestima o parâmetro, o que é perfeitamente normal e não indica erro algum.

Exercício 3. Sob um plano amostral em que $\mathbb{E}[X_i]=\mu$ para toda posição, prove que a média amostral é não viesada, isto é, que $\mathbb{E}[\bar{X}] = \mu$, e diga em que passo a hipótese é usada.

Resolução. Pela linearidade da esperança, $\mathbb{E}[\bar{X}] = \mathbb{E}!\big[\frac{1}{n}\sum_i X_i\big] = \frac{1}{n}\sum_i \mathbb{E}[X_i]$. Usamos então a hipótese $\mathbb{E}[X_i] = \mu$ para toda posição: $\mathbb{E}[\bar{X}] = \frac{1}{n}\sum_i \mu = \mu$. A igualdade vale para qualquer $n\ge1$; independência não foi usada nessa prova.

Exercício 4. Enumere as nove amostras de tamanho $2$ com reposição de ${2, 4, 6}$, calcule a média de todos os $\bar{x}$ e confirme que ela vale $\mu$.

Resolução. As amostras e suas médias estão na tabela da Seção 4: os nove valores de $\bar{x}$ são $2, 3, 4, 3, 4, 5, 4, 5, 6$. A soma é $36$, e a média das médias é $36/9 = 4$. Como $\mu = 4$, temos $\frac{1}{9}\sum \bar{x} = \mu$, que é exatamente a afirmação $\mathbb{E}[\bar{x}] = \mu$ verificada por enumeração completa, já que as nove amostras são equiprováveis.

Exercício 5. Construa uma amostra de tamanho $2$ de ${2,4,6}$ cujo $\bar{x}$ difira de $\mu$ e explique por que isso não contradiz o resultado do Exercício 3.

Resolução. A amostra $(6,6)$ dá $\bar{x} = 6 \ne 4 = \mu$; a amostra $(2,2)$ dá $\bar{x} = 2 \ne 4$. Ambas erram o parâmetro, e isso não contradiz $\mathbb{E}[\bar{x}] = \mu$ porque esse resultado é uma afirmação sobre a média das médias ao longo de todas as amostras, não sobre cada amostra isolada. O estimador é não viesado como propriedade de longo prazo; em qualquer amostra individual, ele flutua em torno de $\mu$, ora acima, ora abaixo. Confundir “não viesado na média” com “exato em cada amostra” é precisamente o erro que a Seção 4 existe para prevenir.

5. Um primeiro contato com os dados em C++

Com os conceitos assentados, façamos o que a ciência de dados faz o tempo todo: carregar um conjunto de observações e extrair dele as primeiras estatísticas. O programa a seguir recebe os oito salários da nossa equipe, em milhares de reais, e reporta o tamanho da amostra, o mínimo, o máximo, a soma, a média e a mediana. É uma implementação didática de referência em CPU: privilegia contratos visíveis e resultado verificável, não um benchmark. O código usa apenas a biblioteca padrão de C++23 e pode ser compilado com g++ -std=c++23 -O2 -Wall -Wextra -pedantic primeiro_contato.cpp -o primeiro_contato.

#include <algorithm>  // Para std::sort, std::min_element, std::max_element.
#include <iomanip>    // Para std::fixed e std::setprecision na formatação da saída.
#include <iostream>   // Para std::cout.
#include <numeric>    // Para std::accumulate no cálculo da soma.
#include <span>       // Para std::span, uma visão não proprietária dos dados.
#include <stdexcept>  // Para std::invalid_argument.
#include <vector>     // Para std::vector, o contêiner das observações.

/**
 * @brief Calcula a média aritmética de uma amostra.
 * @param dados Vetor de observações numéricas (não vazio).
 * @return A média amostral (x-barra).
 */
double media(std::span<const double> dados) {
    if (dados.empty()) {
        throw std::invalid_argument("a média exige ao menos uma observação");
    }
    const double soma = std::accumulate(dados.begin(), dados.end(), 0.0);
    return soma / static_cast<double>(dados.size());
}

/**
 * @brief Calcula a mediana de uma amostra.
 * @param dados Visão das observações; a função copia os valores antes de ordenar.
 * @return O valor central se n for ímpar; a média dos dois centrais se n for par.
 */
double mediana(std::span<const double> dados) {
    if (dados.empty()) {
        throw std::invalid_argument("a mediana exige ao menos uma observação");
    }
    std::vector<double> ordenados(dados.begin(), dados.end());
    std::sort(ordenados.begin(), ordenados.end());
    const std::size_t n = ordenados.size();
    if (n % 2 == 1) {
        return ordenados[n / 2];
    }
    return ordenados[n / 2 - 1] / 2.0 + ordenados[n / 2] / 2.0;
}

int main() {
    // Os oito salários da equipe, em milhares de reais.
    const std::vector<double> salarios = {6.5, 9.0, 12.0, 15.5, 8.2, 22.0, 7.1, 13.4};

    const double soma = std::accumulate(salarios.begin(), salarios.end(), 0.0);
    const double minimo = *std::min_element(salarios.begin(), salarios.end());
    const double maximo = *std::max_element(salarios.begin(), salarios.end());

    std::cout << std::fixed << std::setprecision(4);
    std::cout << "n      = " << salarios.size() << '\n';
    std::cout << "soma   = " << soma << '\n';
    std::cout << "minimo = " << minimo << '\n';
    std::cout << "maximo = " << maximo << '\n';
    std::cout << "media  = " << media(salarios) << '\n';
    std::cout << "mediana= " << mediana(salarios) << '\n';

    return 0;
}

A saída do programa é

n      = 8
soma   = 93.7000
minimo = 6.5000
maximo = 22.0000
media  = 11.7125
mediana= 10.5000

e nela já mora uma pequena lição que o artigo 3 desta série vai desenvolver. A média salarial, $11{,}7125$ mil, é maior que a mediana, $10{,}5$ mil. Essa diferença não é acaso: o salário de $22{,}0$ mil do desenvolvedor mais experiente puxa a média para cima, enquanto a mediana, que só olha o valor central, resiste a esse puxão. Sempre que a média supera a mediana, a leitora deve suspeitar de uma cauda à direita, isto é, de valores altos e raros distorcendo o centro. Guardaremos essa suspeita para formalizá-la como assimetria no artigo 3.

Nos laboratórios da disciplina, a mesma tarefa cabe em três linhas de Python, porque o pandas já traz um resumo pronto. A contraparte de referência é

import pandas as pd

salarios = pd.Series([6.5, 9.0, 12.0, 15.5, 8.2, 22.0, 7.1, 13.4])
print(salarios.describe())

cujo método describe reporta, de uma vez, a contagem, a média, o desvio padrão, o mínimo, os quartis e o máximo. A leitora fará bem em não se acostumar cedo demais com essa conveniência: entender o que cada número significa, como fizemos em C++, é o que separa quem usa a ferramenta de quem é usado por ela. O describe é rápido; a compreensão é o que dura.

5.1 Exercícios da Seção 5

Exercício 1. Sem executar o programa, explique de onde vêm soma = 93,7000, media = 11,7125 e mediana = 10,5000.

Resolução. A soma agrega os oito salários. A média divide $93{,}7$ por $8$. Ordenados os valores, os dois centrais são $9{,}0$ e $12{,}0$; a mediana par é $9/2+12/2=10{,}5$.

Exercício 2. O que aconteceria se media aceitasse um span vazio sem a verificação inicial?

Resolução. A soma seria zero e o divisor também, produzindo um valor não finito em ponto flutuante, sem representar estatística alguma. O contrato transforma um resultado silenciosamente inválido numa falha explícita e localizada.

Exercício 3. Por que std::span<const double> não copia os salários nem é dono deles?

Resolução. O span guarda ponteiro e tamanho para uma região contígua existente. O vetor de main continua responsável pela vida dos elementos; const impede mutação pela função. Por isso o span não deve sobreviver ao proprietário.

Exercício 4. A mediana par foi escrita como a/2 + b/2, não (a+b)/2. Que risco essa forma reduz?

Resolução. Para valores finitos muito grandes e de mesmo sinal, a+b pode transbordar antes da divisão, embora a média ainda caiba. Dividir cada parcela primeiro amplia o domínio seguro; não resolve todos os casos numéricos, mas evita esse transbordamento intermediário.

Exercício 5. Estenda mentalmente a saída com a amplitude e calcule seu valor.

Resolução. A amplitude é máximo menos mínimo: $22{,}0-6{,}5=15{,}5$ mil reais. O programa já calcula ambos, de modo que a extensão exige apenas formar e imprimir essa diferença.

6. Um laboratório para os tipos de dados

A distinção entre tipos de dados da Seção 2 é fácil de ler e fácil de esquecer no calor de uma análise. Para fixá-la, o laboratório abaixo apresenta as seis colunas da nossa equipe e pede que a leitora classifique cada uma como numérica, ordinal, nominal ou binária. A cada classificação, o laboratório mostra quais operações, média, mediana, moda e ordenação, passam a ser legítimas, e sinaliza quando uma operação foi aplicada a um tipo que não a comporta, como tirar a média de uma variável nominal. Experimente classificar a linguagem como numérica e veja a mensagem que explica por que a média de Python e C++ não existe.

O que o laboratório torna palpável é que o tipo não é um rótulo burocrático: é uma restrição sobre o que se pode fazer. A hierarquia é cumulativa. Sobre uma variável nominal, só a contagem de frequências e a moda fazem sentido. Sobre uma ordinal, ganhamos a ordenação e, com ela, a mediana e os percentis. Só sobre uma numérica a soma se torna legítima, e com ela a média, a variância e todo o maquinário que os próximos artigos vão erguer. A leitora que respeitar essa hierarquia nunca calculará a média de um código postal; a que a ignorar cometerá, mais cedo ou mais tarde, o erro de somar o que não se soma.

O segundo laboratório retoma a população ${2,4,6}$ da Seção 4. A leitora escolhe o tamanho da amostra e a reposição, vê todas as amostras quando a enumeração cabe na tela e acompanha a distribuição de $\bar{X}$. O objetivo não é decorar que a média é não viesada: é enxergar que essa propriedade pertence ao mecanismo de amostragem, enquanto cada estimativa individual continua livre para errar.

6.1 Exercícios da Seção 6

Exercício 1. No explorador de tipos, classifique nível como numérico. Que hipótese falsa aparece e qual operação a denuncia?

Resolução. A escolha supõe intervalos mensuráveis e iguais entre júnior, pleno e sênior. A média denuncia a hipótese: seu resultado depende de códigos arbitrários, enquanto ordenação e mediana dependem apenas da ordem legítima.

Exercício 2. Para uma variável binária codificada em $0/1$, compare moda, mediana e média quando há seis 1 e dois 0.

Resolução. A moda é 1; a mediana também é 1, pois os dois centrais ordenados são 1; a média é $6/8=0{,}75$, a proporção de 1. As três existem, mas respondem a perguntas diferentes.

Exercício 3. No laboratório amostral, use $n=2$ com reposição. Quantas amostras ordenadas existem e qual é $\mathbb{E}[\bar{X}]$?

Resolução. Há $3^2=9$ pares ordenados. Suas médias são $2,3,4,3,4,5,4,5,6$, cuja média é $36/9=4=\mu$.

Exercício 4. Sem reposição e com $n=2$, liste as seis amostras ordenadas e verifique o centro.

Resolução. São $(2,4),(2,6),(4,2),(4,6),(6,2),(6,4)$, com médias $3,4,3,5,4,5$. A média dessas médias é $24/6=4$. As duas posições são dependentes, mas cada uma preserva média $4$.

Exercício 5. Selecione uma única amostra com $\bar{x}=6$ e explique por que o laboratório ainda mostra $\mathbb{E}[\bar{X}]=4$.

Resolução. A amostra $(6,6)$ realiza $\bar{x}=6$. O painel que agrega todas as amostras descreve o estimador $\bar{X}$, não essa realização isolada; ponderadas pelas probabilidades do plano, as realizações permanecem centradas em $4$.

7. Conclusão

Este primeiro artigo não provou nenhum teorema profundo, e não era para provar. Ele fez algo mais básico e mais necessário: estabeleceu o vocabulário sobre o qual toda a série vai falar. A leitora agora distingue descrição de inferência, sabe que o tipo de uma variável comanda as operações legítimas sobre ela, reconhece um data frame como o retângulo de registros e features onde a análise acontece, e, sobretudo, separa o parâmetro que quer conhecer da estatística que consegue calcular.

Essa última distinção é a semente de tudo. O estimador $\bar{X}$ é uma variável aleatória centrada em $\mu$ sob o plano amostral declarado; a estimativa observada $\bar{x}$ é um número que em geral difere do parâmetro por alguma margem. Medir essa margem, transformá-la de fonte de ansiedade em número controlado, é a razão de ser da estatística inferencial, e é para onde a série caminha. Antes de inferir, porém, precisamos descrever bem, e descrever começa por dizer onde está o centro dos dados e o quanto eles se espalham. O próximo artigo abre a estatística descritiva pela sua pergunta mais simples e mais traiçoeira: onde, exatamente, está o meio de um conjunto de números?

Referências

ADHIKARI, A.; DENERO, J.; WAGNER, D. Computational and Inferential Thinking: The Foundations of Data Science. UC Berkeley Data 8. Disponível em: https://inferentialthinking.com/. Acesso em: 16 jul. 2026.

BRUCE, P.; BRUCE, A.; GEDECK, P. Practical Statistics for Data Scientists. 2. ed. Sebastopol: O’Reilly, 2020.

LARSON, R.; FARBER, B. Estatística aplicada. 6. ed. São Paulo: Pearson, 2015.

MORETTIN, L. G. Estatística básica: probabilidade e inferência. São Paulo: Pearson Prentice Hall, 2010.

SILVA, R. dos S. Estatística aplicada. São Paulo: Contentus, 2020.

THE UNIVERSITY OF TOKYO. 統計データ解析 I (Statistical Data Analysis I). UTokyo OpenCourseWare. Disponível em: https://ocw.u-tokyo.ac.jp/course_11480/. Acesso em: 16 jul. 2026.

Índice da Série: Estatística Orientada à Ciência de Dados

  • 1. A Estatística na Ciência de Dados e a Anatomia dos Dados (Você está aqui)

(Updated: )