R을 활용한 Rpa 예제

네이버 금융 주요 시장지표 수집 및 이메일 발송

Dr.Kevin 09/14/2019

안녕하세요? 이번 포스팅에서는 R을 활용한 업무 자동화(RPA) 예제를 한 가지 소개하려고 합니다. 실제로 은행권에서는 2015년부터 RPA가 많은 관심을 끌기 시작했습니다. 저도 회사에 근무하면서 Python을 활용하여 간단한 업무 자동화를 실현한 바 있습니다. 오늘은 제가 회사에 다닐 때 구현했던 업무 자동화 예제를 R로 실행해보고자 합니다. 그리고 이 내용을 확대 발전하여 올해 12월에 패스트캠퍼스 강의로 소개할 예정입니다.

전일 금융시장 지표 수집 및 보고 자동화

제가 마지막으로 다녔던 회사는 리테일 은행 소속의 금융연구소였습니다. 그래서 매일 아침마다 전일자 금융시장 주요 지표를 정리해서 임원들에게 데이터를 제공하곤 했습니다. 문제는 이런 업무를 사람이 수작업으로 했다는 것이죠. 그러면 안되었는데 말입니다. 아무튼 수작업으로 했던 업무를 간단하게 자동화하고 나니 많은 연구원들이 사소한 업무로부터 해방되었습니다. 그렇습니다. 단순 업무는 컴퓨터가 하는 것이 맞습니다. 사람은 훨씬 복잡하고 어려운 일을 해야죠.

아무튼 당시 제가 Python으로 자동화했던 업무의 일부를 R로 구현해보았습니다. 이 포스팅을 읽는 분들께서도 자신이 회사에서 하는 반복적인 단순 업무를 자동화할 수 있는지 고민해보는 시간을 가져보셨으면 하는 바람입니다.

네이버 금융 사이트에서 주요 지표 수집하기

아래 코드를 실행하면 네이버 금융 사이트에서 국내외 증권시장의 전일자 주요 지표를 수집할 수 있습니다. 자세한 코드는 소개해드리지 못하는 점 양해해주시기 바랍니다.

# 필요한 패키지를 불러옵니다. 
library(tidyverse)
library(googlesheets)
# 네이버 금융 사이트에서 주요 시장 지표를 수집합니다. 
source(file = 'Finance_Market_Index.R') 
# tbl 객체를 출력합니다. 
print(x = tbl)
##         구분 전일 종가 전일 대비
## 1     코스피  2,049.20    +0.84%
## 2     코스닥    630.37    +1.14%
## 3  코스피200    270.84    +0.77%
## 4   다우산업 27,219.52    +0.14%
## 5 나스닥종합  8,176.72    -0.22%
## 6     S&P500  3,007.39    -0.07%
## 7    원/달러  1,194.50    +0.21%
## 8        WTI     54.85    -0.43%

이렇게 수집한 데이터를 구글드라이브에 미리 저장해놓은 구글쉬트 양식에 입력하여 PDF로 저장하고 이메일로 발송하는 것을 자동화하는 것이 이번 포스팅의 목표입니다. 아래 이미지는 제가 구글드라이브에 저장해놓은 구글쉬트 양식입니다.

구글쉬트 인증하기

네이버 금융 사이트에서 수집한 데이터를 구글쉬트 양식에 추가하려면 googlesheets 패키지를 사용해야 합니다. 이 패키지를 호출한 다음 인증 과정을 거쳐야 하는데요. gs_auth() 함수를 실행하면 간단하게 해결할 수 있습니다. 당연히 Google ID가 있어야 합니다. 그래야 구글드라이브를 연결할 수 있으니까요.

# 구글드라이브를 연결합니다. 
gs_auth(new_user = TRUE)

위 함수를 실행하면 크롬 브라우저에서 구글드라이브 관련 팝업이 열리면서 구글드라이브 인증을 실행하는 단계를 거칩니다. 제가 기존 포스팅과 달리 진행과정을 세세하게 정리해드리지 않는 이유는, 이 과정을 쉽게 해결할 수 있을 것으로 판단했기 때문입니다. 혹시 진행해보시고 궁금한 사항이 있으면 댓글로 남겨주세요.

구글쉬트 양식 파일 복사하고 내용 추가하기

구글쉬트 인증을 완료했다면 이번에는 미리 작성해놓은 양식 파일을 복사하여 새로운 파일을 생성할 차례입니다. 제가 미리 작성해놓은 구글쉬트 양식파일명은 Market_Report_Form입니다. 아래 이미지에서 현재 저장되어 있는 구글쉬트 파일들을 확인할 수 있습니다.

