1 / 14

2012. 6.

R 을 이용한 데이터 처리 및 분석과정에서의 유용한 사용 팁. 2012. 6. 오 원 기 wkoh@begas.co.kr. Agenda. 1) 자료 불러오기 - CSV File 불러오기 - Oracle DB 에서 불러오기 2) 자료 처리하기 3) 탐색적자료분석을 (EDA) 위한 그래프 생성 및 저장 4) Animation Package 5) googleVis Package 6) 분석결과 저장하기 - CSV File 저장하기

conner
Download Presentation

2012. 6.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. R을 이용한 데이터 처리 및 분석과정에서의 유용한 사용 팁 2012. 6. 오 원 기 wkoh@begas.co.kr

  2. Agenda 1) 자료 불러오기 - CSV File 불러오기 - Oracle DB에서 불러오기 2) 자료 처리하기 3) 탐색적자료분석을(EDA) 위한 그래프 생성 및 저장 4) Animation Package 5) googleVis Package 6) 분석결과 저장하기 - CSV File 저장하기 - Oracle DB에 저장하기 7) Batch 작업

  3. 자료 불러오기 – CSVFile 불러오기 • 함수 이름 : read.csv, read.table • R에서는 Text파일 또는 csv등 다양한 포멧의 데이터를 호출할 수 있음 • read.csv(file, header = TRUE, sep = ",", quote="\"", dec=".", fill = TRUE, comment.char="", ...) • 목 표 : 여러 개의 csv 파일을 for문과 assigng함수를 활용하여 호출하기 • 필요함수 : shell(), for(), read.csv(), assign() • # 자료를 불러오기 위하여 디렉토리와 File이름을 정의한다. • file.dir <- "C:\\Rproject_1\\Data\\" • # 불러들일 자료는 속도와 교통량이 들어있는 20개의 파일임. • file.name <- shell(paste("dir ", file.dir, "*.CSV /b /w /a-d", sep = ""), intern = TRUE) • for(file.i in 1:length(file.name)) • { • temp.df <- read.csv(paste(file.dir, file.name[file.i], sep = ""),stringsAsFactor = FALSE) • names(temp.df) <- c("LINK_ID","TIME","SPEED","VOLUMN") • assign(paste("import_csv", file.i, "df", sep = "_"), temp.df) • }

  4. 자료 불러오기 – Oracle DB에서 불러오기 • 함수 이름 : odbcConnect , sqlQuery • ODBC Package를 사용하여 DB에있는 데이터를 호출할 수 있음 • odbcConnect(dsn, uid = "", pwd = "", ...) • sqlQuery(channel, query, errors = TRUE, ..., rows_at_time) • 목 표 : for문과 assign함수를 활용하여 DB에서 여러 번 데이터를호출하기 • 필요함수 : odbcConnect(), unique(), for(), sqlQuery, assign() • #RODBC library 호출 • library(RODBC) • #ODBC 연결 정보 생성 • #DSN, UID, PWD 입력 • speed.conn <- odbcConnect(dsn= "speed", uid = "system", pwd = "system32", believeNRows=FALSE) • #DB에 있는 데이터중 LINK_ID별로 각각의 데이터를 가지고 오기 • Link_Id_Names <- unique(Total_DB_Speed$LINK_ID) • for(file.i in 1:length(Link_Id_Names)) • { • query.x <- paste("select * from TB_LINK_SPEED where LINK_ID = '", Link_Id_Names[file.i], "'",sep = "") • temp.df <- sqlQuery(speed.conn, query.x, stringsAsFactors = FALSE) • cat(file.i, "/", length(Link_Id_Names), "[ N :", nrow(temp.df), "]", "\n") • assign(paste("import_DB", file.i, "df", sep = "_"), temp.df) • }

  5. 자료 처리하기 함수 이름 : get() get(x, pos = -1, envir = as.environment(pos), mode = "any", inherits = TRUE) get함수와 rbind함수를 활용하여 여러 개의 테이블을 하나의 테이블로 합칠 수 있다. import_csv_names <- apropos("import_csv_") for(i in 1:length(import_csv_names)){ if(i == 1){ Total_Csv_Speed <- get(import_csv_names[i], pos = 1) } else{ temp.df <- get(import_csv_names[i], pos = 1) Total_Csv_Speed <- rbind(Total_Csv_Speed, temp.df) } } 함수 이름 : sqldf() sqldf(x, stringsAsFactors = FALSE, row.names = FALSE, envir = parent.frame(), method = getOption("sqldf.method"), file.format = list(), dbname, drv = getOption("sqldf.driver"), user, password = "", host = "localhost", dll = getOption("sqldf.dll"), connection = getOption("sqldf.connection"), verbose = isTRUE(getOption("sqldf.verbose"))) Sqldf할수를 통하여서 R언어를 잘 사용하지 못하는 사람들이라도 SQL문을 사용할 줄 알면, Data처리를 할 수 있다. library(sqldf) Time_Speed <- sqldf("select TIME, min(SPEED) MIN_SPEED, max(SPEED) MAX_SPEED from Total_Csv_Speed group by TIME")

  6. EDA를 위한 그래프 생성 및 저장 탐색적 분석을 효과적으로 수행하기 위한 사용자 함수 1)히스토그램(hist), 2)박스플롯(boxplot), 3)정규성검정그림(qqnorm, qqline), 4)확률밀도그림(plot(density)) savePlot()을 사용하여 사용자가 생성한 그래프를 이미지로 저장할 수 있다. eda.shape <- function(input.var, var.name) { dev.new(width=30, height=20) par(oma = c(1,1,2,1), mfrow = c(2,2)) hist(input.var, main = "Histogram", xlab = var.name) box("figure", lty="dotted", col="blue") boxplot(input.var, main = "Boxplot") box("figure", lty="dotted", col="blue") qqnorm(input.var) qqline(input.var) box("figure", lty="dotted", col="blue") plot(density(input.var), main = "Density Plot") box("figure", lty="dotted", col="blue") box("inner", col = "red") mtext(paste("탐색적 분석을 위한 그림", "[ 변수명 :", var.name, "]"), side = 3, outer = TRUE, cex = 0.9) par(op) } eda.shape(input.var = Total_Csv_Speed$SPEED, var.name = "속도") savePlot(paste(image.dir, "탐색적분석을위한그림", ".jpg", sep = ""), type = "jpg") dev.off()

  7. Animation Package Animation Package를사용함으로써 동적인 그래프를 그릴 수 있으며, HTML등 다양한 유형으로 그래프를 만들어 다른 사용자에게 공유할 수 있다. http://animation.yihui.name/animation:start # Animation Package # animation library 호출 library(animation) dev.new(width=80, height=40) par(mfrow = c(2,2)) uni.link <- unique(Total_Csv_Speed$LINK_ID) color.x <- c("blue", "green", "yellow", "black") for (i in 1:24) { for(j in 1: 4) { tmp.x <- Total_Csv_Speed[Total_Csv_Speed$LINK_ID == uni.link[j],] plot(tmp.x$TIME, c(tmp.x$SPEED[1:i], rep(NA, 24-i)), main = paste("LINK ID : ",unique(tmp.x$LINK_ID), "시간대별 속도", sep =" "), ylim = c(0, 90), lwd = 3, type = "l", col = color.x[j], ylab = "속도(Km/h)", xlab = "Time(HH)") abline(h = 40, lwd = 2, col = "red") } ani.pause() }

  8. googleVis Package R에서 구글 데이터 시각화 API를 이용 http://code.google.com/p/google-motion-charts-with-r/

  9. 분석결과 저장하기 - CSVFile 저장하기 • 함수 이름 : write.csv • R에 있는 데이터를 write.csv함수를 사용하여 CSV파일로 Export할 수 있음. • write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ", eol = "\n", na = "NA", dec = ".", row.names = TRUE, col.names = TRUE, qmethod = c("escape", "double"), fileEncoding = "") write.csv(...) • # 자료를 저장하기 위하여 디렉토리와 File이름을 정의한다. • file.dir <- "C:\\Rproject_1\\Result_Data\\" • #CSV 파일로 저장한다. • write.csv(Time_Speed, paste(file.dir,"Time_Speed.csv", sep = ""), row.names = FALSE)

  10. 분석결과 저장하기 – Oracle DB 저장하기 • 함수 이름 : odbcConnect , sqlQuery • ODBC Package를 사용하여 R에서 생성되어진 데이터를 DB에 저장할 수 있다. • 기능 DB Table Create, Table Delete, Insert • odbcConnect(dsn, uid = "", pwd = "", ...) • sqlQuery(channel, query, errors = TRUE, ..., rows_at_time) • speed.conn <- odbcConnect(dsn= "speed", uid = "system", pwd = "system32", believeNRows=FALSE) • #DB에 저장되어질 테이블이 없으면 테이블 생성 • check.df<- sqlQuery(speed.conn, "select * from tab where TNAME = 'TB_SPEED_RESULT';") • if(nrow(check.df) == 0) • { • #TB_SPEED_RESULT 테이블 생성 • sqlQuery(speed.conn, "CREATE TABLE TB_SPEED_RESULT (TIME NUMBER(4), MIN_SPEED NUMBER(3), MAX_SPEED NUMBER(3));") • } • #TB_SPEED_RESULT안에 있는 데이터 제거 • if(nrow(sqlQuery(speed.conn, "select * from TB_SPEED_RESULT")) != 0){ • sqlQuery(speed.conn, "DELETE FROM TB_SPEED_RESULT") • } • #데이터 Insert • for(i in 1:nrow(Time_Speed)) • { • insert.query <- paste("INSERT INTO TB_SPEED_RESULT (TIME, MIN_SPEED, MAX_SPEED) VALUES(",Time_Speed$TIME[i],",",Time_Speed$MIN_SPEED[i],",",Time_Speed$MAX_SPEED[i],")") • sqlQuery(speed.conn, insert.query) • } • close(speed.conn)

  11. Batch 작업 Batch Program [Batch Program 관련 디렉토리] C:\Rproject_1 BAT BAT 화일 RSC R Script 화일 TXT Batch 프로그램 로그 LOG Batch 프로그램 로그 이력 OUT Batch 프로그램 수행 시 output

  12. Batch 작업 Batch 작업을 위한 R Script(C:\Rproject_1\RSC\krug_source.R) Batch 작업을 위한 bat 파일(C:\Rproject_1\BAT\Krug_source.bat) CD C:\Program Files\R\R-2.13.2\bin\x64 Rcmd BATCH C:\Rproject_1\RSC\krug_source.r C:\Rproject_1\TXT\krug_source.txt set filename=krug_source_%date:~2%_%time:~0,2%_%time:~3,2%_%time:~6,2%.log copy C:\Rproject_1\TXT\krug_source.txt C:\Rproject_1\LOG\%filename%

  13. Batch 작업 Batch Job을 실행시 아래와 같은 Batch 작업 실행화면이 생성되어지며, 모든 Batch Job이 완료시 Log정보, Out File등과 같은 정보는 지정되어진 폴더에 생성되어짐 Batch 작업 실행화면 Batch 작업 결과 • TXT 디렉토리 • LOG 디렉토리 • OUT 디렉토리

  14. 감사합니다.

More Related