Segue os dados a serem examinados neste estudo:

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)

dados$Internet[is.na(dados$Internet)] <- 0

options <- list(
  scrollX = TRUE,
  autoWidth = TRUE 
)

datatable(dados, options = options)

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

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.

Para iniciar nossa análise, examinaremos a correlação entre a variável de comentários e as demais variáveis, com o objetivo de identificar quais estão influenciando a porcentagem de comentários de alguma forma.

correlacao_coment_pais_pearson <- cor(dados$comentaram_prop, dados$PDI, method = "pearson")
correlacao_coment_pais_kendall <- cor(dados$comentaram_prop, dados$PDI, method = "kendall")
correlacao_coment_pais_spearman <- cor(dados$comentaram_prop, dados$PDI, method = "spearman")

correlacao_coment_acesso_pearson <- cor(dados$comentaram_prop, dados$Internet, method = "pearson")
correlacao_coment_acesso_kendall <- cor(dados$comentaram_prop, dados$Internet, method = "kendall")
correlacao_coment_acesso_spearman <- cor(dados$comentaram_prop, dados$Internet, method = "spearman")

correlacao_coment_usuario_pearson <- cor(dados$comentaram_prop, dados$usuarios, method = "pearson")
correlacao_coment_usuario_kendall <- cor(dados$comentaram_prop, dados$usuarios, method = "kendall")
correlacao_coment_usuario_spearman <- cor(dados$comentaram_prop, dados$usuarios, method = "spearman")

data_correlacoes <- data.frame(
    "Variáveis" = c("Comentarios X PDI", "Comentarios X Acesso Internet", "Comentarios X Quantidade Usuario"),
    "Pearson" = c(correlacao_coment_pais_pearson, correlacao_coment_acesso_pearson, correlacao_coment_usuario_pearson),
    "Kendall" = c(correlacao_coment_pais_kendall, correlacao_coment_acesso_kendall, correlacao_coment_usuario_kendall),
    "Spearman" = c(correlacao_coment_pais_spearman, correlacao_coment_acesso_spearman, correlacao_coment_usuario_spearman)
)

datatable(data_correlacoes, options = options)

De acordo com os coeficientes de correlação, percebemos que o tamanho da base de dados coletada não influencia significativamente a proporção de comentários nas questões dos outros. Em contrapartida, o acesso à internet e o nível de desigualdade hierárquica em um país têm um impacto mais relevante. O acesso à internet mostra uma correlação moderada positiva, enquanto o Índice de Desigualdade de Poder (PDI) apresenta uma correlação moderada negativa.

Em seguida, plotaremos um gráfico de dispersão para analisar melhor esse comportamento.

dados <- dados %>%
  mutate(user_group = cut(usuarios,
                          breaks = c(-Inf, 2500, 5000, 10000, 20000, 40000, Inf),
                          labels = c('Até 2500', '2501-5000', '5001-10000', '10001-20000', '20001-40000', 'Mais de 40000')))

symbol_map <- c('Até 2500' = 'circle', 
                '2501-5000' = 'square', 
                '5001-10000' = 'diamond', 
                '10001-20000' = 'x', 
                '20001-40000' = 'star',
                'Mais de 40000' = 'triangle-up')

plot_correlacao <- plot_ly(
  dados, 
  x = ~comentaram_prop, 
  y = ~PDI, 
  text = ~country, 
  type = 'scatter', 
  mode = 'markers', 
  color = ~Internet,
  colors = 'Spectral',
  symbol = ~user_group,
  symbols = symbol_map,
  marker = list(size = 15, opacity = 0.65, line = list(color = 'black', width = 2))
)

plot_correlacao <- plot_correlacao %>% 
  layout(
    title = '<b>Relação entre Comentários e PDI</b>',
    xaxis = list(title = 'Comentários', showgrid = FALSE),
    yaxis = list(title = '% PDI', showgrid = FALSE),
    legend = list(
      title = list(text = "Usuários", font = list(size = 14)),
      marker = list(color = FALSE)
    )
  )

plot_correlacao

