Carregar pacotes antes de começar a explorar dados no R, as bibliotecas que fornecem funções e ferramentas para realizar diversas tarefas, como importar e exportar dados, realizar análises estatísticas, criar gráficos, entre outras.

theme_set(theme_bw())

knitr::opts_chunk$set(tidy = FALSE,
                      fig.width = 6,
                      fig.height = 5)

Leitura da Base de Dados

Vamos ler a base para poder ter uma visão ampla dos dados relacionados considerando os países com mais de 200 usuários.

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).

Examinando essa relação

dados %>%
  ggplot(aes(x = IDV, y = responderam_prop, color = responderam_prop)) +
  geom_point() +
  xlab("IDV") +
  ylab("Proporção de Respostas") +
  scale_color_gradient(low = "blue", high = "red") +
  ggtitle("Relação entre IDV e Proporção de Respostas")

Relação entre IDV e Proporção de Respostas: uma tendência ou padrão visível nos pontos, países com um valor mais alto de IDV tendem a ter uma proporção maior ou menor de respostas

ggplot(dados, aes(x = PDI, y = comentaram_prop)) +
  geom_point() +
  xlab("Índice de Hierarquia (PDI)") +
  ylab("Proporção de Comentários") +
  ggtitle("Relação entre PDI e Proporção de Comentários")

Gráfico de Dispersão: Para analisar a relação entre comentaram_prop e PDI, ao analisar o gráfico resultante possíveis outliers aparente que pode influenciar a proporção de comentários. Portanto, observe-se uma tendência visível países com índice de hieraquia mais alto (PDI alto) tendem a ter uma maior e menor proporção de comentários.

ggplot(dados, aes(x = Internet, y = comentaram_prop, fill = Internet)) +
  geom_bar(stat = "identity", position = "dodge") +
  xlab("Acesso à Internet") +
  ylab("Proporção de Comentários") +
  ggtitle("Relação entre Acesso à Internet e Proporção de Comentários")
## Warning: Removed 3 rows containing missing values (`geom_bar()`).

Podemos observar que Países com acesso à Internet mais amplo tendem a ter uma proporção maior de comentários em comparação com países com acesso limitado.

library(ggplot2)

ggplot(dados, aes(x = usuarios, y = comentaram_prop, fill = usuarios)) +
  geom_point(shape = 21, size = 4) +
  xlab("Tamanho da Base de Dados") +
  ylab("Proporção de Comentários") +
  scale_x_continuous(labels = scales::comma) +
  scale_fill_continuous(low = "blue", high = "red") +
  ggtitle("Relação entre Tamanho da Base de Dados e Proporção de Comentários")

Com base nessa visualização, podemos tirar algumas conclusões. Por exemplo: Países com mais usuarios na base de dados tendem a ter uma proporção maior de comentários em relação aos outros países.

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.

library(ggplot2)
library(dplyr)

dados_agrupados <- dados %>%
  group_by(eight_regions, site) %>%
  summarize(prop_comentaram = mean(comentaram_prop, na.rm = TRUE), .groups = "drop")

ggplot(dados_agrupados, aes(x = eight_regions, y = prop_comentaram, fill = site)) +
  geom_bar(stat = "identity", position = "dodge") +
  xlab("Continente") +
  ylab("Proporção de Comentários") +
  scale_fill_manual(values = c("#FF7F00", "#1F78B4", "#33A02C", "#E31A1C")) +
  ggtitle("Proporção de Comentários por Continente e Site") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

Com base na visualização, podemos observar a proporção de comentários em cada continente, diferenciando os sites StackOverflow (representado pela cor laranja) e SuperUser (representado pela cor azul). Cada barra representa um continente, e a altura da barra indica a proporção média de comentários em relação ao total de usuários para cada site. A presença de “NA” na última posição do eixo x indica que há uma categoria de dados não identificada ou não disponível no ponto específico.

Outras formas de ver

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.

ggplot(dados, aes(x = PDI, y = comentaram_prop, color = six_regions)) +
  geom_point() +
  xlab("Índice de Hierarquia (PDI)") +
  ylab("Proporção de Comentários") +
  ggtitle("Relação entre PDI e Proporção de Comentários") +
  scale_color_manual(values = c("red", "blue", "green", "orange", "purple", "yellow"))

dados_selec = subset(dados, select = c(site, country, PDI, usuarios, comentaram_prop, Internet, four_regions, eight_regions, six_regions))

dados_selec = na.omit(dados_selec)

dados_selec %>%
  ggplot(aes(x = comentaram_prop,
             y = log10(usuarios),
             color = six_regions,
             size = Internet)) +
  geom_point(shape = 16, fill = "lightblue") +
  labs(x = "Proporção de Comentários", y = "Log10(Usuários)", color = "Regiões") +
  theme(legend.position = "right")

Vamos remover colunas desnecessárias para simplificar a análise, reduzindo a quantidade de informações a serem consideradas o objetivo de trabalhar com um conjunto de dados mais limpo e completo.

# Filtrar os dados apenas para StackOverflow
so_data <- dados_selec[dados_selec$site == "StackOverflow", ]

# Filtrar os dados apenas para SuperUser
su_data <- dados_selec[dados_selec$site == "SuperUser", ]

# Gráfico para StackOverflow
p1 <- ggplot(so_data, aes(x = comentaram_prop, y = log10(usuarios), color = six_regions, size = Internet)) +
  geom_point(shape = 16, fill = "lightblue") +
  labs(x = "Proporção de Comentários", y = "Log10(Usuários)", color = "Regiões") +
  ggtitle("StackOverflow")

# Gráfico para SuperUser
p2 <- ggplot(su_data, aes(x = comentaram_prop, y = log10(usuarios), color = six_regions, size = Internet)) +
  geom_point(shape = 16, fill = "lightblue") +
  labs(x = "Proporção de Comentários", y = "Log10(Usuários)", color = "Regiões") +
  ggtitle("SuperUser")

# Exibir os gráficos lado a lado
grid.arrange(p1, p2, ncol = 2)

Os gráficos lado a lado mostram a relação entre a proporção de comentários e o logaritmo (base 10) do número de usuários nos sites StackOverflow e SuperUser.

No gráfico do StackOverflow, podemos observar como a proporção de comentários varia em relação ao número de usuários nos diferentes países. A cor dos pontos indica a região geográfica à qual cada país pertence, permitindo identificar padrões geográficos nas características do site.

No gráfico do SuperUser, a mesma análise é aplicada, mas focada nesse site específico. Comparando os dois gráficos lado a lado, podemos perceber as diferenças na distribuição da proporção de comentários e do número de usuários entre os dois sites.

Bônus

Inclua o continente dos países (six_regions) na visualização.

dados %>%
  na.omit() %>%
  ggplot(aes(x = PDI, y = comentaram_prop, color = six_regions, size = usuarios)) +
  geom_point() +
  geom_smooth(method = "lm", se = FALSE) +
  labs(x = "PDI", y = "Proporção de Comentários", color = "Continente", size = "Usuários", title = "Relação entre PDI e Proporção de Comentários")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: size
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

Em resumo, o gráfico apresenta a relação entre o índice de distância de poder (PDI) e a proporção de comentários, com os pontos coloridos por continente e o tamanho dos pontos representando a quantidade de usuários. A linha de ajuste linear mostra a tendência geral da relação entre as variáveis.