LISTA DE EXERCÍCIOS 1

LISTA DE EXERCÍCIOS 1

Questão 1:

uma porção do cereal “a” contém 50 calorias, 20g de carboidratos e 2g de gordura e uma porção do cereal

uma porção do cereal “b” contém 100 calorias, 15g de carboidratos e 1g de gordura.

Coloque essa informações em um DataFrame utilizando a biblioteca Pandas. Não esqueça de adicionar nomes nas colunas e linhas.

No R

cereal = c("a", "b")
calorias = c(50, 100)
carboidrato = c(20, 15)
gordura = c(2, 1)

dados1 = data.frame(cereal, calorias, carboidrato, gordura)
dados1
  cereal calorias carboidrato gordura
1      a       50          20       2
2      b      100          15       1

No Python. Primeiro é necessário abrir a biblioteca necessária e instalar o pandas no R mesmo.

#install.packages("reticulate")
#library(reticulate)
#py_install("pandas")

Após instalar o Python no Rstudio:

import pandas as pd

dados = {
  "cereal" : ["a", "b"],
  "calorias" : [50, 100],
  "carboidrato" : [20, 15],
  "gordura" : [2, 1]
  }

pydados1 = pd.DataFrame(dados)

print(pydados1)
  cereal  calorias  carboidrato  gordura
0      a        50           20        2
1      b       100           15        1

Questão 1

C é o 2

A é o 1

B é o 3

Questão 3

Primeiro, importa-se o banco de dados, no R e no Python respectivamente:

dados2 <- read.csv("https://raw.githubusercontent.com/mvinoba/notebooks-for-binder/master/dados.csv")
pydados2 = pd.read_csv('https://raw.githubusercontent.com/mvinoba/notebooks-for-binder/master/dados.csv')

a. Quantas observações tem no conjunto de dados?

nrow(dados2)
[1] 1997
len(pydados2)
1997
pydados2.shape
(1997, 8)

b. Quais são os atributos presentes no conjunto de dados com as respectivas unidades?

a = names(dados2)
unidades = c("unidade", "unidade", "unidade", "unidade", "m2", "localidade", "Reais", "Reais")

dados2unidades = data.frame(a, unidades)
dados2unidades
           a   unidades
1 condominio    unidade
2    quartos    unidade
3     suites    unidade
4      vagas    unidade
5       area         m2
6     bairro localidade
7      preco      Reais
8        pm2      Reais
a = pydados2.columns.tolist()
b = ["unidade", "unidade", "unidade", "unidade", "m2", "localidade", "Reais", "Reais"]
pydados2unidades = pd.DataFrame(b, a) #não sei pq precisei inverter a ordem das colunas, que estranho.
pydados2unidades
                     0
condominio     unidade
quartos        unidade
suites         unidade
vagas          unidade
area                m2
bairro      localidade
preco            Reais
pm2              Reais

c. Qual bairro possui a maior quantidade de apartamentos disponíveis? Qual medida de tendência central é essa?

Para isso utilizaremos a moda. Nem o R nem o pacote Pandas no Python possuem comandos específicos para descobrir a moda.

table(dados2$bairro)

  Botafogo Copacabana      Gávea     Grajaú    Ipanema     Leblon     Tijuca 
       307        346        205        237        281        280        341 
names(which.max(table(dados2$bairro)))
[1] "Copacabana"
qtdbairros = pydados2['bairro'].value_counts()
qtdbairros.idxmax()
'Copacabana'
qtdbairros.max()
346

d. Em que bairro se encontra o apartamento mais caro? Qual o valor dos seus outros atributos?

maiscaro = which.max(dados2$preco) #achando o com maior valor

dados2$bairro[maiscaro]
[1] "Ipanema"
dados2[maiscaro, ] #acho que esse é o melhor jeito
    condominio quartos suites vagas area  bairro    preco      pm2
437       4600       3      1     2  350 Ipanema 13600000 38857.14
maiscaro = pydados2.loc[pydados2['preco'].idxmax()]
maiscaro['bairro']
'Ipanema'
maiscaro
condominio        4600
quartos              3
suites             1.0
vagas              2.0
area               350
bairro         Ipanema
preco         13600000
pm2           38857.14
Name: 436, dtype: object

E. Em que bairro se encontra o apartamento mais caro por metro quadrado? Qual o valor dos seus outros atributos?

#basicamente repetir o comando anterior, sugiro apagar a coluna pm2 e colocar os alunos para calcular o preço por m2 por eles mesmos.
maiscaro2 = which.max(dados2$pm2) #achando o com maior valor

dados2$bairro[maiscaro2]
[1] "Copacabana"
dados2[maiscaro2, ]
     condominio quartos suites vagas area     bairro    preco      pm2
1532       1415       3      1     1  150 Copacabana 11500000 76666.67
maiscaro2 = pydados2.loc[pydados2['pm2'].idxmax()]
maiscaro2['bairro']
'Copacabana'
maiscaro
condominio        4600
quartos              3
suites             1.0
vagas              2.0
area               350
bairro         Ipanema
preco         13600000
pm2           38857.14
Name: 436, dtype: object

f. Qual o valor dos atributos que melhor representa um apartamento por bairro? Justifique. Em estatística, para determinar qual dado representa melhor um grupo de dados, utilizamos medidas de tendência central como média, moda ou mediana.

