1 Exercícios Data Frame

Objetivo: Criar um DataFrame contendo informações sobre 5 pessoas. Use as funções discutidas no código anterior para explorar e manipular os dados.

Criação de Dataframe:

  1. Crie um DataFrame com as seguintes colunas:Nome (nomes das pessoas);Idade (idade em anos); Altura (altura em centímetros); Peso (peso em quilogramas).

Exemplo de dados:

Nome Idade Altura_cm Peso_kg
Ana 25 165 68.4
Bruno 30 175 80.2
Carla 22 156 55.8
Daniel 35 187 90.7
Elisa 28 173 62.9
    # Criação do DataFrame com informações de 5 pessoas
df_pessoas <- data.frame(
  Nome = c("Ana", "Bruno", "Carla", "Daniel", "Elisa"),
  Idade = c(25, 30, 22, 35, 28),
  Altura_cm = c(165, 175, 160, 180, 170),
  Peso_kg = c(68, 80, 55, 90, 62)
  )

Exploração de dados:

  1. Use a função str() para verificar a estrutura do DataFrame (tipos de dados, número de colunas e linhas).
# Verifica a estrutura do DataFrame
str(df_pessoas)
## 'data.frame':    5 obs. of  4 variables:
##  $ Nome     : chr  "Ana" "Bruno" "Carla" "Daniel" ...
##  $ Idade    : num  25 30 22 35 28
##  $ Altura_cm: num  165 175 160 180 170
##  $ Peso_kg  : num  68 80 55 90 62
  1. Use summary() para obter um resumo estatístico das colunas numéricas do DataFrame.
# Exibe um resumo estatístico das colunas numéricas
summary(df_pessoas)
##      Nome               Idade      Altura_cm      Peso_kg  
##  Length:5           Min.   :22   Min.   :160   Min.   :55  
##  Class :character   1st Qu.:25   1st Qu.:165   1st Qu.:62  
##  Mode  :character   Median :28   Median :170   Median :68  
##                     Mean   :28   Mean   :170   Mean   :71  
##                     3rd Qu.:30   3rd Qu.:175   3rd Qu.:80  
##                     Max.   :35   Max.   :180   Max.   :90

Manipulação de dados:

  1. Acesse os dados da terceira pessoa (Carla).
# Acessa a terceira pessoa (linha)
df_pessoas[3,]
##    Nome Idade Altura_cm Peso_kg
## 3 Carla    22       160      55
  1. Acesse toda a coluna Altura_cm
# Acessa a coluna 'Altura' inteira
df_pessoas$Altura_cm
## [1] 165 175 160 180 170
  1. Acesse os valores de Peso das duas primeiras pessoas.
# Acessa os pesos das duas primeiras pessoas
df_pessoas[1:2, "Peso_kg"]
## [1] 68 80

Cálculos estatísticos:

  1. Calcule a média e a mediana da coluna Idade.
# Calcula a média e a mediana da coluna 'Idade'
mean(df_pessoas$Idade)
## [1] 28
median(df_pessoas$Idade)
## [1] 28
  1. Calcule a média e a mediana da coluna Peso.
# Calcula a média e a mediana da coluna 'Peso'
mean(df_pessoas$Peso)
## [1] 71
median(df_pessoas$Peso)
## [1] 68

Ordenação:

  1. Ordene a coluna Altura_cm em ordem crescente.
# Ordena a coluna 'Altura' em ordem crescente
sort(df_pessoas$Altura)
## [1] 160 165 170 175 180
  1. Ordene a coluna Idade em ordem decrescente.
# Ordena a coluna 'Idade' em ordem decrescente
sort(df_pessoas$Idade, decreasing = TRUE)
## [1] 35 30 28 25 22

Visualização:

  1. Mostre as primeiras 3 linhas do DataFrame.
# Exibe as primeiras 3 linhas do DataFrame
head(df_pessoas, 3)
##    Nome Idade Altura_cm Peso_kg
## 1   Ana    25       165      68
## 2 Bruno    30       175      80
## 3 Carla    22       160      55
  1. Mostre as últimas 2 linhas do DataFrame.
# Exibe as últimas 2 linhas do DataFrame
tail(df_pessoas, 2)
##     Nome Idade Altura_cm Peso_kg
## 4 Daniel    35       180      90
## 5  Elisa    28       170      62

2 Exercícios summarise

Usando summarise():

  1. Agrupe todas as colunas que envolvem o time mandante em um novo objeto.
mandante <- summarise(dados_serie_a, .by = c('time_mandante', 'tecnico_mandante', 'colocacao_mandante',
                                             'valor_equipe_titular_mandante', 'idade_media_titular_mandante',
                                             'gols_mandante', 'gols_1_tempo_mandante'))
