Variáveis qualitativas no pandas (category)
Os códigos desta página rodam no navegador, mas não sozinhos: clique em Run Code em cada bloco, de cima para baixo.
A ideia
Ao ler um arquivo, o pandas só enxerga como os dados estão guardados: números (int64, float64) ou texto (object). Ele não conhece a natureza estatística das variáveis. Na Empresa de TV (Aula 3), PLANO e EC vêm como números (1, 2, 3) e SATISFACAO vem como texto. Cabe a quem analisa classificar cada variável (veja Tipos de variáveis) e ajustar a coluna.
Por que isso importa?
- Números que são códigos enganam. A média de
PLANOsai como 1,44, um número que não significa nada. - Tabelas e gráficos saem na ordem certa. Uma variável ordinal (satisfação, escolaridade) precisa aparecer do menor para o maior nível, e não em ordem alfabética.
- Probabilidade fica mais legível. Com rótulos como
'Yes'/'No'no Titanic (Aula 4), a tabela de frequências já mostra \(P(S)\) e \(P(S^c)\) com nome.
O caminho da Aula 3 tem quatro passos: converter (astype('category')), ver os rótulos (.cat.categories), renomear (.cat.rename_categories) e definir a ordem (pd.Categorical). Todos devolvem uma coluna nova, então é preciso guardar o resultado na própria coluna (dados['X'] = ...).
No código
Converter, ver e renomear uma variável nominal:
O .cat só existe depois da conversão. Tentar renomear uma coluna que ainda é número dá erro:
Definir a ordem de uma variável ordinal. Veja a SATISFACAO em três momentos: como texto, como categoria sem ordem e como categoria ordenada.
Aqui está o ponto que mais confunde: sort=False em .value_counts() não significa “ordem natural”. Significa “não ordene por frequência; use a ordem que a coluna já tem”. Em uma coluna de texto, essa ordem é a de aparecimento na base; em uma categoria sem ordem definida, é a alfabética. Só depois do pd.Categorical com a lista de níveis a tabela sai de “Muito Insatisfeito” a “Muito Satisfeito”.
Com ordered=True, as comparações passam a fazer sentido:
Cerca de 47,6% dos clientes estão pelo menos satisfeitos. Um erro silencioso: se a lista de níveis tiver um nome escrito diferente do que está na base, os valores viram NaN sem aviso.
Vinte clientes sumiram só por causa de uma letra minúscula.
Armadilhas comuns
- Esquecer de guardar.
dados['PLANO'].astype('category')sozinho não muda nada. Escrevadados['PLANO'] = dados['PLANO'].astype('category'). - Usar
.catantes de converter. O erroCan only use .cat accessor with a 'category' dtypepede oastype('category')antes. - Nomes diferentes na lista de
categories. Maiúsculas, acentos e espaços precisam bater exatamente com a base; senão viramNaN. Depois dopd.Categorical, confira com.value_counts(sort=False, dropna=False). - Achar que
sort=Falseordena pela ordem natural. Só com a ordem definida empd.Categorical. ordered=Trueem variável nominal. Estado civil e plano não têm ordem natural; useordered=False(a ordem da lista serve só para a apresentação).
Exercícios aqui na página
Complete os ______ e clique em Run Code: a correção aparece logo abaixo. Use Show Hint para uma dica e Show Solution para ver uma resolução. O Python roda no seu navegador; na primeira vez ele leva alguns segundos para carregar.
Exercício 1
Transforme Pclass do Titanic em variável qualitativa e renomeie os rótulos: 1 vira '1st', 2 vira '2nd' e 3 vira '3rd'.
.cat.rename_categories só funciona depois de .astype('category').
titanic['Pclass'] = titanic['Pclass'].astype('category')
titanic['Pclass'] = titanic['Pclass'].cat.rename_categories({1: '1st', 2: '2nd', 3: '3rd'})
titanic['Pclass']Exercício 2
A classe da passagem é ordinal. Redefina com pd.Categorical na ordem 1st, 2nd, 3rd, avisando que há ordem. Com a ordem, dá para comparar: qual a proporção de passageiros da 1ª ou da 2ª classe (<= '2nd')?
Sem ordered=True, o pandas não sabe que 1st vem antes de 2nd.
titanic['Pclass'] = pd.Categorical(titanic['Pclass'], categories=['1st', '2nd', '3rd'], ordered=True)
p_ate_2a = (titanic['Pclass'] <= '2nd').mean()
p_ate_2aExercício 3
Na Empresa de TV, classifique ESCOLARIDADE e EC (estado civil) como 'nominal' ou 'ordinal'.
Ordinal: as categorias têm uma ordem natural.
tipos = {'ESCOLARIDADE': 'ordinal', 'EC': 'nominal'}
tiposComandos e documentação oficial
Pontes com o outro lado do mapa
Este tópico aparece nestas paradas da revisão guiada, em que cada ponte vira um exercício resolvido pelos dois caminhos:
- Parada 1: O tipo da variável decide a ferramenta exercícios ao vivo · ver no mapa · no Colab
Pratique
As listas novas de revisão abrem no Google Colab (use Arquivo → Salvar uma cópia no Drive). As listas das aulas estão no Blackboard, na pasta de cada aula.
- Revisão A · Pandas passo a passo (com correção automática) nova (Parte 5)Abrir no ColabBaixar .ipynb
- Revisão B · Pontes: cada conteúdo por dois caminhos (com correção automática) nova (Parte 1)Abrir no ColabBaixar .ipynb
- Aula 03 · Atividade: variáveis qualitativas (Empresa de TV) (Exercício 2)Blackboard · notebooks da Aula 03
- Aula 04 · Atividade: Titanic e classificador com Teorema de Bayes (preparação da base (Survived e Pclass))Blackboard · notebooks da Aula 04
- Aula 03 · Exercícios: sentimento dos clientes e barras de chocolate (Exercício 1)Blackboard · notebooks da Aula 03