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. A estatística é uma disciplina séria. Muito séria. E como a maior parte das disciplinas sérias ela não começa com um algoritmo. Começa com uma pergunta: o que, afinal, são os dados que temos em mãos?

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

A pergunta parece boba e será boba até que a leitora tente respondê-la com precisão.

Um número em uma planilha pode ser uma idade, um código postal, uma nota de $1$ a $5$ ou um identificador de cliente. As quatro possibilidades usam algarismos, porém apenas em uma delas a média é indiscutivelmente uma operação legítima. Confundir representação numérica com quantidade é 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: faremos os exemplos de código em C++23. Depois, a leitora poderá refazê-los em Python, C, JavaScript, Haskell ou qualquer linguagem que desejar. Nos laboratórios da disciplina, a implementação interna de referência usa Python no Google Colab, com pandas, NumPy, SciPy e Matplotlib, porque esse ambiente permite que as turmas executem os experimentos sem preparar uma máquina local. Se estiver de acordo, continuamos. Se não, obrigado, e nos vemos na próxima.

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 nome que damos ao conjunto de ferramentas que torna essa passagem, do pouco que se vê para o muito que se afirma, honesta e mensurável. Ou, se preferir, a esforçada leitora pode se consolar sabendo que vamos torturar os dados até que eles contem a verdade.

A atenta leitora deve separar, desde já, os dois modos de usar dados que a série inteira vai alternar:

  1. 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.

  2. 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.

A Figura 1 transforma esse roteiro em duas camadas: acima está o ciclo da análise; abaixo, a posição de cada bloco de artigos. Repare que a probabilidade não é uma quinta etapa. Ela é a ponte que torna defensável a passagem da descrição para a inferência.

O ciclo da análise avança da coleta para a descrição, a inferência e a modelagem. Abaixo, o roteiro da série associa os artigos 1 a 3 à descrição, os artigos 4 e 5 à probabilidade como ponte, os artigos 6 a 11 à inferência e os artigos 12 e 13 à modelagem; a coleta aparece como condição de entrada que limita todo o percurso. Figura 1: A série começa pela descrição, usa a probabilidade como ponte para a inferência e termina na modelagem; nenhum desses passos corrige um viés que entrou na coleta.

Para que nada disso seja abstrato, vamos começar com 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 poucas. No nosso caso, oito. É com oito linhas que a esperta leitora entenderá. Os milhões são muito complicados.

Antes de analisar qualquer coisa, precisamos saber que tipo de número, ou de não número, mora em cada coluna. Isto é entender os dados.

Entender os dados significa reconstruir o caminho que os produziu. Na tabela, idade parece um fato simples, mas precisamos saber se foi registrada em anos completos ou calculada a partir da data de nascimento. A coluna salário pode significar valor mensal, anual, bruto, líquido ou apenas o valor contratual. A coluna remoto pode indicar trabalho fora do escritório todos os dias ou uma única vez por semana. Nenhuma dessas colunas carrega tais decisões no nome. Sem conhecê-las, podemos executar um cálculo impecável e chegar a uma interpretação completamente errada.

É aqui que a estatística deixa de ser um catálogo de fórmulas e se torna uma disciplina de raciocínio.

Antes de calcular uma média, perguntamos o que foi medido, em qual unidade, sobre quem, por qual processo e para responder a qual pergunta.

As respostas determinam que operações são legítimas e até onde a conclusão pode ir. A Seção 2 começa por essa tarefa aparentemente modesta: classificar cada variável. Parece burocracia, até o dia em que alguém calcula a média de um código postal e a apresenta com a solenidade de um resultado científico.

1.1 Exercícios de Lápis e Papel

1. Classifique quatro usos de dados como descritivos ou inferenciais