head(mandante)
##   time_mandante tecnico_mandante colocacao_mandante
## 1 Vasco da Gama       Zé Ricardo                  6
## 2 Vasco da Gama       Zé Ricardo                  7
## 3 Vasco da Gama       Zé Ricardo                  2
## 4 Vasco da Gama       Zé Ricardo                 12
## 5 Vasco da Gama       Zé Ricardo                 10
## 6      Ceará SC            Lisca                 20
##   valor_equipe_titular_mandante idade_media_titular_mandante gols_mandante
## 1                      12950000                         28.5             2
## 2                      11600000                         28.0             4
## 3                      10550000                         28.3             2
## 4                       9750000                         25.7             1
## 5                      13350000                         27.8             1
## 6                       7800000                         30.1             1
##   gols_1_tempo_mandante
## 1                     0
## 2                     0
## 3                     1
## 4                     1
## 5                     0
## 6                     0
  1. Agrupe todas as colunas que envolvem o time visitante em um novo objeto.
visitante <- summarise(dados_serie_a, .by = c('time_visitante', 'tecnico_visitante', 'colocacao_visitante',
                                             'valor_equipe_titular_visitante', 'idade_media_titular_visitante',
                                             'gols_visitante', 'gols_1_tempo_visitante'))
head(visitante)
##   time_visitante  tecnico_visitante colocacao_visitante
## 1    Atlético-MG      Thiago Larghi                  13
## 2     América-MG   Enderson Moreira                   3
## 3     EC Vitória     Vágner Mancini                  19
## 4         Paraná     Rogério Micale                  20
## 5       Botafogo   Alberto Valentim                  14
## 6   Sport Recife Claudinei Oliveira                   7
##   valor_equipe_titular_visitante idade_media_titular_visitante gols_visitante
## 1                       21850000                          28.6              1
## 2                        9000000                          29.0              1
## 3                       11080000                          27.7              3
## 4                        7700000                          25.2              0
## 5                       14050000                          26.7              2
## 6                       12600000                          30.4              0
##   gols_1_tempo_visitante
## 1                      1
## 2                      1
## 3                      1
## 4                      0
## 5                      2
## 6                      0
  1. Armazene a data, o estádio, o público e o número de gols da partida em um novo objeto.
dados_partidas <- summarise(dados_serie_a, .by = c('data', 'estadio', 'publico', 'gols_partida'))
head(dados_partidas)
##         data                   estadio publico gols_partida
## 1 2018-04-15      Estádio São Januário    7197            3
## 2 2018-05-06      Estádio São Januário    3311            5
## 3 2018-05-13      Estádio São Januário    3542            5
## 4 2018-05-31      Estádio São Januário    4584            1
## 5 2018-06-03      Estádio São Januário    9454            3
## 6 2018-07-19 Estádio Presidente Vargas   15197            1

3 Exercícios Pipe

Usando o operador pipe %>%: Refaça os exercícios do módulo anterior usando o %>%

  1. Agrupe todas as colunas que envolvem o time mandante em um novo objeto.
mandante <- dados_serie_a %>% 
  summarise(.by = c('time_mandante', 'tecnico_mandante', 'colocacao_mandante',
                                             'valor_equipe_titular_mandante', 'idade_media_titular_mandante',
                                             'gols_mandante', 'gols_1_tempo_mandante'))
head(mandante)
##   time_mandante tecnico_mandante colocacao_mandante
## 1 Vasco da Gama       Zé Ricardo                  6
## 2 Vasco da Gama       Zé Ricardo                  7
## 3 Vasco da Gama       Zé Ricardo                  2
## 4 Vasco da Gama       Zé Ricardo                 12
## 5 Vasco da Gama       Zé Ricardo                 10
## 6      Ceará SC            Lisca                 20
##   valor_equipe_titular_mandante idade_media_titular_mandante gols_mandante
## 1                      12950000                         28.5             2
## 2                      11600000                         28.0             4
## 3                      10550000                         28.3             2
## 4                       9750000                         25.7             1
## 5                      13350000                         27.8             1
## 6                       7800000                         30.1             1
##   gols_1_tempo_mandante
## 1                     0
## 2                     0
## 3                     1
## 4                     1
## 5                     0
## 6                     0
  1. Agrupe todas as colunas que envolvem o time visitante em um novo objeto.
visitante <- dados_serie_a %>%
  summarise(.by = c('time_visitante', 'tecnico_visitante', 'colocacao_visitante',
                    'valor_equipe_titular_visitante', 'idade_media_titular_visitante',
                    'gols_visitante', 'gols_1_tempo_visitante'))