Observando o gráfico, podemos notar que, à medida que os comentários aumentam, as cores que representam a porcentagem de acesso à internet tendem a adotar um tom azul, indicando um maior número de acessos. Por outro lado, à medida que os comentários diminuem, a porcentagem do Índice de Desigualdade de Poder (PDI) tende a aumentar. Além disso, percebemos que o tamanho da base de dados de usuários está distribuído de forma dispersa em ambos os casos.

Informações interessantes que podemos extrair dessa observação são:

Essa análise sugere que o acesso à internet é um fator positivo para a interação online, enquanto a desigualdade hierárquica social pode atuar como um fator inibidor dessa interação.

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.

plot_correlacao_ruim_um <- plot_ly(
  dados, 
  x = ~comentaram_prop, 
  y = ~PDI, 
  text = ~country, 
  type = 'scatter', 
  mode = 'markers', 
  color = ~Internet,
  colors = 'Pastel1',
  symbol = ~user_group,
  symbols = symbol_map,
  marker = list(size = 15, opacity = 0.5, line = list(color = 'black', width = 2))
)

plot_correlacao_ruim_um <- plot_correlacao_ruim_um %>% 
  layout(
    title = '<b>Relação entre Comentários e PDI</b>',
    xaxis = list(title = 'Comentários', showgrid = FALSE),
    yaxis = list(title = '% PDI', showgrid = FALSE),
    legend = list(
      title = list(text = "Usuários", font = list(size = 14)),
      marker = list(color = FALSE)
    )
  )

plot_correlacao_ruim_um

1º) Essa abordagem é muito similar à que utilizamos no gráfico inicial. No entanto, a escolha de cores em tons pastéis e semelhantes torna confusa a interpretação da porcentagem de acessos à internet, dificultando a análise dessa variável.

plot_correlacao_ruim_dois <- plot_ly(
  dados, 
  x = ~comentaram_prop, 
  y = ~PDI, 
  text = ~country, 
  type = 'scatter', 
  mode = 'markers', 
  color = ~Internet,
  colors = 'Spectral',
  marker = list(size = ~usuarios/1000, sizemode = 'area', opacity = 0.5)
)

plot_correlacao_ruim_dois <- plot_correlacao_ruim_dois  %>% 
  layout(
    title = '<b>Relação entre Comentários e PDI</b>',
    xaxis = list(title = 'Comentários', showgrid = FALSE),
    yaxis = list(title = '% PDI', showgrid = FALSE),
    legend = list(
      title = list(text = "Usuários", font = list(size = 14)),
      marker = list(color = FALSE)
    )
  )

plot_correlacao_ruim_dois

2º) O exemplo acima utiliza o mesmo tipo de gráfico, mas em vez de usar símbolos para diferenciar as quantidades de usuários, o tamanho dos círculos faz essa diferenciação. Embora essa abordagem seja válida, torna-se difícil visualizar e distinguir os tamanhos dos círculos. Uma alternativa seria agrupar os dados em tamanhos fixos de círculos para melhorar a clareza do gráfico.

plot_correlacao_ruim_tres <- plot_ly(
  dados, 
  x = ~comentaram_prop, 
  y = ~PDI, 
  text = ~country, 
  type = 'scatter', 
  mode = 'markers', 
  color = ~usuarios,
  colors = 'Spectral',
  marker = list(size = ~Internet, sizemode = 'area', opacity = 0.5)
)

plot_correlacao_ruim_tres <- plot_correlacao_ruim_tres %>% 
  layout(
    title = '<b>Relação entre Comentários e PDI</b>',
    xaxis = list(title = 'Comentários', showgrid = FALSE),
    yaxis = list(title = '% PDI', showgrid = FALSE)
  )

plot_correlacao_ruim_tres

3º) Invertendo a abordagem inicial, onde a temperatura das cores representa a quantidade de usuários e o tamanho dos círculos a porcentagem de acesso à internet, percebemos uma dificuldade em comparar diferentes níveis de acesso. Além disso, as cores muito semelhantes complicam a visualização, especialmente porque muitos países têm uma base de usuários pequena.

plot_correlacao_ruim_quatro <- plot_ly(
  dados, 
  x = ~comentaram_prop, 
  y = ~PDI, 
  text = ~country, 
  type = 'scatter', 
  mode = 'markers', 
  color = ~Internet,
  colors = 'Spectral',
  symbol = ~user_group,
  symbols = symbol_map,
  marker = list(size = 15, opacity = 1, line = list(color = 'black', width = 2))
)

