R의 기본적인 numeric, character, logical 외에 데이터를 처리하기 위해 많이 사용하는 자료 형태인 Vector, Matrix, Array, Data Frame, Lists에 대해 정리를 했으며, 아울러 DBMS, 여기서는 MySQL과 R을 연결하여 정형의 데이터를 읽어 들여 Data Frame 구조로 만들어보는 실습을 해봤습니다.
> nVector <- c(1:10) # 숫자 1,2,3,4,5,6,7,8,9,10 으로 이루어진 자료구조
> oMatrix <- matrix(1:12, 4,3) #4행 3열 구조의 자료구조
> oArray <- array(1:40, dim=c(4,5,2)) #4행 5열 구조로 2개를 가지는 구조
> szName <- c(“lee”, “kim”, “park”)
> szAge <- c(34,38,50)
> oDf <- data.frame(szName, szAge)
Mac에 설치된 MySQL 5.7버전에 테스트용 데이터를 넣은 테이블의 데이터를 RStudio에서 읽어 오는 실습을 진행해 보았습니다. 향후 정형데이터가 저장된 DB로 부터 데이터를 읽어야 할 경우가 많으며, Data Frame 구조도 같이 테스트 할겸 진행하였습니다.
### 필요 Package 설치
# 데이터베이스 인터페이스 정의, 즉, RMySQL 패키지를 사용하려면 같이 필요함
install.packages("DBI")
# MySQL 접속 및 컨트롤에 필요한 패키지
install.packages("RMySQL")
# Library 로드
library(DBI)
library(RMySQL)
# localhost에 구동되고 있는 MySQL 서버의 skktest DB에 접속하여 Connection객체를 얻어냄
oCon <- dbConnect(dbDriver("MySQL"), dbname = "skktest", user = "hironlee", password = "xxxxxx")
# 접속된 내용확인을 위해 해당 DB에 있는 테이블 목록
dbListTables(oCon)
# UTF-8로 저장된 테이블의 데이터를 읽어 올 때 문자 깨짐 방지를 위해 환경을 같이 맞춤
# 단, 그래도 문자가 깨진다면 전에 콘솔(시스템환경)에서 locale 변경이 아래와 같은 command로 실행이 필요함
# defaults write org.R-project.R force.LANG ko_KR.UTF-8
dbGetQuery(oCon,"set names utf8") ### 아래 그림 1) 2) 참고# select Query 수행하여 szDataList 변수에 data frame 형태로 데이터 가져오기
szDataList <- dbGetQuery(oCon, "SELECT * FROM keywords ORDER BY seq DESC LIMIT 100")
# 데이터 내용 확인
View(szDataList) ### 아래 그림1) 2) 참고
# DB Connection 종료
dbDisconnect(oCon)
str(szDataList)
#### 결과 화면임
#> str(szDataList)
#'data.frame': 100 obs. of 9 variables:
# $ SEQ : num 3368417 3368416 3368415 3368414 3368413 ...
# $ LOG_ID : num 347245 347245 347245 347245 347245 ...
# $ SITE_ID : num 7 7 7 7 7 7 7 7 7 7 ...
# $ TYPE_ID : chr "001" "001" "001" "001" ...
# $ YYYMMDDHHSS: chr "201802212202" "201802212202" "201802212202" "201802212202" ...
# $ WORD : chr "슬립온" "가습기" "텀블러" "보스턴백" ...
# $ ETC : chr "9" "8" "7" "6" ...
# $ INSERT_DATE: chr "2018-02-21 22:00:01" "2018-02-21 22:00:01" "2018-02-21 22:00:01" "2018-02-21 22:00:01" ...
# $ DEL_YN : chr "N" "N" "N" "N" ...
그림 1) : 한글 문자가 깨져 ???로 표시되는 현상
그림 2) : 한글 문자가 깨지지 않게 시스템 및 DB 명령어 처리후 모습
****** 2018.4.1 이호철([email protected])