RmariaDB 다량의 데이터 업로드 메모

아래는  네이버 차트에서 크롤링 한 다음에, RMariaDB에 Insert 하는 장면이다.  이것은 ERP시스템에 있는 데이터를 R로 정기적으로 업데이트 해주는 역할을 한다.   


사용할 일이 있어서 아래와 같이 메모 한다.   


# 라이브러리를 불러온다. 
  library(httr)
  library(rvest)
  library(lubridate)
## 
## 다음의 패키지를 부착합니다: 'lubridate'
## The following objects are masked from 'package:base':
## 
##     date, intersect, setdiff, union
  library(stringr)
  library(readr)
## 
## 다음의 패키지를 부착합니다: 'readr'
## The following object is masked from 'package:rvest':
## 
##     guess_encoding
  library(dplyr)
## 
## 다음의 패키지를 부착합니다: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
# Mongo DB 연결
  source("~/Dropbox/01.R분석/08.stockR/01.DBConnection/Mongocon.R")  
  
# Mysql DB 연결 
  source("~/Dropbox/01.R분석/08.stockR/01.DBConnection/Mysqlcon.R")  
  
# 최근 3년치 데이터를 가져온다.   
  from = (Sys.Date() -years(3)) %>% str_remove_all('-')
  to = Sys.Date() %>% str_remove_all('-')

# 종목을 선택 한다.   
#  name ="005930"

#  아래 네이버 그래프 차트 크롤링을 해서,  데이터를 뽑아 낸다. 
  stock_get_fun <- function(name){  
    url = paste0('https://fchart.stock.naver.com/siseJson.nhn?symbol=', name,
                 '&requestType=1&startTime=', from, '&endTime=', to, '&timeframe=day')
  
    data = GET(url)
    data_html = data %>% read_html %>%
      html_text() %>%
      read_csv()
  
    df <-   data.frame(code =  name,
                       일자 =   as.character(parse_number(data_html$`[['날짜'`)),
                       시가 =  data_html$`'시가'`,
                       고가 =  data_html$`'고가'`,
                       저가 =  data_html$`'저가'`,
                       종가 =  data_html$`'종가'`,
                       거래량 = data_html$`'거래량'`,
                       외국인소진율 = parse_number(data_html$`'외국인소진율']`)
         ) 
  
        
   df <- filter(df, !is.na(일자))
   df <- arrange(df,  desc(일자))
   
   return(df)  
  }


insert_fun <- function(name){
  
  stock <-  stock_get_fun(name)

  query <- paste0("DELETE FROM stock WHERE code = '",name,"'")
  res <- dbSendQuery(con, query)
  dbClearResult(res)

  dbWriteTable(con, "stock", stock , append = TRUE)
  
}   
 
stock_master <-  mongo_all_fun("master", "yongas")
## 
 Found 358 records...
 Imported 358 records. Simplifying into dataframe...
system.time(
for(i in 1:nrow(stock_master)) {  

  stock_code <- stock_master$단축코드[i]
  try(insert_fun(stock_code), silent = TRUE)
   
}    
)

댓글 없음:

댓글 쓰기

공무 스케줄 AI Agem에 대한 생각

     지금 상황이 아비 규환이다.  어느 부서든 회사가 인수 합병되고 나서  투자를 기획하는 경영기획이 특히 않이 정신이 없고, 우리부서도 전부 미국 필리 조선소로 인원이 나가 있어,  사실상 10년 이상 고기량자는 거의 없다.   우리부서에 남아...