Este documento apresenta uma análise exploratória de dados e discussões acerca do acesso de estudantes de escolas públicas do Ceará à internet em suas respectivas instituições de ensino. Este trabalho é um requisito para aprovação na disciplina de Fundamentos de Estatística da Universidade de Fortaleza, no âmbito do curso de Inteligência Artificial.
Autor: Pedro Florencio de Almeida Neto | Cientista de Dados
Objetivo Geral:
Objetivos Específicos:
Perguntas Norteadoras:
Qual o percentual de escolas municipais, estaduais e federais no Estado do Ceará?
Qual o percentual de escolas rurais e urbanas no Estado?
Qual o panorama das escolas que tem laboratório de informática no Ceará?
# install.packages("readxl")
# install.packages("leaflet")
# install.packages("echarts4r")
# install.packages("BAMMtools")
Os dados foram baixados de . O script “01-filtra-base-ceara.R” é responsável por
df <- read_excel('data/processed-data/base_ceara_validada.xlsx')
df <- df[!is.na(df$escolar_co_municipio), ]
head(df)
## # A tibble: 6 × 59
## escolar_co_entidade escolar_nu_ano_censo escolar_no_entidade
## <dbl> <dbl> <chr>
## 1 23000465 2024 JOAO LOURENCO PEREIRA ROCHA EEIEF
## 2 23000660 2024 MARIA NAZARE VIANA EEIEF
## 3 23000708 2024 HIGINO DE SOUZA BRANDAO EEIEF
## 4 23001119 2024 RAIMUNDO ROSA DO NASCIMENTO EEIEF
## 5 23003014 2024 MURILO ROCHA AGUIAR EEF DEP
## 6 23003359 2024 ANTONIO TEIXEIRA DE FRANCA EEF
## # ℹ 56 more variables: escolar_tp_situacao_funcionamento <chr>,
## # escolar_co_uf <dbl>, escolar_co_municipio <dbl>, escolar_co_distrito <dbl>,
## # escolar_tp_dependencia <chr>, escolar_tp_localizacao <chr>,
## # escolar_qt_desktop_aluno <dbl>, escolar_qt_comp_portatil_aluno <dbl>,
## # escolar_qt_tablet_aluno <dbl>, escolar_in_laboratorio_informatica <chr>,
## # escolar_in_internet <chr>, escolar_in_internet_alunos <chr>,
## # escolar_in_internet_aprendizagem <chr>, escolar_tp_rede_local <chr>, …
# quantidade de codigos de municipio ausentes
sum(is.na(df$escolar_co_municipio))
## [1] 0
# selecao das colunas necessarias
cols <- c("escolar_co_entidade", "escolar_no_entidade", "escolar_tp_dependencia")
df_dependencias <- df %>% select(all_of(cols))
# valores absolutos
df_freq <- as.data.frame(table(df_dependencias$escolar_tp_dependencia))
colnames(df_freq) <- c("TP_DEPENDENCIA","QUANTIDADE")
# percentual
df_freq$PERCENTUAL <- round(df_freq$QUANTIDADE/sum(df_freq$QUANTIDADE), 2)
# visualizacao
df_freq %>%
e_charts(TP_DEPENDENCIA) %>%
e_pie(
QUANTIDADE,
radius = c("45%", "75%"),
label = list(
show = TRUE,
position = "outside",
formatter = "{d}%",
fontSize = 12,
color = "black"
)
) %>%
e_legend(right = "25%") %>%
e_title(
text = "Gráfico 01: Dependência Administrativa das Escolas Públicas do Ceará",
textStyle = list(
color = "black",
fontSize = 14
)) %>%
e_theme("macarons")
Observa-se uma predominância da quantidade de escolas municipais, isto é, de educação básica no estado do Ceará. Pode-se ressaltar que o número total de instituições não reflete necessariamente um alta taxa de escolarização, necessitando portanto de uma análise do número de matriculados em cada dependência administrativa no Estado.
# colunas necessarias
cols_necessary <- c('escolar_co_entidade',
'escolar_co_entidade',
'nm_municipio',
'escolar_tp_localizacao')
df_localizacao <- df %>% select(all_of(cols_necessary))
head(df_localizacao)
## # A tibble: 6 × 3
## escolar_co_entidade nm_municipio escolar_tp_localizacao
## <dbl> <chr> <chr>
## 1 23000465 ACARAÚ Rural
## 2 23000660 ACARAÚ Rural
## 3 23000708 ACARAÚ Urbana
## 4 23001119 ACARAÚ Rural
## 5 23003014 CAMOCIM Urbana
## 6 23003359 CAMOCIM Rural
# valores absolutos
df_freq_loc <- as.data.frame(table(df_localizacao$escolar_tp_localizacao))
colnames(df_freq_loc) <- c("TP_LOCALIZACAO","QUANTIDADE")
df_freq_loc
## TP_LOCALIZACAO QUANTIDADE
## 1 Rural 2509
## 2 Urbana 3462
df_freq_loc %>%
e_charts(TP_LOCALIZACAO) %>%
e_bar(QUANTIDADE, name = "Área da instituição") %>%
e_labels(show = TRUE) %>%
e_title(text='Gráfico 02: Localização das Escolas Cearenses',
textStyle = list(color = "black", fontSize = 14)) %>%
e_theme('macarons')
Há uma predominância de escolas em zona urbana, embora, a quantidade de instituições em zonas rurais apresenta-se com um valor relevante.
Adicionando dataframe com os limites do Estado do Ceará
gdf_ceara <- st_read('data/processed-data/limites_ceara.geojson')
## Reading layer `limites_ceara' from data source
## `/Users/pedroflorencio/Documents/conecta-ceara/data/processed-data/limites_ceara.geojson'
## using driver `GeoJSON'
## Simple feature collection with 184 features and 6 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: -41.42352 ymin: -7.858182 xmax: -37.25329 ymax: -2.784323
## Geodetic CRS: WGS 84
Selecionando as colunas necessárias
cols_join <- c('escolar_no_entidade',
'escolar_co_municipio',
'nm_municipio',
'escolar_tp_localizacao',
'escolar_in_laboratorio_informatica',
'escolar_in_internet',
'escolar_tp_rede_local',
'escolar_tipo_tecnologia',
'escolar_in_internet_alunos',
'escolar_in_internet_aprendizagem')
df_filtered <- df %>% select(all_of(cols_join))
# substituindo coluna por variavel booleana
df_filtered <- df_filtered %>%
mutate(escolar_in_laboratorio_informatica = ifelse(escolar_in_laboratorio_informatica == "Sim", 1, 0))
# agrupando por municipio e somando a quantidade de laboratorios de informatica
df_filtered <- df_filtered %>%
group_by(escolar_co_municipio) %>%
summarise(
quantidade_escolas_laboratorios = sum(escolar_in_laboratorio_informatica),
quantidade_escolas = n())
Adicionando coluna com os valores relativos de escolas que contêm laboratórios de informática
df_filtered <- mutate(df_filtered,
percentual_laboratorio = quantidade_escolas_laboratorios / quantidade_escolas)
Adicionando a coluna geometry no dataframe df_filtered
# padronizando tipo dos IDs dos municipios
df_filtered$escolar_co_municipio <- as.character(df_filtered$escolar_co_municipio)
df_join <- gdf_ceara %>%
left_join(df_filtered, by = c("codigo_ibge"="escolar_co_municipio"))
dim(df_join)
## [1] 184 10
Mapa Coroplético do Percentual de Laboratórios nas Cearenses
A definição de quantidade de categorias seguiu-se a regra de Freedman-Diaconis1, em que:
\[ w = 2*IQR*n^{-\frac{1}{3}} \]
\[ k = \frac{max-min}{w} \]
Onde:
IQR: amplitude interquartil
n: número de observações
k: quantidade de categorias (bins)
Para escolha dos valores que limitam cada categoria, adotou-se o método Jenks-Caspall.
Q1 <- quantile(df_join$percentual_laboratorio, probs = 0.25)
Q2 <- quantile(df_join$percentual_laboratorio, probs = 0.50)
Q3 <- quantile(df_join$percentual_laboratorio, probs = 0.75)
IQR <- (Q3-Q1)
IQR
## 75%
## 0.1794872
n = nrow(df_join)
n
## [1] 184
w = 2*IQR*(n**(-1/3))
w
## 75%
## 0.06311377
min = min(df_join$percentual_laboratorio)
max = max(df_join$percentual_laboratorio)
k = (max - min)/w
k
## 75%
## 15.01049
15 classes serão adotadas.
Aplicando o algoritmo de Jenks-Caspall, temos:
categories <- getJenksBreaks(df_join$percentual_laboratorio, 15)
categories
## [1] 0.05263158 0.10000000 0.14285714 0.18750000 0.22916667 0.27272727
## [7] 0.30434783 0.33333333 0.39130435 0.45555556 0.54166667 0.64285714
## [13] 0.71457490 0.80357143 1.00000000
Visualização do mapa
# bins <- categories
bins <- 5 # Natural Breaks (Intervalos iguais)
pal <- colorRampPalette(brewer.pal(9, "YlOrRd"))(15)
pal_fun <- colorBin(
palette = pal,
domain = df_join$percentual_laboratorio,
bins = 5,
na.color = "transparent"
)
labels <- sprintf(
"<strong>%s</strong><br/>%.1f%%",
df_join$municipio, df_join$percentual_laboratorio*100
) %>% lapply(htmltools::HTML)
m <- leaflet(df_join) %>%
setView(lng = -39.5, lat = -5.2, zoom = 6) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(
fillColor = ~pal_fun(percentual_laboratorio),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.7,
highlightOptions = highlightOptions(
weight = 5,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE),
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto")) %>%
addLegend(pal = pal_fun, values = ~percentual_laboratorio, opacity = 0.7, title = "Percentuais", position = "bottomright")
m