#Essa é um pouco "tricky", para ficar pequeno vou usar o comando for para repetir. 
#Além disso vou criar uma variável c com o nome das colunas. A princípio eu fiz boxplot para todas as variáveis mas não ficou legal, então vou usar moda para algumas e o boxplot com a média para as outras.
#Também usei o ggplot2 para deixar o gráfico mais bonito.
library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.3.3
#c = names(dados2)[sapply(dados2, is.numeric)] todas as variáveis, mas não ficou legal.
c = c("condominio", "area", "preco", "pm2") #somente as variáveis que ficaram boas

for (var in c) {
    p <- ggplot(dados2, aes_string(x = "bairro", y = var, fill = "bairro")) +
    geom_boxplot() +
    stat_summary(fun = mean, geom = "point", shape = 20, size = 3, color = "white") + # Adiciona a média como um ponto branco
    theme_minimal() +
    theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
    labs(title = paste("Boxplot de", var, "por Bairro com Média"),
         x = "Bairro",
         y = var)
  
  
  print(p)
}
Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
ℹ Please use tidy evaluation idioms with `aes()`.
ℹ See also `vignette("ggplot2-in-packages")` for more information.

#agora vou puxar a frequência de quartos, suites e vagas para descobrir as modas e as médias por bairro. Não ficou muito estético mas foi a melhor ideia q eu tive.
bairros <- unique(dados2$bairro)
resultadofinal = list()
for(bairro in bairros) {
  dados_bairro = dados2[dados2$bairro == bairro, ]
  freq_quartos = table(dados_bairro$quartos)
  freq_suites = table(dados_bairro$suites)
  freq_vagas = table(dados_bairro$vagas)
   dadofrebairro = data.frame("1" = c(freq_quartos["1"], freq_suites["1"], freq_vagas["1"]),
                        "2" = c(freq_quartos["2"], freq_suites["2"], freq_vagas["2"]),
                        "3" = c(freq_quartos["3"], freq_suites["3"], freq_vagas["3"]),
                        row.names = c("quartos", "suites", "vagas"))
   dadofrebairro[is.na(dadofrebairro)] <- 0 #neeessário para excluir os nas
   dadofrebairro$media <- rowMeans(dadofrebairro) #adicionadno a média como última coluna
   resultadofinal[[bairro]] <- dadofrebairro
   
}
  resultadofinal
$Botafogo
         X1  X2  X3    media
quartos  83 108 116 102.3333
suites  269  13   9  97.0000
vagas   254  48   2 101.3333

$Copacabana
         X1  X2  X3    media
quartos 102 107 137 115.3333
suites  285  32   3 106.6667
vagas   312  25   0 112.3333

$Gávea
         X1 X2 X3    media
quartos  57 79 69 68.33333
suites  173 16  2 63.66667
vagas   161 41  1 67.66667

$Grajaú
         X1  X2 X3    media
quartos  57 100 80 79.00000
suites  216   7  0 74.33333
vagas   194  34  2 76.66667

$Ipanema
         X1 X2  X3    media
quartos  72 86 123 93.66667
suites  228 31  15 91.33333
vagas   224 49   3 92.00000

$Leblon
         X1 X2  X3    media
quartos  63 96 121 93.33333
suites  237 23   5 88.33333
vagas   211 46   5 87.33333

$Tijuca
         X1  X2  X3    media
quartos  83 130 128 113.6667
suites  296  13   0 103.0000
vagas   289  49   1 113.0000

Esse eu não sei fazer em python. Vou ficar devendo hahaha.

g. Qual a variação de preços por bairro?

#eu até acho que tem o var aí funcionaria, mas eu preferi criar um dataframe.
precomaximo = aggregate(preco ~ bairro, data = dados2, max)
precominimo = aggregate(preco ~ bairro, data = dados2, min)
names(precomaximo)[2] = "MaxPreco"
names(precominimo)[2] = "MinPreco"
precovar <- merge(precomaximo, precominimo, by = "bairro")
precovar$Variacao = precovar$MaxPreco - precovar$MinPreco

print(precovar)
      bairro MaxPreco MinPreco Variacao
1   Botafogo  4199000   130000  4069000
2 Copacabana 11500000   239000 11261000
3      Gávea  5100000   470000  4630000
4     Grajaú   900000   159000   741000
5    Ipanema 13600000   499000 13101000
6     Leblon 10500000   230000 10270000
7     Tijuca  1600000   205000  1395000

Em python agora:

#lembre-se de verificar o import pandas as pd

precomaximo = pydados2.groupby('bairro')['preco'].max().reset_index(name='MaxPreco')
precominimo = pydados2.groupby('bairro')['preco'].min().reset_index(name='MinPreco')

precovar = pd.merge(precomaximo, precominimo, on='bairro')

precovar['Variacao'] = precovar['MaxPreco'] - precovar['MinPreco']

print(precovar)
       bairro  MaxPreco  MinPreco  Variacao
0    Botafogo   4199000    130000   4069000
1  Copacabana  11500000    239000  11261000
2      Grajaú    900000    159000    741000
3       Gávea   5100000    470000   4630000
4     Ipanema  13600000    499000  13101000
5      Leblon  10500000    230000  10270000
6      Tijuca   1600000    205000   1395000

4. Dada os boxplots abaixo sobre a performance de três modelos para determinada tarefa, qual deles você escolheria como melhor? Justifique.

O modelo 1 é o menos desejável, porquanto tem a menor mediana e os outliers superiores indicam pouca consistência.

O modelo 2