Considere: (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.

Solução: O critério é o alcance da afirmação. Estatística descritiva organiza apenas os dados observados; estatística inferencial usa esses dados para concluir algo sobre uma população, um período ou um resultado não observado.

No item (a), calculamos uma média dos oito salários e a atribuímos somente à equipe observada. Não existe extrapolação, portanto o uso é descritivo. No item (b), usamos as mesmas oito pessoas para estimar uma média de todas as equipes de software. A conclusão ultrapassa os registros disponíveis, portanto o uso é inferencial.

No item (c), o histograma organiza as oito idades que estão na tabela. Ele é descritivo enquanto a leitura permanecer restrita a essas pessoas. No item (d), a taxa do setor não foi observada por inteiro e precisa ser prevista a partir de dados parciais. O uso é inferencial.

Item Alcance da afirmação Classificação
(a) oito salários observados descritiva
(b) todas as equipes de software inferencial
(c) oito idades observadas descritiva
(d) taxa de trabalho remoto do setor inferencial

O cálculo empregado não decide sozinho a classificação. A mesma média pode descrever uma amostra ou estimar uma população; o que muda é até onde pretendemos levar a conclusão.

2. Identifique a inversão no ciclo de análise

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

Solução: O ciclo apresentado na Seção 1 começa pela coleta e termina na modelagem. A empresa executou a quarta etapa antes de examinar a primeira. Isso significa que o modelo foi ajustado sem conhecer a população alcançada pelo instrumento, as unidades excluídas nem as condições em que cada variável foi registrada.

Ordem correta Etapa Situação no estudo Consequência
1 coleta examinada somente depois do modelo vieses e exclusões permanecem ocultos
2 descrição calculada sobre o arquivo disponível resume a população truncada
3 inferência não possui população-alvo bem ligada à amostra o alcance da conclusão fica indefinido
4 modelagem executada primeiro aprende as limitações do arquivo como se fossem do mundo

Suponha que o arquivo de treinamento contenha apenas funcionários contratados diretamente e omita terceirizados. O modelo aprenderá relações válidas, no máximo, para a população truncada que entrou no arquivo. Medir depois a média, ajustar hiperparâmetros ou aumentar a capacidade do modelo não cria registros das pessoas ausentes.

A etapa invertida é a coleta. O risco é transformar um viés de cobertura em uma regularidade aparentemente objetiva do modelo. Nenhuma técnica posterior recupera unidades que nunca foram observadas.

3. Determine o alcance de uma taxa de conversão

Explique por que a frase a conversão foi $8\%$ ontem não informa, sozinha, se o uso é descritivo ou inferencial.

Solução: Uma taxa de $8\%$ significa que, em cada $100$ unidades do denominador escolhido, $8$ pertencem à categoria considerada conversão. A frase não declara qual conjunto funciona como denominador nem para qual período queremos concluir.

Se todos os visitantes de ontem foram registrados e $8\%$ deles converteram, a taxa resume aquele conjunto completo. Nesse alcance, o uso é descritivo. Se a mesma taxa for usada para prever a conversão de amanhã, do próximo mês ou de todos os visitantes possíveis, os acessos de ontem passam a funcionar como amostra. Nesse novo alcance, o uso é inferencial.

Portanto, faltam duas definições: a população-alvo e o período-alvo. Sem elas, o valor numérico é conhecido, mas a natureza da afirmação permanece indeterminada.

4. Separe uma conclusão permitida de uma extrapolação

Use os oito salários da tabela para formular uma conclusão permitida e outra que esses dados não sustentam. Desenvolva o cálculo usado na conclusão permitida.

Solução: Os salários, em milhares de reais, são

\[6{,}5,\ 9{,}0,\ 12{,}0,\ 15{,}5,\ 8{,}2,\ 22{,}0,\ 7{,}1,\ 13{,}4.\]

A soma é

\[6{,}5+9{,}0+12{,}0+15{,}5+8{,}2+22{,}0+7{,}1+13{,}4=93{,}7.\]

Como há oito pessoas, a média observada é

\[\bar{x}=\frac{93{,}7}{8}=11{,}7125\text{ mil reais}.\]

Podemos concluir que a média salarial desta equipe observada é $11{,}7125$ mil reais. Não podemos concluir, sem um plano amostral que ligue essas pessoas à população-alvo, que a média de todas as equipes brasileiras esteja próxima desse valor. A primeira frase comprime o conhecido; a segunda extrapola para o desconhecido sem medir o risco dessa passagem.

5. Localize o viés em uma pesquisa voluntária

Uma pesquisa de satisfação recebe respostas apenas de quem decidiu participar. Localize coleta, descrição, inferência e modelagem em um estudo possível e identifique o problema central.

Solução: Vamos considerar que o formulário registra nota, cargo e salário. A coleta é o próprio formulário voluntário e o mecanismo que decide quem recebe e quem responde. A descrição pode apresentar a distribuição das notas recebidas, por exemplo, quantas respostas caíram em cada categoria. A inferência aparece quando usamos essas respostas para estimar a satisfação de todos os trabalhadores. A modelagem aparece quando relacionamos satisfação a cargo ou salário.

O problema central surge antes dos cálculos: pessoas muito satisfeitas ou muito insatisfeitas podem ter maior disposição para responder. Assim, a probabilidade de entrar na amostra depende da variável que desejamos estimar. Esse mecanismo produz viés de autoseleção.

Receber dez mil respostas reduz a instabilidade numérica dentro do grupo respondente, mas não demonstra que os silenciosos se parecem com ele. A quantidade de dados não corrige, sozinha, um mecanismo de coleta que seleciona sistematicamente quem pode ser observado.

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 a análise.

Existem duas grandes famílias.

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

  2. A segunda família é a dos dados categóricos, aqueles em que o valor indica o 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 dados nominais são categorias sem ordem: a linguagem de programação da nossa equipe, Python, C++, Haskell ou JavaScript, não admite uma categoria maior ou menor. Os dados 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 seja igual à diferença entre pleno e sênior, nem que sênior seja o dobro de júnior. Os dados 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, como 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 $1{,}875$. O resultado 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. No domínio do nível profissional, a operação de média é 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.

A Figura 2 reúne a taxonomia e essa hierarquia em um só lugar, com as colunas da nossa equipe nos exemplos. Vale notar a forma das três barras inferiores: elas crescem por inclusão, e a mais longa contém as mais curtas.

Árvore da taxonomia dos tipos de dados, com variável dividindo-se em numérica, que se divide em contínua e discreta, e categórica, que se divide em nominal, ordinal e binária, e abaixo três barras de comprimento crescente mostrando que sobre nominais valem contagem e moda, ordinais acrescentam ordenação, mediana e percentis, e numéricas acrescentam soma, média, variância e desvio padrão. Figura 2: A hierarquia é cumulativa e somar é a única operação exclusiva das numéricas. É por isso que a média de um código postal existe como sintaxe e não como estatística.

2.1 Laboratório de Tipos de Dados

A distinção entre os tipos de dados que vimos na 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, ou não, 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 cuidadosa 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.

2.2 Exercícios da Seção 2

1. Classifique as variáveis da equipe

Classifique idade, salário, linguagem, nível e remoto. Para as variáveis numéricas, distinga o fenômeno medido do registro efetivamente armazenado.

Solução: Vamos aplicar dois critérios. Primeiro perguntamos se o valor representa quantidade ou pertencimento a uma categoria. Depois, para uma quantidade, verificamos se o registro admite um contínuo de valores ou apenas valores separados.

Variável Família Subtipo do registro Justificativa
idade numérica discreta a tabela guarda anos completos, embora o tempo vivido varie continuamente
salário numérica contínua no modelo o valor representa quantidade monetária; a moeda impõe uma resolução prática
linguagem categórica nominal as categorias não possuem ordem estatística
nível categórica ordinal júnior < pleno < sênior, mas as distâncias não foram medidas
remoto categórica binária existem exatamente as categorias sim e não

A classificação pertence à variável observada e à pergunta, não ao tipo usado pelo programa. idade poderia ser contínua se fosse registrada como duração precisa, e salário continuaria quantitativo mesmo armazenado em centavos inteiros.

2. Determine as operações legítimas sobre um código postal

Um código postal é armazenado como inteiro. Quais operações estatísticas continuam legítimas e quais produzem números sem interpretação geográfica?

Solução: O armazenamento inteiro permite que a máquina some os códigos, mas o significado da variável não fornece uma quantidade somável. Um código postal identifica uma região; a diferença aritmética entre dois códigos não mede distância física, área nem população.

Igualdade e desigualdade são legítimas para verificar se dois registros pertencem à mesma categoria. Também podemos contar frequências e identificar a moda, pois essas operações dependem apenas de pertencimento. Ordenar pode cumprir uma convenção administrativa do sistema postal, mas essa ordem não deve ser interpretada como proximidade geográfica.

Soma, média, variância e desvio padrão dos códigos são ilegítimos como medidas de localização. O tipo computacional é inteiro, enquanto o tipo estatístico é categórico nominal. A aparência numérica não concede significado à aritmética.

3. Compare mediana ordinal e média de códigos

Na equipe há três pessoas de nível júnior, três de nível pleno e duas de nível sênior. Mostre por que a mediana pode ser definida pela ordem, mas a média depende de distâncias arbitrárias.

Solução: Ordenando as oito categorias, obtemos

\[\text{júnior},\ \text{júnior},\ \text{júnior},\ \text{pleno},\ \text{pleno},\ \text{pleno},\ \text{sênior},\ \text{sênior}.\]

Como $n=8$, as duas posições centrais são a quarta e a quinta, ambas pleno. A mediana ordinal é, portanto, pleno. Esse resultado usa somente a relação júnior < pleno < sênior.

Agora codificamos as categorias como $1$, $2$ e $3$. A média dos códigos é

\[\frac{3\cdot1+3\cdot2+2\cdot3}{8}=\frac{15}{8}=1{,}875.\]

Uma segunda codificação crescente, $1$, $10$ e $11$, preserva exatamente a mesma ordem e a mesma mediana, mas produz

\[\frac{3\cdot1+3\cdot10+2\cdot11}{8}=\frac{55}{8}=6{,}875.\]
Codificação Ordem Mediana ordinal Média dos códigos
$1,2,3$ preservada pleno $1{,}875$
$1,10,11$ preservada pleno $6{,}875$

Como duas codificações igualmente compatíveis com a ordem geram médias diferentes, a média não é uma propriedade dos níveis. Ela é uma propriedade das distâncias artificiais escolhidas para os códigos.

4. Interprete a média de uma variável binária

Codifique remoto como $1$ para sim e $0$ para não. Calcule a média dos oito registros e interprete o resultado.

Solução: A coluna contém quatro valores sim e quatro valores não. Depois da codificação, temos quatro unidades e quatro zeros. A soma dos indicadores é

\[1+0+1+0+1+0+1+0=4.\]

Dividindo pelo número de pessoas,

\[\bar{x}=\frac{4}{8}=0{,}5.\]

Cada unidade conta uma pessoa remota, portanto a soma conta pessoas remotas e a média divide essa contagem pelo total. O valor $0{,}5$ é a proporção de pessoas com remoto = sim. Se invertêssemos a codificação, a média continuaria valendo $0{,}5$ neste conjunto equilibrado, mas passaria a representar a proporção de não. A categoria associada a $1$ faz parte da definição da estatística.

5. Decida como analisar uma escala de satisfação

Uma pesquisa registra satisfação de $1$ a $5$. A variável deve ser tratada como ordinal ou numérica? Formule uma resposta que declare a hipótese necessária e uma verificação de sensibilidade.

Solução: Para uma resposta individual, a classificação segura é ordinal. Sabemos que $5>4>3>2>1$, mas a escala, sozinha, não demonstra que a diferença percebida entre $1$ e $2$ seja igual à diferença entre $4$ e $5$. Sem igualdade de intervalos, mediana, percentis e frequências respeitam a informação disponível; a média acrescenta uma estrutura que não foi medida diretamente.

Em uma escala construída e validada para funcionar aproximadamente como intervalar, a analista pode adotar um modelo numérico. Essa decisão precisa ser declarada. Uma verificação simples é comparar conclusões obtidas com média e desvio padrão às conclusões obtidas com mediana e frequências por categoria.

Se ambas sustentarem a mesma conclusão substantiva, o resultado mostra menor sensibilidade à hipótese intervalar. Se divergirem, a divergência precisa aparecer no relatório. O erro não consiste em escolher um modelo; consiste em esconder a hipótese que tornou a operação possível.

3. O retângulo de dados

Quando a atenta leitora olhar a tabela da equipe, aquela da seção 1, em que começamos a discussão, deve ver 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. Nós a chamamos de tabela?

Essa estrutura tem nome técnico em inglês, 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 universo do C++

  • DataFrame, de Hossein Moein: projeto que fornece manipulação de dados em memória, incluindo fatiamento (slicing), agrupamento (group-by), junção e algoritmos estatísticos e financeiros, usando apenas C++ e a biblioteca padrão.
  • ROOT RDataFrame: biblioteca desenvolvida pelo laboratório CERN para manipulação e análise de dados tabulares, com avaliação preguiçosa (lazy evaluation) e processamento em múltiplas threads.
  • Apache Arrow: plataforma para análise de dados em memória cuja API, de Application Programming Interface (interface de programação de aplicações), oferece em C++ tabelas e operações colunares para ler, escrever, filtrar e agrupar dados.
  • xtensor / xframe: ecossistema em que xtensor manipula matrizes multidimensionais e xframe acrescenta estruturas tabulares baseadas em expressões e eixos rotulados.

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, no nosso primeiro data frame, cada registro corresponde a uma pessoa. Também neste data frame, 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 entre linha e coluna, a célula, é o valor daquela característica para aquele registro. Agora podemos ser um pouco mais formais:

Um data frame é uma coleção de registros descritos pelo mesmo conjunto de características.

A Figura 3 anota um recorte da tabela da equipe. Leia primeiro a linha azul, depois a coluna violeta e, por fim, a célula em que ambas se encontram. O valor $13{,}4$ não é uma observação solta: ele é o salário, em milhares de reais, registrado para Hugo.

Um recorte do retângulo de dados mostra as linhas de Ana, Hugo e Frank e as colunas nome, idade, salário e nível. A linha de Hugo está destacada como registro, a coluna salário está destacada como característica e a interseção contém 13,4 mil reais. A unidade observacional é uma pessoa, o registro reúne suas medidas e a célula guarda o valor de uma característica. Figura 3: Uma célula só preserva significado quando continua ligada ao registro, à característica e à unidade em que o valor foi medido.

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 em tabelas. 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 em um 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. Estabilidade e segurança.

Nesta série, para nos concentrarmos na estatística, partiremos quase sempre de dados já retangulares. A atenta leitora não pode esquecer 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

1. Localize unidade, registro, característica e célula

Na tabela da equipe, identifique a unidade observacional, o registro, a característica e a célula associados ao valor 13,4 de Hugo. Declare também a unidade de medida.

Solução: A unidade observacional é a entidade sobre a qual coletamos várias medidas. Na tabela, essa entidade é uma pessoa. O registro é a linha que reúne as medidas de uma unidade observacional; neste caso, é a linha de Hugo.

A característica é a coluna que mantém a mesma pergunta para todos os registros. O valor 13,4 está na coluna salário. A célula é a interseção entre a linha de Hugo e essa coluna. Como o cabeçalho declara salários em milhares de reais, a célula representa $13{,}4$ mil reais.

Papel Elemento na tabela
unidade observacional uma pessoa
registro linha de Hugo
característica coluna salário
célula 13,4
unidade de medida mil reais

Separar esses papéis impede que tratemos células como unidades independentes. Idade, salário e nível pertencem à mesma pessoa e precisam permanecer ligados quando a pergunta depende dessa identidade.

2. Alinhe a unidade observacional à pergunta

Uma tabela possui uma linha por compra, mas a pergunta da análise é qual cliente compra mais?. Identifique a unidade do arquivo original, construa o resumo necessário e explique o risco de manter uma linha por compra.

Solução: No arquivo original, cada registro representa uma compra. Logo, a unidade observacional do arquivo é uma transação. A pergunta, porém, compara clientes. Para respondê-la, precisamos agrupar as compras pelo identificador do cliente.

Suponha que Ana tenha compras de R$ 40, R$ 60 e R$ 30, enquanto Bruno tenha uma compra de R$ 100. A tabela derivada deve conter uma linha por cliente:

cliente número de compras valor total
Ana 3 R$ 130
Bruno 1 R$ 100

O resumo mostra que Ana compra mais em valor total, embora nenhuma compra individual dela supere a de Bruno. Se tratássemos as quatro transações como quatro clientes independentes, Ana apareceria três vezes e teria peso triplo em estatísticas por pessoa. Essa repetição indevida da mesma unidade produz pseudorreplicação.

3. Transforme currículos em dados retangulares

Proponha uma unidade observacional e três características para transformar uma coleção de currículos em um retângulo de dados. Para cada característica, indique uma informação que a transformação pode perder.

Solução: Vamos escolher uma candidata como unidade observacional. Cada currículo produzirá uma linha. Três características possíveis são anos de experiência, maior titulação e número de linguagens de programação mencionadas.

Característica extraída Regra possível Informação perdida
anos de experiência diferença entre primeiro e último emprego interrupções, simultaneidade e desatualização
maior titulação categoria mais alta encontrada área, qualidade do curso e relevância para a vaga
número de linguagens contagem de nomes reconhecidos proficiência, recência e profundidade de uso

O retângulo permite comparar e modelar, mas a operação de extração cria definições que não estavam prontas no texto livre. Dez anos de experiência podem significar prática recente e contínua ou conhecimento abandonado há anos. Contar linguagens pode equiparar domínio profissional a uma menção em um curso introdutório.

A transformação não é neutra. Ela escolhe quais diferenças sobreviverão como colunas e quais desaparecerão antes que a primeira estatística seja calculada.

4. Modele uma quantidade variável de telefones

Explique por que armazenar telefone_1, telefone_2 e telefone_3 na tabela de pessoas pode ser inadequado. Proponha uma estrutura retangular que aceite qualquer quantidade de telefones.

Solução: A quantidade de telefones não é uma característica de cardinalidade fixa. Algumas pessoas não possuem telefone, outras possuem um, e outras podem possuir mais de três. As três colunas impõem um máximo artificial e espalham valores ausentes pela tabela.

Vamos separar as entidades em duas tabelas. A primeira mantém uma linha por pessoa:

pessoa_id nome
17 Ana
23 Hugo

A segunda mantém uma linha por telefone:

pessoa_id telefone tipo
17 5550-1000 móvel
17 5550-1001 trabalho
23 5550-2000 móvel

O campo pessoa_id liga cada telefone à pessoa proprietária. A nova estrutura não inventa limite, preserva uma unidade observacional clara em cada tabela e permite contar ou agrupar telefones sem interpretar colunas vazias como medidas reais.

5. Mostre como a extração de características pode introduzir viés

Construa um exemplo em que currículos semanticamente equivalentes recebam características diferentes por causa da regra de extração. Localize o ponto em que o viés entra.

Solução: Suponha que o extrator conte competências somente quando encontra termos de um dicionário formal. Um currículo registra desenvolvimento de interfaces com JavaScript. Outro descreve a mesma experiência como criação de telas em JS. Se JS não estiver no dicionário, o primeiro currículo recebe javascript = 1 e o segundo recebe javascript = 0.

Os dois valores não refletem uma diferença de competência; refletem uma diferença entre as formas de escrever. Se abreviações e variantes regionais forem mais frequentes em determinados grupos, o erro de extração também será distribuído de modo desigual entre eles.

O viés entra quando o texto é convertido em característica, antes da média, do modelo ou da decisão. Um algoritmo posterior pode calcular perfeitamente sobre a coluna e ainda reproduzir a omissão criada pela regra determinística de extração.

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

Chegamos ao ponto em que a esforçada leitora será apresentada à 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 todo mal e de, pelo menos, metade dos erros estatísticos cometidos por profissionais competentes e atuantes no mercado. São dois pontos importantes:

  1. 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á.

  2. Uma amostra é o subconjunto que efetivamente observamos: os oito da nossa tabela, os mil visitantes de ontem, os cem parafusos que testamos semana passada.

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, nos limites da nossa capacidade real de pesquisa e processamento.

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 uns e outros é o assunto de toda a inferência.

A Figura 4 põe os dois lados frente a frente. Repare que as setas apontam em direções opostas: a amostragem vai da população para a amostra, e a inferência tenta o caminho de volta, que é o caminho difícil.

Diagrama com a população à esquerda, como região grande de contorno tracejado contendo muitos pontos e rotulada com os parâmetros mu, sigma e p, fixos e desconhecidos, e a amostra observada de oito salários à direita, rotulada com as estatísticas x barra igual a 11,7125, s igual a 5,227 e p circunflexo igual a 0,5, que mudam a cada amostra. Uma seta da população para a amostra é rotulada amostragem, com a condição de que a esperança de cada Xi seja mu, e uma seta tracejada de volta é rotulada inferência. Figura 4: O parâmetro é fixo e desconhecido; a estatística é conhecida e muda a cada amostra. Toda a inferência da série consiste em atravessar a seta tracejada com uma margem declarada.

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$ desmentiria essa lei na mesma frase. Existe uma convenção local que declaramos e manteremos. Quando a leitora vir $\mu$, deve pensar em um parâmetro fixo da população; quando vir $\bar{x}$, em um valor calculado nos dados observados.

Formalmente, considere uma população finita com $N$ elementos, na qual $x_i$ representa o valor armazenado no índice $i$, de $0$ a $N-1$. A média populacional, denotada por $\mu$, é o parâmetro

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

Para uma amostra observada com $n$ valores, denotaremos por $\bar{x}$ a média amostral calculada; quando não há reposição, $n\le N$. Então,

\[\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.

Símbolo Nome/Termo falado Categoria Significado
$\mu$ Média populacional () Parâmetro A média real de toda a população.
$\bar{X}$ Estimador da média (xis barra maiúsculo) Variável aleatória / Estimador A regra aleatória de amostragem.
$\bar{x}$ Média amostral (xis barra) Estatística / Estimativa O número final calculado na amostra.

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$. Em uma ú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 Laboratório de População

O segundo laboratório continua avaliando a população ${2,4,6}$. Neste caso, a curiosa 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.

4.2 Exercícios da Seção 4

1. Classifique parâmetros e estatísticas

Classifique: (a) a idade média dos oito membros da equipe é $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 equipe observada.

Solução: Um parâmetro descreve uma população definida e permanece fixo enquanto essa população não muda. Uma estatística é calculada a partir da amostra observada e pode mudar quando sorteamos outra amostra.

Item Conjunto descrito Símbolo apropriado Categoria
(a) oito pessoas observadas $\bar{x}$ estatística
(b) todos os desenvolvedores do Brasil $\mu$ parâmetro
(c) salários da amostra $s$ estatística
(d) todos os desenvolvedores $p$ parâmetro
(e) equipe observada $\hat{p}$ estatística

O item (d) mostra por que não existe uma lei universal que reserve letras gregas aos parâmetros: $p$ é latino e representa uma proporção populacional. O contexto e o par de notação declarado, não o alfabeto, determinam a categoria.

2. Compare parâmetros populacionais e uma média amostral

Para a população ${2,4,6}$, calcule a média $\mu$, a variância $\sigma^2$ e o desvio padrão $\sigma$. Depois calcule $\bar{x}$ para a amostra específica $(2,4)$ e interprete a diferença.

Solução: A população possui $N=3$ elementos. A média populacional é

\[\mu=\frac{2+4+6}{3}=\frac{12}{3}=4.\]

Os desvios em relação a $\mu$ são $2-4=-2$, $4-4=0$ e $6-4=2$. Elevando-os ao quadrado e usando o denominador populacional $N=3$,

\[\sigma^2=\frac{(-2)^2+0^2+2^2}{3}=\frac{4+0+4}{3}=\frac{8}{3}\approx2{,}6667.\]

O desvio padrão populacional é

\[\sigma=\sqrt{\frac{8}{3}}\approx1{,}6330.\]

Na amostra $(2,4)$, temos $n=2$ e

\[\bar{x}=\frac{2+4}{2}=3.\]
Conjunto Quantidade Valor Natureza
população ${2,4,6}$ $\mu$ $4$ parâmetro
população ${2,4,6}$ $\sigma^2$ $8/3$ parâmetro
população ${2,4,6}$ $\sigma$ $1{,}6330$ parâmetro
amostra $(2,4)$ $\bar{x}$ $3$ estatística

Portanto, $\bar{x}=3\ne4=\mu$. Esta amostra subestima o parâmetro em $3-4=-1$. A diferença não indica erro de cálculo; mostra que uma estatística realizada pode se afastar do parâmetro que pretende estimar.

3. Demonstre que a média amostral é não viesada

Considere $n\ge1$ posições amostrais representadas pelas variáveis aleatórias $X_0,\ldots,X_{n-1}$. Suponha que o plano amostral garanta $\mathbb{E}[X_i]=\mu$ para toda posição $i$. Prove que $\mathbb{E}[\bar{X}]=\mu$ e identifique a hipótese usada em cada passo.

Solução: O estimador da média é

\[\bar{X}=\frac{1}{n}\sum_{i=0}^{n-1}X_i.\]

Aplicamos a esperança aos dois lados. Como $1/n$ é constante, ele pode sair da esperança:

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

Pela linearidade da esperança,

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

A linearidade não exige independência. Agora usamos a hipótese específica do plano amostral, $\mathbb{E}[X_i]=\mu$ em cada posição:

\[\mathbb{E}[\bar{X}] =\frac{1}{n}\sum_{i=0}^{n-1}\mu =\frac{1}{n}\,n\mu =\mu.\]
Passo Transformação Justificativa
1 definir $\bar{X}=n^{-1}\sum_iX_i$ regra do estimador
2 retirar $1/n$ da esperança constante em relação ao sorteio
3 trocar a esperança da soma pela soma das esperanças linearidade, sem exigir independência
4 substituir cada $\mathbb{E}[X_i]$ por $\mu$ hipótese do plano amostral

Logo, $\bar{X}$ é não viesado para $\mu$. A conclusão depende das médias marginais corretas em todas as posições; uma amostra por conveniência não recebe essa propriedade apenas por conter muitos elementos.

4. Enumere a distribuição da média amostral

Enumere todas as amostras ordenadas de tamanho $2$, com reposição, da população ${2,4,6}$. Calcule a média de cada amostra e depois a esperança de $\bar{X}$.

Solução: Em cada uma das duas posições podemos escolher qualquer um dos três valores. Há, portanto,

\[3\cdot3=3^2=9\]

amostras ordenadas, todas com probabilidade $1/9$.

Amostra Cálculo de $\bar{x}$ $\bar{x}$
$(2,2)$ $(2+2)/2$ $2$
$(2,4)$ $(2+4)/2$ $3$
$(2,6)$ $(2+6)/2$ $4$
$(4,2)$ $(4+2)/2$ $3$
$(4,4)$ $(4+4)/2$ $4$
$(4,6)$ $(4+6)/2$ $5$
$(6,2)$ $(6+2)/2$ $4$
$(6,4)$ $(6+4)/2$ $5$
$(6,6)$ $(6+6)/2$ $6$

Como as nove amostras são equiprováveis,

\[\mathbb{E}[\bar{X}] =\frac{2+3+4+3+4+5+4+5+6}{9} =\frac{36}{9} =4.\]

A média populacional também vale $\mu=(2+4+6)/3=4$. A enumeração completa confirma $\mathbb{E}[\bar{X}]=\mu$ sem exigir que cada realização de $\bar{x}$ seja igual a $4$.

5. Construa uma estimativa diferente do parâmetro

Escolha uma amostra de tamanho $2$ de ${2,4,6}$ cuja média difira de $\mu$. Calcule o erro e explique por que o resultado não contradiz o não viés demonstrado no exercício anterior.

Solução: Vamos escolher a amostra $(6,6)$. Sua estimativa é

\[\bar{x}=\frac{6+6}{2}=6.\]

Como $\mu=4$, o erro realizado é

\[\bar{x}-\mu=6-4=2.\]

Essa amostra superestima o parâmetro em duas unidades. No exercício anterior, porém, não demonstramos $\bar{x}=\mu$ para toda amostra. Demonstramos que a variável aleatória $\bar{X}$ tem esperança $\mu$ quando consideramos todas as amostras segundo suas probabilidades.

A amostra $(2,2)$ produz erro $2-4=-2$ e compensa, na distribuição, o erro de $(6,6)$. O estimador é centrado no parâmetro, mas cada estimativa permanece livre para cair acima ou abaixo dele. Não viesado não significa exato em cada amostra.

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

Com os conceitos assentados, vamos fazer 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 uma Central Processing Unit (CPU), ou unidade central de processamento: 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 no Microsoft Visual C++ (MSVC) com cl /std:c++latest /O2 /W4 /permissive- /EHsc primeiro_contato.cpp.

#include <algorithm>
#include <iomanip>
#include <iostream>
#include <numeric>
#include <span>
#include <stdexcept>
#include <vector>

/**
 * @brief Computes the arithmetic mean of a non-empty sample view.
 * @throws std::invalid_argument when the sample has no observations.
 */
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 Computes the median without changing the order of the source sample.
 * @throws std::invalid_argument when the sample has no observations.
 */
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::ranges::sort(ordenados);
    const std::size_t n = ordenados.size();
    if (n % 2 == 1) {
        return ordenados[n / 2];
    }
    return std::midpoint(ordenados[n / 2 - 1], ordenados[n / 2]);
}

int main() {
    // Values remain in thousands of BRL so every reported statistic preserves the table's scale.
    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. O salário de $22{,}0$ mil puxa a média para cima, enquanto a mediana, que depende apenas dos dois valores centrais, resiste melhor a esse puxão. Essa ordem sugere que vale investigar uma cauda à direita, mas não a prova: média maior que mediana, isoladamente, não determina a forma de uma distribuição. Guardaremos a suspeita, e a cautela, para formalizá-las como assimetria no artigo 3.

std::span<const double> deixa explícito que as funções leem uma região contígua sem possuir os salários. A mediana cria sua própria cópia antes de ordenar, usa std::ranges::sort para expressar a operação completa e usa std::midpoint para calcular o centro do par sem formar antes a soma dos dois valores. O caso vazio é rejeitado antes de qualquer divisão ou acesso a elemento.

Nos laboratórios da disciplina, a implementação interna em Python usa o método describe de pandas para produzir um resumo mais amplo. Com os mesmos oito salários, ele confirma contagem $8$, média $11{,}7125$, mínimo $6{,}5$, mediana $10{,}5$ e máximo $22{,}0$. Também reporta quartis e desvio padrão amostral, objetos que ainda não definimos e que pertencem aos artigos 2 e 3. A conveniência é útil depois que sabemos o que cada número significa; antes disso, é apenas uma forma rápida de produzir resultados que ainda não sabemos ler.

5.1 Exercícios da Seção 5

1. Reconstrua soma, média e mediana

Sem executar o programa, mostre de onde vêm soma = 93,7000, media = 11,7125 e mediana = 10,5000.

Solução: A soma percorre os oito salários, em milhares de reais:

\[6{,}5+9{,}0+12{,}0+15{,}5+8{,}2+22{,}0+7{,}1+13{,}4=93{,}7.\]

Como $n=8$, a média é

\[\bar{x}=\frac{93{,}7}{8}=11{,}7125.\]

Para a mediana, primeiro ordenamos os valores:

\[6{,}5,\ 7{,}1,\ 8{,}2,\ 9{,}0,\ 12{,}0,\ 13{,}4,\ 15{,}5,\ 22{,}0.\]

O tamanho é par, então os dois valores centrais são o quarto e o quinto, $9{,}0$ e $12{,}0$. Logo,

\[\operatorname{mediana}=\operatorname{midpoint}(9{,}0,12{,}0)=\frac{9{,}0+12{,}0}{2}=10{,}5.\]

A formatação com quatro casas decimais transforma esses resultados em 93.7000, 11.7125 e 10.5000. O programa e o cálculo manual usam os mesmos oito valores e chegam aos mesmos números.

2. Analise o contrato para entrada vazia

O que aconteceria se media aceitasse um std::span<const double> vazio sem a verificação inicial? Separe o que o programa calcularia do que a estatística define.

Solução: Para um intervalo vazio, std::accumulate começa em 0.0 e não encontra elementos. A soma permanece igual a $0$. O tamanho do span também é $0$, de modo que a expressão tentaria calcular

\[\frac{0{,}0}{0}=\frac{0{,}0}{0{,}0}.\]

Essa divisão não define uma média. Em implementações de ponto flutuante compatíveis com IEC 60559, o resultado usual é NaN, um valor não numérico, mas o problema existe antes da representação escolhida: não há observações e, portanto, não há estatística amostral para calcular.

A verificação dados.empty() transforma uma saída silenciosamente inválida em std::invalid_argument. O contrato localiza a falha no ponto em que a pré-condição foi violada e impede que um valor sem interpretação continue pela análise.

3. Explique propriedade e vida útil de std::span

Por que std::span<const double> não copia os salários nem é proprietário deles? O que precisa permanecer vivo durante a chamada?

Solução: O std::vector<double> de main aloca e possui os oito elementos. Ao construir o span, passamos uma visão formada essencialmente por um endereço para o primeiro elemento e um tamanho. Nenhum novo vetor de salários é criado.

O qualificador const pertence aos elementos vistos pela função: media e mediana podem ler, mas não alterar os valores por essa interface. Ele não prolonga a vida útil do vetor. Durante toda a chamada, o proprietário precisa continuar vivo e não pode executar uma operação que invalide a região observada, como uma realocação.

No programa, o vetor salarios vive até o final de main, portanto cobre as duas chamadas. A função mediana cria deliberadamente um std::vector<double> próprio antes de ordenar; essa cópia evita modificar o vetor original e continua válida independentemente da ordem dos dados de entrada.

4. Justifique o uso de std::midpoint

Por que a mediana de tamanho par usa std::midpoint(a,b) em vez de calcular diretamente (a+b)/2.0?

Solução: As duas expressões representam matematicamente o mesmo ponto médio:

\[m=\frac{a+b}{2}.\]

Na expressão direta, porém, o programa forma primeiro $a+b$. Para dois valores finitos, grandes e de mesmo sinal, essa soma intermediária pode ultrapassar o maior valor representável, ainda que o ponto médio esteja entre $a$ e $b$ e seja representável.

std::midpoint implementa o cálculo sem exigir essa soma intermediária perigosa. Para os valores centrais do exemplo,

\[\operatorname{midpoint}(9{,}0,12{,}0)=10{,}5.\]

Neste conjunto pequeno, as duas formas produzem o mesmo resultado. A escolha da função padrão preserva o significado e amplia a segurança para entradas de maior magnitude, sem esconder a operação estatística realizada.

5. Acrescente a amplitude à saída

Defina a amplitude, calcule seu valor para os oito salários e escreva a linha C++23 que poderia ser acrescentada ao programa.

Solução: A amplitude é a diferença entre o máximo e o mínimo observados. O programa já encontrou

\[\max(x)=22{,}0 \qquad\text{e}\qquad \min(x)=6{,}5.\]

Logo,

\[\operatorname{amplitude}=22{,}0-6{,}5=15{,}5\text{ mil reais}.\]

Depois do cálculo de maximo e minimo, podemos acrescentar

const double amplitude = maximo - minimo;
std::cout << "amplitude = " << amplitude << '\n';

Com a formatação já configurada, a saída será amplitude = 15.5000. A extensão reutiliza valores validados pelo programa e acrescenta uma medida de dispersão sem percorrer novamente o vetor.

6. Integração dos conceitos

Vamos fechar o percurso reunindo decisões que apareceram separadas: tipo estatístico, operação legítima, unidade observacional e mecanismo amostral. Os cinco exercícios seguintes exigem que a leitora declare a hipótese antes de calcular e interprete o número depois do cálculo.

6.1 Exercícios da Seção 6

1. Diagnostique uma média de níveis profissionais

O explorador de tipos permite testar a hipótese de que nível seja numérico. Se júnior, pleno e sênior forem codificados como $1$, $2$ e $3$, qual hipótese foi acrescentada e qual operação revela o problema?

Solução: A ordem júnior < pleno < sênior pertence aos dados ordinais. A codificação $1$, $2$ e $3$ acrescenta a hipótese de que as duas distâncias sejam iguais:

\[2-1=3-2=1.\]

Nenhuma observação da carreira forneceu essa igualdade. A média revela a hipótese porque depende dos intervalos escolhidos. Com três pessoas juniores, três plenas e duas seniores,

\[\bar{x}_{1,2,3}=\frac{3\cdot1+3\cdot2+2\cdot3}{8}=1{,}875.\]

Se preservarmos a ordem, mas usarmos $1$, $10$ e $11$, a média muda para

\[\bar{x}_{1,10,11}=\frac{3\cdot1+3\cdot10+2\cdot11}{8}=6{,}875.\]

A ordenação e a mediana permanecem iguais nas duas codificações. Portanto, a média denuncia a distância arbitrária acrescentada pela classificação incorreta.

2. Compare três resumos de uma variável binária

Uma variável binária codificada em $0$ e $1$ contém seis unidades e dois zeros. Calcule moda, mediana e média e explique o que cada medida informa.

Solução: Ordenando os oito valores, obtemos

\[0,\ 0,\ 1,\ 1,\ 1,\ 1,\ 1,\ 1.\]

O valor mais frequente é $1$, com seis ocorrências, portanto a moda é $1$. Como $n=8$, a mediana usa o quarto e o quinto valores. Ambos são $1$:

\[\operatorname{mediana}=\frac{1+1}{2}=1.\]

A soma é $6$, e a média é

\[\bar{x}=\frac{6}{8}=0{,}75.\]
Medida Resultado Informação preservada
moda $1$ categoria mais frequente
mediana $1$ posição central na ordem escolhida
média $0{,}75$ proporção da categoria codificada como $1$

A moda identifica a categoria mais comum. A mediana mostra que pelo menos metade dos registros está na categoria $1$. A média informa a proporção de unidades, $75\%$, porque a codificação indicadora transforma a soma em contagem da categoria $1$. As três medidas existem, mas respondem a perguntas diferentes.

3. Conte amostras com reposição e calcule o centro

Para a população ${2,4,6}$, tome amostras ordenadas de tamanho $n=2$ com reposição. Determine o número de amostras, a distribuição de $\bar{X}$ e sua esperança.

Solução: Cada uma das duas posições aceita três valores. Assim, o número de pares é

\[3^2=9.\]

As médias correspondentes aos pares $(2,2)$, $(2,4)$, $(2,6)$, $(4,2)$, $(4,4)$, $(4,6)$, $(6,2)$, $(6,4)$ e $(6,6)$ são

\[2,\ 3,\ 4,\ 3,\ 4,\ 5,\ 4,\ 5,\ 6.\]

Todas as amostras têm probabilidade $1/9$, então

\[\mathbb{E}[\bar{X}] =\frac{2+3+4+3+4+5+4+5+6}{9} =\frac{36}{9} =4.\]

Como $\mu=(2+4+6)/3=4$, a distribuição da média amostral está centrada no parâmetro.

4. Refaça a enumeração sem reposição

Para a mesma população, liste as amostras ordenadas de tamanho $2$ sem reposição, calcule cada média e verifique a esperança de $\bar{X}$.

Solução: A primeira posição possui três escolhas. Depois dela, restam duas escolhas para a segunda posição. Logo,

\[3\cdot2=6\]

pares ordenados são possíveis.

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

Os seis pares são equiprováveis sob o sorteio aleatório simples ordenado. Portanto,

\[\mathbb{E}[\bar{X}] =\frac{3+4+3+5+4+5}{6} =\frac{24}{6} =4 =\mu.\]

As duas posições são dependentes, pois o primeiro valor removido altera as escolhas seguintes. Ainda assim, cada posição preserva média marginal $4$, e a linearidade da esperança mantém o estimador centrado em $\mu$.

5. Separe uma realização da distribuição do estimador

Selecione uma amostra com $\bar{x}=6$ e explique, usando a distribuição completa, por que ainda temos $\mathbb{E}[\bar{X}]=4$.

Solução: Com reposição, a amostra $(6,6)$ é possível e produz

\[\bar{x}=\frac{6+6}{2}=6.\]

Esse número é uma estimativa realizada. Ele pertence a uma das nove amostras possíveis e tem probabilidade $1/9$. A variável aleatória $\bar{X}$, por sua vez, reúne todos os valores possíveis com suas probabilidades:

\[2,\ 3,\ 4,\ 3,\ 4,\ 5,\ 4,\ 5,\ 6.\]

O valor $6$ contribui com $6/9$ para a esperança, mas não é a única contribuição. Somando todas,

\[\mathbb{E}[\bar{X}]=\frac{36}{9}=4.\]

Portanto, $\bar{x}=6$ descreve uma realização particular, enquanto $\mathbb{E}[\bar{X}]=4$ descreve o centro do procedimento de amostragem. Confundir os dois níveis transformaria uma propriedade da distribuição em uma exigência impossível para cada amostra.

7. Questões difíceis de múltipla escolha

O laboratório a seguir reúne dez questões integrativas nos formatos de classificação de afirmações e de asserção e razão. As alternativas foram construídas para que a resposta dependa da análise de cada proposição, não do reconhecimento de uma frase isolada. Depois de confirmar uma resposta, a correção fica bloqueada e apresenta a justificativa completa.

8. 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?

Acrônimos e Abreviações neste artigo

A seguir está a lista de todos os acrônimos e abreviações identificados no texto, organizados em ordem alfabética com o termo original em inglês e a tradução para o português:

Acrônimo / Abreviação Definição em Inglês Tradução em Português
API Application Programming Interface Interface de Programação de Aplicações
CPU Central Processing Unit Unidade Central de Processamento
MSVC Microsoft Visual C++ Microsoft Visual C++

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: 3 ago. 2026.

APACHE SOFTWARE FOUNDATION. Apache Arrow C++: tabular data. Disponível em: https://arrow.apache.org/docs/cpp/tables.html. Acesso em: 3 ago. 2026.

BRUCE, P.; BRUCE, A.; GEDECK, P. Practical Statistics for Data Scientists. 2. ed. Sebastopol: O’Reilly, 2020. Disponível em: https://www.oreilly.com/library/view/practical-statistics-for/9781492072935/. Acesso em: 3 ago. 2026.

CERN. ROOT: RDataFrame. Disponível em: https://root.cern/doc/master/group__dataframe.html. Acesso em: 3 ago. 2026.

MICROSOFT. Microsoft C/C++ language conformance. Disponível em: https://learn.microsoft.com/en-us/cpp/overview/visual-cpp-language-conformance?view=msvc-170. Acesso em: 3 ago. 2026.

MOEIN, H. C++ DataFrame Library Documentation. Disponível em: https://hosseinmoein.github.io/DataFrame/docs/HTML/DataFrame.html. Acesso em: 3 ago. 2026.

PANDAS DEVELOPMENT TEAM. pandas.Series.describe. Disponível em: https://pandas.pydata.org/docs/reference/api/pandas.Series.describe.html. Acesso em: 3 ago. 2026.

XTENSOR TEAM. xframe. Disponível em: https://xframe.readthedocs.io/en/latest/. Acesso em: 3 ago. 2026.

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

(Updated: )