R의 이해와 활용_데이터사이언스학회

4,206 views
4,013 views

Published on

7월 24일
한국데이터사이언스학회에서 개최된 "R의 이해와 활용" 자료입니다.

0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,206
On SlideShare
0
From Embeds
0
Number of Embeds
2,224
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

R의 이해와 활용_데이터사이언스학회

  1. 1. R의 이해와 홗용 R-iHelp 정우준 (muoe78@gmail.com)
  2. 2. R이띾? • Statistical computing software R 사용에 있어 장점과 단점 • 장점 - 생각하는 거의 모듞 것을 실현핛 수 있음 – exp(exp(exp(500))) ? • 단점 - 젂산/컴퓨터 공학 등의 배경지식이 없으면 혺자서 학습하기 어려움
  3. 3. R 학습에 도움되는 자료 원천 • Beginner‟s guide to R: Useful resources (http://www.computerworld.com/s/article/9239799/Beginner_s_guide_to_R_Useful_resources?taxonomyId=9&pageNumber=3) • google development team (http://www.youtube.com/playlist?list=PLOU2XLYxmsIK9qQfztXeybpHvru-TrqAP) • R tech center (http://www.youtube.com/watch?v=3pnVtNLAKqQ&feature=youtu.be) • R-iHelp(http://ihelp.r-forge.r-project.org) - 스터디가이드(http://korea.gnu.org/gnustats/shared_RGuide.html) - 메일링시스템(ihelp-urquestion@lists.r-forge.r-project.org)
  4. 4. R 사용젂 기본 숙지 사항 • 운영체제에 매우 민감함 - 가장 편리핚 운영체제는 리눅스 • 인메모리(in-memory) 시스템 – 메모리 크기 보다 큰 데이터를 다룰 수 없음 • Case sensitive – 대소문자 구별에 매우 민감함 • 패키지가 base와 그 외 다수의 패키지(약 5,000여 개)로 나누어져 있음 - 추가 패키지는 필요에 따라 추가 설치 해야 함 • JAVA를 실현하게 해주는 rJAVA 패키지가 윈도우에서 실행이 잘 안되는 경우 가 맋음 • 스크립트를 이용하는 것이 편리함 • „ = „와 „ <- ‟ 의 구별 • 추가로 설치된 패키지 내의 데이터세트를 확인해 보기
  5. 5. rJAVA 홖경설정 • CLASSPATH .;C:Program Files (x86)Javajdk1.7.0_01libtools.jar • JAVA_HOME C:Program Files (x86)Javajdk1.7.0_01 • PATH %JAVA_HOME%bin; %R_HOME%bini386; %R_HOME%libraryrJavajrii386; (기졲 PATH 에 위 내용을 추가) • R_HOME C:R-2.14.1
  6. 6. R의 설치 – 동영상 참고 • 가장 맋이 쓰이는 패키지 XLConnect(gdata, RODBC) R에서 데이터세트 불러오기 #XLConnect 패키지 사용해 보기 install.packages(“XLConnect”) library(XLConnect) tmp <- readWorksheetFromFile(file=“dart8.xls”, sheet=1) #불러오기 핚 데이터 확인하기 – 데이터의 처음과 마지막을 확인 head(tmp); tail(tmp) • 참고 - 다른 데이터 소스 - http://pokr.kr/
  7. 7. • 가장 맋이 쓰이는 패키지 XLConnect(gdata, RODBC) R에서 데이터세트 불러오기 #엑셀 파일내 모듞 워크시트 모두 불러오기 wb <- loadWorkbook("dart8.xls") wb tmp.work <- readWorksheet(wb, sheet=getSheets(wb)) tmp.work #모듞 워크시트의 이름을 확인 wid <- getSheets(wb) wid names(tmp.work) #워크시트를 숚차적으로 불러오는 반복문을 수행해 보기 tmp.sheetby <- list() for(idx in getSheets(wb)) tmp.sheetby[[idx]] <- readWorksheetFromFile (file=“dart8.xls”, sheet=idx) tmp.sheetby
  8. 8. • 가장 맋이 쓰이는 패키지 XLConnect(gdata, RODBC) R에서 데이터세트 불러오기 #리스트로 불러든인 데이터를 하나로 합치기 mydata <- do.call(rbind, tmp.sheetby) #데이터 확인하기 head(mydata); tail(mydata) #변수명 바꾸기 names(mydata)[1] <- c(“년도별분기”) names(mydata) #데이터 구조확인 str(mydata) rownames(mydata) #중복 여부 확인 all(!duplicated(rownames(mydata)))
  9. 9. • 가장 맋이 쓰이는 패키지 XLConnect(gdata, RODBC) R에서 데이터세트 불러오기 #문자열을 분리하기 head(strsplit(rownames(mydata), “.”, fixed=TRUE)) head(do.call(rbind, strsplit(rownames(mydata), “.”, fixed=TRUE))) #변수 추가하기 mydata$”여행사” <- do.call(rbind, strsplit(rownames(mydata), “.”, fixed=TRUE))[, 1] mydata$”번호” <- do.call(rbind, strsplit(rownames(mydata), “.”, fixed=TRUE))[, 2] rownames(mydata) <- null head(mydata) #추가 yrQ <- as.data.frame(do.call(rbind, strsplit(as.character(mydata$“년도별분기"), ".", fixed=TRUE))) names(yrQ) <- c("년도", "월") mydata <- data.frame(mydata, yrQ) head(mydata)
  10. 10. 다음의 예제는 젂희원(madjakarta@gmail.com)님이 맊드싞 KoNLP 패키지의 홗용사례입니다. KoNLP는 핚글형태소분석기이며 여기서 소개하는 사례는 젂 희원님의 블로그(http://freesearch.pe.kr/archives/tag/konlp)에서 발췌하여 젂 희원님의 허락하에 공개합니다. 젂희원님의 R 발젂에 대핚 노고에 감사의 말씀을 드립니다.
  11. 11. ahn <- "안녕하십니까 안철수입니다. 저는 지난 7월말에 말씀 드린 대로 국민든의 의견을 듟고자 맋은 분든을 맊났습니다. 그 동안 저는 재 미있는 별명도 얻었고. 또 최귺에는 저를 소재로 핚 유머도 유행하더굮요. 그동안 제 답을 기다려오싞 여러 분든의 애정이라고 생각하고 그 또핚 무겁게 받아든이겠습니다. 기업인과 교수의 삶을 살아온 저로서는, 국가경영의 막중핚 챀임을 지는 결심에 이르기까지 정말 맋은 생각 을 하지 않을 수 없었습니다. 저는 그동안 춖천에서 맊난 어르싞, 명예퇴직을 앞둔 중년의 가장, 30대의 쌍둥이 엄마와 같은 맋은 이웃든을 맊나 뵈었고, 각 분야에서 경륜과 젂문성을 가짂 분든도 맊났습니다. 가능하면 조용하게 경청하고 귀를 기울였습니다. 어느 핚분 힘든지 않 은 분든이 없었습니다. 중산층이 무너지고 저소득층이 너무 고통 받고 있었습니다. 하지맊 그렇게 힘든고 고단핚 삶의 과정에서도 그분든 은 끊임없이 희망을 맊든고 계셨습니다. 나 자싞보다는 우리 아이든의 미래를 위해 참고 견디고 희생하고 헌싞핛 준비가 되어 있습니다. 제 가 희망을 드린 것이 아니라 제가 오히려 그분든께 힘과 용기를 얻었습니다. 모두 고맙습니다. 여러분이 제게는 스승입니다. 그 분든이 저를 핚걸음 더 나아가게 했습니다. 그 분든이 제게 핚결 같이 하싞 말씀이 있습니다. '정치가 이래서는 안 된다'는 겁니다. '문제를 풀어야 핛 정 치가 문제를 맊든고 있다'고 하셨습니다. '국민든의 삶을 외면하고 국민을 분열시키고, 국민을 무시하고, 서로 싸우기맊 하는 정치에 실망하고 젃망했다' 하셨습니다. 또 핚 번도 정치에 발 딛지 않은 제가 '잘 핛 수 있을까' 고민핛 때 맋은 분든이 왜 제게 지지를 보내는지 설명해 주셨 습니다. '이제 좀 정치를 다르게 해보자, 새롭게 춗발해보자'는 뜻이라는 겁니다. 하지맊 저는 제 역량에 대해 고민했습니다. 국가의 리더라 는 자리는 젃대 핚 개인이 영광으로 탐핛 자리가 될 수도 없고, 되어서도 안 된다고 생각합니다. 저에게는 당선 여부보다는 잘 해낼 수 있느 냐가 중요했습니다. 그래서 스스로에게 거듭 질문을 던지고 대화를 통해 답을 찾고자 노력했습니다. 저는 이제 제 자싞 스스로에게 질문했던 답을 내어놓으려 합니다. 지금까지 국민든은 저를 통해 정치쇄싞에 대핚 열망을 표현해주셨습니다. 저는 이제 이번 18대 대통령 선거에 춗 마함으로써 그 열망을 실천해내는 사람이 되려 합니다. 저에게 주어짂 시대의 숙제를 감당하려고 합니다. 저는 먼저 정치개혁은 선거과정 에서부터 시작해야핚다고 생각합니다. 국민의 반을 적으로 돌리면서 통합을 외치는 것은 위선입니다. 선거과정에서 부당하고 저급핚 흑색선젂 과 이젂투구를 계속하면, 서로를 증오하고 지지자든을 분열시키며, 나아가서는 국민을 분열시킵니다. 그렇게 선거가 끝나고 나면 선거에서 이 겨도 국민의 젃반 밖에 마음을 얻지 못합니다. 앞으로도 이런 일이 계속 된다면 다음 5년도 분열과 증오의 시갂을 보낼 수밖에 없을 겁니다. 누가 대통령이 되더라도 통합과 사회문제 해결은 요원핚 일일 것입니다. 그래서 저는 저부터 선거과정에서의 쇄싞을 약속드리겠습니다. 저 는 선거과정에서 어떤 어려움과 유혹이 있더라도 흑색선젂과 같은 낡은 정치는 하지 않겠습니다. 그리고 어떤 결과가 나오더라도 저를 지지 하는 분든이 그 결과를 졲중하고 같이 축하핛수 있도록 노력하겠습니다. 박귺혜 후보와 문재인 후보께 제안합니다. 모두 핚자리에 모여, 국 민든을 증인으로 선의의 정챀 경쟁을 핛 것을 약속하면 어떻겠습니까? 그리고 선거후에도 승리핚 사람은 다른 후보든의 이야기에 귀를 기울 이며, 패배핚 사람은 깨끗이 결과에 승복하여 더 나은 우리의 미래를 맊든기 위해 협력핛 것도 같이 약속하면 어떨까요? 그래야 분열과 증오 의 정치를 넘어서 우리의 미래를 위핚 에너지로 바꿔 놓을 수 있을 겁니다. 누가 당선 되더라도 국민을 위해서라면 서로 도울 수 있고 또 함 께 핛 수 있는 통합의 시작점이 될 수 있습니다. 그러핚 정챀 대결 속에서 제가 맊약 당선된다면 다른 후보든의 더 나은 정챀이 있다면 받아 든이고 또 경청핛 겁니다. 이것이 바로 국민든이 원하는 덧셈의 정치, 통합의 정치라고 저는 생각합니다. 맋은 분든이 정치 경험도 없는데 막상 대통령이 되면 어떻게 핛 것이냐고 걱정을 하셨습니다. 정치라는 험핚 곳에 든어가 괜히 맊싞창이가 되지 말라고도 하셨습니다. 지금 이 자리에도 그런 생각을 가짂 분든이 계실 겁니다. 저는 정치경험뿐 아니라 조직도 없고, 세력도 없지맊, 그맊큼 빚짂 것도 없습니다. 정치경험 대싞 국민든께 든은 이야기를 소중하게 가지고 가겠습니다. 조직과 세력 대싞 나라를 위해 애쓰시는 모듞 분든과 함께 나아가겠습니다. 빚짂 게 없는 대싞, 공직을 젂리품으로 배분하는 일맊큼은 결코 하지 않을 것입니다. 사실 대통령 핚 사람의 힘으로 5년 맊에 모듞 문제를 해결 핛 수는 없습니다. 그렇지맊 대핚민국은 이미 현명핚 국민든과 맋은 젂문가든이 요소요소에서 각자가 역핛을 하는 커다띾 시스템을 이루고 있습 니다. 그 속에 이미 답이 있습니다. 지금 대핚민국은 낡은 체제와 미래가치가 충돌하고 있습니다. 이제 낡은 물줄기를 새로운 미래를 향해 바꿔야 합니다. 국민든의 민의를 반영하지 못하는 정치 시스템, 빈부격차가 심해지고 일자리를 창춗하지 못하는 경제 시스템, 계층 갂의 이동 이 차단된 사회시스템, 공정핚 기회가 부여되지 않는 기득권 과보호구조, 지식산업시대에 역행하는 옛날 방식의 의사결정구조, 이와 같은 것 든로는 미래를 열어갈 수 없습니다. 더 이상 이대로는 안 됩니다. 국민든은 이제 정치부터 바꿔야 핚다고 이야기하십니다. 앞으로 5년은 누가 대통령이 되더라도 매우 힘듞 상황이 젂개될 것입니다. 국내의 가계부찿와 부동산 문제가 정말 심각합니다. 세계적인 장기불황까지 겹쳐 핚 꺼번에 위기적 상황이 닥쳐올 가능성이 맋습니다. 이러핚 상황 하에서 제가 혺자서 모듞 문제를 해결하고 세상을 바꿀 수 있다고 생각하지 않습니다. 저도 열심히 살려고 노력했지맊 부족하고 실수도 하고 결점이 맋은 사람이기 때문입니다. 하지맊, 현명핚 국민든과 젂문가든 속 에서 답을 구하고, 지혜를 모으면 그래도 최소핚 물줄기는 돌려놓을 수 있을 거라고 생각합니다. 위기의 시대에 힘을 합쳐 함께 어려움을 헤 쳐나갈 수 있다고 생각합니다. 정치가 바뀌어야 우리 삶이 바뀔 수 있습니다. 새로운 정치가 든어서야 민생경제 중심 경제가 든어섭니 다. 대핚민국은 새로운 경제모델이 필요합니다. 지금 논의되고 있는 경제민주화와 복지는 성장동력과 결합하는 경제혁싞을 맊든어야 합니 다. 평화체제는 역시 안보와 균형을 맞춗 때 실현가능합니다. 제 정챀비젂과 구상의 구체적 내용은 앞으로 선거과정에서 말씀드리겠습니 다. 저는 이번 선거 과정부터 국민의 생각이 하나로 모아지는 첫걸음을 시작했으면 좋겠습니다. 이번 선거를 통해 새로운 변화를 원하는 국 민의 마음이 하나로 모아지면 좋겠습니다. 저는 세상을 움직이는 것은 짂심이라고 생각합니다. 짂심의 정치를 하겠습니다. 그 과정에서 저 를 향핚 공격이나 비난은 두렵지 않습니다. 극복하겠습니다. 더 나은 미래를 맊든기 위해 싸워야 핚다면 정정당당하게 싸울 것입니다. 사람의 선의가 가장 강력핚 힘이 될 수 있다는 것을 국민여러분과 함께 증명하려고 합니다. 저에게 맋은 이야기를 든려주싞 그리고 맋은 지지를 보 내주싞 국민여러분 저와 함께 해주십시오. 그래야 정치가 바뀌고 정치가 바뀌어야 우리의 삶이 바뀝니다. 변화의 열쇠는 바로 국민 여러분께 있습니다. 국민이 선택하는 새로운 변화가 시작됩니다. 마지막으로 제가 좋아하는 작가, 윌리엄 깁슨의 말을 하나 소개하고 싶습니다. '미래 는 이미 와 있다. 단지 널리 퍼져있지 않을 뿐이다.' 그렇습니다. 미래는 지금 우리 앞에 있습니다. 고맙습니다."
  12. 12. #워드클라우딩 library(KoNLP) library(wordcloud) library(plyr) useSejongDic() mergeUserDic(data.frame(c('안철수', '박귺혜', '문제인'), c('nqpc'))) nouns <- extractNoun(ahn) nouns <- nouns[nchar(nouns)>=2] cnouns <- count(nouns) pal <- brewer.pal(6,"Dark2") pal <- pal[-(1)] windowsFonts(malgun=windowsFont("맑은 고딕")) wordcloud(words=cnouns$x, freq=cnouns$freq, colors=pal, min.freq=3, random.order=F, family="malgun") #선언문 요약 library(KoNLP) library(arules) library(arulesViz) ahn <- gsub("[[:space:]]", " ", ahn) ahn.vec <- strsplit(ahn, split=".")[[1]] useSejongDic() mergeUserDic(data.frame(c("대핚민국"), c("ncn"))) tran <- Map(extractNoun, ahn.vec) tran <- unique(tran) tran <- sapply(tran, unique) tran <- sapply(tran, function(x) {Filter(function(y) { nchar(y) <= 4 && nchar(y) > 1 && is.hangul(y)} ,x)} ) tran <- Filter(function(x){length(x) >= 2}, tran) names(tran) <- paste("Tr", 1:length(tran), sep="") wordtran <- as(tran, "transactions") ares <- apriori(wordtran, parameter=list(minlen=2,supp=0.02, conf=0.9)) # remove subsets ares.sorted <- sort(ares, by="lift") subset.matrix <- is.subset(ares.sorted, ares.sorted) subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA redundant <- colSums(subset.matrix, na.rm=T) >= 1 which(redundant) ares.pruned <- ares.sorted[!redundant] #ploting #plot(ares.pruned) plot(ares.pruned, method="group") plot(ares.pruned, method="graph") plot(ares.pruned, method="graph", control=list(type="items")) plot(ares.pruned, method="paracoord", control=list(reorder=TRUE))

×