Navegando na plataforma data.world encontrei um conjunto de dados sobre smartphones na Índia. Nesse data set é possível encontrar diversos modelos, seus preços e o número de avaliações que cada um recebeu. Nesse post, uso as ferramentas que desenvolvemos até o momento para explorar e análisar esses dados.

Navegando pela internet encontrei 2 data sets contendo informações sobre smartphones vendidos na Índia.
Vou usar todo o conteúdo desenvolvido até agora para compreender esses dados e obter ideias sobre eles.
Carregando o tidyverse:
library(tidyverse)
#Também usaremos outras bibliotecas em seu tempo elas serão carregadas
Lendo os dados:
# Dados da apple na Índia
apple_sold_in_india <- read_csv("apple_products.csv")
# Dados sobre smartphones no mundo
smartphones_sold <- read_csv("smartphone_category (1).csv")
Preparando os dados para a análise de forma simples: o pacote
janitor
install.packages("janitor")
library(janitor)
#Observe as colunas do data set antes e depois de usar a função clean_names()
Nomes das colunas do data set antes da função
clean_names():
[1] "Product Name" "Product URL" "Brand"
[4] "Sale Price" "Mrp" "Discount Percentage"
[7] "Number Of Ratings" "Number Of Reviews" "Upc"
[10] "Star Rating" "Ram"
clean_apple_sold_in_india <- apple_sold_in_india %>%
clean_names()
[1] "product_name" "product_url" "brand"
[4] "sale_price" "mrp" "discount_percentage"
[7] "number_of_ratings" "number_of_reviews" "upc"
[10] "star_rating" "ram" "american_dolar"
[13] "australian_dolar"
Agora seguindo um padrão de palavras em caixa baixa e separadas por um “_” sublinhado.
Ótimo!
Primeiro, podemos conhecer a variação dos preços entre os iPhones:
ggplot(clean_apple_sold_in_india) +
geom_histogram(aes(x = sale_price))

Os valores estão em Rupias, então vamos transformar nossos dados para construir uma nova coluna com os valores em dólar americano e dólar australiano:
clean_apple_sold_in_india <- clean_apple_sold_in_india %>%
mutate(american_dolar = sale_price * 0.013, australian_dolar = sale_price * 0.018)
Parece que está tudo ótimo para começar, mas não! Esse dado possui redundância, notável por um agrupamento das avaliações de cada marca:
clean_apple_sold_in_india %>%
group_by(number_of_ratings) %>%
count() %>% arrange(desc(n)) -> redundancia_ratings
Ou seja, o número de avaliações (number_of_ratings) é repetido em diferentes modelos do mesmo produto.
Primeiro temos que trabalhar nesse data set de modo a retirar essa redundância dos dados, assim receberemos respostas menos enviesadas, que não poderiam nos levar a caminhos muito complicados.
Nosso dado possui redundância, principalmente por causa dos diferentes modelos de iPhones.
Podemos agrupar os dados pelos preços de vendas (que não se repetem)
e escolher apenas o primeiro do nosso data set com a função
slice():
clean_apple_sold_in_india %>%
group_by(sale_price) %>%
slice(1) -> sale_price_first
Agora podemos plotar os valores dos iPhones para entender sua variação, vamos ver quais são os mais caros:
sale_price_first %>%
mutate(iphone = fct_reorder(product_name, australian_dolar)) %>%
ggplot(aes(x = iphone, y = australian_dolar)) +
geom_bar(stat = "identity", fill="#f68060", alpha=.6, width=.4) +
coord_flip() +
labs(
#title = "",
#subtitle = "por: Guilherme Bastos Gomes",
caption = "Source: data.world",
x = "",
y = "Preços em dólar australiano") +
theme_bw()

Podemos também analisar com um gráfico de pirulito (Lollipop chart):
sale_price_first %>%
mutate(iphone = fct_reorder(product_name, australian_dolar)) %>%
ggplot(aes(x = iphone, y = australian_dolar)) +
geom_segment( aes(xend=iphone, yend=0)) +
geom_point( size=4, color="0088cc") +
coord_flip() +
theme_bw() +
labs(
#title = "",
#subtitle = "por: Guilherme Bastos Gomes",
caption = "Source: data.world",
x = "",
y = "Preços em dólar australiano")

O que aprendemos com esse plot?
Será que existe uma relação entre o preço e número de avaliações entre os iPhones?
sale_price_first %>%
ggplot(aes(x = australian_dolar, y = number_of_ratings)) +
geom_point( size = 3, color = "Firebrick") +
geom_smooth(method = "lm") +
theme_classic()

Interessante, parece que quanto menor o valor do produto, maior o número de avaliações (imagino que porque mais pessoas tem acesso), porém nosso gráfico ainda não parece mostrar uma correlação forte entre nossas variáveis.
sale_price_first %>%
ggplot(aes(x = australian_dolar, y = number_of_ratings)) +
geom_point( size = 3) +
scale_y_log10() +
geom_smooth(method = "lm") +
theme_classic()

Sem usar um modelo linear na função geom_smooth:
sale_price_first %>%
ggplot(aes(x = australian_dolar, y = number_of_ratings)) +
geom_point( size = 3) +
scale_y_log10() +
geom_smooth(aes(x = australian_dolar, y = number_of_ratings)) +
theme_classic()

