MA VPD Tech Blog.

R 활용 사용법(심화)3

December 17, 2019 | 2 Minute Read

##R 활용 - 사용법(심화)(3/3)

작성 2019년 12월 17일 박영훈

1. MySQL 연동


R과 MySQL 간의 데이터 입출력을 위한 RMySQL 패키지가 있다.

RMySQL은 소스 코드를 MySQL과 연동해서 컴파일 해야 한다.

윈도우에서 R을 위한 컴파일 도구는 Rtools를 사용해야 한다. 다운받자.

Rtools 다운로드 페이지

설치 후 환경 변수에 MYSQL_HOME을 DB HOME 경로로 설정한다.

제어판 - 시스템 - 환경변수에서 MYSQL_HOME을 C:\Program Files\MariaDB 10.2로 설정

C:\Program Files\MariaDB 10.2\lib으로 이동

LIB 파일들을 C:\Program Files\MariaDB 10.2\lib\opt를 생성하여 복사한다.

RStudio에서 소스로 RMySQL을 빌드한다.

> install.packages("RMySQL", type = "source")
Installing package into ‘C:/Users/yhpark/Documents/R/win-library/3.6’
(as ‘lib’ is unspecified)
URL 'https://cran.rstudio.com/src/contrib/RMySQL_0.10.18.tar.gz'을 시도합니다
Content type 'application/x-gzip' length 52887 bytes (51 KB)
downloaded 51 KB
...

Library를 호출하여 동작하는지 확인한다.

> library("RMySQL")
필요한 패키지를 로딩중입니다: DBI
> library("DBI")

DB에 연결하여 테이블 리스트를 얻어온다.

> dbGetQuery(con, "select * from tb_request limit 1")
  REQ_SEQ      REQ_ID REQ_STATUS REQ_TYPE USER_ID OBJ_RELATION OBJ_NAME       OBJ_TEL
1      40 R0000000040         04        6  iamll2         ????      ??? 010-9192-5079
  OBJ_ATTACHED OBJ_TITLE OBJ_BIRTH OBJ_ZIP   OBJ_ADDRESS1 OBJ_ADDRESS2 CCTV_AREA1 CCTV_AREA2
1         <NA>      <NA>  19780701   25927 ??? ??? ??? 53        ?????        ???        ???
  CCTV_AREA3 CCTV_ID REQ_INSTITUTION REQ_REASON                REQ_REASON_DETAIL REQ_MEDIA
1        ???      43            <NA>         01 ?? ?? ????? ?????? ??? ??????? ?        02
  DRM_TYPE PACK_MODE VMS_STATUS VMS_STATUS_MESSAGE      REQ_START_DATE        REQ_END_DATE
1     <NA>        01         01               <NA> 2018-05-12 19:00:00 2018-05-12 19:30:00
       REQ_IP         PERMIT_DATE PERMIT_ID OFFICIAL_FILE_PATH OFFICIAL_FILE_NAME
1 172.7.2.249 2018-05-16 16:20:48 wodnd1752               <NA>               <NA>
  OFFICIAL_FILE_SIZE SECURITY_FILE_PATH SECURITY_FILE_NAME SECURITY_FILE_SIZE PARENT_REQ_ID
1                  0               <NA>               <NA>                  0          <NA>
  CONTENT_TYPE DEL_YN REG_ID            REG_DATE    UPD_ID            UPD_DATE DEL_ID
1          MOV      N iamll2 2018-05-16 16:18:48 wodnd1752 2018-05-16 16:20:48   <NA>
  DEL_DATE RESULT_STATUS RESULT_SUB_STATUS            RESULT_STATUS_DETAIL
1     <NA>            09                   ??? ?, ????? ?? ??? ?? ???? ???
          RESULT_DATE REJECT_REASON REJECT_STATUS NODATA_REASON NODATA_STATUS REVOCATION_YN
1 2018-05-21 11:05:16          <NA>          <NA>          <NA>          <NA>          <NA>
  REVOCATION_REASON      OFFICIAL_DOC_NO IMG_LOCATION IMG_CAR_KIND IMG_REVERSE_DRIVE
1              <NA> ???.2089(2018.05.16)         <NA>         <NA>                 N
  IMG_CAR_NUM_TYPE IMG_CAR_NUM IMG_BIGO REQ_ORG_FILE_YN VMS_REQ_PRIORITY PROGRESS
1                0        <NA>     <NA>            <NA>             <NA>     <NA>

한글이 깨진다. 한글을 읽어보자.

> dbSendQuery(con, "SET NAMES utf8;") 
<MySQLResult:691553072,2,48>
> dbSendQuery(con, "SET CHARACTER SET utf8;")
<MySQLResult:824009664,2,49>
> dbSendQuery(con, "SET character_set_connection=utf8;")
<MySQLResult:824009664,2,50>
> list <- dbGetQuery(con, "select OBJ_RELATION, OBJ_NAME from tb_request limit 5")
> Encoding(list[,1]) <- "UTF-8"
> Encoding(list[,2]) <- "UTF-8"
> list
  OBJ_RELATION OBJ_NAME
1     수사기관   최승용
2     수사기관   최승용
3     수사기관   남상규
4     수사기관   남상규
5     수사기관   남상규
> dbDisconnect(con)
[1] TRUE



로고