Carvalho Ribeiro Blog
  • Info

Conteúdo

  • O que é importação e visualização de dados
  • Qual o objetivo
  • De onde vem a demanda
  • Como fazer
  • Pra onde vai quem é o cliente
  • Qual o resultado

Como importar e visualizar dados - Titanic dataset parte1

Exploração de dados
Author

Marcelo Carvalho dos Anjos

Published

August 7, 2022

Vídeo tema para este post Como importar e visualizar dados - Titanic dataset parte1

O que é importação e visualização de dados

  • É a etapa onde é feita extração de dados e avaliação se os mesmos podem contribuir para a solução do problema a ser resolvido.

  • A visualização é uma forma intuitiva de traçar relações possíveis entre os dados e o desfecho permitindo a geração de questões e levantamento de hipóteses.

  • Geralmente estão atrelados a uma métrica de sucesso e é feito após a etapa P do PDCA , PPDAC ou outro método de análise de fenõmeno e causa raíz utilizado.

    Processo de projeto kaizen

Qual o objetivo

  • Disponibilizar recursos revelantes para solução dos problemas

  • Filtrar dados relevantes dos não relevantes, entender a natureza dos dados se são realmente ruídos ou carecem de representação.

  • Avaliar existencia de shadow stats ou se haverá dificuldade na coleta. Por exemplo: o dado pode ser muito relevante mas difícil de ser coletado ou pode haver muita instabilidade e ambiguidade ou até mesmo usar critérios diferentes entre diferentes fontes.

  • Gerar novas questões e hipóteses que poderão utilizar novos dados ou um resultado de interação entre os existentes.

De onde vem a demanda

  • A extração e visualização dos dados vem da necessidade de encontrar variáveis que expliquem o fenômeno e ajudem a prever eventos futuros.

  • Melhorar e estimular a geração de ideias através da interação entre os envolvidos.

Como fazer

Para reproduzir os códigos abaixo serão necessários os pacotes tidyverse , tidymodels e janitor, ggpubr, funmodeling, ggalluvial e visdat

O dados podem ser baixados no Kaggle titanic dataset

# pacotes           --------------------------------------------------------
library(tidymodels)
library(tidyverse)
library(janitor)
library(ggpubr)
library(funModeling)
library(ggalluvial)
library(visdat)

# dados             --------------------------------------------------------
#importar os dados do kaggle e salvar em  diretorio padrão

# importar dados e padronizar colunas
train_titanic <- 
    read.csv("train.csv", na.strings = c(""," ")) %>% 
    clean_names() %>% 
    mutate(is_train = TRUE) 

#importar dados de teste
test_titanic <- 
  read.csv("test.csv", na.strings = c(""," ")) %>% 
  clean_names() %>% 
  mutate(survived = NA, is_train = FALSE) 

#juntar os conjuntos
split_titanic <- bind_rows(train_titanic, test_titanic)

#check nas caracteristicas dos dados
split_titanic %>% funModeling::df_status()
       variable q_zeros p_zeros q_na  p_na q_inf p_inf      type unique
1  passenger_id       0    0.00    0  0.00     0     0   integer   1309
2      survived     549   41.94  418 31.93     0     0   integer      2
3        pclass       0    0.00    0  0.00     0     0   integer      3
4          name       0    0.00    0  0.00     0     0 character   1307
5           sex       0    0.00    0  0.00     0     0 character      2
6           age       0    0.00  263 20.09     0     0   numeric     98
7        sib_sp     891   68.07    0  0.00     0     0   integer      7
8         parch    1002   76.55    0  0.00     0     0   integer      8
9        ticket       0    0.00    0  0.00     0     0 character    929
10         fare      17    1.30    1  0.08     0     0   numeric    281
11        cabin       0    0.00 1014 77.46     0     0 character    186
12     embarked       0    0.00    2  0.15     0     0 character      3
13     is_train     418   31.93    0  0.00     0     0   logical      2

Como o nosso conjunto de dados é pequeno(tem poucas variáveis) é possível usar um gráfico para visualizar os tipos de dados e as características.

split_titanic %>% visdat::vis_dat()

Gráfico Visdat - Características das variáveis
Como faço pra visualizar dados faltantes quando o conjunto for grande ?

