R 활용 사용법(심화)3
##R 활용 - 사용법(심화)(3/3)
작성 2019년 12월 17일 박영훈
1. MySQL 연동
R과 MySQL 간의 데이터 입출력을 위한 RMySQL 패키지가 있다.
RMySQL은 소스 코드를 MySQL과 연동해서 컴파일 해야 한다.
윈도우에서 R을 위한 컴파일 도구는 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