Veja que interessante se torna nosso gráfico quando trocamos a escala do eixo y para incluir o logaritmo na base 10 dos números que analisamos.
Distribuição da variável sem e com transformaçao logaritmica:
library(patchwork)
h1 <- ggplot(sale_price_first) +
geom_histogram(aes(x = number_of_ratings))
h2 <- ggplot(sale_price_first) +
geom_histogram(aes(log10(sale_price_first$number_of_ratings)))
h1 + h2

Perceba como mais caixas são preenchidas após a transformação logaritmica na base 10, o que aumenta nossa compreensão dos dados no plot.
O que estamos tentando dizer aqui é que quanto maior o valor do iPhone, menos avaliações o produto recebe do publico geral. Não é uma hipótese brilhante, mas vai garantir que comecemos a analisar os dados de uma forma mais profunda.
Antes de prosseguir, você deve estar se perguntando se o mesmo é verdade para outras marcas também, vamos checar!
smartphones_sold %>%
clean_names() -> clean_smartphones_sold
Perceba como da mesma forma que podemos usar <- para
definir um objeto, o mesmo é verdade quando usamos ->
porém pelo sentido contrário!
Muito útil quando estamos usando pipes ou
%>%
clean_smartphones_sold %>%
group_by(sale_price) %>%
slice(1) -> red_out_clean_smartphones_sold
Vamos analisar os preços em dólar australiano, então para isso precisamos construir uma coluna com os valores desejados:
red_out_clean_smartphones_sold <- red_out_clean_smartphones_sold %>%
mutate(american_dolar = sale_price * 0.013, australian_dolar = sale_price * 0.018)
Selecionando algumas marcas mais relevantes em números no data set:
red_out_clean_smartphones_sold %>%
group_by(brand) %>%
summarise(media_relevantes = mean(number_of_ratings)) %>%
arrange(desc(media_relevantes)) %>%
mutate(brand = fct_reorder(brand, media_relevantes)) %>%
ggplot(aes(x = brand, y = media_relevantes)) +
geom_segment( aes(xend=brand, yend=0)) +
geom_point( size=4, color="0088cc") +
coord_flip() +
theme_bw() +
labs(
#title = "",
#subtitle = "por: Guilherme Bastos Gomes",
caption = "Source: data.world",
x = "",
y = "")

Esse gráfico é interessante para observar a distribuição das médias (valor médio de avaliações por marca), mas agora vamos analisar as distribuições dos números de avaliações totais de cada marca:
red_out_clean_smartphones_sold %>%
ggplot(aes(x = reorder(brand, number_of_ratings, na.rm = TRUE), y = number_of_ratings, fill = brand)) +
geom_boxplot() +
labs(
#title = "",
subtitle = "por: Guilherme Bastos Gomes",
caption = "Source: data.world",
x = "",
y = ""
) +
coord_flip()
Deixei o eixo X, Y e o título do gráfico para que você possa usar os exemplos

Vamos selecionar algumas marcas relevantes para procurar se o mesmo fenômeno se aplica a elas, ou seja, esperamos que quanto maior o valor do produto, menos avaliações ele recebeu do público:
red_out_clean_smartphones_sold %>%
filter(brand == "SAMSUNG" | brand == "Apple" | brand == "Lenovo" | brand == "Redmi" |brand == "Motorola" | brand == "ASUS") %>%
ggplot(aes(x = australian_dolar, y = number_of_ratings, color = brand)) +
geom_jitter(size = 2) +
scale_y_log10() +
#geom_smooth(method = "lm") +
theme_classic() +
facet_wrap(~brand)

Em primeiro momento parece que o mesmo fenomeno acontece com a SAMSUNG e também com a Motorola, interessante não?
Enquanto isso parece que a Redmi, a Lenovo e a ASUS, mantém preços parecidos e altas avaliações, mas isso não significa que também não podem revelar algum tipo de correlação.
Vamos usar a função geom_smooth para aplicar um modelo
de regressão linear simples em nosso gráfico, se o modelo formar uma
linha apontando para baixo, então significa que existe correlação entre
as variáveis, e que essa correlação é negativa.
red_out_clean_smartphones_sold %>%
filter(brand == "SAMSUNG" | brand == "Apple" | brand == "Lenovo" | brand == "Redmi" |brand == "Motorola" | brand == "ASUS") %>%
ggplot(aes(x = australian_dolar, y = number_of_ratings, color = brand)) +
geom_jitter(size = 2) +
scale_y_log10() +
geom_smooth(method = "lm") +
facet_wrap(~brand) +
theme_fivethirtyeight()

Vamos checar o quão forte está nossa correlação:
Parece que o mesmo é real até para as outras marcas de dispositivos.
Como será que o preço de um produto afeta suas avaliações? E qual preço seria ótimo para obter um valor ótimo de avaliações?
No próximo post, vou escrever sobre como avaliar e usar os modelos a nosso favor.
Vamos voltar ao nosso dataset com os apples:
cor(clean_apple_sold_in_india$australian_dolar, clean_apple_sold_in_india$number_of_ratings, method = c("pearson"))
cor(clean_apple_sold_in_india$australian_dolar, clean_apple_sold_in_india$number_of_ratings, method = c("spearman"))
cor(clean_apple_sold_in_india$australian_dolar, clean_apple_sold_in_india$number_of_ratings, method = c("kendal"))
[1] -0.7015259
[1] -0.8029363
[1] -0.6314646
Observamos então que existe correlação negativa forte (-0.7 no coeficiente de correlação de Pearson) entre ambas as variáveis.
Até a próxima!