Sugestão É possível usar o pacote naniar com a função naniar::miss_var_summary()

Como resultado da análise podemos verificar a necessidade de algumas transformações nos dados. Anotamos tudo para alterarmos posteriormente mas seguimos com a análise exploratória por enquanto.

Alterar o tipo de variável de sex, embarked, survived, pclass = factor

Inserir dados faltantes em embarked = moda, age e fare = usando knn

Vamos fazer uma correlação para avaliar os padrões existentes. Mas note. Para fazer correlação, os dados precisam ser numéricos por isso usamos a função select_if(is.numeric) . Pelo padrão apresentado é possível verificar a existencia de dados categóricos eles geralmente ficam espaçados no gráfico e eles precisam ser transformados pra factor posteriormente e que já anotamos e comunicamos.

# correlacao
train_titanic %>% 
  select_if(is.numeric) %>% 
  GGally::ggscatmat(color = "survived", corMethod = "spearman")+
  theme_pubclean()

Gráfico de correlação de Spearman

Será que a idade importa ?

# age - será que a idade importa ? 
train_titanic %>% 
  ggplot(aes(x=age, fill = factor(survived)))+
  geom_density(alpha =0.5)

Será que o sexo importa ?

# age, sex and class - será que o sexo importa ?
train_titanic %>% 
  ggplot(aes(x=pclass, fill= factor(survived)))+
  geom_bar(stat = "count")+
  facet_grid(~sex)

Vamos juntar as variáveis age+sex+pclass e analisar sob outro ponto de vista

# age sex and class - sob outro ponto de vista
train_titanic %>% 
  ggplot(aes(x=age, y=sex))+
  geom_jitter(aes(color = factor(survived)))+
  facet_wrap(~pclass)

Novamente vamos analisar sob outro ponto de vista

# sex, class e survived 
train_titanic %>% 
  group_by(sex, survived, pclass) %>% 
  summarise(qtd = n()) %>% 
  ggplot(aes(axis1=sex, axis2=pclass, axis3 = survived, y=qtd, fill= sex))+
  geom_alluvium()+
  geom_stratum()+
  geom_text(stat = "stratum", aes(label = after_stat(stratum)))+
  scale_x_discrete(limits = c("sex", "pclass","survived"))

Será que a variável tarifa está bem representada ?

# fare - será que fare é uma variável válida ?
train_titanic %>% 
  mutate(fare = fare) %>% 
  ggplot(aes(x=fare, y=pclass))+
  geom_jitter(aes(color = factor(survived)))

Sera que o tamanho da familia importa e o dado está bem representado ?

# parch sib_sp - será que o tamanho da familia importa ?
train_titanic %>% 
  mutate(family_size = parch + sib_sp +1) %>%
  ggboxplot(x="survived", 
            y="family_size", 
            fill= "survived",
            palette = "uchicago")+
  stat_compare_means()

Será que existe algum padrão no nome que possa ser extraído e que ajude a explicar se impacta na sobrevivência ?

# title
train_titanic %>% 
  mutate(title = str_extract(name, "[A-z]*\\.")) %>% 
  tabyl(title) %>% 
  adorn_pct_formatting() %>% 
  arrange(desc(n))
     title   n percent
       Mr. 517   58.0%
     Miss. 182   20.4%
      Mrs. 125   14.0%
   Master.  40    4.5%
       Dr.   7    0.8%
      Rev.   6    0.7%
      Col.   2    0.2%
    Major.   2    0.2%
     Mlle.   2    0.2%
     Capt.   1    0.1%
 Countess.   1    0.1%
      Don.   1    0.1%
 Jonkheer.   1    0.1%
     Lady.   1    0.1%
      Mme.   1    0.1%
       Ms.   1    0.1%
      Sir.   1    0.1%

Pra onde vai quem é o cliente

  • A próxima etapa é comunicar os resultados junto aos membros do projeto sobre as relações encontradas permitindo a interção e levantamento de novas necessidades ou hipóteses.

  • Posteriormente, vem as etapas de pré processamento, modelo, validação e submissão.

Qual o resultado

  • Aperfeiçoar a técnica de observação e representação de dados.

  • Facilitar a comunicação com os envolvidos no projeto.

  • Melhorar e estimular a geração de ideias através da interação entre os membros do projeto.