[DATA SCIENCE] DAY: 023 - Entendendo dados categóricos e um pouco de Pandas 🐼
🦀 Bom dia, boa tarde e boa noite pessoal, tudo bem?
⛵️ Hoje iremos falar sobre dados categóricos e um pouco de pandas
📝 Obs: Irei utilizar o jupyter notebook para a fácil visualização dos gráficos, mas fique a vontade para escolher outro ambiente de sua preferência. Uma sugestão caso não conheça nenhum, tem o colab do google.
1 - Primeiro, podemos usar a notação as
para abreviar o nome das bibliotecas e métodos que vamos importar e facilitar a escrita de código:
💻
import pandas as pd
import numpy as np
📝 Obs:
- A linha
import pandas as pd
importa a biblioteca pandas para utilizar suas funções para manipular e analisar dados. - A linha
import numpy as np
importa a biblioteca nympy para utilizar suas funções para manipular e analisar dados.
2 - Após a importação do pandas e numpy, vamos ler um arquivo CSV chamado "mtcars.csv":
🔍 Para baixar o arquivo que está sendo usado, clique aqui.
💻
caminho = 'O-caminho-do-seu-arquivo/mtcars.csv'
carros = pd.read_csv(caminho)
carros.columns = ['nomes','mpg','cyl','disp', 'hp', 'drat', 'wt', 'qsec', 'vs', 'am', 'qtd_marchas', 'carb']
carros.index = carros.nomes
📝 Obs: O que esse código faz???
- O código está definindo uma variável
caminho
que armazena o caminho do arquivo CSV a ser lido,mtcars.csv
. - Ele usa a função
pd.read_csv()
para ler o arquivo e armazenar os dados em um DataFrame chamadocarros
. - As colunas do DataFrame são renomeadas através da propriedade
columns
e atribuindo uma lista de novos nomes. - O índice do DataFrame é redefinido para ser a coluna
nomes
através da propriedadeindex
. - Isso faz com que a coluna
nomes
seja usada como índice para o DataFrame, o que pode ser útil para indexação e seleção de linhas específicas.
3 - Seguindo, vamos criar um novo DataFrame chamado carros_cat
a partir do DataFrame original carros
selecionando apenas as colunas especificadas e em seguida visualizar as primeiras linhas:
💻
carros_cat = carros[['cyl','vs','am','qtd_marchas','carb']]
carros_cat.head()
Saída do código:
cyl vs am qtd_marchas carb
nomes
Mazda RX4 6 0 1 4 4
Mazda RX4 Wag 6 0 1 4 4
Datsun 710 4 1 1 4 1
Hornet 4 Drive 6 1 0 3 1
Hornet Sportabout 8 0 0 3 2
📝 Obs: O que esse código faz???
- O código está criando um novo DataFrame chamado
carros_cat
. - Ele esta selecionando apenas as colunas especificadas
['cyl','vs','am','qtd_marchas','carb']
do DataFrame originalcarros
através do operador de indexação[ ]
. - Ele usa colchetes duplos para selecionar múltiplas colunas ao mesmo tempo.
- O método
.head()
é usado para exibir as primeiras linhas do DataFramecarros_cat
ou seja, as primeiras 5 linhas das colunas selecionadas. - Isso permite obter uma visão geral rápida dos dados das colunas selecionadas.
4 - Continuando, vamos agrupar o DataFrame carros_cat
pelo valor da coluna qtd_marchas
usando o método 'groupby()', utilizar o método '.describe()', e entender a funcionalidade do método '.T':
💻
marchas_grupos = carros_cat.groupby('qtd_marchas')
marchas_grupos.describe().T
Saída do código:
qtd_marchas 3 4 5
am count 15.000000 12.000000 5.000000
mean 0.000000 0.666667 1.000000
std 0.000000 0.492366 0.000000
min 0.000000 0.000000 1.000000
25% 0.000000 0.000000 1.000000
50% 0.000000 1.000000 1.000000
75% 0.000000 1.000000 1.000000
max 0.000000 1.000000 1.000000
carb count 15.000000 12.000000 5.000000
mean 2.666667 2.333333 4.400000
std 1.175139 1.302678 2.607681
min 1.000000 1.000000 2.000000
25% 2.000000 1.000000 2.000000
50% 3.000000 2.000000 4.000000
75% 4.000000 4.000000 6.000000
max 4.000000 4.000000 8.000000
cyl count 15.000000 12.000000 5.000000
mean 7.466667 4.666667 6.000000
std 1.187234 0.984732 2.000000
min 4.000000 4.000000 4.000000
25% 8.000000 4.000000 4.000000
50% 8.000000 4.000000 6.000000
75% 8.000000 6.000000 8.000000
max 8.000000 6.000000 8.000000
vs count 15.000000 12.000000 5.000000
mean 0.200000 0.833333 0.200000
std 0.414039 0.389249 0.447214
min 0.000000 0.000000 0.000000
25% 0.000000 1.000000 0.000000
50% 0.000000 1.000000 0.000000
75% 0.000000 1.000000 0.000000
max 1.000000 1.000000 1.000000
📝 Obs: O que esse código faz???
- O código está agrupando o DataFrame
carros_cat
pelo valor da colunaqtd_marchas
usando o métodogroupby()
. - Isso cria grupos de linhas com valores idênticos na coluna
qtd_marchas
. - O método
.describe()
é aplicado a cada grupo criado. - Ele retorna estatísticas básicas como contagem, média, desvio padrão, valor mínimo e máximo para cada coluna numérica.
- O método
.T
é usado para transpor o DataFrame, essa ação inverte as linhas e colunas do Dataframe. - Isso permite visualizar de maneira mais fácil as estatísticas agrupadas por valor de
qtd_marchas
.
5 - Agora, vamos explorar dados categóricos. Para criar uma Serie de dados categóricos, usamos o pd.Series()
passando um array ou uma série que contém o dado que queremos transformar e o argumento dtype="category
:
💻
carros['grupo'] = pd.Series(carros['qtd_marchas'], dtype="category")
carros['grupo'].dtype
Saída do código:
category
📝 Obs: O que esse código faz???
- O código está criando uma nova coluna chamada
grupo
no DataFramecarros
. - Essa coluna é definida como uma série, que tem os mesmos valores que a coluna
qtd_marchas
. - A série é definida com o tipo de dado
category
, o que significa que os valores são tratados como categorias (ou seja, valores discretos) e não como números. - Na segunda linha, a propriedade
.dtype
é usada para verificar o tipo de dado da colunagrupo
, que deve sercategory
. - Isso pode ser útil para economizar espaço em memória e melhorar a performance ao trabalhar com dados categóricos.
Vamos ler as primeiras 5 linhas dos valores da coluna grupo
que são os mesmos da coluna qtd_marchas
mas agora tratados como categoria:
💻
carros['grupo'].head()
Saída do código:
nomes
Mazda RX4 4
Mazda RX4 Wag 4
Datsun 710 4
Hornet 4 Drive 3
Hornet Sportabout 3
Name: grupo, dtype: category
Categories (3, int64): [3, 4, 5]
Após a transformar as variáveis em dados categóricos, vamos utilizar o método .value_counts()
. Este método conta a frequência de cada valor único na coluna 'grupo', e classifica os valores pela contagem decrescente
. Ele retorna um novo objeto (também uma série) com os valores únicos da coluna grupo
e suas respectivas contagens:
💻
carros['grupo'].value_counts()
Saída do código:
3 15
4 12
5 5
Name: grupo, dtype: int64
6 - Por último, podemos montar um cruzamento entre váriaveis usando o médodo do Pandas pd.crosstab()
, assim passando as variáveis que queremos ver no nosso resultado:
💻
pd.crosstab(carros['am'], carros['qtd_marchas'])
Saída do código:
qtd_marchas 3 4 5
am
0 15 4 0
1 0 8 5
📝 Obs: O que esse código faz???
- O código está usando a função
pd.crosstab()
do pacote pandas. - Essa função é usada para criar uma tabela de contingência entre duas variáveis categóricas, neste caso
am
eqtd_marchas
colunas do DataFramecarros
. - A tabela de contingência mostra a frequência de ocorrência de cada combinação de valores entre as duas variáveis.
- A função retorna uma tabela (DataFrame) com as contagens das combinações de valores.
- Essa tabela mostra de forma facil de visualizar a relação entre as variaveis
am
eqtd_marchas