Perfil do Engenheiro Florestal usuário do R - Análise do questionário
Havia quase dois anos que eu não postava por aqui. Foi muito interessante observar que, apesar do tempo sem postar, o fluxo de novos visitantes no blog foi contínuo, demonstrando que o interesse pela aplicação da linguagem R na área florestal é crescente. Por conta disso, resolvi criar um grupo no WhatsApp para reunir Engenheiros Florestais utilizadores do R, para compartilhamento de experiências, materiais, cursos, aplicações, pacotes, dúvidas, etc. Para minha surpresa, o grupo lotou em poucos dias.
Foi então que tive a ideia de elaborar um breve questionário para gerar uma interação e averiguar como e por quem a linguagem R tem sido utilizada na área florestal. Na tentativa de incentivar o preenchimento, me comprometi a compartilhar os resultados e o código utilizado em toda a análise.
A análise a seguir pode servir de auxílio aos colegas que estão buscando se aperfeiçõar na prática de programar em R, uma vez que busco utilizar diversos procedimentos de tratamento e manipulação de dados, bem como aplicar alguns conceitos básicos de data storytelling utilizando o pacote ggplot2
. A fonte de dados é uma planilha do Google Sheets, cópia da versão original vinculada ao formulário, contendo todas as respostas para as 6 perguntas obrigatórias (primeira seção). Vamos à análise.
Análise das respostas
Participaram do levantamento engenheiros florestais das cinco regiões do Brasil e também do exterior. Ao todo houveram 98 respostas ao questionário, sendo a maioria advindas de colegas que atuam nas regiões Sul, Nordeste e Sudeste.
#######################
# Aquisição dos dados #
#######################
# Instalar/carregar pacotes necessarios
library("googlesheets4")
library("tidyverse")
library("devtools")
library("brazilmaps")
library("sf")
library("cowplot")
library("forcats")
library("treemapify")
# Paleta de cores para os graficos
paleta6 <- c("#9FB6CD","#AF9FCD","#CD9FC3","#CDA29F","#CDCA9F","#A9CD9F","#9FCDBD")
# Importar planilha de respostas e renomear colunas (obs: sera preciso fazer login em sua conta google)
respostas <-
read_sheet("1en5995QQbPsIRElA8SDivjquLR0Od2bhghHmil7VIWM") %>%
rename(
Regiao = 2,
Ocupacao = 3,
FreqUso = 4,
NivelCon = 5,
SubArea = 6,
Dificuldades = 7
)
########################
# Respostas por região #
########################
regioes <- brazilmaps::get_brmap(geo = 'Region')
respostas %>%
group_by(Regiao) %>%
summarise(n = n()) %>%
mutate(
desc_rg = case_when(
Regiao == 'Fora do Brasil' ~ 'EXTERIOR',
TRUE ~ toupper(str_split(Regiao, '- ', simplify = T)[, 2])
)
) %>%
arrange(-n) %>%
right_join(regioes) %>%
st_as_sf() %>%
ggplot() +
geom_sf(aes(fill = n), color = 'white', size=.5, show.legend = F) +
geom_sf_text(aes(label = n), color='gray20')+
labs(title = 'Quantidade de respostas por região de atuação',
subtitle = 'Os respondentes se concentraram nas regiões sul, sudeste e nordeste.\nTivemos poucos respondentes da região norte do país.',
caption = paste0('Participantes que atuam no exterior: ',
respostas %>%
filter(Regiao == 'Fora do Brasil') %>%
nrow()))+
scale_fill_gradient(high = 'slategrey', low = 'slategray3')+
theme_map(font_size = 12)+
theme(plot.title.position = 'plot')
Cerca de 87% dos participantes do levantamento atuam no setor privado ou no meio acadêmico como graduandos ou pós-graduandos. Ao todo, tivemos a participação de dois professores do Ensino Superior, dois servidores públicos (exceto professores), cinco autônomos e quatro colegas que estão em busca de uma oportunidade de trabalho.
##########################
# Respostas por ocupação #
##########################
respostas %>%
group_by(Ocupacao) %>%
summarise(n = n()) %>%
mutate(n_rel = round(n/sum(n)*100),
Ocup_label = case_when(
Ocupacao == 'Acadêmico de graduação' ~ paste0('Graduando'),
Ocupacao == 'Acadêmico de pós-graduação' ~ paste0('Pós-Graduando'),
Ocupacao == 'Profissional autônomo' ~ paste0('Autônomo'),
Ocupacao == 'Profissional de instituição privada (exceto professor)' ~ paste0('Setor Privado'),
Ocupacao == 'Profissional de instituição pública (exceto professor)' ~ paste0('Servidor público'),
Ocupacao == 'Em busca de oportunidades' ~ paste0('Buscando oportunidade'),
TRUE ~ paste0('Professor do Ensino Superior')
)) %>%
mutate(Ocup_label = gsub('(.{1,20})(\\s|$)', '\\1\n', Ocup_label)) %>%
mutate(Ocup_label = paste0(Ocup_label,round(n_rel,1),'%')) %>%
arrange(-n) %>%
ggplot(aes(area = n, fill = n, label = Ocup_label))+
geom_treemap(show.legend = F, color = 'white')+
geom_treemap_text(colour = "gray20",
place = "centre",
size = 11)+
scale_fill_gradient(high = 'slategrey', low = 'slategray3')+
labs(title = 'Ocupação dos participantes',
subtitle = 'A maioria dos respondentes são profissionais que atuam em instituições privadas.\nAcadêmicos de graduação e da pós também tiverem expressiva participação.')+
theme_minimal_vgrid(font_size = 12)+
theme(axis.title = element_blank(),
plot.title.position = 'plot',
axis.text.x = element_blank(),
panel.grid.major = element_blank(),
axis.text.y = element_text(size = 10))
Quanto à frequência de utilização da linguagem R no trabalho/pesquisa/estudo, 37 participantes declararam utilizar o R frequentemente ou mesmo como principal ferramenta de tabalho. A classe de usuário mais expressiva foi a de usuários ocasionais, com 29 representantes. Seis colegas afirmaram nunca ter utilizado o R. Entendo que neste caso podem ser considerados usuários em potencial, uma vez que demonstraram interesse sobre o assunto.
################################
# Análise da frequência de uso #
################################
respostas %>%
group_by(FreqUso) %>%
summarise(n = n()) %>%
mutate(FreqUso = factor(FreqUso)) %>%
mutate(n_rel = n/sum(n)*100,
FreqUso = factor(FreqUso,
levels = unique(FreqUso)[c(2,1,5,4,3)],
labels = c('Nunca usou',
'Já teve contato, mas não aplica',
'Usa ocasionalmente',
'Usa frequentemente',
'Usa como principal ferramenta'),
ordered = T)) %>%
arrange(-n) %>%
mutate(fill = case_when(row_number()==1~'darkorange',
TRUE~paleta6[1])) %>%
arrange(FreqUso) %>%
ggplot()+
geom_bar(aes(x=FreqUso,y=n_rel, fill = fill), stat = 'identity')+
geom_text(aes(x=FreqUso, y=n_rel, label = paste0(round(n_rel,1),'%')), hjust = 1,nudge_y = -.5, color = 'black', size = 3)+
scale_x_discrete(limits = levels('FreqUso'))+
scale_y_continuous(expand = c(0,0))+
scale_fill_identity()+
coord_flip()+
labs(title = 'Frequência de utilização do R',
subtitle = 'A maioria dos respondentes afirmou utilizar o R ocasionalmente.\nUm a cada dez participantes utiliza a linguagem como principal ferramenta.')+
theme_minimal_vgrid(font_size = 12)+
theme(axis.title = element_blank(),
plot.title.position = 'plot',
axis.text.x = element_blank(),
axis.text.y = element_text(size = 10),
panel.grid.major = element_blank())
Ao todo 42 colegas declararam possuir domínio do R a nível básico. Considerei como básico o conhecimento necessário para rodar scripts prontos, carregar e salvar bases de dados, plotar e calcular estatísticas básicas. Dezenove participantes alegaram não possuir domínio nenhum sobre o R, sendo estre grupo formado por colegas que nunca utilizaram a linguagem ou já tiveram contato, mas não aplicam atualmente. Quatro dos 98 participantes indicaram ter um domínio mais avançado da linguagem, com conhecimentos em desenvolvimento de pacotes, aplicações e APIs, elaboração de relatórios automatizados e capacidade de extrair e utilizar de maneira automática dados “presos” ou mesmo “escondidos” na web por meio de webscrapping.
#############################################
# Respostas quanto ao nível de conhecimento #
#############################################
respostas %>%
group_by(NivelCon) %>%
summarise(n = n()) %>%
mutate(labels = gsub('(.{1,50})(\\s|$)', '\\1\n', NivelCon)) %>%
mutate(n_rel = n/sum(n)*100,
labels = factor(labels,
levels = unique(labels)[c(3,5,2,4,1)],
ordered = T)) %>%
arrange(-n) %>%
mutate(fill = case_when(row_number()==1~'darkorange',
TRUE~paleta6[1])) %>%
arrange(labels) %>%
ggplot()+
geom_bar(aes(x=labels,y=n_rel, fill = fill), stat = 'identity')+
geom_text(aes(x=labels, y=n_rel, label = paste0(round(n_rel,1),'%')), hjust = 1,nudge_y = -.5, size = 3, color = 'black')+
scale_x_discrete(limits = rev(levels('labels')))+
scale_y_continuous(expand = c(0,0))+
scale_fill_identity()+
coord_flip()+
labs(title = 'Nível de conhecimento na linguagem R',
subtitle = 'A maioria dos participantes declara ter conhecimentos básicos em R.')+
theme_minimal_vgrid(font_size = 12)+
theme(axis.title = element_blank(),
plot.title.position = 'plot',
axis.text.x = element_blank(),
panel.grid.major = element_blank(),
axis.text.y = element_text(size = 8))
Mais da metade dos participantes afirma utilizar (ou ter a intenção de utilizar) o R em rotinas de inventário florestal e modelagem do crescimento e produção.
Minha percepção é que o domínio de uma linguagem de programação e a capacidade de automatização de procedimentos de análise e processamento de dados tem sido não só um diferencial, mas por vezes, um requisito básico para atuação nas áreas de planejamento e de mensuração de empresas de base florestal. Estas empresas atualmente geram e consomem grandes quantidades de dados e informações, as vezes em curto espaço de tempo, para basear decisões nos âmbitos operacional, tático e estratégico.
##########################
# Sub areas de aplicação #
##########################
respostas %>%
mutate(SubArea = str_replace(SubArea,'colheita, ','colheita/')) %>%
separate_rows(SubArea, sep = ', ') %>%
mutate(SubArea = case_when(SubArea %in% c('Análises florísticas/fitossociológicas',
'SIG e geoprocessamento',
'Inventário florestal e modelagem do crescimento e da produção',
'Planejamento tático/estratégico',
'Análise experimental',
'Climatologia e monitoramento de incêndios',
'Operações florestais (colheita, estradas)',
'Silvicultura/Viveiros')~SubArea,
TRUE ~ 'Outras'
)) %>%
group_by(SubArea) %>%
summarise(n = n()) %>%
mutate(n_rel = n/nrow(respostas)*100,
labels = gsub('(.{1,25})(\\s|$)', '\\1\n', SubArea)) %>%
mutate(labels = reorder(labels, n)) %>%
arrange(-n) %>%
mutate(fill = case_when(row_number()==1~'darkorange',
TRUE~paleta6[1])) %>%
ggplot(aes(area = n, fill = n, label = labels))+
geom_bar(aes(x=labels,y=n_rel, fill = fill), stat = 'identity')+
geom_text(aes(x=labels, y=n_rel, label = paste0(round(n_rel,1),'%')), hjust = 1,nudge_y = -.5, color = 'black',
size = 3)+
scale_x_discrete(limits = rev(levels('labels')))+
scale_y_continuous(expand = c(0,0))+
scale_fill_identity()+
annotate('text',x=4, y=18,hjust=0,size=3,
label = 'Outras áreas citadas: Anatomia da madeira, Dendrocronologia, Economia,\nEcofisiologia, Controle de produção e Melhoramento e Biotecnologia Florestal')+
coord_flip()+
labs(title = 'Aplicação da linguagem R nas sub-áreas da Engenharia Florestal',
subtitle = 'As principal área de aplicação é a de inventário / mensuração florestal.\nGeoprocessamento e análise experimental também estão entre as principais.')+
theme_minimal_vgrid(font_size = 12)+
theme(axis.title = element_blank(),
plot.title.position = 'plot',
axis.text.x = element_blank(),
panel.grid.major = element_blank(),
axis.text.y = element_text(size = 9))
A cada dez participantes do levantamento, quatro afirmaram ter dificuldades em aprender a programar. Isso é compreensível já que na formação do engenheiro florestal não há um enfoque para o desenvolvimento de habilidades de programação, visto que nossa área de atuação é bastante ampla e para muitos a rotina de campo é mais frequente que a de escritório.
Há uma tendência cada vez maior da utilização do R em algumas disciplinas que trabalham com dados, ou mesmo a inclusão de disciplinas específicas para desenvolvimento dessas habilidades nos cursos de graduação e pós-graduação.
Independente da existência de disciplinas específicas na grade currícular, o aprendizado de uma linguagem de programação é similar ao aprendizado de um idioma, e se dá pelo estudo, prática, e constância de utilização. O autodidatismo é outra característica importante para quem busca se desenvolver nesta área.
###########################
# Principais dificuldades #
###########################
outras_dificuldades <- str_replace_all(respostas$Dificuldades,
'Não tenho tempo/empenho|Tenho dificuldade com programação|Não encontro material didático disponível sobre linguagem R aplicada a área florestal|Não encontro cursos de R voltados à área florestal|Não sinto dificuldade|',
'') %>% as_tibble() %>%
mutate(value = case_when(nchar(value)>6~value,
TRUE ~ NA_character_)) %>%
drop_na() %>% nrow()
tempoempenho <- grep('Não tenho tempo/empenho',respostas$Dificuldades) %>% length()
programacao <- grep('Tenho dificuldade com programação',respostas$Dificuldades) %>% length()
matdidatico <- grep('Não encontro material didático disponível sobre linguagem R aplicada a área florestal',respostas$Dificuldades) %>% length()
cursos <- grep('Não encontro cursos de R voltados à área florestal',respostas$Dificuldades) %>% length()
nao <- grep('Não sinto dificuldade',respostas$Dificuldades) %>% length()
tibble(Dificuldade = c('Não tenho tempo/empenho',
'Tenho dificuldade com programação',
'Não encontro material didático disponível sobre linguagem R aplicada a área florestal',
'Não encontro cursos de R voltados à área florestal',
'Não sinto dificuldade',
'Outras'),
n = c(tempoempenho, programacao, matdidatico, cursos, nao, outras_dificuldades)) %>%
mutate(n_rel = n/nrow(respostas)*100,
labels = gsub('(.{1,30})(\\s|$)', '\\1\n', Dificuldade)) %>%
mutate(labels = reorder(labels, n)) %>%
arrange(-n) %>%
mutate(fill = case_when(row_number()==1~'darkorange',
TRUE~paleta6[1])) %>%
ggplot(aes(area = n, fill = n, label = labels))+
geom_bar(aes(x=labels,y=n_rel, fill = fill), stat = 'identity')+
geom_text(aes(x=labels, y=n_rel, label = paste0(round(n_rel,1),'%')), hjust = 1,nudge_y = -.5, color = 'black', size = 3)+
annotate('text',x=1, y=7,hjust=0,label = 'Outras dificuldades apontadas se referem à aplicação da linguagem no ambiente corporativo\nquando a ferramenta dominante é outra, deficiência em conhecimentos estatísticos e\nlíngua inglesa, falta de prática e alterações frequentes de versões de pacotes.',
size=3)+
scale_x_discrete(limits = rev(levels('labels')))+
scale_y_continuous(expand = c(0,0))+
scale_fill_identity()+
coord_flip()+
labs(title = 'Principais dificuldades no aprendizado da linguagem R',
subtitle = 'A principal dificuldade apontada pelos participantes se refere à pratica de programação.\nFalta de tempo e/ou empenho também é uma das principais dificuldades apontadas.')+
theme_minimal_vgrid(font_size = 12)+
theme(axis.title = element_blank(),
plot.title.position = 'plot',
axis.text.x = element_blank(),
panel.grid.major = element_blank(),
axis.text.y = element_text(size = 9))
A comunidade R é bastante ampla e existe muito material disponível na internet para apoiar o aprendizado. Aqui no blog procuro compartilhar um pouco do que desenvolvo e que se aplica à área florestal. A maior parte do que aprendi a fazer no R veio de exemplos compartilhados na internet que na maioria das vezes não eram florestais. Foi o estudo, a prática e a constância de utilização que me permitiram direcionar o que aprendi (e continuo aprendendo) de maneira dispersa, ao desenvolvimento de soluções para os problemas que preciso atacar no meu trabalho diário - florestal.
Bom, cumpro aqui meu combinado de disponibilizar os resultados e códigos de análise do formulário. Deixo meu obrigado à todos os colegas que responderam o questionário. Até a próxima!