Import stock prices

stocks <- tq_get(c("NVDA", "SHOP" , "TTD"),
                 get = "stock.prices",
                 from = "2025-01-01")
            
stocks
## # A tibble: 282 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 NVDA   2025-01-02  136   139.  135.  138. 198247200     138.
##  2 NVDA   2025-01-03  140.  145.  140.  144. 229322500     144.
##  3 NVDA   2025-01-06  149.  152.  148.  149. 265377400     149.
##  4 NVDA   2025-01-07  153.  153.  140.  140. 351782200     140.
##  5 NVDA   2025-01-08  143.  144.  138.  140. 227349900     140.
##  6 NVDA   2025-01-10  137.  140.  134.  136. 207602500     136.
##  7 NVDA   2025-01-13  130.  133.  130.  133. 204808900     133.
##  8 NVDA   2025-01-14  136.  136.  130.  132. 195590500     132.
##  9 NVDA   2025-01-15  134.  136.  131.  136. 185217300     136.
## 10 NVDA   2025-01-16  139.  139.  133.  134. 209235600     134.
## # ℹ 272 more rows

Plot stock prices

stocks %>%
    
    ggplot(aes(x = date, y = adjusted, color = symbol)) +
    geom_line()

Apply the dply verbs from chapter 5

Filter Rows

stocks %>% filter(adjusted > 100)
## # A tibble: 175 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 NVDA   2025-01-02  136   139.  135.  138. 198247200     138.
##  2 NVDA   2025-01-03  140.  145.  140.  144. 229322500     144.
##  3 NVDA   2025-01-06  149.  152.  148.  149. 265377400     149.
##  4 NVDA   2025-01-07  153.  153.  140.  140. 351782200     140.
##  5 NVDA   2025-01-08  143.  144.  138.  140. 227349900     140.
##  6 NVDA   2025-01-10  137.  140.  134.  136. 207602500     136.
##  7 NVDA   2025-01-13  130.  133.  130.  133. 204808900     133.
##  8 NVDA   2025-01-14  136.  136.  130.  132. 195590500     132.
##  9 NVDA   2025-01-15  134.  136.  131.  136. 185217300     136.
## 10 NVDA   2025-01-16  139.  139.  133.  134. 209235600     134.
## # ℹ 165 more rows

Arrange Rows

arrange(stocks, desc(high), desc(low))
## # A tibble: 282 × 8
##    symbol date        open  high   low close    volume adjusted
##    <chr>  <date>     <dbl> <dbl> <dbl> <dbl>     <dbl>    <dbl>
##  1 NVDA   2025-01-07  153.  153.  140.  140. 351782200     140.
##  2 NVDA   2025-01-06  149.  152.  148.  149. 265377400     149.
##  3 NVDA   2025-01-24  148.  149.  142.  143. 234657600     143.
##  4 NVDA   2025-01-22  145.  148.  144.  147. 237651400     147.
##  5 NVDA   2025-01-23  145.  147.  144.  147. 155915500     147.
##  6 NVDA   2025-01-03  140.  145.  140.  144. 229322500     144.
##  7 NVDA   2025-01-08  143.  144.  138.  140. 227349900     140.
##  8 NVDA   2025-02-18  141.  143.  138.  139. 219176600     139.
##  9 NVDA   2025-01-21  139.  142.  137.  141. 197749000     141.
## 10 NVDA   2025-02-21  140.  141.  134.  134. 228217600     134.
## # ℹ 272 more rows

Select Columns

select(stocks, date)
## # A tibble: 282 × 1
##    date      
##    <date>    
##  1 2025-01-02
##  2 2025-01-03
##  3 2025-01-06
##  4 2025-01-07
##  5 2025-01-08
##  6 2025-01-10
##  7 2025-01-13
##  8 2025-01-14
##  9 2025-01-15
## 10 2025-01-16
## # ℹ 272 more rows
select(stocks, date, high, low)
## # A tibble: 282 × 3
##    date        high   low
##    <date>     <dbl> <dbl>
##  1 2025-01-02  139.  135.
##  2 2025-01-03  145.  140.
##  3 2025-01-06  152.  148.
##  4 2025-01-07  153.  140.
##  5 2025-01-08  144.  138.
##  6 2025-01-10  140.  134.
##  7 2025-01-13  133.  130.
##  8 2025-01-14  136.  130.
##  9 2025-01-15  136.  131.
## 10 2025-01-16  139.  133.
## # ℹ 272 more rows
select(stocks, date, open, close)
## # A tibble: 282 × 3
##    date        open close
##    <date>     <dbl> <dbl>
##  1 2025-01-02  136   138.
##  2 2025-01-03  140.  144.
##  3 2025-01-06  149.  149.
##  4 2025-01-07  153.  140.
##  5 2025-01-08  143.  140.
##  6 2025-01-10  137.  136.
##  7 2025-01-13  130.  133.
##  8 2025-01-14  136.  132.
##  9 2025-01-15  134.  136.
## 10 2025-01-16  139.  134.
## # ℹ 272 more rows

Add Columns

mutate(stocks,
       gain = close - open) %>%
    
    # Select days gain
    select(gain)
## # A tibble: 282 × 1
##       gain
##      <dbl>
##  1   2.31 
##  2   4.46 
##  3   0.840
##  4 -12.9  
##  5  -2.47 
##  6  -1.54 
##  7   3.24 
##  8  -4.29 
##  9   2.59 
## 10  -5.07 
## # ℹ 272 more rows

Summarize With Groups

stocks %>%
    
    # Group by symbol
    group_by(symbol) %>%
    
    # Calculate average close price
    summarise(close = mean(close, na.rm = TRUE)) %>%
    
    # Sort it
    arrange(close)
## # A tibble: 3 × 2
##   symbol close
##   <chr>  <dbl>
## 1 TTD     78.4
## 2 SHOP   103. 
## 3 NVDA   121.