Use os dados abaixo para gerar os gráficos. Para o segundo gráfico (barras), use a escala logarítmica (log = “y”) e as seguintes cores: “#E6E6E6”, “#666666”. Além disso, os gráficos podem ser organizados com a função layout().
MRT_1F <- c(517.1468515630205, 85.13094142168089, 30.333207896694553, 12.694776264558937, 3.3041601673945418, 1.1823111717498882, 1.1892293502386786)
MRT_3F <- c(156.68929936163462, 11.540837783562276, 0.4512835621696538, 0.4509797929766453, 0.4502068233039181, 0.4496185276300172, 0.4543157082191288)
MRT_5F <- c(83.90319666471157, 0.3068151086494968, 0.30522314133037304, 0.3072588968084928, 0.30655265997285697, 0.3055812715727718, 0.3053297166713006)
MRT_10F <- c(29.55430642951759, 0.19832832665772515, 0.1971923924717474, 0.19796648905716516, 0.19615594370806338, 0.2034569237883263, 0.19617420889447737)
MRT_15F <- c(11.317736530583566, 0.167364215666193, 0.16172168266811013, 0.16701085329580515, 0.1598052657153692, 0.1645934043532696, 0.16216563797118075)
MRT_sem_F <- c(11.93430909937736, 0.6095414637034009, 0.6060645101029295, 0.612167181646899, 0.6146761002685637, 0.6096747087200697, 0.6125810476877268)
clock <- c(0.1, 0.5, 1, 1.5, 2, 2.5, 3)
# Layout: linha em cima (ocupa 2 colunas) e 5 gráficos de barras embaixo
graphics::layout(matrix(c(1, 1, 2, 3, 4, 5, 6, 0), nrow = 4, byrow = TRUE))
# Gráfico de linhas
cores <- c("black", "yellow", "red", "blue", "purple", "green")
dados <- cbind(MRT_1F, MRT_3F, MRT_5F, MRT_10F, MRT_15F, MRT_sem_F)
matplot(clock, dados, type = "o", pch = 1:6, lty = 1, col = cores,
xlab = "Time between Things requests (seconds)",
ylab = "Response Time (sec.)")
legend("topright", legend = c("1 Fog", "3 Fogs", "5 Fogs", "10 Fogs", "15 Fogs", "w/o Fog"),
col = cores, pch = 1:6, lty = 1)
# Gráficos de barras (escala log em y)
barras <- function(fog, nome) {
m <- rbind(MRT_sem_F, fog)
barplot(m, beside = TRUE, log = "y", names.arg = clock,
ylim = c(min(m) / 2, max(m) * 2),
col = c("#E6E6E6", "#666666"),
xlab = "Time between Things requests", ylab = "Response time (s)",
legend.text = c("w/o Fog", nome),
args.legend = list(x = "topright", cex = 0.7))
}
barras(MRT_1F, "1 Fog")
barras(MRT_3F, "3 Fogs")
barras(MRT_5F, "5 Fogs")
barras(MRT_10F, "10 Fogs")
barras(MRT_15F, "15 Fogs")
graphics::layout(1)
Para a tabela abaixo que classifica a qualidade de refeição de acordo com categorias de preços crie um gráfico de barras empilhadas. Também adicione título, nomes de eixos e legenda.
tab <- matrix(c(53.8, 33.9, 2.6, 0.0,
43.6, 54.2, 60.5, 21.4,
2.6, 11.9, 36.8, 78.6),
nrow = 3, byrow = TRUE,
dimnames = list(c("Good", "Very Good", "Excellent"),
c("$10-19", "$20-29", "$30-39", "$40-49")))
barplot(tab, col = c("lightblue", "steelblue", "navy"),
main = "Qualidade da refeição por faixa de preço",
xlab = "Preço da refeição", ylab = "Porcentagem (%)",
legend.text = rownames(tab),
args.legend = list(x = "topright", title = "Qualidade"))
Faça o histograma das temperaturas do mês de maio do dataset airquality. No entanto, primeiro converta as temperaturas para graus Celsius através da expressão °C = (°F − 32) / 1.8. Após isso, gere o histograma. Também adicione título, nomes de eixos, cor e curva de densidade.
maio <- subset(airquality, Month == 5)
celsius <- (maio$Temp - 32) / 1.8
hist(celsius, freq = FALSE, col = "lightblue", border = "white",
main = "Temperaturas de maio (airquality)",
xlab = "Temperatura (°C)", ylab = "Densidade")
lines(density(celsius), col = "red", lwd = 2)
Crie um gráfico de pizza com a porcentagem da tabela total de vendas por país. Use o dataset abaixo. Inclua a porcentagem de cada fatia, as cores das fatias e o nome do gráfico. Adicionalmente, use o comando legend() para incluir a legenda do gráfico.
sales <- read.table("https://www.dropbox.com/scl/fi/mpjt4uuqb5vtmfiw38phk/Sales.txt?rlkey=93jlz79xwrrt7ah66d5k403d7&dl=1", header = TRUE)
col_pais <- names(sales)[!sapply(sales, is.numeric)][1]
col_vendas <- names(sales)[sapply(sales, is.numeric)][1]
total <- tapply(sales[[col_vendas]], sales[[col_pais]], sum)
pct <- round(100 * total / sum(total), 1)
cores <- rainbow(length(total))
pie(total, labels = paste0(pct, "%"), col = cores,
main = "Porcentagem do total de vendas por país")
legend("topright", legend = names(total), fill = cores, cex = 0.8)
Utilize os dados de contagens de insetos em unidades experimentais agrícolas tratados com inseticidas diferentes disponíveis no R em InsectSprays e construa um boxplot sem a presença dos outliers para os 6 tipos de inseticidas. Coloque título e nomes de eixos adequados. Além disso, as caixas devem ser preenchidas com a cor “yellow”.
# Outline = FALSE: tira os outliers
boxplot(count ~ spray, data = InsectSprays, outline = FALSE, col = "yellow",
main = "Contagem de insetos por tipo de inseticida",
xlab = "Inseticida", ylab = "Número de insetos")
Gere os gráficos abaixo a partir dos seguintes dados: monitoringCloudData_0.1.csv, monitoringCloudData_0.5.csv, monitoringCloudData_1.csv e monitoringCloudData_NONE.csv. Esses dados consistem de informações de monitoramento dos recursos de uma máquina virtual. Basicamente, é necessário gerar gráficos de linha do tempo de coleta dos recursos (currentTime) em relação a memória usada (usedMemory).
Porém, é necessário ajustar a coluna “currentTime” para que o tempo fique contínuo e a coluna “usedMemory” para que todas as informações fiquem megabytes. Por fim, use a função layout() para organizar os gráficos. Dica 1: use a função difftime() para calcular a diferença do tempo em horas. Dica 2: use os conceitos vistos na aula de string/regex para converter os dados na coluna “usedMemory” para apenas megabytes. Além disso, considere que um terabyte equivale a 1000000 megabytes e 1 gigabyte equivale a 1024 megabytes.
# Converte "usedMemory" (ex.: "250 MB", "3.5GB", "1 TB") para megabytes
para_mb <- function(x) {
x <- toupper(gsub(" ", "", x))
valor <- as.numeric(gsub("[^0-9.]", "", x))
unidade <- gsub("[0-9.]", "", x)
fator <- ifelse(grepl("TB", unidade), 1000000,
ifelse(grepl("GB", unidade), 1024,
ifelse(grepl("KB", unidade), 1/1024, 1)))
valor * fator
}
prepara <- function(arquivo) {
d <- read.csv(arquivo, stringsAsFactors = FALSE)
tempo_limpo <- sub("^.*([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})", "\\1", d$currentTime)
t <- as.POSIXct(tempo_limpo, format="%Y-%m-%d %H:%M:%S")
d$hora <- as.numeric(difftime(t, t[1], units = "hours"))
d$mb <- para_mb(d$usedMemory)
d
}
arquivos <- c("None Workload" = "monitoringCloudData_NONE.csv",
"Workload of 0.1" = "monitoringCloudData_0.1.csv",
"Workload of 0.5" = "monitoringCloudData_0.5.csv",
"Workload of 1.0" = "monitoringCloudData_1.csv")
graphics::layout(matrix(1:4, nrow = 2, byrow = TRUE))
for (i in seq_along(arquivos)) {
d <- prepara(arquivos[i])
plot(d$hora, d$mb, type = "l",
main = paste("Memory Analysis (", names(arquivos)[i], ")", sep = ""),
xlab = "Time (hour)", ylab = "Used Memory (MB)")
}
graphics::layout(1)
Filtrando os conteúdos com apenas UM país de origem (coluna “country”), utilize o Plotly para obter um gráfico de pizza dos 10 países com mais conteúdo na plataforma.
netflix <- read.csv("netflix_titles.csv", stringsAsFactors = FALSE)
# Apenas conteúdos com um único país (sem vírgula) e não vazio
um_pais <- subset(netflix, country != "" & !grepl(",", country))
top10 <- head(sort(table(um_pais$country), decreasing = TRUE), 10)
df_top10 <- data.frame(Pais = names(top10), Total = as.numeric(top10))
plot_ly(df_top10, labels = ~Pais, values = ~Total, type = "pie",
textinfo = "label+percent") %>%
layout(title = "10 países com mais conteúdo na Netflix")
Considerando os 10 países descritos na questão anterior, utilize o Plotly para obter uma tabela com as colunas “País” e “Total de conteúdos”. Para tal tabela, é necessário que o cabeçalho esteja com o fundo da célula cinza e a letra em branco, e que todos os textos das células estejam @centralizados.
plot_ly(type = "table",
header = list(values = c("País", "Total de conteúdos"),
fill = list(color = "gray"),
font = list(color = "white"),
align = "center"),
cells = list(values = list(df_top10$Pais, df_top10$Total),
align = "center"))
netflix$decada <- floor(netflix$release_year / 10) * 10
cont <- as.data.frame(table(decada = netflix$decada, type = netflix$type))
cont$decada <- as.numeric(as.character(cont$decada))
series <- subset(cont, type == "TV Show")
filmes <- subset(cont, type == "Movie")
plot_ly() %>%
add_trace(data = series, x = ~decada, y = ~Freq, type = "scatter",
mode = "lines+markers", name = "TV Series",
line = list(color = "blue")) %>%
add_trace(data = filmes, x = ~decada, y = ~Freq, type = "scatter",
mode = "lines+markers", name = "Movies",
line = list(color = "orange")) %>%
layout(xaxis = list(title = "Década"), yaxis = list(title = "Qnd. Conteúdo"))
Utilizando o Plotly, obtenha um gráfico que representa a quantidade de filmes lançados de um determinado gênero entre os anos de 2000 e 2010. Este gráfico deve ser de barras lado-a-lado (como na imagem abaixo), com cada barra representando a quantidade de filmes dos gêneros “Dramas”, “Action & Adventure” e “Comedies” lançados naquele determinado ano. (Obs: Para filmes com múltiplos gêneros, considerar apenas o primeiro descrito na coluna “listed_in”).
filmes <- subset(netflix, type == "Movie" & release_year >= 2000 & release_year <= 2010)
filmes$genero <- trimws(sub(",.*", "", filmes$listed_in)) # primeiro gênero
filmes <- subset(filmes, genero %in% c("Dramas", "Action & Adventure", "Comedies"))
cont <- as.data.frame(table(ano = filmes$release_year, genero = filmes$genero))
cont$ano <- as.numeric(as.character(cont$ano))
plot_ly(cont, x = ~ano, y = ~Freq, color = ~genero, type = "bar") %>%
layout(barmode = "group",
xaxis = list(title = "Ano de Lançamento"),
yaxis = list(title = "Qnt. de Lançamentos"))