R의 주요 자료형 및 DB로 부터 데이터 읽기 실습

in #kr6 years ago (edited)

R의 기본적인 numeric, character, logical 외에 데이터를 처리하기 위해 많이 사용하는 자료 형태인 Vector, Matrix, Array, Data Frame, Lists에 대해 정리를 했으며, 아울러 DBMS, 여기서는 MySQL과 R을 연결하여 정형의 데이터를 읽어 들여 Data Frame 구조로 만들어보는 실습을 해봤습니다.

R에서 데이터 타입(Objects)

  • 동일한 색상은 동일한 기본 타입, 즉, numeric, character, logical 로 동일하다는 의미이며, Data Frame과 같이 여러 종류의 색깔은 각 칼럼별 다른 기본 타입이 될 수 있다는 의미임

Vector

  • 반드시 동일한 기본 타입으로만 이루어진 자료형 : object with atomic mode
  • > nVector <- c(1:10) # 숫자 1,2,3,4,5,6,7,8,9,10 으로 이루어진 자료구조

Matrix

  • 2차원(행과 열)을 가지는 Vector로 마찬가지로 동일한 기본타입으로 이루어진 자료형
  • > oMatrix <- matrix(1:12, 4,3) #4행 3열 구조의 자료구조

Array

  • Matrix가 2차원인 반면, Array는 N차원의 구조를 가지고 있음, 마찬가지로 동일한 기본타입으로 이루어진 자료형
  • > oArray <- array(1:40, dim=c(4,5,2)) #4행 5열 구조로 2개를 가지는 구조

Data Frame

  • 행열로 이루어진 직사각형, 즉, row수가 같은 테이블
  • 각 열내의 데이터는 동일한 유형(숫자, 문자, 논리)이지만, 다른 열은 다른 유형을 가질 수 있음
  • > szName <- c(“lee”, “kim”, “park”)
    > szAge <- c(34,38,50)
    > oDf <- data.frame(szName, szAge)

Lists

  • 가장 유연한 데이터 구조의 형태이며, 각 요소는 기링와 모드가 다양할 수 있음
  • 각 요소는 길이와 모드가 다양 할 수 있습니다.
  • > oList <- list(name=”Lee”, wife=”park”, childs=3, child.ages=c(9,11,15))

RDBMS로 부터 데이터 읽어들이기 실습

Mac에 설치된 MySQL 5.7버전에 테스트용 데이터를 넣은 테이블의 데이터를 RStudio에서 읽어 오는 실습을 진행해 보았습니다. 향후 정형데이터가 저장된 DB로 부터 데이터를 읽어야 할 경우가 많으며, Data Frame 구조도 같이 테스트 할겸 진행하였습니다.

MySQL 데이터

  • DB Name : skktest
  • Table Name : keywords (쇼핑사이트의 일별 인기검색어 수집된 데이터)

2. R로 MySQL접속하여 데이터 가져오기 R 소스코드

### 필요 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 명령어 처리후 모습

R Script 소스

Reference

****** 2018.4.1 이호철([email protected])

Sort:  

Congratulations @hironlee! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 1 year!

Click here to view your Board

Support SteemitBoard's project! Vote for its witness and get one more award!

Congratulations @hironlee! You received a personal award!

Happy Birthday! - You are on the Steem blockchain for 2 years!

You can view your badges on your Steem Board and compare to others on the Steem Ranking

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.027
BTC 58805.73
ETH 2642.82
USDT 1.00
SBD 2.45