R data-viz Quandl Bitcoin
Jindřich Lacko
Korelace vývoje v čase technikami jazyka R
V sítích internetu jsem zachytil otázku, zda spolu koreluje vývoj burzy s vývojem ceny alternativního aktiva – kryptoměny Bitcoin.
Tato otázka je zajímavá ve dvou směrech:
- za prvé vyvolává silné spojení (Bitcoin i akcie jsou sexy & co Čech, to odborník)
- a za druhé představuje elegantní příležitost pro demonstraci zpracování dat technikami jazyka R
Nejsem fanda kryptoměn, a tak se zaměřím na druhý bod (fanda erka jsem velmi).
Základním vstupem pro mne budou datové řady ceny Bitcoinu a indexu NASDAQ Composite. Obě jsou vyjádřeny v USD, takže jsou relativně souměrné.
Data čerpám online pomocí balíčku Quandl - zdrojů dat je celá řada, ale tento jsem si oblíbil.
library(Quandl)
library(tidyverse)
# bitcoin coby aktivum alterantivní
alternative <- Quandl("BCHARTS/BITSTAMPUSD",
start_date="2020-01-01",
end_date="2021-01-31")
# NASDAQ Composite coby plain vanilla akciová investice
vanilla <- Quandl("NASDAQOMX/COMP",
start_date="2020-01-01",
end_date="2021-01-31")
Prvním krokem bude vytvoření data.framu data
, ve kterém držím ty datumy, pro které jsou známé ceny obou aktiv a tedy srovnání má smysl.
Snadno spočtu jednoduchý korelační koeficient za celé období.
# společné hodnoty v jednom objektu
data <- tibble(date_valid = intersect(alternative$Date,
vanilla$`Trade Date`) %>%
as.Date()) %>%
inner_join(alternative, by = c("date_valid" = "Date")) %>%
inner_join(vanilla, by = c("date_valid" = "Trade Date")) %>%
select(date_valid, btc = Close, vanilla = `Index Value`) %>%
arrange(date_valid) # seřadit...
# indexy - hodnoty normované na 100 k Novému roku 2020
# korelační koeficient
cor(data$btc,
data$vanilla)
## [1] 0.7931062
To je poměrně vysoká hodnota korelace.
V druhém kroku se proto zaměřím na měsíční hodnoty korelačního koeficientu; jako významné si označím takové měsíce, ve kterých je korelace větší nežli dvě třetiny.
mesice <- data %>%
mutate(mesic = format(date_valid, "%Y-%m")) %>% # rok a měsíc (bez dne)
group_by(mesic) %>% # seskupím podle měsíce / zahodím den
# začátek & konec měsíce (pro graf) + korelační koeficient obou aktiv
summarise(start = min(lubridate::floor_date(date_valid, unit = "month")),
end = max(lubridate::ceiling_date(date_valid, unit = "month")),
korelace = cor(btc, vanilla)) %>%
mutate(vysoka = (abs(korelace) >2/3)) # korelace nad .66 je vysoká
mesice
## # A tibble: 13 x 5
## mesic start end korelace vysoka
## * <chr> <date> <date> <dbl> <lgl>
## 1 2020-01 2020-01-01 2020-02-01 0.545 FALSE
## 2 2020-02 2020-02-01 2020-03-01 0.831 TRUE
## 3 2020-03 2020-03-01 2020-04-01 0.875 TRUE
## 4 2020-04 2020-04-01 2020-05-01 0.609 FALSE
## 5 2020-05 2020-05-01 2020-06-01 0.206 FALSE
## 6 2020-06 2020-06-01 2020-07-01 -0.153 FALSE
## 7 2020-07 2020-07-01 2020-08-01 0.275 FALSE
## 8 2020-08 2020-08-01 2020-09-01 -0.0946 FALSE
## 9 2020-09 2020-09-01 2020-10-01 0.615 FALSE
## 10 2020-10 2020-10-01 2020-11-01 -0.235 FALSE
## 11 2020-11 2020-11-01 2020-12-01 0.793 TRUE
## 12 2020-12 2020-12-01 2021-01-01 0.911 TRUE
## 13 2021-01 2021-01-01 2021-02-01 -0.568 FALSE
Vidím, že mezi cenou bitcoinu a indexem NASDAQ byla vysoká korelace ve dvou zásadně odlišných obdobích:
- únoru a březnu, které byly charakterizovány pocitem “Všichni tu umřeme!”
- od listopadu do prosince, které lze charakterizovat pocitem “Trump je mrtvej, kámo…”
Ve třetím kroku proto podám zprávu graficky, kdy období vysoké korelace podbarvím šedivě.
Abych mohl snáze zobrazit ve stejném grafu tak odlišné veličiny jako akciový index a cenu bitcoinu, tak si obě znormalizuju na index - kdy počáteční hodnota = 100.
# doplním sloupec s indexem - hodnotou normovanou na 100 k Novému roku 2020
data <- data %>%
mutate(btc_idx = 100 * btc / btc[1],
vanilla_idx = 100 * vanilla / vanilla[1])
# grafické overview / normované hodnoty
ggplot(data = data) +
geom_rect(data = filter(mesice, vysoka),
mapping = aes(xmin = start, xmax = end,
ymin = -Inf, ymax = Inf),
fill = "gray45",
alpha = .5) +
geom_line(aes(y = btc_idx, x = date_valid), color = "red") +
geom_line(aes(y = vanilla_idx, x = date_valid), color = "blue") +
# poslední popisek NASDAQ
geom_text(data = top_n(data, 1), aes(x = date_valid,
y = vanilla_idx,
label = round(vanilla_idx, 0)),
hjust = -1/2) +
# poslední popisek bitcoinu
geom_text(data = top_n(data, 1), aes(x = date_valid,
y = btc_idx,
label = round(btc_idx, 0)),
hjust = -1/2) +
labs(title = "vývoj BTC vs NASDAQ Composite",
subtitle = "100 = hodnota k Novému roku 2020") +
theme_minimal() +
theme(axis.title = element_blank())
Závěr, který z toho činím, je opět dvojí:
- korelační analýza je technikami jazyka R umí být elegantní a přesvědčivá :)
- Bitcoin a akcie se zdají korelovat v období silné davové psychózy (pozitivní, i negativní - v datech je obojí…)
Poprvé zveřejněno na www.jla-data.net/cze/2021-01-21-burza-a-bitcoin.