head(visitante)
##   time_visitante  tecnico_visitante colocacao_visitante
## 1    Atlético-MG      Thiago Larghi                  13
## 2     América-MG   Enderson Moreira                   3
## 3     EC Vitória     Vágner Mancini                  19
## 4         Paraná     Rogério Micale                  20
## 5       Botafogo   Alberto Valentim                  14
## 6   Sport Recife Claudinei Oliveira                   7
##   valor_equipe_titular_visitante idade_media_titular_visitante gols_visitante
## 1                       21850000                          28.6              1
## 2                        9000000                          29.0              1
## 3                       11080000                          27.7              3
## 4                        7700000                          25.2              0
## 5                       14050000                          26.7              2
## 6                       12600000                          30.4              0
##   gols_1_tempo_visitante
## 1                      1
## 2                      1
## 3                      1
## 4                      0
## 5                      2
## 6                      0
  1. Armazene a data, o estádio, o público e o número de gols da partida em um novo objeto.
dados_partidas <- dados_serie_a %>%
  summarise(.by = c('data', 'estadio', 'publico', 'gols_partida'))
head(dados_partidas)
##         data                   estadio publico gols_partida
## 1 2018-04-15      Estádio São Januário    7197            3
## 2 2018-05-06      Estádio São Januário    3311            5
## 3 2018-05-13      Estádio São Januário    3542            5
## 4 2018-05-31      Estádio São Januário    4584            1
## 5 2018-06-03      Estádio São Januário    9454            3
## 6 2018-07-19 Estádio Presidente Vargas   15197            1

4 Exercícios Select

Usando select():

  1. Selecione todas as colunas que envolvem o time mandante.
dados_serie_a %>%
  select(contains("mandante")) %>% 
  head()
##   time_mandante tecnico_mandante colocacao_mandante
## 1 Vasco da Gama       Zé Ricardo                  6
## 2 Vasco da Gama       Zé Ricardo                  7
## 3 Vasco da Gama       Zé Ricardo                  2
## 4 Vasco da Gama       Zé Ricardo                 12
## 5 Vasco da Gama       Zé Ricardo                 10
## 9      Ceará SC            Lisca                 20
##   valor_equipe_titular_mandante idade_media_titular_mandante gols_mandante
## 1                      12950000                         28.5             2
## 2                      11600000                         28.0             4
## 3                      10550000                         28.3             2
## 4                       9750000                         25.7             1
## 5                      13350000                         27.8             1
## 9                       7800000                         30.1             1
##   gols_1_tempo_mandante
## 1                     0
## 2                     0
## 3                     1
## 4                     1
## 5                     0
## 9                     0
  1. Selecione todas as colunas que envolvem o time visitante.
dados_serie_a %>%
  select(contains("visitante")) %>% 
  head()
##   time_visitante  tecnico_visitante colocacao_visitante
## 1    Atlético-MG      Thiago Larghi                  13
## 2     América-MG   Enderson Moreira                   3
## 3     EC Vitória     Vágner Mancini                  19
## 4         Paraná     Rogério Micale                  20
## 5       Botafogo   Alberto Valentim                  14
## 9   Sport Recife Claudinei Oliveira                   7
##   valor_equipe_titular_visitante idade_media_titular_visitante gols_visitante
## 1                       21850000                          28.6              1
## 2                        9000000                          29.0              1
## 3                       11080000                          27.7              3
## 4                        7700000                          25.2              0
## 5                       14050000                          26.7              2
## 9                       12600000                          30.4              0
##   gols_1_tempo_visitante
## 1                      1
## 2                      1
## 3                      1
## 4                      0
## 5                      2
## 9                      0
  1. Selecione todas as colunas que envolvem gols.
dados_serie_a %>%
  select(contains("gols")) %>% 
  head()
##   gols_mandante gols_visitante gols_1_tempo_mandante gols_1_tempo_visitante
## 1             2              1                     0                      1
## 2             4              1                     0                      1
## 3             2              3                     1                      1
## 4             1              0                     1                      0
## 5             1              2                     0                      2
## 9             1              0                     0                      0
##   gols_partida
## 1            3
## 2            5
## 3            5
## 4            1
## 5            3
## 9            1
  1. Selecione todas as colunas que não são numéricas.
dados_serie_a %>%
  select(-where(is.numeric)) %>% 
  head()
