160825: 110회차
Programming
2016. 8. 25. 13:19
종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
[03] R 스크립트, R 함수
1. R 스크립트 및 Packages 설치 ex) R에 저장되어 있는 state.x77의 데이터를 이용하여 다음 각각의 물음에 답하시오.
(1) R 스크립트
- 파일 -> 새로운 스크립트 -> 편집창에 아래 입력
x <- rnorm(1000) : 1000개의 난수를 만들어 객체 x에 저장
mean(x) : 평균 구한다
sd(x) : 표준편차 구한다
hist(x) : 히스토그램를 그려본다.
입력후 저장버튼을 눌러 저장한다 (example.R)
- 파일 -> 스크립트 불러오기 -> 편집창에서 Ctrl + R 로 한줄 실행하거나 전체를 선택후 Ctrl + R로 한꺼번에 실행한다.
(2) Packages 설치
- 패키지들 -> 패키지 설치 -> Korea 선택 -> lubridate 선택 -> OK
- 패키지들 -> 패키지 불러오기 -> lubridate 선택(시간 관련 패키지)
- 마크다운,니키 패키지가 설치됩니다. (필요한 기능은 Package를 설치하여 사용)
2. R 함수
(5) replicate(n,expr,simplify="array")
- iris[,1:4] : 행은 모두, 열은(1~4)까지
- list(Species=iris[,5]) : iris 5열의 값을 Species name에 담아서 list로 반환
- mean : 표준편차
3. 연습문제
2. R 함수
(1) apply(x,m,fun,...) :행렬이나 배열의 차원 별로 지정한 함수를 적용
- x:대상자료(행렬,배열)
- m:차원 1(행),2(열),3(면), c(1,2)
- fun: 적용할 함수명
(2) lapply(x,fun,..) :list apply, 리스트에 지정한 함수를 적용
- x : 대상 리스트 객체
- fun:적용할 함수명
- ..:함수에서 사용할 인수
(3) sapply(x,fun,...,simplify=TRUE,
USE.NAMES=TRUE) : simplification apply
- x : 대상 리스트 객체
- fun:적용할 함수명
- ..:함수에서 사용할 인수
- simplify = T :연산결과를 벡터, 행렬 등 간단히 반환
- simplify = F :연산결과를 리스트로 반환
- USE.NAMES=T : 이름 속성도 반환
- USE.NAMES=F : 이름 속성없이 반환
(4) vapply(x.fun,fun.value,...,
USE.NAMES=TRUE) : values simplification apply
- x : 대상 리스트 객체
- fun:적용할 함수명
- fun.value:반환하는 데이터 유형 지정
- ...:함수에서 사용할 인수
(5) replicate(n,expr,simplify="array")
: expr을 n번 반복하여 행렬이나 리스트로 반환
- n:반복횟수
- expr:표현식
- simplify=F: 리스트로 반환
(6) sweep(x,m,s,fun="-",check.margin=TRUE,...)
: 행렬, 배열, 데이터프레임에 함수와 통계량을 적용하는 함수
- x: 대상객체(배열)
- m: 배열의 차원
- s: 적용할 통계량
- fun: 적용할 함수(="-":뺄셈연산,default)
- check.margin:인수 길이가 같은지 확인
(7)aggregate(x,b,fun)
: 데이터 부분별로 함수를 적용해서 통계량을 구하는 함수
- x: 대상 자료 객체
- b: a list of grouping elements
- fun: 적용할 함수명
- iris[,1:4] : 행은 모두, 열은(1~4)까지
- list(Species=iris[,5]) : iris 5열의 값을 Species name에 담아서 list로 반환
- mean : 표준편차
3. 연습문제
1) 3번째 행과 8번째 열위 원소를 추출하시오.
풀이)
> state.x77[3,8]
[1] 113417
2) 5, 22, 44행과 1, 4, 7열에 해당하는 값을 추출하시오.
풀이)
> state.x77[c(5,22,44), c(1,4,7)]
Population Life Exp Frost
California 21198 71.71 20
Michigan 9111 70.63 125
Utah 1203 72.90 137
3) 5행부터 50행까지를 제외한 나머지 행과 3열부터 5열까지의 원소를 추출하시오.
풀이)
> state.x77[-(5:50), 3:5]
Illiteracy Life Exp Murder
Alabama 2.1 69.05 15.1
Alaska 1.5 69.31 11.3
Arizona 1.8 70.55 7.8
Arkansas 1.9 70.66 10.1
4) stats.x77의 두 번째 열인 Income이 4000보다 큰 것만을 추출하시오.
풀이)
> inc <- state.x77[1:50]
> state.x77[inc>4000,2]
California 5114
Florida 4815
Georgia 4091
Illinois 5107
Indiana 4458
Maryland 5299
Massachusetts 4755
Michigan 4751
Missouri 4254
New Jersey 5237
New York 4903
North Carolina 3875
Ohio 4561
Pennsylvania 4449
Tennessee 3821
Texas 4188
Virginia 4701
Wisconsin 4468
3. 1~8, 11~18, 111~118로 이루어진 2, 4, 3차원의 배열을 만드시오.
풀이)
> b <- c(1:8, 11:18, 111:118)
> dim(b) <- c(2,4,3)
> b
, , 1
[,1] [,2] [,3] [,4]
[1,] 1 3 5 7
[2,] 2 4 6 8
, , 2
[,1] [,2] [,3] [,4]
[1,] 11 13 15 17
[2,] 12 14 16 18
, , 3
[,1] [,2] [,3] [,4]
[1,] 111 113 115 117
[2,] 112 114 116 118
4. R에 저장된 iris의 (38,1,3)번째 원소를 추출하시오.
풀이)
> iris[38,1,3]
[1] 4.9
[04] R 그래프 기초
[01] R 그래프 기초
1. plot()함수
- plot(y축데이터, 옵션)
- plot(x축데이터,y축 데이터, 옵션)
> v<-c(5,4,6,3,2)
> plot(v)
> x<-1:10
> y<-10:1
> plot(x,y)
- xlim, ylim : 한계값지정
> plot(x,y,xlim=c(1,20), ylim=c(20,1))
- xlab, ylab : x축, y축 이름 지정, main을 이용해서 그래프제목 지정
> plot(x,y,xlim=c(1,20), ylim=c(20,1))
> plot(x,y,xlim=c(1,20), ylim=c(20,1),
+ xlab="X축 값",ylab="Y축값",
+ main="Plot Test")
- 옵션
2. plot, axis, title, par, legend
- plot() : 그래프 그리기
- axis() : 축값 지정 하기
- title() : 제목 달기
> plot.new() # 새로운 그래프 창 열기
> v1<-c(100,120,130,140,150)
> plot(v1,type="o", col="red", ylim=c(0,200),axes=F, ann=F)
>
> axis(1,at=1:5, lab=c("MON","TUE","WED","THU","FRI"))
> axis(2,ylim=c(0,200))
>
> title(main="FRUT", col.main="red", font.main=4)
> title(xlab="DAY", col.lab="black")
> title(ylab="PRIC", col.lab="blue")
- par(mfrow=c(nr,nc)) nr:행의 갯수, nc 열의 갯수
:한 화면에 여러 개의 그래프 동시 배치
nr:행의 갯수, nc 열의 갯수
> v1
[1] 100 120 130 140 150
> par(mfrow=c(1,3))
> plot(v1,type="o")
> plot(v1,type="s")
> plot(v1,type="l")
>
- legend(x축 위치, y축 위치, 내용, cex=글자크기, col=색상,pch=크기, lty=선모양)
:범례 추가
- lines(), par(new=T) : 충첩허용
> dev.new()
> a1 <- c(1,2,3,4,5)
> a2 <- c(5,4,3,2,1)
> a3 <- c(2,4,6,8,10)
> plot(a1,type="s", col="red", ylim=c(1,10))
> lines(a2,type="o", col="blue", ylim=c(1,5))
> lines(a3,type="l", col="green", ylim=c(1,15))
>
> legend(4,9,c("a1","a2","a3"),cex=0.9,col=c("red","blue","green"),lty=1)
>
3. 막대 그래프
- barplot() 함수를 이용(세로막대)
- horiz=T : 가로막대
- beside=T : 그룹으로 묶어서 출력
> xm <- matrix(x,2,5)
> xm
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
>
>
>
- 옵션
4. 파이 그래프
- pie() 함수를 이용
- 옵션
> dev.new()
> p1<- c(10,20,30,40)
>
> pie(p1,radius=1)
>
> #시작각도를 90도로 지정
> pie(p1,radius=1,init.angle=90)
>
> #색상과 lable 지정
> pie(p1,radius=1,init.angle=90,col=rainbow(p1))
>
> pie(p1,radius=1,init.angle=90,col=rainbow(p1)
+ ,label=c("Week 1", "Week 2", "Week 3", "Week 4"))
>
- 수치값및 범례 보여주기
- round(대상, 반올림할 자리수)
- paste(a,b) : a에 b를 붙여서 하나로 만드는 함수
> pct<-round(p1/sum(p1) * 100,1)
> lab<-paste(pct,"%")
> pie(p1,radius=1,init.angle=90,col=rainbow(p1),label=lab)
>
> legend(1,1,c("Week 1","Week 2","Week 3","Week 4"),cex=0.5,fill=rainbow(length(p1)))
>
- pie3D()함수
: 3D로 파이그래프 만들기
plotrix패키지를 설치후 library를 로딩해야함.
install.packages("plotrix")
library(plotrix)
[05]비정형 데이타 그래프 출력시 사용
5. 나이팅 게일 그래프
- star()함수 사용 : 비교,분석시 사용
> dev.new()
> total <- read.table("학생별전체성적_new.txt",header=T,sep=",")
> total
이름 국어 영어 수학 국사 화학 물리
1 박지영 90 85 55 88 91 79
2 김태함 70 65 80 75 76 89
3 김효섭 92 95 76 65 89 91
4 임경희 76 89 88 98 100 91
5 권혁진 97 87 83 91 86 91
6 하혜진 80 86 97 85 69 77
7 이준원 80 30 40 50 70 90
8 윤정웅 70 82 54 56 58 60
9 주시현 90 95 100 85 89 92
> row.names(total)<- total$이름
> total
이름 국어 영어 수학 국사 화학 물리
박지영 박지영 90 85 55 88 91 79
김태함 김태함 70 65 80 75 76 89
김효섭 김효섭 92 95 76 65 89 91
임경희 임경희 76 89 88 98 100 91
권혁진 권혁진 97 87 83 91 86 91
하혜진 하혜진 80 86 97 85 69 77
이준원 이준원 80 30 40 50 70 90
윤정웅 윤정웅 70 82 54 56 58 60
주시현 주시현 90 95 100 85 89 92
> total <- total[2:7]
> total
국어 영어 수학 국사 화학 물리
박지영 90 85 55 88 91 79
김태함 70 65 80 75 76 89
김효섭 92 95 76 65 89 91
임경희 76 89 88 98 100 91
권혁진 97 87 83 91 86 91
하혜진 80 86 97 85 69 77
이준원 80 30 40 50 70 90
윤정웅 70 82 54 56 58 60
주시현 90 95 100 85 89 92
>
> stars(total,flip.labels=F,draw.segment=F,frame.plot=T,full=T,main="학생별 과목별 성적분석")
>
>
> lab <- names(total)
> lab
[1] "국어" "영어" "수학" "국사" "화학" "물리"
> value <- table(lab)
> value
lab
국사 국어 물리 수학 영어 화학
1 1 1 1 1 1
> pie(value,labels=lab,radius=0.1,cex=0.6,col=NA)
>
> draw.segment=T #색상 표현
> color <- c("black","red","green","blue","cyan","violet")
> pie(value,labels=lab,col=color,radius=0.1,cex=0.6)
[05] R 그래프(비정형 데이터)
1. 비정형 데이터를 이용한 그래프
- 거의 대부분의 DBMS 벤더 제품은 정형화 된 형태의 데이터를 저장하고 있습니다.
- 비정형화된 데이터는 web을 통해서 크롤링(crawling-데이터를 모으는 작업) 하거나 설문등을 통해서 모아진 데이터등 일상적인 모든 환경에서 접할 수 있는 모든 데이터를 말합니다.
- 블로그등 인터넷에서 크롤링한 데이터 (서울의 추천 명소)별로 그래프를 그리는 작업
>>>> 작업1) 작업디렉토리 확인하고 필요한 단어추출과 그래프를 위한 패키지 설치와 로딩
> getwd()
> install.packages("KoNLP")
> install.packages("wordcloud")
> install.packages("stringr")
> Sys.setenv(Java_HOME='c:\\Program Files\\Java\\jre1.8.0_40') # 'rJava'를 로딩할 수 없습니다. 오류시에 작성
>>>> 작업2) 세종사전에 서울 관광지 명소를 수동으로 추가 (파일로 추가)
>>>> 작업3) 분석할 크롤링한 자료를 변수로 불러 들여서 명사만 분리
>head(unlist(place),30) #보기좋은 모양(리스트가 아닌)으로 변경
> write(res,"seoul_go2.txt") #정제된 내용을 파일로 저장
>>>> 작업5) 추선 수가 높은 상위 10개의 명소를 골라서 pie형 그래프로 출력
>>>> 작업7) 수치값을 함께 출력
>>>> 작업8) 도넛모양 으로 출력
> text(x=bplot, y=bchart*1.05, labels=paste("(",pct,"%",")"), col = "black", cex=0.5)
-------------------------------------------------------------------------------------------
> barplot(bchart, main="서울의 가볼만한 명소 top10",col=rainbow(10),
- 거의 대부분의 DBMS 벤더 제품은 정형화 된 형태의 데이터를 저장하고 있습니다.
- 비정형화된 데이터는 web을 통해서 크롤링(crawling-데이터를 모으는 작업) 하거나 설문등을 통해서 모아진 데이터등 일상적인 모든 환경에서 접할 수 있는 모든 데이터를 말합니다.
- 블로그등 인터넷에서 크롤링한 데이터 (서울의 추천 명소)별로 그래프를 그리는 작업
>>>> 작업1) 작업디렉토리 확인하고 필요한 단어추출과 그래프를 위한 패키지 설치와 로딩
> getwd()
> install.packages("KoNLP")
> install.packages("wordcloud")
> install.packages("stringr")
> Sys.setenv(Java_HOME='c:\\Program Files\\Java\\jre1.8.0_40') # 'rJava'를 로딩할 수 없습니다. 오류시에 작성
> library(KoNLP) #설치된 KoNLP 패키지를 호출
필요한 패키지를 로딩중입니다: rJava
필요한 패키지를 로딩중입니다: stringr
필요한 패키지를 로딩중입니다: hash
hash-2.2.6 provided by Decision Patterns
필요한 패키지를 로딩중입니다: tau
필요한 패키지를 로딩중입니다: Sejong
Successfully Loaded Sejong Package.
Building dictionary structures.
다음의 패키지를 부착합니다: ‘KoNLP’
The following object is masked from ‘package:tau’:
is.ascii
> library(wordcloud) #설치된 wordcloud 패키지를 호출
필요한 패키지를 로딩중입니다: RColorBrewer
> library(stringr) #설치된 stringr패키지를 호출
>>>> 작업2) 세종사전에 서울 관광지 명소를 수동으로 추가 (파일로 추가)
> useSejongDic()
> mergeUserDic(data.frame(readLines("mergefile.txt"),"ncn"))
21 words were added to dic_user.txt.
>>>> 작업3) 분석할 크롤링한 자료를 변수로 불러 들여서 명사만 분리
> txt <-readLines("seoul_go.txt")
> place <- sapply(txt,extractNoun,USE.NAMES=F) #명사만 분리
> head(place,10) #확인[[1]]
[1] "162,900" "건"
[[2]]
[1] ""
[[3]]
[1] "서울" "야경" "데이트"
[[4]]
[1] ""
[[5]]
[1] "6"
[[6]]
[1] ""
[[7]]
[1] ""
[[8]]
[1] "서울" "야경" "데이트" "야경"
[5] "명소" "BEST7" "7" "전"
[9] "서울" "명소가되었는데" "달빛" "후원"
[13] "모습" "수" "곳인거" "두"
[17] "번째" "서울" "야경" "명소"
[21] "북악" "팔각정" "저" "rudyrudy1207"
[25] "blog" "me" "220147814047" "루디"
[29] "반딧불이" "세" "블로그" "내"
[33] "검색"
[[9]]
[1] ""
[[10]]
[1] "여행" "하기" "좋은곳"
>head(unlist(place),30) #보기좋은 모양(리스트가 아닌)으로 변경
>c <- unlist(place)
>place <- Filter(function(x) {nchar(x) >= 2},c) #2자이상된 단어만 필터링함
>>>> 작업4) 의미없는 문자, 기호, 숫자, 공백 제거
> NROW(res) #행객수>>>> 작업4) 의미없는 문자, 기호, 숫자, 공백 제거
>res <- str_replace_all(place,"[^[:alpha:]]","") #영문,한글 아닌것 전부제거
>res <- res[res != ""] #벡터에서 공백을 제거합니다.
> res <-gsub("서울","",res) #문자열 변환
> res <-gsub("명소","",res)
> res <-gsub("소개","",res)
> res <-gsub("추천","",res)
> res <-gsub("블로그","",res)
> res <-gsub("검색","",res)
> res <-gsub("blog","",res)
> res <-gsub("naver","",res)
> res <-gsub("com","",res)
> res <-gsub("me","",res)
> res <-gsub("데이트","",res)
> res <-gsub("약도","",res)
> res <-gsub("사진","",res)
> res <-gsub("야경","",res)
> res <-gsub("여행","",res)
> res <-gsub("근교","",res)
> res <-gsub("이야기","",res)
> res <-gsub("안녕","",res)
> res <-gsub("도시","",res)
> res <-gsub("관광","",res)
> res <-gsub("벚꽃","",res)
> res <-gsub("코스","",res)
> res <-gsub("오늘","",res)
> res <-gsub("요한","",res)
> res <-gsub("축제","",res)
> res <-gsub("행복","",res)
> res <-gsub("가볼만한곳","",res)
> res <-gsub("걷기","",res)
> res <-gsub("km","",res)
> res <-gsub("거리","",res)
> res <-gsub("공원","",res)
> res <-gsub("문화","",res)
> res <-gsub("마을","",res)
> res <-gsub("가을","",res)
> res <-gsub("단풍","",res)
> res <-gsub("나들이","",res)
> res <-gsub("주말","",res)
> res <-gsub("출사","",res)
> res <-gsub("하게","",res)
> res <-gsub("구경","",res)
> res <-gsub("유명","",res)
> res <-gsub("좋은곳","",res)
> res <-gsub("daum","",res)
> res <-gsub("시간","",res)
[1] 5540
> write(res,"seoul_go2.txt") #정제된 내용을 파일로 저장
> res2 <- read.table("seoul_go2.txt") #파일을 다시 변수로 읽어옴
> wordcount<-table(res2) #각 언어별 언급 횟수를 집계
> head(sort(wordcount,decreasing=T),30) #언급횟수가 30부터내림차순의 내용 출력
res2
한옥 북촌 홍대 삼청동 경복궁
38 32 25 23 22
인사 하늘 창경궁 올림픽 국립중앙박물관
20 20 18 17 13
나들길 남산 청계천 cognos 명동
13 13 13 12 12
억새 호수 강남 국립민속박물관 벽화
12 12 11 11 11
에 촬영 하나 국립 선유도
11 11 11 10 10
에서 일출 카페 하기 tistory
10 10 10
>>>> 작업5) 추선 수가 높은 상위 10개의 명소를 골라서 pie형 그래프로 출력
> top10 <- head(sort(wordcount,decreasing=T),10)
> top10
res2
한옥 북촌 홍대 삼청동 경복궁
38 32 25 23 22
인사 하늘 창경궁 올림픽 국립중앙박물관
20 20 18 17 13
> pie(top10)
> savePlot("seoul_go_1.jpeg",type="jpeg")
>>>> 작업6) 색깔과 크기 지정해서 pie형 그래프 출력
> savePlot("seoul_go_1.jpeg",type="jpeg")
>>>> 작업6) 색깔과 크기 지정해서 pie형 그래프 출력
> pie(top10,col=rainbow(10),radius=1)
> savePlot("seoul_go_2.jpeg",type="jpeg")
>>>> 작업7) 수치값을 함께 출력
> pct<-round(top10/sum(top10)*100,1)
> names(top10)
[1] "한옥" "북촌" "홍대" "삼청동"
[5] "경복궁" "인사" "하늘" "창경궁"
[9] "올림픽" "국립중앙박물관"
> lab<-paste(names(top10),"\n",pct,"%")
> pie(top10,main="서울시 가볼만한 명소 TOP 10",col=rainbow(10),cex=0.8,labels=lab)
> savePlot("seoul_go_3.jpeg",type="jpeg")
>>>> 작업8) 도넛모양 으로 출력
> pie(top10,radius=0.6,col="black",labels=NA,border=NA)
> pie(top10,main="서울시 가볼만한 명소 TOP 10",col=rainbow(10),cex=0.8,labels=lab)
> par(new=T) #기존 파이그래프 지우지 않고 덮어쓴다는 의미
> pie(top10,radius=0.6,col="white",labels=NA,border=NA)
> savePlot("seoul_go_4.jpeg",type="jpeg")
>>>> 작업9) 3D Pie 출력
- pie3D()함수
>>>> 작업10) bar 형식으로 출력
>>>> 작업9) 3D Pie 출력
- pie3D()함수
: 3D로 파이그래프 만들기
plotrix패키지를 설치후 library를 로딩해야함.
install.packages("plotrix")
library(plotrix)
> bchart <- head(sort(wordcount, decreasing=T), 10)
> th_pct <- round(bchart/sum(bchart)*100,1)
> th_names <- names(bchart)
> th_labels <- paste(th_names,"\n","(",th_pct,")")
> pie3D(bchart,main="서울의 가볼만한 명소 Top 10",col=rainbow(10),
+ cex=0.5,labels=th_labels,explode=0.05)
> savePlot("seoul_go_5.jpeg",type="jpeg")
>>>> 작업10) bar 형식으로 출력
> bplot <- barplot(bchart, main="서울의 가볼만한 명소 top10",col=rainbow(10),
+ cex.names=0.7,las=2,ylim=c(0,45))
> pct <- round(bchart/sum(bchart) *100,1)
> pct
res2
한옥 북촌 홍대 삼청동 경복궁 인사 하늘 창경궁 올림픽 국립중앙박물관
16.7 14.0 11.0 10.1 9.6 8.8 8.8 7.9 7.5 5.7
> text(x=bplot, y=bchart*1.05, labels=paste("(",pct,"%",")"), col = "black", cex=0.5)
> text(x=bplot, y=bchart*0.95, labels = paste(bchart,"건"),col="black",cex=0.5)
> savePlot("seoul_go_6.jpeg",type="jpeg")
-------------------------------------------------------------------------------------------
> barplot(bchart, main="서울의 가볼만한 명소 top10",col=rainbow(10),
+ xlim=c(0,45),cex.names=0.7,las=2,horiz=T)
> text(y=bplot, x=bchart*0.9, labels = paste(bchart,"건"), col = "black", cex=0.7)
> text(y=bplot, x=bchart*1.1, labels = paste("(",pct,"%",")"),col="black",cex=0.7)
> savePlot("seoul_go_7.jpeg",type="jpeg")
>
R은 읽어봐야 할 것 같다^^
5. 수업
진도:
hw:
6. 할것
'Programming' 카테고리의 다른 글
160917: 완료 (1) | 2016.09.17 |
---|---|
160826: 111회차 (0) | 2016.08.26 |
160824: 109회차 (0) | 2016.08.24 |
160823: 108회차 (0) | 2016.08.23 |
160822: 107회차 (0) | 2016.08.22 |