이제 Market_Report_Form 파일을 지정한 다음 새로운 파일명으로 복사하겠습니다.

# 구글쉬트 양식파일을 지정합니다. 
formFile <- gs_title(x = 'Market_Report_Form')

# 구글쉬트로 새로 저장할 파일명을 지정합니다. 
fileName <- 'Market_Report_Today'

# 구글쉬트 양식파일을 복사합니다. 
gs_copy(from = formFile, to = fileName)

위 코드를 실행하면 기존에 작성해놓은 구글쉬트 양식파일을 복제한 Market_Report_Today라는 파일이 구글드라이브에 생성됩니다.

복제 파일 생성을 성공했다면 이제 해당 파일에 미리 수집해놓은 데이터를 저장할 차례입니다.

# 복사한 파일을 지정합니다. 
uploadFile <- gs_title(x = fileName)

# 오늘 날짜를 저장합니다. 
today <- Sys.Date() %>% format(format = '%Y%m%d')

# 복사한 파일에 '기준일자'를 추가합니다. 
gs_edit_cells(ss = uploadFile,
              ws = 'Sheet1', 
              anchor = 'D2', 
              input = str_c('기준일자 : ', today) )

# 복사한 파일에 미리 수집해놓은 데이터를 추가합니다. 
gs_edit_cells(ss = uploadFile,
              ws = 'Sheet1', 
              anchor = 'C5', 
              input = tbl[, 2:3], 
              col_names = FALSE)

새롭게 복사한 파일에 기준일자와 네이버 금융 사이트에서 수집한 데이터를 추가한 것을 확인할 수 있습니다.

이제 이 파일을 PDF로 저장합니다. PDF 파일은 현재 설정되어 있는 작업경로에 저장됩니다.

# 전일자 시장지표 파일을 PDF로 저장합니다. 
gs_download(from = uploadFile, 
            ws = 'Sheet1', 
            to = str_c(fileName, '.pdf'), 
            overwrite = TRUE)

현재 R 작업경로로 이동하여 확인해보면 방금 저장한 PDF 파일이 새로 생성되었음을 확인할 수 있습니다. 이제 마지막으로 이 파일을 이메일로 전송할 차례입니다.

이메일로 발송하기

R에서 작업한 객체를 이메일로 발송하려면 여러 가지 방법이 있겠지만 가장 손쉬운 방법으로는 우리나라에서 R 최고수 중 한 분인 박찬엽님께서 만들어 배포한 sendgridr 패키지를 활용하는 것입니다. 이 패키지를 활용하려면 Sendgrid 웹사이트에서 회원가입하고, API Key를 발급받아야 합니다. 이 내용 또한 친절하게 소개해드리지 못하는 점 양해해주시기 바랍니다. 다만 sendgridr 패키지를 설치하는 방법은 아래 코드를 확인하시기 바랍니다.

# sendgridr 패키지를 설치합니다. 
remotes::install_github('mrchypark/sendgridr')
# 패키지를 설치했으면 불러옵니다. 
library(sendgridr)

이제 저장해놓은 PDF 파일을 첨부해서 이메일을 발송하겠습니다.

# 이메일을 발송합니다. 
mail() %>% 
  from(email = 'drkevin.rpa@gmail.com', name = 'RPA Master') %>% 
  to(email = 'drkevin2022@gmail.com', name = 'Dr.Kevin') %>% 
  subject(subject = 'Market Report') %>% 
  content(content = '전일 기준 국내/외 금융시장 주요 지표입니다.') %>% 
  attachments(path = 'Market_Report_Today.pdf', 
              name = '전일 기준 국내/외 금융시장 주요 지표') %>% 
  send()

위 코드를 실행한 다음 to 인자에 할당된 이메일 주소로 가서 이메일이 제대로 발송되었는지 확인해보세요. 아래 이미지처럼 메일이 잘 발송되었습니다.

이번 포스팅은 여기에서 마무리하겠지만 여기에 추가할 수 있는 내용으로는 ‘데이터 수집 및 이메일 발송 자동화’가 될 것입니다. Windows 사용자라면 TaskScheduler를 사용하고, Mac 사용자라면 Crontab을 사용하면 될 것입니다. 자동화 관련 내용은 구글에서 쉽게 찾을 수 있을 것이므로 이번 포스팅은 이것으로 마무리하겠습니다. 감사합니다.

Written on September 14, 2019