45년만의 계엄령 선포 후 환율 변동 충격: R 시각화로 원달러 환율 그래프 생성하기

2024년 12월 3일 밤 10시 27분, 한국에서 계엄령 선포로 금융시장이 큰 혼란에 빠졌습니다. 계엄령은 국가 비상사태 시 정부가 군사적 통제를 통해 질서를 유지하는 조치로, 경제에 심각한 영향을 미칠 수 있습니다.

이번 포스트에서는 계엄령 선포가 환율에 미친 영향을 R 시각화방법을 활용해 분석하고, 원달러 환율 그래프를 생성하는 과정을 공유합니다. 이를 통해 계엄령의 경제적 영향을 정량적으로 이해하고, 향후 대응 방안을 모색해보세요.

R로 시각화한 계엄령 발표후 원달러 환율 그래프
( R로 시각화 해본 원달러 환율 그래프 )

1. 필요한 패키지 설치 및 로드

먼저, 데이터를 가져오고 시각화하기 위해 필요한 R 패키지를 설치하고 로드합니다. 여기서 패키지 로드 전에 해당 패키지가 설치되어 있지 않으면 코드 실행시 콘솔창에서 패키지 설치가 필요함을 알려줍니다. 아마도 여러분은 alphavantager 라는 설치가 안되어 있을 겁니다. 아래 소스코드 에서 설치명령어(install.packages)를 참고해서 미설치된 패키지를 설치하시면 됩니다.

# 필요한 패키지 설치 및 로드
# install.packages("alphavantager") # 패키지 설치시 패키지 이름 양옆에 " 필수!
library(alphavantager)
library(dplyr)
library(ggplot2)
library(lubridate)
  • Alpha Vantage주식, 외환, 암호화폐 데이터를 제공하는 무료 API를 제공합니다. 사용자는 이메일 등록 후 무료 API 키를 발급받아 데이터를 활용할 수 있습니다. 이 API는 JSON 및 CSV 형식으로 데이터를 제공하며, 주식의 시계열 데이터, 기업의 기본 정보, 기술적 지표 등을 포함합니다. 무료 API는 하루 최대 500회, 분당 최대 5회의 요청이 가능하며, 실시간 데이터는 외환 및 암호화폐에 한정됩니다

2. Alpha Vantage API 설정 및 데이터 다운로드

Alpha Vantage API를 사용하여 분 단위 환율 데이터를 다운로드합니다. 이 API를 사용하려면 발급받은 API 키가 필요합니다.

# Alpha Vantage API 키 설정
av_api_key("YOUR_ALPHA_VANTAGE_API_KEY")  # 발급받은 API 키 입력

# 분 단위 데이터 다운로드
symbol <- "USDKRW"  # 원-달러 환율 심볼
data <- av_get(
  symbol = symbol,
  av_fun = "TIME_SERIES_INTRADAY",  # Intraday 데이터를 가져오기 위한 설정
  interval = "1min",                # 1분 단위 간격
  outputsize = "full"               # 전체 데이터 요청
)

3. 데이터 전처리

다운로드한 데이터를 전처리하여 분석에 적합한 형태로 변환합니다. 여기에는 시간대 변환과 필요한 열 선택이 포함됩니다.

# 데이터 전처리 (UTC → KST 변환 포함)
data_filtered <- data %>%
  select(timestamp, open, high, low, close) %>%  # 필요한 열 선택
  mutate(timestamp = with_tz(timestamp, tzone = "Asia/Seoul")) %>%  # UTC → KST 변환
  filter(
    timestamp >= as.POSIXct("2024-12-03 00:00:00", tz = "Asia/Seoul") &  # KST 기준 12월 3일 0시 이후
      timestamp < as.POSIXct("2024-12-05 00:00:00", tz = "Asia/Seoul")   # KST 기준 12월 4일 자정까지
  ) %>%
  arrange(timestamp)  # 시간순 정렬

# 데이터가 비어 있는 경우 처리
if (nrow(data_filtered) == 0) {
  stop("No data available for the selected time range. Please check the API or time range.")
}

4. 평균, 최고, 최저 환율 계산

전처리된 데이터를 바탕으로 평균, 최고, 최저 환율을 계산합니다.

# 평균, 최고, 최저 환율 계산
avg_rate <- mean(data_filtered$close, na.rm = TRUE)  # 평균 환율 계산
max_rate <- max(data_filtered$high, na.rm = TRUE)    # 최고 환율 계산
min_rate <- min(data_filtered$low, na.rm = TRUE)     # 최저 환율 계산

5. 원달러 환율 그래프 시각화하기

ggplot2를 사용하여 환율 변동을 시각화합니다.

