Carregando as bibliotecas necessárias para análise e visualização:
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Como o arquivo usa “;” como separador de campos e “.” como separador decimal, usamos read_delim(). Essa função permite definir explicitamente o delimitador e o formato decimal, garantindo que valores como 4.53 e 4.33 sejam lidos corretamente. Observação: Antes da importação, o arquivo CSV foi corrigido manualmente para remover quebras de linha inconsistentes, garantindo que todas as linhas sejam lidas corretamente.
#Importando dados
dados_po <- read_delim(
"C:/Users/shain/Documents/Yevenb/dewafio_2/desafio2-diagnostico_editado.csv",
delim = ";",
locale = locale(decimal_mark = ".", encoding = "UTF-8")
)
## Rows: 42 Columns: 18
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (14): id, nome, email, telefone, atua_como_po, tempo_experiencia, tipo_...
## dbl (2): knowledge_score, challenge_score
## dttm (2): data_resposta, created_at
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#Visualizando o meu dataset
head(dados_po)
## # A tibble: 6 × 18
## id nome email telefone atua_como_po tempo_experiencia tipo_empresa q5_q11
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
## 1 ANON_… ANON… ANON… ANON_TE… sim_oficial mais_2a "Porto segu… "{\"q…
## 2 ANON_… ANON… ANON… ANON_TE… sim_oficial mais_2a "Startup, G… "{\"q…
## 3 ANON_… ANON… ANON… ANON_TE… transição menos_6m "Startup e … "{\"q…
## 4 ANON_… ANON… ANON… ANON_TE… sim_oficial mais_2a "Startup" "{\"q…
## 5 ANON_… ANON… ANON… ANON_TE… sim_oficial mais_2a "Erp, e-com… "{\"q…
## 6 ANON_… ANON… ANON… ANON_TE… sim_parcial mais_2a "Edtech, Va… "{\"q…
## # ℹ 10 more variables: q12_q17 <chr>, q18_areas_desenvolvimento <chr>,
## # q19_formato_apoio <chr>, q20_nivel_jornada <chr>, comentario <chr>,
## # knowledge_score <dbl>, challenge_score <dbl>, trilha <chr>,
## # data_resposta <dttm>, created_at <dttm>
dados_po <- dados_po %>%
select(-nome, -email, -telefone, -q5_q11, -q12_q17)
Definindo Tipos de Dados de acordo com os dados que temos usando as.numeric e também a library lubridate. O lubridate usa ymd_hms para converter strings complexas de data e consegue lidar com os microssegundos (.760088) e o fuso horário (+00)
library(lubridate)
dados_po <- dados_po %>%
mutate(
knowledge_score = as.numeric(knowledge_score),
data_resposta = ymd_hms(data_resposta, tz = "UTC"),
created_at = ymd_hms(created_at, tz = "UTC")
)
A coluna “q18_areas_desenvolvimento” possui várias respostas dentro de um vetor entre colchetes. Queremos extrair esses dados de modo que seja possível contabilizar a frequência de cada área de desenvolvimento citada. Para isso vamos remover os colchetes, deixando o formato “item1”,“item2”,“item3”. Depois vamos usar o separador “,” (aspas-vírgula-aspas) para gerar uma linha para cada valor. O novo dataframe para essa extensão vai se chamar df_areas.
dados_areas <-dados_po %>%
select(id, q18_areas_desenvolvimento) %>%
mutate(
q18_areas_desenvolvimento=q18_areas_desenvolvimento %>%
str_remove_all("\\[|\\]") %>% #Remove colchetes
str_trim() #Remove espaços extras
) %>%
separate_rows(q18_areas_desenvolvimento, sep='","') %>%
mutate(
q18_areas_desenvolvimento = q18_areas_desenvolvimento %>%
str_remove_all('"') %>% #Remove aspas literais
str_trim()) #Limpa espaços
# O dataframe resultante (df_areas) agora possui uma linha por id e por área de desenvolvimento
Para exportar os dataframes finais (dados_po e
dados_areas) em formato .csv, foi utilizada a
função write_csv() do pacote readr.
Optou-se por essa função em vez da base write.csv() por
alguns motivos:
write_csv() é mais
rápida e eficiente para grandes volumes de dados.row.names = FALSE, pois a função já ignora nomes de linha
por padrão.O código de exportação ficou assim:
write_csv(dados_po, "C:/Users/shain/Documents/Yevenb/dewafio_2/edit_analise_po.csv")
write_csv(dados_areas, "C:/Users/shain/Documents/Yevenb/dewafio_2/edit_analise_po_areas.csv")
Função usada: read_delim()
;) e separador decimal
(.) explicitamente.locale(decimal_mark = ".", encoding = "UTF-8") garante
leitura correta de números decimais e
caracteres especiais.Observação: Antes da importação, o arquivo CSV foi corrigido manualmente para remover quebras de linha inconsistentes, garantindo que todas as linhas sejam lidas corretamente.
Remoção de colunas irrelevantes:
select(-nome, -email, -telefone, -q5_q11, -q12_q17)Correção de tipos de dados:
as.numeric() → converte knowledge_score
para formato numérico.ymd_hms() (lubridate) → transforma
data_resposta e created_at em formato de
data-hora padrão (YYYY-MM-DD HH:MM:SS),
reconhecendo microssegundos e fuso horário (+00).Funções usadas:
str_remove_all() → remove colchetes e aspas de strings
com múltiplos itens.separate_rows() → divide respostas em linhas separadas
(dados_areas).Resultado:
Função usada: write_csv()
(readr)
Mantém codificação UTF-8 e é mais rápida/limpa
que write.csv().
Arquivos gerados:
analise_po_final.csv — base principal
(dados_po).analise_po_areas.csv — base expandida
(dados_areas).| Função | Pacote | Descrição |
|---|---|---|
read_delim() |
readr | Lê arquivos CSV com delimitador ; e separador decimal
.. |
select() |
dplyr | Seleciona ou exclui colunas de um dataframe. |
mutate() |
dplyr | Cria ou transforma colunas dentro de um dataframe. |
as.numeric() |
Base R | Converte valores para tipo numérico. |
ymd_hms() |
lubridate | Converte strings complexas em objetos de data-hora
(POSIXct). |
str_remove_all() |
stringr | Remove padrões de texto com expressões regulares. |
separate_rows() |
tidyr | Expande listas ou valores separados por delimitadores em várias linhas. |
write_csv() |
readr | Exporta dataframes para .csv com codificação
UTF-8. |
🧠 Conclusão: Com os dados limpos, padronizados e
exportados, foi possível estruturar um conjunto de bases
(dados_po e dados_areas) adequadas para
exploração e visualização no Tableau, garantindo integridade e
consistência nas análises da Jornada de Product Owners.