##         data                   estadio time_mandante time_visitante
## 1 2018-04-15      Estádio São Januário Vasco da Gama    Atlético-MG
## 2 2018-05-06      Estádio São Januário Vasco da Gama     América-MG
## 3 2018-05-13      Estádio São Januário Vasco da Gama     EC Vitória
## 4 2018-05-31      Estádio São Januário Vasco da Gama         Paraná
## 5 2018-06-03      Estádio São Januário Vasco da Gama       Botafogo
## 9 2018-07-19 Estádio Presidente Vargas      Ceará SC   Sport Recife
##   tecnico_mandante  tecnico_visitante
## 1       Zé Ricardo      Thiago Larghi
## 2       Zé Ricardo   Enderson Moreira
## 3       Zé Ricardo     Vágner Mancini
## 4       Zé Ricardo     Rogério Micale
## 5       Zé Ricardo   Alberto Valentim
## 9            Lisca Claudinei Oliveira
  1. Selecione apenas o nome dos times e os seus técnicos.
dados_serie_a %>%
  select(time_mandante, time_visitante, tecnico_mandante, tecnico_visitante) %>% 
  head()
##   time_mandante time_visitante tecnico_mandante  tecnico_visitante
## 1 Vasco da Gama    Atlético-MG       Zé Ricardo      Thiago Larghi
## 2 Vasco da Gama     América-MG       Zé Ricardo   Enderson Moreira
## 3 Vasco da Gama     EC Vitória       Zé Ricardo     Vágner Mancini
## 4 Vasco da Gama         Paraná       Zé Ricardo     Rogério Micale
## 5 Vasco da Gama       Botafogo       Zé Ricardo   Alberto Valentim
## 9      Ceará SC   Sport Recife            Lisca Claudinei Oliveira

5 Exercícios Group by

Usando group_by():

  1. Agrupe pelo time mandante e faça a média de gols do time por partida.
media_gols_mandante <- dados_serie_a %>%
  group_by(time_mandante) %>%
  summarize(media_gols_mandantes = mean(gols_mandante))
head(media_gols_mandante)
## # A tibble: 6 × 2
##   time_mandante media_gols_mandantes
##   <chr>                        <dbl>
## 1 América-MG                    1.18
## 2 Athletico-PR                  1.43
## 3 Atlético-GO                   1.17
## 4 Atlético-MG                   1.76
## 5 Atlético-PR                   1.62
## 6 Avaí FC                       1.22
  1. Agrupe pelo time visitante e faça a soma dos gols do time.
soma_gols_visitante <- dados_serie_a %>%
  group_by(time_visitante) %>%
  summarize(soma_gols_visitante = sum(gols_visitante))
head(soma_gols_visitante)
## # A tibble: 6 × 2
##   time_visitante soma_gols_visitante
##   <chr>                        <int>
## 1 América-MG                      91
## 2 Athletico-PR                   104
## 3 Atlético-GO                    135
## 4 Atlético-MG                    305
## 5 Atlético-PR                    117
## 6 Avaí FC                         71
  1. Agrupe pelo dia e faça a média do valor do time mandante e do visitante.
media_valor_por_dia <- dados_serie_a %>%
  group_by(day(data)) %>%
  summarize(media_valor_time_mandante = mean(valor_equipe_titular_mandante),
            media_valor_time_visitante = mean(valor_equipe_titular_visitante))
head(media_valor_por_dia)
## # A tibble: 6 × 3
##   `day(data)` media_valor_time_mandante media_valor_time_visitante
##         <int>                     <dbl>                      <dbl>
## 1           1                 17550737.                  16643872.
## 2           2                 16094246.                  15607526.
## 3           3                 19450739.                  16603253.
## 4           4                 14962086.                  16459756.
## 5           5                 18039296.                  16127872.
## 6           6                 18830207.                  16205842.
  1. Agrupe pelo estádio e faça a média do público.
media_publico_estadio <- dados_serie_a %>%
  group_by(estadio) %>%
  summarize(media_de_publico = mean(publico))
head(media_publico_estadio)
## # A tibble: 6 × 2
##   estadio          media_de_publico
##   <chr>                       <dbl>
## 1 Allianz Parque             22882.
## 2 Arena Barueri              13596.
## 3 Arena Condá                 7879.
## 4 Arena Fonte Nova           21175.
## 5 Arena Joinville             9085.
## 6 Arena MRV                  34831.

6 Exercício Final

  1. Filtre o ano de 2015, agrupe pelo estádio e faça a média de gols por partida.
media_gols_estadio_2015 <- dados_serie_a %>% 
  filter(year(data) == 2015) %>% 
  group_by(estadio) %>% 
  summarise(media_gols = mean(gols_partida))