# 시각화
ggplot(data_filtered, aes(x = timestamp, y = close)) +
  geom_line(color = "steelblue", size = 1.2) +  # 환율 변화 선 그래프
  geom_hline(yintercept = avg_rate, color = "darkgreen", linetype = "dashed", size = 1) +  # 평균 환율 수평선
  geom_hline(yintercept = max_rate, color = "red", linetype = "dotted", size = 1) +       # 최고 환율 수평선
  geom_hline(yintercept = min_rate, color = "blue", linetype = "dotted", size = 1) +      # 최저 환율 수평선
  annotate("text", x = max(data_filtered$timestamp), y = avg_rate,
           label = paste0("Average: ", round(avg_rate, 2)), vjust = -1, color = "darkgreen") + 
  annotate("text", x = max(data_filtered$timestamp), y = max_rate,
           label = paste0("Max: ", round(max_rate, 2)), vjust = -1, color = "red") + 
  annotate("text", x = max(data_filtered$timestamp), y = min_rate,
           label = paste0("Min: ", round(min_rate, 2)), vjust = 2, color = "blue") + 
  labs(
    title = "KRW/USD Exchange Rate from Midnight, Dec 3, 2024 (KST)",  
    subtitle = "1-Minute Interval Data via Alpha Vantage API",         
    x = "Time (KST)",                                                  
    y = "Exchange Rate (KRW per USD)"                                  
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(size = 18, face="bold"),    
    plot.subtitle= element_text(size=14),               
    axis.title= element_text(size=12),                  
    axis.text= element_text(size=10),                   
    axis.text.x= element_text(angle=45,hjust=1)         

6. 계엄령과 금융시장: 데이터의 의미

계엄령 선포는 금융시장에 엄청난 심리적, 실질적 충격을 주었습니다. R을 활용하면 이러한 데이터를 정량적으로 분석하고, 투자 결정을 내리는 데 도움을 줄 수 있습니다.

이 포스트에서 살펴본 원달러 환율 그래프 생성 코드는 환율 데이터를 직접 가져와 변화를 분석하고 시각화하는 방법을 보여줍니다. 이러한 방법은 단순히 숫자를 넘어서, 경제 상황을 종합적으로 이해하는 데 매우 유용합니다.

# 전체코드와 코드 세부해설

# 필요한 패키지 설치 및 로드
# install.packages("alphavantager")
library(alphavantager)
library(dplyr)
library(ggplot2)
library(lubridate)

# Alpha Vantage API 키 설정
av_api_key("YOUR_ALPHA_VANTAGE_API_KEY")  # 발급받은 API 키 입력

# 분 단위 데이터 다운로드
symbol <- "USDKRW"  # 원-달러 환율 심볼
data <- av_get(
  symbol = symbol,
  av_fun = "TIME_SERIES_INTRADAY",  # Intraday 데이터를 가져오기 위한 설정
  interval = "1min",                # 1분 단위 간격
  outputsize = "full"               # 전체 데이터 요청
)

# 데이터 전처리 (UTC → KST 변환 포함)
data_filtered <- data %>%
  select(timestamp, open, high, low, close) %>%  # 필요한 열 선택
  mutate(timestamp = with_tz(timestamp, tzone = "Asia/Seoul")) %>%  # UTC → KST 변환
  filter(
    timestamp >= as.POSIXct("2024-12-03 00:00:00", tz = "Asia/Seoul") &  # KST 기준 12월 3일 0시 이후
      timestamp < as.POSIXct("2024-12-05 00:00:00", tz = "Asia/Seoul")   # KST 기준 12월 4일 자정까지
  ) %>%
  arrange(timestamp)  # 시간순 정렬

# 데이터가 비어 있는 경우 처리
if (nrow(data_filtered) == 0) {
  stop("No data available for the selected time range. Please check the API or time range.")
}

# 평균, 최고, 최저 환율 계산
avg_rate <- mean(data_filtered$close, na.rm = TRUE)  # 평균 환율 계산
max_rate <- max(data_filtered$high, na.rm = TRUE)    # 최고 환율 계산
min_rate <- min(data_filtered$low, na.rm = TRUE)     # 최저 환율 계산

# 시각화
ggplot(data_filtered, aes(x = timestamp, y = close)) +
  geom_line(color = "steelblue", size = 1.2) +  # 환율 변화 선 그래프
  geom_hline(yintercept = avg_rate, color = "darkgreen", linetype = "dashed", size = 1) + 
  geom_hline(yintercept = max_rate, color = "red", linetype = "dotted", size = 1) +       
  geom_hline(yintercept = min_rate, color = "blue", linetype = "dotted", size = 1) +      
  annotate("text", x = max(data_filtered$timestamp), y = avg_rate,
           label = paste0("Average: ", round(avg_rate, 2)), vjust = -1, color = "darkgreen") + 
  annotate("text", x = max(data_filtered$timestamp), y = max_rate,
           label = paste0("Max: ", round(max_rate, 2)), vjust = -1, color = "red") + 
  annotate("text", x = max(data_filtered$timestamp), y = min_rate,
           label = paste0("Min: ", round(min_rate, 2)), vjust = 2, color = "blue") + 
  labs(
    title = "KRW/USD Exchange Rate from Midnight, Dec 3, 2024 (KST)",  
    subtitle = "1-Minute Interval Data via Alpha Vantage API",         
    x = "Time (KST)",                                                  
    y = "Exchange Rate (KRW per USD)"                                  
  ) +
  theme_minimal() +
  theme(
    plot.title=element_text(size=18, face="bold"),    
    plot.subtitle=element_text(size=14),               
    axis.title=element_text(size=12),                  
    axis.text=element_text(size=10),                   
    axis.text.x=element_text(angle=45,hjust=1)         
)

코드 해석

1. 패키지 설치 및 로드

   library(alphavantager)
   library(dplyr)
   library(ggplot2)
   library(lubridate)
  • alphavantager: Alpha Vantage API를 통해 금융 데이터를 가져오는 데 사용됩니다.
  • dplyr: 데이터 전처리 및 조작을 위한 패키지입니다.
  • ggplot2: 데이터 시각화를 위한 패키지입니다.
  • lubridate: 날짜 및 시간 조작을 위한 패키지입니다.

2. Alpha Vantage API 키 설정

   av_api_key("YOUR_ALPHA_VANTAGE_API_KEY")
  • Alpha Vantage API를 사용하기 위해 개인 API 키를 설정합니다.

3. 데이터 다운로드

   symbol <- "USDKRW"
   data <- av_get(
     symbol=symbol,
     av_fun="TIME_SERIES_INTRADAY",
     interval="1min",
     outputsize="full"
   )
  • symbol: 원-달러 환율 심볼을 설정합니다.
  • av_get: Alpha Vantage에서 분 단위로 원-달러 환율 데이터를 가져옵니다.

4. 데이터 전처리

   data_filtered <- data %>%
     select(timestamp, open, high, low, close) %>%
     mutate(timestamp=with_tz(timestamp, tzone="Asia/Seoul")) %>%
     filter(
       timestamp >= as.POSIXct("2024-12-03 00:00:00", tz="Asia/Seoul") &
       timestamp < as.POSIXct("2024-12-05 00:00:00", tz="Asia/Seoul")
     ) %>%
     arrange(timestamp)
  • select: 필요한 열만 선택합니다.
  • mutate: UTC 시간을 한국 표준시(KST)로 변환합니다.
  • filter: 지정된 날짜 범위 내의 데이터를 필터링합니다.
  • arrange: 데이터를 시간순으로 정렬합니다.

5. 데이터가 비어 있는 경우 처리

   if (nrow(data_filtered) == 0) {
     stop("No data available for the selected time range. Please check the API or time range.")
   }
  • 필터링된 데이터가 비어 있는 경우 오류 메시지를 출력하고 실행을 중단합니다.

6. 평균, 최고, 최저 환율 계산

   avg_rate <- mean(data_filtered$close, na.rm=TRUE)
   max_rate <- max(data_filtered$high, na.rm=TRUE)
   min_rate <- min(data_filtered$low, na.rm=TRUE)
  • 평균(avg_rate), 최고(max_rate), 최저(min_rate) 환율을 각각 계산합니다.

7. 원달러 환율 그래프 시각화 하기

   ggplot(data_filtered, aes(x=timestamp, y=close)) +
     geom_line(color="steelblue", size=1.2) +
     geom_hline(yintercept=avg_rate,color="darkgreen",linetype="dashed",size=1)+ 
     geom_hline(yintercept=max_rate,color="red",linetype="dotted",size=1)+       
     geom_hline(yintercept=min_rate,color="blue",linetype="dotted",size=1)+      
     annotate("text",x=max(data_filtered$timestamp),y=avg_rate,
              label=paste0("Average: ",round(avg_rate,2)),vjust=-1,color="darkgreen")+ 
     annotate("text",x=max(data_filtered$timestamp),y=max_rate,
              label=paste0("Max: ",round(max_rate,2)),vjust=-1,color="red")+ 
     annotate("text",x=max(data_filtered$timestamp),y=min_rate,
              label=paste0("Min: ",round(min_rate,2)),vjust=2,color="blue")+ 
     labs(
       title="KRW/USD Exchange Rate from Midnight, Dec3,2024(KST)",  
       subtitle="1-Minute Interval Data via Alpha Vantage API",
       x="Time (KST)",
       y="Exchange Rate (KRW per USD)"
     ) +
     theme_minimal() +
     theme(
       plot.title=element_text(size=18, face="bold"),
       plot.subtitle=element_text(size=14),
       axis.title=element_text(size=12),
       axis.text=element_text(size=10),
       axis.text.x=element_text(angle=45,hjust=1)
     )
  • geom_line: 환율의 변화를 선 그래프로 표시합니다.
  • geom_hline: 평균(녹색 점선), 최고(빨간 점선), 최저(파란 점선) 환율을 수평선으로 표시합니다.
  • annotate: 그래프에 각 수치의 텍스트 주석을 추가합니다.
  • labs: 그래프 제목과 축 레이블을 설정합니다.
  • theme_minimaltheme: 그래프의 스타일과 텍스트 크기를 설정합니다.

이 코드는 R 시각화 방법을 사용하여 Alpha Vantage API로부터 데이터를 가져와 분석하고 원달러 환율 그래프를 생성하는 과정을 보여줍니다. (생성된 그래프를 보면 날짜가 좀 맞지 않는데 이건 시간체계 때문인 것으로 보이며 조금 더 연구해서 한국현지시간에 맞춰서 바꿔 보도록 하겠습니다.)

유사한 게시물