독수리 요새
R quantmod 패키지 본문
2021-2023 사이 방송통신대 통계학과를 이수했었지만 이거 아무리 배워도 뭐 할 수가 없다고 생각했었다. 이유:
1. 데이터를 어디서 구하고, 어떻게 불러와 정리해야 할지 몰라 큰 어려움을 겪었다. 구해 놓은 데이터도 잘 불러와지지 않았다.
2. 교과서는 기본 문법서에 불과해, 내가 원하는 자료를 다루는 코드를 작성하는 데 전혀 도움이 되지 않았다.
3. 코드가 작동하지 않을 때, 문제의 원인을 파악하기도 어려웠고, 적절한 검색어를 설정하는 방법조차 알지 못했다.
4. 이 기술을 활용해 무엇을 만들 수 있는지, 어디까지 할 수 있는지 전혀 감이 오지 않았다. 심지어 내가 무엇을 만들고 싶은지조차 정의하기 어려웠다.
5. 차트 스타일을 약간 바꾸는 간단한 작업조차 일일이 코드를 작성해야 해서 비효율적으로 느껴졌다.
즉 배워봤자 효율이 너무 낮아서 결국은 엑셀을 쓰게 되더라고. 그러나 생성형 AI의 눈부신 발전으로 ChatGPT에게 질문을 던져가면서 R과 Python을 써보고 있는데 재미있네. 야후 파이낸스 데이터를 R로 불러들여서 이렇게 가지고 놀 수 있다.
# 필요한 패키지 설치 및 로드
if (!require("quantmod")) install.packages("quantmod")
if (!require("ggplot2")) install.packages("ggplot2")
library(quantmod)
library(ggplot2)
# 데이터 가져오기
getSymbols("MSFT", src = "yahoo") # Microsoft
getSymbols("^GSPC", src = "yahoo") # S&P 500
# 2020년 1월 1일 이후 데이터 필터링
msft_filtered <- MSFT["2020-01-01::"]
sp500_filtered <- GSPC["2020-01-01::"]
# 누적 상승률 계산
msft_cum_return <- (Cl(msft_filtered) / as.numeric(Cl(msft_filtered)[1]) - 1) * 100
sp500_cum_return <- (Cl(sp500_filtered) / as.numeric(Cl(sp500_filtered)[1]) - 1) * 100
# 데이터 프레임 생성
msft_cum <- data.frame(date = index(msft_cum_return), return = as.numeric(msft_cum_return), symbol = "Microsoft")
sp500_cum <- data.frame(date = index(sp500_cum_return), return = as.numeric(sp500_cum_return), symbol = "S&P 500")
# 데이터 병합
all_cum_returns <- rbind(msft_cum, sp500_cum)
# 그래프 생성
ggplot(all_cum_returns, aes(x = date, y = return, color = symbol)) +
geom_line(size = 1) +
labs(
title = "Microsoft와 S&P 500의 누적 상승률 비교 (2020년 1월 이후)",
x = "날짜",
y = "누적 상승률 (%)"
) +
theme_minimal() +
scale_color_manual(values = c("Microsoft" = "blue", "S&P 500" = "red"))
# 필요한 패키지 설치 및 로드
if (!require("quantmod")) install.packages("quantmod")
if (!require("ggplot2")) install.packages("ggplot2")
library(quantmod)
library(ggplot2)
# 데이터 가져오기
getSymbols("SCHD", src = "yahoo") # SCHD
getSymbols("^DJI", src = "yahoo") # DOW JONES
# 2020년 1월 1일 이후 데이터 필터링
schd_filtered <- SCHD["2010-01-01::"]
dowjones_filtered <- DJI["2010-01-01::"]
# 누적 상승률 계산
schd_cum_return <- (Cl(schd_filtered) / as.numeric(Cl(schd_filtered)[1]) - 1) * 100
dowjones_cum_return <- (Cl(dowjones_filtered) / as.numeric(Cl(dowjones_filtered)[1]) - 1) * 100
# 데이터 프레임 생성
schd_cum <- data.frame(date = index(schd_cum_return), return = as.numeric(schd_cum_return), symbol = "Schwab U.S. Dividend Equity ETF")
dowjones_cum <- data.frame(date = index(dowjones_cum_return), return = as.numeric(dowjones_cum_return), symbol = "Dow Jones Industrial Average")
# 데이터 병합
all_cum_returns <- rbind(schd_cum, dowjones_cum)
# 그래프 생성
ggplot(all_cum_returns, aes(x = date, y = return, color = symbol)) +
geom_line(size = 1) +
labs( title = "SCHD와 Dow Jones 지수의 누적 상승률 비교 (2010년 1월 이후)", x = "날짜", y = "누적 상승률 (%)" ) +
theme_minimal() +
scale_color_manual(values = c("Schwab U.S. Dividend Equity ETF" = "blue", "Dow Jones Industrial Average" = "red")) +
theme( legend.position = "bottom" # 범례 위치를 아래로 설정 )
# 필요한 패키지 설치 및 로드
if (!require("quantmod")) install.packages("quantmod")
if (!require("ggplot2")) install.packages("ggplot2")
library(quantmod)
library(ggplot2)
# NVIDIA 주가 데이터 가져오기
getSymbols("NVDA", src = "yahoo")
# 2024년도 데이터 필터링
nvda_2024 <- NVDA["2024-01-01::2024-12-31"]
# 볼린저 밴드 계산
nvda_bbands <- BBands(Cl(nvda_2024), n = 20, sd = 2) # 20일 기준, 표준편차 2배
# 볼린저 밴드 데이터 병합
nvda_with_bbands <- cbind(nvda_2024, nvda_bbands)
# 데이터 프레임 생성 (msft_bbands_df)
nvda_bbands_df <- data.frame(
date = index(nvda_with_bbands), # 날짜
close = as.numeric(Cl(nvda_with_bbands)), # 종가
upper = as.numeric(nvda_with_bbands$up), # 상한선
lower = as.numeric(nvda_with_bbands$dn), # 하한선
middle = as.numeric(nvda_with_bbands$mavg) # 이동평균선
)
# ggplot 시각화 (범례 추가)
ggplot(nvda_bbands_df, aes(x = date)) +
geom_line(aes(y = close, color = "Close Price"), size = 1, linetype = "solid") + # 종가
geom_line(aes(y = upper, color = "Upper Band"), size = 1, linetype = "dashed") + # 상한선
geom_line(aes(y = lower, color = "Lower Band"), size = 1, linetype = "dashed") + # 하한선
geom_line(aes(y = middle, color = "Moving Average"), size = 1, linetype = "solid") + # 이동평균선
scale_color_manual(
values = c("Close Price" = "blue", "Upper Band" = "red", "Lower Band" = "green", "Moving Average" = "orange")
) +
labs(
title = "NVIDIA 2024년 주가와 볼린저 밴드",
x = "날짜",
y = "주가 (USD)",
color = "Legend" # 범례 제목 설정
) +
theme_minimal() +
theme(legend.position = "bottom") # 범례를 그래프 아래로 이동
# 필요한 패키지 설치 및 로드
if (!require("quantmod")) install.packages("quantmod")
if (!require("ggplot2")) install.packages("ggplot2")
library(quantmod)
library(ggplot2)
# Microsoft 주가 데이터 가져오기
getSymbols("MSFT", src = "yahoo")
# 2024년도 데이터 필터링
msft_2024 <- MSFT["2024-01-01::2024-12-31"]
# 볼린저 밴드 계산
msft_bbands <- BBands(Cl(msft_2024), n = 20, sd = 2) # 20일 기준, 표준편차 2배
# 볼린저 밴드 데이터 병합
msft_with_bbands <- cbind(msft_2024, msft_bbands)
# 데이터 프레임 생성 (msft_bbands_df)
msft_bbands_df <- data.frame(
date = index(msft_with_bbands), # 날짜
close = as.numeric(Cl(msft_with_bbands)), # 종가
upper = as.numeric(msft_with_bbands$up), # 상한선
lower = as.numeric(msft_with_bbands$dn), # 하한선
middle = as.numeric(msft_with_bbands$mavg) # 이동평균선
)
# ggplot 시각화 (범례 추가)
ggplot(msft_bbands_df, aes(x = date)) +
geom_line(aes(y = close, color = "Close Price"), size = 1, linetype = "solid") + # 종가
geom_line(aes(y = upper, color = "Upper Band"), size = 1, linetype = "dashed") + # 상한선
geom_line(aes(y = lower, color = "Lower Band"), size = 1, linetype = "dashed") + # 하한선
geom_line(aes(y = middle, color = "Moving Average"), size = 1, linetype = "solid") + # 이동평균선
scale_color_manual(
values = c("Close Price" = "blue", "Upper Band" = "red", "Lower Band" = "green", "Moving Average" = "orange")
) +
labs(
title = "Microsoft 2024년 주가와 볼린저 밴드",
x = "날짜",
y = "주가 (USD)",
color = "Legend" # 범례 제목 설정
) +
theme_minimal() +
theme(legend.position = "bottom") # 범례를 그래프 아래로 이동
# 필요한 패키지 설치 및 로드
if (!require("quantmod")) install.packages("quantmod")
if (!require("ggplot2")) install.packages("ggplot2")
library(quantmod)
library(ggplot2)
# 데이터 가져오기
getSymbols("NVDA", src = "yahoo") # Nvidia
getSymbols("BTC-USD", src = "yahoo") # Bitcoin USD
# 2020년 1월 1일 이후 데이터 필터링
nvda_filtered <- NVDA["2020-01-01::"]
btcusd_filtered <- `BTC-USD`["2020-01-01::"] # 역따옴표로 변수 이름 처리
# 누적 상승률 계산
nvda_cum_return <- (Cl(nvda_filtered) / as.numeric(Cl(nvda_filtered)[1]) - 1) * 100
btcusd_cum_return <- (Cl(btcusd_filtered) / as.numeric(Cl(btcusd_filtered)[1]) - 1) * 100
# 데이터 프레임 생성
nvda_cum <- data.frame(date = index(nvda_cum_return), return = as.numeric(nvda_cum_return), symbol = "Nvidia")
btcusd_cum <- data.frame(date = index(btcusd_cum_return), return = as.numeric(btcusd_cum_return), symbol = "Bitcoin USD")
# 데이터 병합
all_cum_returns <- rbind(nvda_cum, btcusd_cum)
# symbol 열을 팩터로 변환
all_cum_returns$symbol <- as.factor(all_cum_returns$symbol)
# 그래프 생성
ggplot(all_cum_returns, aes(x = date, y = return, color = symbol)) +
geom_line(size = 1) +
labs(
title = "Nvidia와 Bitcoin USD의 누적 상승률 비교 (2020년 1월 이후)",
x = "날짜",
y = "누적 상승률 (%)"
) +
theme_minimal() +
scale_color_manual(
values = c("Nvidia" = "blue", "Bitcoin USD" = "red")
)
# 필요한 패키지 설치 및 로드
if (!require("quantmod")) install.packages("quantmod")
if (!require("ggplot2")) install.packages("ggplot2")
library(quantmod)
library(ggplot2)
# 데이터 가져오기
getSymbols("^GSPC", src = "yahoo") # S&P 500 지수
getSymbols("GC=F", src = "yahoo") # 금 가격 (Gold Futures, USD)
# 2020년 1월 1일 이후 데이터 필터링
sp500_filtered <- GSPC["2020-01-01::"]
gold_filtered <- `GC=F`["2020-01-01::"]
# 일일 종가 데이터 추출
sp500_close <- Cl(sp500_filtered)
gold_close <- Cl(gold_filtered)
# 공통 날짜로 데이터 병합
merged_data <- merge(sp500_close, gold_close, all = FALSE)
colnames(merged_data) <- c("S&P 500", "Gold Price")
# 상관관계 계산
correlation <- cor(merged_data[, 1], merged_data[, 2], use = "complete.obs")
print(paste("S&P 500과 금 가격의 상관계수:", round(correlation, 2)))
# 산점도 시각화
ggplot(data = as.data.frame(merged_data), aes(x = `S&P 500`, y = `Gold Price`)) +
geom_point(alpha = 0.5, color = "blue") +
geom_smooth(method = "lm", color = "red", linetype = "dashed") + # 회귀선 추가
labs(
title = "S&P 500 지수와 금 가격의 상관관계 (2020년 이후)",
x = "S&P 500 지수 종가",
y = "금 가격 종가 (USD)"
) +
theme_minimal()
# 필요한 패키지 설치 및 로드
if (!require("quantmod")) install.packages("quantmod")
if (!require("ggplot2")) install.packages("ggplot2")
library(quantmod)
library(ggplot2)
# 데이터 가져오기
getSymbols("GC=F", src = "yahoo") # 금 가격 (Gold Futures, USD)
getSymbols("BTC-USD", src = "yahoo") # 비트코인 가격 (Bitcoin USD)
# 2020년 1월 1일 이후 데이터 필터링
gold_filtered <- `GC=F`["2020-01-01::"]
btc_filtered <- `BTC-USD`["2020-01-01::"]
# 일일 종가 데이터 추출
gold_close <- Cl(gold_filtered)
btc_close <- Cl(btc_filtered)
# 공통 날짜로 데이터 병합
merged_data <- merge(gold_close, btc_close, all = FALSE)
colnames(merged_data) <- c("Gold Price", "Bitcoin Price")
# 상관계수 계산
correlation <- cor(merged_data[, 1], merged_data[, 2], use = "complete.obs")
print(paste("금 가격과 비트코인 가격의 상관계수:", round(correlation, 2)))
# 산점도 시각화
ggplot(data = as.data.frame(merged_data), aes(x = `Gold Price`, y = `Bitcoin Price`)) +
geom_point(alpha = 0.5, color = "blue") +
geom_smooth(method = "lm", color = "red", linetype = "dashed") + # 회귀선 추가
labs(
title = "금 가격과 비트코인 가격의 상관관계 (2020년 이후)",
x = "금 가격 종가 (USD)",
y = "비트코인 가격 종가 (USD)"
) +
theme_minimal()
'미분류' 카테고리의 다른 글
INR/USD 환율과 금값 사이의 관계 시각화 (0) | 2024.12.23 |
---|---|
한국어와 일본어에서 "이다"와 "있다"의 차이점 (4) | 2024.12.08 |
괴상한 한자들 (0) | 2023.09.29 |
출사표에 나오는 신기한 한자 (1) | 2023.09.28 |
출사표 번역 (0) | 2023.09.28 |