class Tipos de dados : public 🥾 IA&ML Poliglota

Tipos de dados

Vamos começar nossas analises sob a ótica da Estatística Descritiva, mas afinal o que isso quer dizer?

Segundo Robert Witte, ela nos fornece ferramentas para organizar, resumir e apresentar a variabilidade que encontramos em nossos dados.1 Dessa forma conseguimos tratar os dados brutos em informações que sejam mais fáceis de entender.

O nosso cinto de utilidades então começa a ser preenchido com as ferramentas desse ramo da estatística que são: Tabelas, Gráficos, Medidas de tendência central como por exemplo mediana e moda, entre outros que veremos a seguir. Utilizaremos muitas dessas ferramentas quando estivermos fazendo a Analise Exploratória de dados que é um dos passos importantes da Ciência de Dados

Tipos de Dados

flowchart TD
	Z[Variáveis]
    A[Qualitativas]
    B[Quantitativas]
    C[Nominal]
    D[Ordinal]
    E[Contínua]
    F[Discreta]

	Z --> A
	Z --> B
	A --> C
	A --> D
	B --> E
	B --> F

	C -.- G("Cor")
	D -.- H("Nível de Educação")

	E -.- I(Temperatura)
	F -.- J(Contagem)
	
	style H fill:#666, stroke-dasharray: 5 5
	style G fill:#666, stroke-dasharray: 5 5
	style I fill:#666, stroke-dasharray: 5 5
	style J fill:#666, stroke-dasharray: 5 5

Os tipos de dados apresentados no diagrama têm um papel crucial na análise estatística, pois determinam quais métodos e abordagens são mais apropriados para entender os registros coletados.

Os dados qualitativos são aqueles que não podem ser medidos numericamente, mas podem ser categorizados em grupos ou classes. Ainda são subdivididos em duas categorias: nominais e ordinais.

Qualitativas nominais representam categorias distintas sem uma ordem específica, como cores, gêneros ou tipos de animais.

Qualitativas ordinais têm uma ordem intrínseca, mas as diferenças entre os valores não são uniformes, como níveis de educação (ensino fundamental, médio, superior).

Já os dados quantitativos, como o nome sugere, envolvem medidas numéricas e também são divididas em duas categorias: contínuas e discretas.

Dados quantitativos contínuos podem assumir qualquer valor dentro de um intervalo e podem ser subdivididos em partes menores significativas, como altura, peso ou temperatura.

Enquanto os dados quantitativos discretos são contáveis e geralmente representam valores inteiros, como o número de pessoas em uma família ou a contagem de itens em um estoque.

Compreender essas categorias é fundamental, pois influencia as escolhas estatísticas adequadas. Que iremos abordar ao longo dessa série

Em resumo, a classificação das dados em qualitativas e quantitativas, bem como suas subdivisões, fornece uma base sólida para a análise de dados e a tomada de decisões.

Retomando o dataset do post anterior:

Nome Idade Tipo de Usuário Ticket Médio Idade da Conta
João 28 Premium 150.50 3
Maria 35 Free 45.20 2
Pedro 22 Free 30.00 1
Ana 45 Premium 200.75 5
Lúcia 29 Free 40.80 2

Podemos fazer a seguinte leitura:

Nome Qualitativo Nominal
Idade Quantitativo Discreto
Tipo de usuário Qualitativo Nominal, Categórico
Ticket Médio Quantitativo Contínuo
Idade da Conta Quantitativo Discreta

A depender de nosso problema podemos ter leituras diferentes desse tipos de dados.

Vamos verificar como fazer isso em código:

R

Depois de carregar os dados, podemos verificar os tipos que o readr inferiu para nossas colunas:2

library(readr)
dados <- read_csv("dataset000.csv")

str(dados)

Isso resultou em:

spc_tbl_ [5 × 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
 $ Nome           : chr [1:5] "João" "Maria" "Pedro" "Ana" ...
 $ Idade          : num [1:5] 28 35 22 45 29
 $ Tipo de Usuário: chr [1:5] "Premium" "Free" "Free" "Premium" ...
 $ Ticket Médio   : num [1:5] 150.5 45.2 30 200.8 40.8
 $ Idade da Conta : num [1:5] 3 2 1 5 2
 - attr(*, "spec")=
  .. cols(
  ..   Nome = col_character(),
  ..   Idade = col_double(),
  ..   `Tipo de Usuário` = col_character(),
  ..   `Ticket Médio` = col_double(),
  ..   `Idade da Conta` = col_double()
  .. )
 - attr(*, "problems")=<externalptr>

Ou seja, Idade, Ticket Médio, e Idade da conta foram tratadas como dados numéricos, o que está correto.

Agora precisamos definir que o “Tipo de Usuário” é categórico, podemos fazer assim:

dados$"Tipo de Usuário" <- as.factor(dados$"Tipo de Usuário")

Se você rodar str(dados) novamente, a coluna que alteramos deve estar como abaixo:

 $ Tipo de Usuário: Factor w/ 2 levels "Free","Premium": 2 1 1 2 1

Python

Vamos utilizar a função info() do pandas3 para verificar os tipos de coluna:

import panda as pd

dados = pd.read_csv("dataset000.csv")
dados.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 5 columns):
 #   Column           Non-Null Count  Dtype
---  ------           --------------  -----
 0   Nome             5 non-null      object
 1   Idade            5 non-null      int64
 2   Tipo de Usuário  5 non-null      object
 3   Ticket Médio     5 non-null      float64
 4   Idade da Conta   5 non-null      int64
dtypes: float64(1), int64(2), object(2)
memory usage: 332.0+ bytes

Vamos tratar agora a coluna 2 com o astype4 5:

dados["Tipo de Usuário"] = dados["Tipo de Usuário"].astype("category")

Resultando em:

Julia

Já em Julia, assim que carregamos os dados conseguimos ver os tipos, mas se você quiser verificar podemos usar o método describe6

using CSV
using DataFrames

dados = CSV.read("dataset000.csv", DataFrame)

describe(dados)
5×7 DataFrame
 Row │ variable         mean    min   median  max      nmissing  eltype
     │ Symbol           Union…  Any   Union…  Any      Int64     DataType
─────┼────────────────────────────────────────────────────────────────────
   1 │ Nome                     Ana           Pedro           0  String7
   2 │ Idade            31.8    22    29.0    45              0  Int64
   3 │ Tipo de Usuário          Free          Premium         0  String7
   4 │ Ticket Médio     93.45   30.0  45.2    200.75          0  Float64
   5 │ Idade da Conta   2.6     1     2.0     5               0  Int64

Iremos precisar adicionar o pacote CategoricalArrays7

using CategoricalArrays

dados."Tipo de Usuário" = categorical(dados."Tipo de Usuário")

Como resultado:

   3 │ Tipo de Usuário           Free          Premium         0  CategoricalValue{String7, UInt32}

Notebooks desse post

Bibliografia

  1. Witte, Robert S. and John S. Witte. Statistics. Wiley,2017 

  2. str: R Docs 

  3. info: Pandas Docs 

  4. astype: Pandas Docs 

  5. Dados Categoricos: Pandas Docs 

  6. describe: Julia DataFrames.jl 

  7. CategoricalArrays: Julia 

class Tipos de dados : public 🥾 IA&ML Poliglota