# Primeiro carrega-se os pacotes necessários para a manipulaçao dos dados e geração de gráficos
library(tidyverse) # Manipulação de dataframes
library(plotly) # Gráficos intereativos
library(Hmisc) # Criação de intervalos de variáveis quantitativas
library(RColorBrewer) # Cores diversas
# Definindo os dados
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)
# Criando os vetores de formação do gráfico
opts <- c(4, 11, 1, 2, 5, 4)
fogs <- c('1 Fog', '3 Fogs', '5 Fogs', '10 Fogs', '15 Fogs', 'w/o Fog')
cores <- c('black', 'yellow','red','blue','purple','green')
# Criarei uma lista onde cada elemento é um vetor dos dados. O objetivo desta lista
# É fazer um loop por ela para gerar todos os gráficos em um loop for.
dados = list(MRT_1F, MRT_3F, MRT_5F, MRT_10F, MRT_15F, MRT_sem_F)
# Plotando a base plot de linhas
plot(x=clock, y=dados[[1]], pch=opts[1], type='o',
xlab='Time between Things requests (seconds)',
ylab='Response Time (seconds)')
# Agora adiciono cada um dos plots.
for (i in 1:length(dados)){
lines(x=clock, y=dados[[i]], pch=opts[i], type='o',
col=cores[i])
}
# Por fim, adiciono a legenda.
legend('topright', pch=opts, col=cores, legend=fogs)
# Agora irei plotar um conjunto de barplots.
# Cada gráfico será um barplot que compara o tempo de resposta entre n fogs e nenhum fog.
# Irei adicionar os valores à uma matriz, de forma que todos os valores de uma observação estejam na mesma linha
valores <- matrix(c(MRT_1F, MRT_3F, MRT_5F, MRT_10F, MRT_15F, MRT_sem_F),
nrow=6, ncol=7, byrow=TRUE)
valores
## [,1] [,2] [,3] [,4] [,5] [,6] [,7]
## [1,] 517.14685 85.1309414 30.3332079 12.6947763 3.3041602 1.1823112 1.1892294
## [2,] 156.68930 11.5408378 0.4512836 0.4509798 0.4502068 0.4496185 0.4543157
## [3,] 83.90320 0.3068151 0.3052231 0.3072589 0.3065527 0.3055813 0.3053297
## [4,] 29.55431 0.1983283 0.1971924 0.1979665 0.1961559 0.2034569 0.1961742
## [5,] 11.31774 0.1673642 0.1617217 0.1670109 0.1598053 0.1645934 0.1621656
## [6,] 11.93431 0.6095415 0.6060645 0.6121672 0.6146761 0.6096747 0.6125810
# Os gráficos devem ser comparações, aos pares, entre as quantidades de fogs.
# Dessa forma, serão n-1 gráficos, onde n é quantidade de categorias. Ou seja, 5 gráficos.
# Criando o layout 3x2 gráficos
par(mfrow=c(3,2))
# O loop a seguir percorre a matriz valores, plotando a linha i com a linha 6, que é a vetor "sem fog"
for (i in 1:(length(dados)-1)){
barplot(height=valores[c(6,i),],
log='y',
xlab='Time between Things requests (seconds)',
ylab='Response Time (seconds)',
col=c('#E6E6E6','#666666'),
names.arg=as.character(clock),
beside=TRUE,
)
legend('topright', col=c('#E6E6E6','#666666'),
legend=fogs[c(6,i)], pch=c(15,15))
}
# Primeiro cria-se os vetores com os dados
columnnames <- c('$10-19 (%)', '$20-29 (%)', '$30-39 (%)', '$40-49 (%)')
valores <- 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, ncol=4, byrow=TRUE)
quality <- c('Good', 'very Good', 'Excellent')
df <- data.frame(Quality_Rate=quality, valores)
names(df)[-1] <- columnnames
df
## Quality_Rate $10-19 (%) $20-29 (%) $30-39 (%) $40-49 (%)
## 1 Good 53.8 33.9 2.6 0.0
## 2 very Good 43.6 54.2 60.5 21.4
## 3 Excellent 2.6 11.9 36.8 78.6
# Gerando o barplot
barplot(height=valores,
names.arg=columnnames,
ylab='Meal Price',
main='Qualidade de refeições em restaurantes',
col=c('red', 'blue', 'green'),
xlim=c(0, 6))
# Adicionando a legenda
legend('topright', legend=quality,
col=c('red', 'blue', 'green'),
pch=c(15,15,15))
# Para plotar as temperaturas de acordo com a escala utilizada no Brasil
# é necessário realizar a transformação de Fahrenheit para Celsius.
# Para isso, pode-se utilizar a função "mutate" do pacote tidyr, onde a nova coluna "Temperatura"
# irá conter os novos valores de temepratura em graus Celsius.
df <- mutate(airquality, Temperatura=(airquality$Temp-32)/1.8)
# Agora filtra-se o dataframe para apenas o mês de Maio.
df <- filter(df, Month==5)
# Então plota-se o histograma.
# Histograma de frequências:
hist(df$Temperatura,
main='Distribuição das temperaturas no mês de Maio',
xlab='Temperatura',
ylab='Frequência',
col='steelblue',
probability=F,
xlim=c(7,30))
# E o histograma de densidades de probabilidades:
hist(df$Temperatura,
main='Distribuição das temperaturas no mês de Maio',
xlab='Temperatura',
ylab='Densidade de Probabilidade',
col='steelblue',
probability=T,
xlim=c(7,30))
lines(density(df$Temperatura))
# Primeiro realiza-se a importação dos dados da web, utilizando a função read.table:
sales <- read.table("https://training-course-material.com/images/8/8f/Sales.txt",header=TRUE)
sales
## COUNTRY SALES
## 1 US 340
## 2 UK 290
## 3 France 510
## 4 Poland 820
## 5 Japan 120
## 6 China 780
# Para mostrar a participação, em porcentagem, de cada país nas vendas é necessário criar
# um vetor com essas porcentagens:
percentage <- round(sales$SALES/sum(sales$SALES)*100)
# Agora adiciona-se o simbolo " % " a cada um dos valores:
labls <- paste(percentage, '%', sep='')
# Por fim, gera-se o gráfico de Pizza através da função pie,
# Passando o vetor de porcentagens como "labels" e a legenda é composta pela própria coluna
# COUNTRY do dataframe.
pie(sales$SALES,
labels=labls,
main='Porcentagem de Vendas por País',
col=brewer.pal(n = 6, name = 'Spectral'))
legend('topright', legend=sales$COUNTRY,
fil=brewer.pal(n = 6, name = 'Spectral'))
# Renomeando o dataframe para 'df' para simplificar
df <- InsectSprays
# Criando o boxplot, onde a variável numérica é a quantidade de insetos
# e a variável categórica de comparação é o tipo do spray utilizado.
boxplot(count ~ spray, data=df,
main='Quantidade de insetos tratados por inseticida',
xlab='Inseticida',
ylab='Quantidade',
outline=F, # Não mostra os outliers, mas eles continuam no dataset.
col='yellow')
View(m01) View(m05)
setwd('D:/michel/Universidade/Mestrado/disciplina/repo/data')
none <- read.csv('D:/michel/Universidade/Mestrado/disciplina/repo/data/monitoringCloudData_NONE.csv')
m01 <- read.csv('D:/michel/Universidade/Mestrado/disciplina/repo/data/monitoringCloudData_0.1.csv')
m05 <- read.csv('D:/michel/Universidade/Mestrado/disciplina/repo/data/monitoringCloudData_0.5.csv')
m1 <- read.csv('D:/michel/Universidade/Mestrado/disciplina/repo/data/monitoringCloudData_1.csv')
datasets <- list(none, m01, m05, m1)
names <- list('(None Workload)', '(Workload of 0.1)', '(Workload of 0.5)', '(Workload of 1.0)')
# Criando uma função que transforma valores em GB para MB
gbToMB <- function(mem){
if (grepl(pattern='GB', x=mem)==T){
return (parse_number(mem)*1024)
} else{
return (parse_number(mem))
}
}
#layout(matrix(c(1,2,3,4), nrow=2, byrow=T))
par(mfrow=c(2,2))
for (i in 1:length(datasets)){
# Extraindo os números da coluna usedMemory
datasets[[i]]$Memoria <- sapply(X=datasets[[i]]$usedMemory, FUN=gbToMB)
# Transformando o tempo em uma diferença entre o tempo i e o tempo inicial
tempos <- vector()
for (j in 1:nrow(datasets[[i]])){
tempos[j] <- (difftime(datasets[[i]]$currentTime[j], datasets[[i]]$currentTime[1], units=c('secs')))/3600
}
datasets[[i]]$tempo <- tempos
# Plotando o resultado:
plot(datasets[[i]]$tempo, datasets[[i]]$Memoria, type='l',
main=paste('Memory Analysis', names[[i]], sep=' '),
xlab='Time (hour)',
ylab='Used Memory (MB)')
}
# Lendo o arquivo CSV
movies <- read.csv('D:/michel/Universidade/Mestrado/disciplina/repo/data/netflix_titles.csv')
# Para filtrar em apenas 1 país de origem, utilizarei a função "grepl" com o pattern=',',
# Assim, se houver uma, vírgula em determinada linha, na coluna "country", a linha nao será selecionada.
movies <- movies[!grepl(pattern=',', x=movies$country),]
# Para saber a quantidade de conteudos por país usarei o group_by country.
by_country <- movies %>%
group_by(country) %>%
summarise(conteudos=n())
# E então, ordenar o dataframe de forma decrescente com a quantidade de conteúdos
# e selecionar os 10 maiores produtores.
by_country <- head(arrange(by_country,desc(conteudos)), 10)
# Então tem-se o gráfico de pizza.
plot_ly(by_country,
type='pie',
labels=~country,
values=~conteudos)
Perceba que há um país sem nome. Na verdade talvez sejam vários paises cujo nome não foi digitado na base de dados. Dessa forma, vou refazer o mesmo processo porém removendo as linhas nas quais o nome do páis não esteja escrito corretamente.
movies <- read.csv('D:/michel/Universidade/Mestrado/disciplina/repo/data/netflix_titles.csv')
movies <- movies[nchar(movies$country)!=0,] # Selecionando as linhas cujos paises possem mais de 0 caracteres
movies <- movies[!grepl(pattern=',', x=movies$country),]
by_country <- movies %>%
group_by(country) %>%
summarise(conteudos=n())
# E então, ordenar o dataframe de forma decrescente com a quantidade de conteúdos
# e selecionar os 10 maiores produtores.
by_country <- head(arrange(by_country,desc(conteudos)), 10)
# Então tem-se o gráfico de pizza.
plot_ly(by_country,
type='pie',
labels=~country,
values=~conteudos)
# Para criar uma tabela utilizando o pacote potly usa-se o type "table"
plot_ly(type = 'table',
columnwidth = c(10, 10), # Largura de cada coluna
columnorder = c(0, 1), # Ordem das colunas
header = list(
values = c("País","Total de conteúdos"), # Vetor com os nomes das colunas
align = c("center", "center"), # Alinhamento Cetral
line = list(width = 1.5, color = 'black'), # Formatação das linhas do cabeçário
fill = list(color='#505050'), # Cor de fundo do cabeçário
font = list(family = "Arial", size = 12, color = c("white")) # Formatação da fonte do cabeçário
),
cells = list( # Construção das células de valores
values = rbind(by_country$country,by_country$conteudos), # Vetor ordenado com os valores de cada coluna
align = c("center", "center"),
line = list(width = 1.5, color = 'black'),
font = list(family = "Arial", size = 12, color = c("black"))
)
)
movies <- read.csv('D:/michel/Universidade/Mestrado/disciplina/repo/data/netflix_titles.csv')
# Primeiro é necessário criar intervalos para os anos (categorizar a variavel discreta release_year)
# Isto pode ser feito através da função 'cut2', do pacote "Hmisc". Esta função recebe
# Um vetor numérico e uma sequência de pontos nas quais deseja-se separá-lo e retorna uma variável
# Do tipo Fator.
movies$decadas <- as.character(cut2(x=movies$release_year, cuts=seq(1940, 2020, 10)))
# Como não se deseja mostrar o intervalo no eixo x, usarei a função sapply juntamente com a função parse_number
# Para extrair apenas o limite inferior do intervalo
movies <- movies %>%
mutate(decadas=unlist(str_extract(string=decadas, pattern='\\d{4},'))) %>%
mutate(decadas=as.numeric(unlist(str_extract(string=decadas, pattern='\\d*'))))
# Agora é necessário fazer os agrupamentos em relação à decada e ao tipo, juntamente com contagem
# Das ocorrências em cada um desses grupos:
grouped_decade <- movies %>%
group_by(decadas, type) %>%
summarise(total=n()) %>%
filter(decadas!=1950, decadas!=1925)
# Aqui é feita a separação entre os dados "y", para o tipo Movie e para o tipo TV Show
trace_1 <- filter(grouped_decade, type=='Movie')$total
trace_2 <- filter(grouped_decade, type!='Movie')$total
# Criando o gráfico em branco
fig <- plot_ly(data=grouped_decade,
x=~unique(decadas))
# Adicionando a linha para TV Show
fig <- fig %>% add_trace(
y=~trace_1,
name='TV Show',
type='scatter',
mode='lines+markers')
# Adicionando a linha para Movie
fig <- fig %>% add_trace(
y=~trace_2,
name='Movie',
type='scatter',
mode='lines+markers')
# Alterando os título dos eixos
fig <- fig %>% layout(xaxis=list(title='Década'),
yaxis=list(title='Qnd. Conteúdo'))
# Por fim, plotando o gráfico de linhas.
fig
movies <- read.csv('D:/michel/Universidade/Mestrado/disciplina/repo/data/netflix_titles.csv')
# Primeiro, criarei uma coluna com apenas o primeiro gênero atribuído ao conteúdo
movies$Genero <- sapply(X=movies$listed_in, FUN=function(x){unlist(strsplit(x, split=','))[1]})
# Agora seleciona-se apenas os gêneros de drama, comédia e ação e aventura e ano de lançamento entre 2000 e 2010
# Logo em seguida faz-se um agrupamento de acordo com as colunas "release_year" e "Genero",
# Com o objetivo de realizar a contagem por grupos
movies <- movies %>%
filter((Genero=='Dramas' | Genero=='Action & Adventure' | Genero=='Comedies') & (release_year > 2000 & release_year < 2010)) %>%
group_by(release_year, Genero) %>%
summarise(quantidade=n())
# Agora plota-se o gráfico.
# Criando a "base" do barplot
fig <- plot_ly(data = movies,
x=~unique(release_year)
)
# Adicionando o primeiro genero (Drama)
fig <- fig %>%
add_trace(y=~filter(movies,Genero=='Dramas')$quantidade,
type='bar',
name='Drama')
# Adicionando o genero Ação e Aventura
fig <- fig %>%
add_trace(y=~filter(movies,Genero=='Action & Adventure')$quantidade,
type='bar',
name='Ação e Aventura')
# Adicionando o genero Comédia
fig <- fig %>%
add_trace(y=~filter(movies,Genero=='Comedies')$quantidade,
type='bar',
name='Comédia')
# Por fim, altera-se os títulos dos eixos.
fig <- fig %>%
layout(xaxis=list(title='Ano de Lançamento'),
yaxis=list(title='Qnt. de lançamentos'))
# Plota-se o gráfico:
fig