head(media_gols_estadio_2015)
## # A tibble: 6 × 2
##   estadio          media_gols
##   <chr>                 <dbl>
## 1 Allianz Parque         2.94
## 2 Arena Condá            2.21
## 3 Arena Joinville        1.83
## 4 Arena Pantanal         1.5 
## 5 Arena da Baixada       2.61
## 6 Arena das Dunas        3
  1. Filtre o time mandante do “Athletico-PR” e mostre os jogos nos quais a idade média foi maior ou igual a 26.2 anos.
athletico_idade_media <- dados_serie_a %>% 
  filter(time_mandante == "Athletico-PR") %>% 
  filter(idade_media_titular_mandante >= 26.2)
head(athletico_idade_media)
##         data rodada     estadio publico time_mandante time_visitante
## 1 2023-07-16     15 Ligga Arena   17091  Athletico-PR       EC Bahia
## 2 2023-04-15      1 Ligga Arena   15329  Athletico-PR          Goiás
## 3 2023-06-24     12 Ligga Arena   30144  Athletico-PR    Corinthians
## 4 2023-08-16     19 Ligga Arena   18444  Athletico-PR      Cuiabá-MT
## 5 2023-11-25     35 Ligga Arena   22056  Athletico-PR  Vasco da Gama
## 6 2023-12-03     37 Ligga Arena   21056  Athletico-PR         Santos
##   tecnico_mandante    tecnico_visitante colocacao_mandante colocacao_visitante
## 1                                                        8                  16
## 2      Paulo Turra        Émerson Ávila                  3                  18
## 3  Wesley Carvalho Vanderlei Luxemburgo                  9                  15
## 4  Wesley Carvalho        Toni Oliveira                  6                   8
## 5  Wesley Carvalho           Ramón Díaz                  8                  16
## 6  Wesley Carvalho    Marcelo Fernandes                  8                  15
##   valor_equipe_titular_mandante valor_equipe_titular_visitante
## 1                          5290                           2760
## 2                          2680                            895
## 3                          5440                           4755
## 4                          6160                            853
## 5                          3220                           2395
## 6                          6010                           2590
##   idade_media_titular_mandante idade_media_titular_visitante gols_mandante
## 1                         26.2                          26.6             2
## 2                         26.9                          29.0             2
## 3                         26.7                          26.0             1
## 4                         27.3                          30.0             2
## 5                         28.1                          28.0             0
## 6                         27.1                          28.8             3
##   gols_visitante gols_1_tempo_mandante gols_1_tempo_visitante gols_partida
## 1              0                     2                      0            2
## 2              0                     1                      0            2
## 3              0                     1                      0            1
## 4              0                     1                      0            2
## 5              0                     0                      0            0
## 6              0                     1                      0            3
  1. Filtre o time visitante do “Atlético-PR”, agrupe por ano e mostre a média de público dos jogos.
atletico_media_publico_ano <- dados_serie_a %>% 
  filter(time_visitante == "Atlético-PR") %>% 
  group_by(year(data)) %>% 
  summarise(media_publico = mean(publico))
head(atletico_media_publico_ano)
## # A tibble: 6 × 2
##   `year(data)` media_publico
##          <dbl>         <dbl>
## 1         2010        12707.
## 2         2011        16130.
## 3         2013        12892.
## 4         2014        11340.
## 5         2015        13578.
## 6         2016        15639.
  1. Filtre o time do “Paraná”, tanto quanto mandante e visitante, e calcule o número de vitórias, empates e vitórias.
resultado_parana <- dados_serie_a %>%
  filter(time_mandante == "Paraná" | time_visitante == "Paraná") %>%
  summarise(
    vitorias = sum((time_mandante == "Paraná" & gols_mandante > gols_visitante) |
                   (time_visitante == "Paraná" & gols_visitante > gols_mandante)),
    empates = sum(gols_mandante == gols_visitante),
    derrotas = sum((time_mandante == "Paraná" & gols_mandante < gols_visitante) |
                   (time_visitante == "Paraná" & gols_visitante < gols_mandante))
  )
head(resultado_parana)
##   vitorias empates derrotas
## 1        4      11       23
  1. Filtre o time do “Coritiba FC” e calcule o número total de gols que fez como visitante em cada ano.
gols_coritiba_visitante <- dados_serie_a %>% 
  filter(time_visitante == "Coritiba FC") %>% 
  group_by(year(data)) %>% 
  summarise(soma_gols = sum(gols_visitante))
head(gols_coritiba_visitante)
## # A tibble: 6 × 2
##   `year(data)` soma_gols
##          <dbl>     <int>
## 1         2011        17
## 2         2012        20
## 3         2013        13
## 4         2014        18
## 5         2015        16
## 6         2016        12