dados = read_csv(
here::here("data/participation-per-country.csv"),
col_types = cols(
.default = col_double(),
site = col_character(),
country = col_character(),
geo = col_character(),
four_regions = col_character(),
eight_regions = col_character(),
six_regions = col_character(),
`World bank income group 2017` = col_character()
)
) %>%
filter(usuarios > 200)
glimpse(dados)
## Rows: 121
## Columns: 21
## $ site <chr> "StackOverflow", "StackOverflow", "Stac…
## $ country <chr> "Argentina", "Australia", "Austria", "B…
## $ PDI <dbl> 49, 36, 11, 80, 65, 69, 70, 39, 63, 80,…
## $ IDV <dbl> 46, 90, 55, 20, 75, 38, 30, 80, 23, 20,…
## $ MAS <dbl> 56, 61, 79, 55, 54, 49, 40, 52, 28, 66,…
## $ UAI <dbl> 86, 51, 70, 60, 94, 76, 85, 48, 86, 30,…
## $ usuarios <dbl> 2798, 12313, 2518, 2558, 4275, 10717, 1…
## $ responderam_prop <dbl> 0.5357398, 0.6133355, 0.6310564, 0.3928…
## $ perguntaram_prop <dbl> 0.5210865, 0.5897832, 0.5933280, 0.4757…
## $ editaram_prop <dbl> 0.09256612, 0.14699911, 0.14932486, 0.0…
## $ comentaram_prop <dbl> 0.25339528, 0.33395598, 0.35027800, 0.1…
## $ GNI <dbl> NA, 59570, 48160, 840, 44990, 11630, 68…
## $ Internet <dbl> 51.0, 79.5, 79.8, 5.0, 78.0, 45.0, 51.0…
## $ EPI <dbl> 59.02, NA, 63.21, NA, 61.21, 49.96, NA,…
## $ geo <chr> "arg", "aus", "aut", "bgd", "bel", "bra…
## $ four_regions <chr> "americas", "asia", "europe", "asia", "…
## $ eight_regions <chr> "america_south", "east_asia_pacific", "…
## $ six_regions <chr> "america", "east_asia_pacific", "europe…
## $ Latitude <dbl> -34.00000, -25.00000, 47.33333, 24.0000…
## $ Longitude <dbl> -64.00000, 135.00000, 13.33333, 90.0000…
## $ `World bank income group 2017` <chr> "Upper middle income", "High income", "…
Estamos interessados na relação entre quanto as pessoas de diferentes
paÃses comentam em questões dos outros. A proporção das pessoas do paÃs
que comentou nas questões de outros está medido na variável
comentaram_prop.
Considerando essa variável, queremos examinar a relação entre ela e o
quão hierárquicas são as relações em um paÃs (PDI).
Queremos também levar em conta o quanto as pessoas daquele paÃs têm
acesso à Internet (Internet) e qual o tamanho da base de
dados que detectamos daquele paÃs (usuarios).
Faça uma visualização que usa os princÃpios de eficácia no projeto de visualizações para facilitar as comparações que você acha que são as mais importantes para entendermos esse contexto.
Os gráficos a seguir apresentam a relação entre as pessoas de
diferentes paÃses que comentam em questões de outros
(comentaram_prop) e o quão hierárquicas são as relações do
pais (PDI), assim como a quantidade de usuários na base de
dados de cada paÃs e a proporção da população com acesso a Internet. Os
gráficos 1 e 2 apresentam uma visão geral dos dados em mapa, utilizando
os principios de eficácia, com intensidade de cor representando um dado
e o tamanho dos pontos representando outro. Os gráficos 3 e 4 sintetizam
algumas das informações apresentadas em mapas, mostrando o top 20 dos
paÃses com relação a uma das variáveis em análise.
No gráfico 1 é possÃvel identificar facilmente pontos com mesmo tamanho e intensidade de cores diferentes, o que já mostra de antemão a relação fraca entre as variáveis apresentadas, o que foi confirmado pelo coeficiente de correlação de Spearman (0.61). Os gráficos 2 e 4 apresentam informações relacionadas ao número de usuários e o acesso a Internet, onde podemos notar que não podemos tomar conclusões precipitadas quanto a relação percebida em um paÃs especifico. Observando o sul da América do Sul observamos três paÃses com uma grande relação de pessoas que comentam em assuntos exteriores e com PDI alto, mas com uma base de dados e acesso a internet menores, dissonante da Austrália, por exemplo, que apresenta uma grande relação de pessoas que comentam em assuntos exteriores e com PDI baixo, mas com base de dados e acesso a internet maiores.
Foi utilizada a exponencial para apresentar comentaram_prop no gráfico 1, enfatizando a diferença de tamanho entre os pontos.
world <- ne_countries(scale = "medium", returnclass = "sf")
grouped_data <- dados %>% group_by(country) %>%
summarise(
PDI = mean(PDI, na.rm = TRUE),
comentaram_prop = mean(comentaram_prop, na.rm = TRUE),
Internet = mean(Internet, na.rm = TRUE),
usuarios = sum(usuarios, na.rm = TRUE),
Latitude = mean(Latitude, na.rm = TRUE),
Longitude = mean(Longitude, na.rm = TRUE),
six_regions = six_regions[1]
) %>%
arrange(desc(comentaram_prop))
correlation <- cor(grouped_data$PDI, grouped_data$comentaram_prop, method = "spearman")
plot1 <- ggplot(data = world) +
geom_sf() +
geom_point(data = grouped_data, aes(x = Longitude, y = Latitude, size = exp(comentaram_prop), fill = PDI), alpha = .8, pch = 21) +
ggtitle("1. Relação \"comentaram_prop\" e PDI") +
theme_minimal() +
scale_fill_gradient(low = "lightgreen", high = "darkgreen") +
labs(fill = "Hierarquia das relações do pais (PDI)", size = "\"comentaram_prop\" (Log)") +
coord_sf(
xlim = range(grouped_data$Longitude, na.rm = TRUE),
ylim = range(grouped_data$Latitude, na.rm = TRUE)
) +
theme(
legend.position = "bottom",
legend.box = "vertical",
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()
) +
annotate("text", x = -Inf, y = -Inf, label = paste("Correlação (Spearman):", round(correlation, 2)), hjust = -0.7, vjust = 0)
plot2 <- ggplot(data = world) +
geom_sf() +
geom_point(data = grouped_data, aes(x = Longitude, y = Latitude, size = usuarios, fill = Internet), alpha = .8, pch = 21) +
ggtitle("2. Acesso a internet e número de usuários") +
scale_fill_gradient(low = "lightcyan", high = "darkcyan") +
theme_minimal() +
labs(fill = "Internet (proporção)", size = "Usuários") +
coord_sf(
xlim = range(grouped_data$Longitude, na.rm = TRUE),
ylim = range(grouped_data$Latitude, na.rm = TRUE)
) +
theme(
legend.position = "bottom",
legend.box = "vertical",
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()
)
plot3 <- grouped_data %>% head(20) %>%
ggplot(aes(fill = PDI, x = comentaram_prop, y = reorder(country, comentaram_prop))) +
ggtitle("3. \"comentaram_prop\": TOP 20 PaÃses") +
geom_bar(stat = "identity") +
scale_fill_gradient(low = "lightgreen", high = "darkgreen") +
labs(y = "")
plot4 <- grouped_data %>% head(20) %>%
ggplot(aes(fill = Internet, x = usuarios, y = reorder(country, usuarios))) +
ggtitle("4. Usuários na base dados: TOP 20 PaÃses") +
geom_bar(stat = "identity") +
scale_fill_gradient(low = "lightcyan", high = "darkcyan") +
labs(y = "")
grid.arrange(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2)
Em seguida, faça 5 visualizações que usem as mesmas variáveis e também pontos, mas que sejam menos eficazes que a que você escolheu acima.
Apresentar um gráfico comentaram_prop x PDI, facilita visualizar a relação entre as variáveis mas dificulta apresentar a informação dos paÃses, o que poluiria bastante o gráfico.
grouped_data %>%
ggplot(aes(
x = PDI,
y = comentaram_prop,
color = Internet,
size = log10(usuarios)
)) +
geom_point(alpha = .7) +
geom_text(
aes(label = country),
vjust = 0, hjust = 0,
color = "black", size=3
) +
labs(
x = "Hierarquia das relações do pais (PDI)",
y = "Pessoas que comentam questões exteriores (Proporção)",
color = "Acesso a Internet",
size = "Base de dados (log10)"
) +
annotate("text", x = -Inf, y = -Inf, label = paste("Correlação (Spearman):", round(correlation, 2)), hjust = -0.1, vjust = -1) +
ggtitle("comentaram_prop x PDI (Visualização ruim 1)")
Gráfico de pizza. Além de ser impossÃvel de visualizar uma grande quantidade de categorias, mesmo apresentando o top 8 ainda fica inviável realizar qualquer tipo de comparação.
plot1 <- grouped_data %>% head(8) %>% mutate(prop = 100*comentaram_prop / sum(comentaram_prop)) %>% mutate(ypos = cumsum(prop)- 0.5*prop ) %>%
ggplot(aes(x="", y=prop, fill=country)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() +
scale_fill_brewer(palette="Set1") +
ggtitle("comentaram_prop")
plot2 <- grouped_data %>% head(8) %>% mutate(prop = 100*PDI / sum(PDI)) %>% mutate(ypos = cumsum(prop)- 0.5*prop ) %>%
ggplot(aes(x="", y=prop, fill=country)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() +
scale_fill_brewer(palette="Set1") +
ggtitle("PDI")
plot3 <- grouped_data %>% head(8) %>% mutate(prop = 100*usuarios / sum(usuarios)) %>% mutate(ypos = cumsum(prop)- 0.1*prop ) %>%
ggplot(aes(x="", y=prop, fill=country)) +
geom_bar(stat="identity", width=1, color="white") +
coord_polar("y", start=0) +
theme_void() +
scale_fill_brewer(palette="Set1") +
ggtitle("Usuarios")
plot4 <- grouped_data %>% head(8) %>% mutate(prop = 100*Internet / sum(Internet)) %>% mutate(ypos = cumsum(prop)- 0.1*prop ) %>%
ggplot(aes(x="", y=prop, fill=country)) +
geom_bar(stat="identity", width=1) +
coord_polar("y", start=0) +
theme_void() +
scale_fill_brewer(palette="Set3") +
ggtitle("Internet")
grid.arrange(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2)
Um pouco melhor do que o gráfico de pizza para realizar comparações, mas ainda assim não é eficaz, não permitindo identificar informações importantes a primeira vista. É ruim também para apresentar informações de uma grande quantidade de categorias.
plot1 <- grouped_data %>% head(30) %>% ggplot(aes(x = country, y = comentaram_prop, fill=PDI)) +
geom_bar(stat = "identity") +
scale_fill_gradient(low = "lightgreen", high = "darkgreen") +
coord_polar(theta = "x") +
labs(title = "comentaram_prop")
plot2 <- grouped_data %>% head(30) %>% ggplot(aes(x = country, y = log(usuarios), fill=Internet)) +
geom_bar(stat = "identity") +
scale_fill_gradient(low = "lightcyan", high = "darkcyan") +
coord_polar(theta = "x") +
labs(title = "Usuários")
grid.arrange(plot1, plot2, ncol = 2)
Mesmo gráfico apresentado na visualização ruim 1, mas com limites exagerados no eixo y, ocultando a relação entre as variáveis.
grouped_data %>%
ggplot(aes(
x = PDI,
y = comentaram_prop,
color = Internet,
size = log10(usuarios)
)) +
geom_point(alpha = .7) +
labs(
x = "Hierarquia das relações do pais (PDI)",
y = "Pessoas que comentam questões exteriores (Proporção)",
color = "Acesso a Internet",
size = "Base de dados (log10)"
) +
annotate("text", x = -Inf, y = -Inf, label = paste("Correlação (Spearman):", round(correlation, 2)), hjust = -0.1, vjust = -1) +
ggtitle("comentaram_prop x PDI (Visualização ruim 4)") +
coord_cartesian(xlim = c(0, 110), ylim = c(-1, 1)) # Adjust x and y limits
Semelhante a visualização ruim 1, mas usa tamanhos de passo (do inglês step size) incomuns, a exemplo do número primo 7, dificultando a leitura do gráfico para estimativa de pontos que não estejam alinhados com os passos.
grouped_data %>%
ggplot(aes(
x = PDI,
y = comentaram_prop,
color = Internet,
size = log10(usuarios)
)) +
geom_point(alpha = .7) +
labs(
x = "Hierarquia das relações do pais (PDI)",
y = "Pessoas que comentam questões exteriores (Proporção)",
color = "Acesso a Internet",
size = "Base de dados (log10)"
) +
annotate("text", x = -Inf, y = -Inf, label = paste("Correlação (Spearman):", round(correlation, 2)), hjust = -0.1, vjust = -1) +
ggtitle("comentaram_prop x PDI (Visualização ruim 5)") +
scale_y_continuous(breaks = seq(0, 1, by = 0.07))
Inclua o continente dos paÃses (six_regions) na
visualização.
Como a informação de continente só possui 6 valores possÃveis, podemos representa-la utilizando formatos diferentes para os pontos:
plot1 <- ggplot(data = world) +
geom_sf() +
geom_point(data = grouped_data, aes(x = Longitude, y = Latitude, size = exp(comentaram_prop), fill = PDI, shape=six_regions), alpha = .8) +
ggtitle("1. Relação \"comentaram_prop\" e PDI") +
scale_shape_manual(values = c("america" = 21, "east_asia_pacific" = 22, "europe_central_asia" = 23, "middle_east_north_africa" = 24, "sub_saharan_africa" = 25, "NA" = 26)) +
theme_minimal() +
scale_fill_gradient(low = "lightgreen", high = "darkgreen") +
labs(fill = "Hierarquia das relações do pais (PDI)", size = "\"comentaram_prop\" (Exponencial)", shape = "Continente") +
coord_sf(
xlim = range(grouped_data$Longitude, na.rm = TRUE),
ylim = range(grouped_data$Latitude, na.rm = TRUE)
) +
theme(
legend.position = "bottom",
legend.box = "vertical",
legend.key.size = unit(0.5, "cm"),
legend.text = element_text(size = 8),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()
) +
annotate("text", x = -Inf, y = -Inf, label = paste("Correlação (Spearman):", round(correlation, 2)), hjust = -0.6, vjust = -0.1, size = 3)
plot2 <- ggplot(data = world) +
geom_sf() +
geom_point(data = grouped_data, aes(x = Longitude, y = Latitude, size = usuarios, fill = Internet, shape=six_regions), alpha = .8) +
ggtitle("2. Acesso a internet e número de usuários") +
scale_fill_gradient(low = "lightcyan", high = "darkcyan") +
scale_shape_manual(values = c("america" = 21, "east_asia_pacific" = 22, "europe_central_asia" = 23, "middle_east_north_africa" = 24, "sub_saharan_africa" = 25, "NA" = 26)) +
theme_minimal() +
labs(fill = "Internet (proporção)", size = "Usuários", shape = "Continente") +
coord_sf(
xlim = range(grouped_data$Longitude, na.rm = TRUE),
ylim = range(grouped_data$Latitude, na.rm = TRUE)
) +
theme(
legend.position = "bottom",
legend.box = "vertical",
legend.key.size = unit(0.5, "cm"),
legend.text = element_text(size = 8),
axis.text = element_blank(),
axis.ticks = element_blank(),
axis.title = element_blank()
)
plot3 <- grouped_data %>% head(20) %>%
ggplot(aes(fill = PDI, x = comentaram_prop, y = reorder(country, comentaram_prop))) +
ggtitle("3. \"comentaram_prop\": TOP 20 PaÃses") +
geom_bar(stat = "identity") +
scale_fill_gradient(low = "lightgreen", high = "darkgreen") +
labs(y = "")
plot4 <- grouped_data %>% head(20) %>%
ggplot(aes(fill = Internet, x = usuarios, y = reorder(country, usuarios))) +
ggtitle("4. Usuários na base dados: TOP 20 PaÃses") +
geom_bar(stat = "identity") +
scale_fill_gradient(low = "lightcyan", high = "darkcyan") +
labs(y = "")
grid.arrange(plot1, plot2, plot3, plot4, nrow = 2, ncol = 2)