plot_correlacao_ruim_quatro <- plot_correlacao_ruim_quatro %>% 
  layout(
    title = '<b>Relação entre Comentários e PDI</b>',
    xaxis = list(title = 'Comentários', showgrid = FALSE),
    yaxis = list(title = '% PDI', showgrid = FALSE),
    legend = list(
      title = list(text = "Usuários", font = list(size = 14)),
      marker = list(color = FALSE)
    )
  )

plot_correlacao_ruim_quatro

4º) Apesar de a estratégia de usar símbolos diferentes ajudar na visualização de determinadas abordagens, remover a opacidade dos símbolos pode fazer com que informações se percam, devido à sobreposição de símbolos.

plot_correlacao_ruim_cinco <- plot_ly(
  dados, 
  x = ~comentaram_prop, 
  y = ~PDI, 
  text = ~country, 
  type = 'scatter', 
  mode = 'lines+markers', 
  color = ~Internet,
  colors = 'Spectral',
  symbol = ~user_group,
  symbols = symbol_map,
  marker = list(size = 15, opacity = 0.5, line = list(color = 'black', width = 2))
)

plot_correlacao_ruim_cinco <- plot_correlacao_ruim_cinco %>% 
  layout(
    title = '<b>Relação entre Comentários e PDI</b>',
    xaxis = list(title = 'Comentários', showgrid = FALSE),
    yaxis = list(title = '% PDI', showgrid = FALSE),
    legend = list(
      title = list(text = "Usuários", font = list(size = 14)),
      marker = list(color = FALSE)
    )
  )

plot_correlacao_ruim_cinco
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays
## Warning: line.color doesn't (yet) support data arrays

5º) Nessa última abordagem, adicionamos linhas. No entanto, a adição de mais um elemento não melhorou o gráfico. Além dos dados não representarem uma relação linear, o gráfico ficou muito poluído e difícil de observar.

Bônus

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

dados <- na.omit(dados)

symbol_map_regiao <- c('america' = 'circle', 
                       'east_asia-pacific' = 'square', 
                       'europe_central_asia' = 'diamond', 
                       'middle_east_north_africa' = 'x', 
                       'south_asia' = 'star',
                       'sub_saharan_africa' = 'triangle-up')

dados$user_group_adjusted <- as.numeric(dados$user_group) * 5

plot_correlacao_bonus <- plot_ly(
  dados, 
  x = ~comentaram_prop, 
  y = ~PDI, 
  text = ~country, 
  type = 'scatter', 
  mode = 'markers', 
  color = ~Internet,
  colors = 'Spectral',
  symbol = ~six_regions,
  symbols = symbol_map_regiao,
  marker = list(size = ~user_group_adjusted,
                opacity = 0.65, 
                line = list(color = 'black', width = 2))
)

plot_correlacao_bonus <- plot_correlacao_bonus %>% 
  layout(
    title = '<b>Relação entre Comentários e PDI</b>',
    xaxis = list(title = 'Comentários', showgrid = FALSE),
    yaxis = list(title = '% PDI', showgrid = FALSE),
    legend = list(
      title = list(text = "Regiões", font = list(size = 14)),
      marker = list(color = FALSE)
    )
  )

plot_correlacao_bonus

Modificamos nossa abordagem para contemplarmos a variável ‘six_regions’, ajustamos o tamanho dos símbolos para refletir o tamanho da base de usuários, enquanto os símbolos representam as diferentes regiões geográficas dos países. Com isso, podemos obter algumas percepções interessantes. Por exemplo, as regiões ‘south_asia’ e ‘middle_east_north_africa’ apresentam consistentemente uma menor porcentagem de acesso à internet em comparação com outras regiões. Além disso, é evidente a presença significativa de países das regiões ‘america’ e ‘east_asia_pacific’ na parte superior direita do gráfico, indicando um alto Índice de Desigualdade de Poder (PDI) e poucos comentários. Por outro lado, os países da região ‘europe_central_asia’ tendem a apresentar uma tendência oposta às duas regiões mencionadas anteriormente.