레이블이 RmariaDB인 게시물을 표시합니다. 모든 게시물 표시
레이블이 RmariaDB인 게시물을 표시합니다. 모든 게시물 표시

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)
   
}    
)

[주식 클로드 자동매매 프로젝트] 제2편. 데이터 인프라 구축 — 모델보다 데이터가 먼저다

 머신러닝 모델을 이야기하기 전에, 그 모델이 먹는 데이터가 어디서 어떻게 왔는지부터 정직하게 밝혀야 한다. 이 프로젝트에서 가장 많은 시간이 들어간 부분은 화려한 모델 튜닝이 아니라, "내가 정말 그 데이터를 갖고 있는가"를 확인하...