R로 Oracle DB에 연동 후 분석하기
Project/국토교통 온라인 해커톤 2020

R로 Oracle DB에 연동 후 분석하기

R로 Oracle DB에 연동하여 분석하기

Jupyter notebook에서 R커널을 사용, Oracle DB에 접속하기 위해 RJDBC,RJava Library를 사용했다. R에서 제공하는 라이브러리로 데이터 전처리를 할 수 있으나, 데이터 양이 클수록 쿼리문을 통해 데이터 전처리 작업을 하는것이 훨씬 효율적이다.

 

#모듈 로드

library(rJava)
library(DBI)
library(RJDBC)
library(ggplot2)
library(dplyr)

#오라클 DB 접속을 위한 conn 생성

drv <- JDBC("oracle.jdbc.driver.OracleDriver", "/home/acorn/Downloads/instantclient_12_2/ojdbc8.jar")
conn1 <- dbConnect(drv, "jdbc:oracle:thin:@//192.168.0.58:1521/standard", "standard1","oracle")
conn2 <- dbConnect(drv, "jdbc:oracle:thin:@//192.168.0.58:1521/standard", "standard2","oracle")

#DB 로드하기

TABLE1 <- dbGetQuery(conn1, "SELECT * FROM user_tables")
TABLE1
TABLE2 <- dbGetQuery(conn2, "SELECT * FROM user_tables")
TABLE2 

#도시 코드에 대한 정보 확인

CITYCODE <- dbGetQuery(conn1, "SELECT DISTINCT(SD_CD), SD_NM FROM DD_AREA ORDER BY SD_CD")
CITYCODE


### 시간별 대중교통 이용량 ###

#테이블 생성
COM_SEOUL <- dbGetQuery(conn2, "SELECT SD_CD, TZON, SUM(USE_STFC) AS POPULATION FROM DM_TMBY_USESTF_SMY WHERE SD_CD = 11 or SD_CD = 41 GROUP BY SD_CD, TZON ORDER BY SD_CD,TZON")
COM_SEOUL

COM_DAEGU <- dbGetQuery(conn2, "SELECT SD_CD, TZON, SUM(USE_STFC) AS POPULATION FROM DM_TMBY_USESTF_SMY WHERE SD_CD = 27 or SD_CD = 47 GROUP BY SD_CD, TZON ORDER BY SD_CD,TZON")
COM_DAEGU

#서울 경기지역 시간별 바 플랏
ggplot(COM_SEOUL, aes(TZON, POPULATION, fill=SD_CD))+geom_bar(stat='identity', position = 'dodge')
#대구 지역 시간별 바 플랏
ggplot(COM_DAEGU, aes(TZON, POPULATION, fill=SD_CD))+geom_bar(stat='identity', position = 'dodge')

#서울&대구 지역 시간별 바 플랏
ALL <- dbGetQuery(conn2, "SELECT SD_CD, TZON, SUM(USE_STFC) AS POPULATION FROM DM_TMBY_USESTF_SMY 
                          WHERE SD_CD = 11 or SD_CD = 41 or SD_CD = 47 or SD_CD = 27
                          GROUP BY SD_CD, TZON ORDER BY SD_CD,TZON")
ggplot(ALL, aes(TZON, POPULATION, fill=SD_CD))+geom_bar(stat='identity', position = 'dodge')

###시간대별 버스 지하철 사용량
TRANSPORTATION <- dbGetQuery(conn2, "SELECT SD_CD, TZON, TFCMN_GB_CD, SUM(GIN_STF), SUM(GFF_STF)
                                      FROM DM_STTNBY_USECNT_T 
                                      WHERE SD_CD = 11 or SD_CD = 41
                                      GROUP BY SD_CD, TZON, TFCMN_GB_CD")
head(TRANSPORTATION)

ggplot(TRANSPORTATION, aes(TZON, POPULATION, fill=TFCMN_GB_CD))+geom_bar(stat='identity', position = 'dodge')
시각화 결과

012