빅데이터 - R 사용법
>install.packages("KoNLP"); //한글 언어팩
>news<-readLines("/home/sist/news.txt") //news변수에 추가
>news //출력
>library(KoNLP) //라이브러리 추가
>install.packages("wordcloud") //단어 자르는거
>library(wordcloud)
>news2<-sapply(news,extractNoun,USE.NAMES = F) //칼럼 따로 추가 안한다
>news2
>head(unlist(news2), 30) //순서 상관없이 30개만
>news3<-unlist(news2)
>news3<-gsub("\\d+","",news3) //gsub지우는 함수, d는 모든 숫자 지워라
>news3
>write(unlist(news3),"/home/sist/news2.txt")
>news4<-read.table("/home/sist/news2.txt")
>wordcount<-table(news4)
>head(sort(wordcount, decreasing=T),20) //단어가 몇개씩 들어있는지 출력
>news4
후예 태양 한 송중기 송혜교 사진
45 42 38 37 17 14
속 모습 이 배우 것 방송
13 12 11 10 9 9
중 드라마 송중기가 송중기와 진구 ‘태양
9 8 8 8 8 7
눈길 송중기는
7 7
>wordcloud(names(wordcount),freq = wordcount, scale = c(5,1), rot.per = 0.25, min.freq = 2, random.order = F,color=rainbow(15))
빈도수 크기 로테이션 최소 몇번나와야
>legend(0.3,1,"뉴스",cex=0.8,fill = NA, border=NA, bg="white", text.col = "red", text.font = 2, box.col = "red")
>read.csv("file_name",header=T,sep=",") //파일 읽기
>read.table("file name") //자동으로 컬럼 생성 (v1, v2, v3... 로 생김)
>readLines("file name") //txt파일 읽을때 한줄씩
//excel 읽을땐 라이브러리 다운
>c(1,2,1,2) //벡터, 1차원배열
// 2차원배열은 테이블로
>barplot(emp$sal, names.arg = emp$ename, main = "Emp Salary", col = rainbow(15)) //막대그래프
//emp.sal 제목
>pie(emp$sal, labels = emp$ename, col = rainbow(15)) //원그래프
>a<-c(1,2,3,4,5,6,7,8,9,10) // 1차원 배열
>a<-c(1:10) // : 은 루프
[1] 1 2 3 4 5 6 7 8 9 10
>a<-seq(1,20) // 시퀀스 1부터 20까지
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[19] 19 20
> rep(1:2,3) // 1부터 2까지 3번 반복
[1] 1 2 1 2 1 2
> rep(1:2,each=5) //1부터 2까지 5번씩 반복
[1] 1 1 1 1 1 2 2 2 2 2
> matrix(c(1:9)) //2차원 배열. c(행, 열) 배열은 1부터 시작 (자바는 0)
[,1]
[1,] 1
[2,] 2
[3,] 3
[4,] 4
[5,] 5
[6,] 6
[7,] 7
[8,] 8
[9,] 9
> matrix(c(1:9), nrow=3) // 3행 3열 nrow는 행
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
> matrix(c(1:9), ncol = 2) // ncol은 열
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 1
> data.frame(x=c(1,2,3,4,5), y=c(2,4,6,8,10)) // 데이터 프레임
x y
1 1 2
2 2 4
3 3 6
4 4 8
5 5 10
> data.frame(col1=c(1,2,3,4,5), col2=c(2,4,6,8,10), col3=c('a','b', 'c','d','e'))
col1 col2 col3
1 1 2 a
2 2 4 b
3 3 6 c
4 4 8 d
5 5 10 e
> d<-data.frame(col1=c(1,2,3,4,5), col2=c(2,4,6,8,10), col3=c('a','b', 'c','d','e'))
> d[2, c("col1","col2")] // 2번째 값 가져와라
col1 col2
2 2 4
> array(c(1:12),dim=c(3,4)) // 3행 4열로
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> list(name="scott", sal=3000) //앞에가 key, 뒤에가 키값
$name
[1] "scott"
$sal
[1] 3000
> x<-c("a","b","c")
> x[1] // 배열 값 찾기
[1] "a"
> x<-c(1,3,4)
> names(x)<-c("scott","king","jones") // names는 타이틀 주기. 타이틀이 있어야 값 가져올 수 있음
> x
scott king jones
1 3 4
> emp[emp$sal==3000,c("ename","sal")] // 조건주기
ename sal
8 SCOTT 3000
13 FORD 3000
> emp[emp$job=='CLERK',c("ename","job")]
ename job
1 SMITH CLERK
11 ADAMS CLERK
12 JAMES CLERK
14 MILLER CLERK
> 5/2 // 나누기 하면 실수값 나옴
[1] 2.5
> 5%%2 // 나머지값은 퍼센트 두개
[1] 1
/*
in = %in%
like = grep
is null = is.na
between ~ and = &
*/
//sql 사용
install.packages("data.table")
install.packages("sqldf")
library(data.table)
library(sqldf)
sqldf("select ename,sal,job from emp")
> data.table(unique(emp$deptno)) // 중복 허용 안함
V1
1: 20
2: 30
3: 10
> attach(emp) // emp$ 를 사용하지 않기 위해서. 값 뽑을때 칼럼 이름만 써주면 됨
> detach(emp) //attach 해제법
> emp[emp$job!='CLERK',c("ename","job")] //CLERK 이 아닌사람
ename job
2 ALLEN SALESMAN
3 WARD SALESMAN
4 JONES MANAGER
5 MARTIN SALESMAN
6 BLAKE MANAGER
7 CLARK MANAGER
8 SCOTT ANALYST
9 KING PRESIDENT
10 TURNER SALESMAN
13 FORD ANALYST
> emp[emp$job %in% c('CLERK','SALES'),c("ename","job")]
ename job
1 SMITH CLERK
11 ADAMS CLERK
12 JAMES CLERK
14 MILLER CLERK
// 시작할때 ^, 끝날때 $
> emp[grep("^A.*",ename), c("ename","job")] // = grep("^A.*", ename) ename like 'A%'(%A)
ename job
2 ALLEN SALESMAN
11 ADAMS CLERK
> emp[grep("*.T$", ename), c("ename", "job")]
ename job
8 SCOTT ANALYST
> emp[!is.na(comm),c("ename","comm")] // null 대신 is.na (여기서는 na로 되어있어야 null로 인식)
ename comm
1 SMITH NULL
2 ALLEN 300
3 WARD 500
4 JONES NULL
5 MARTIN 1400
6 BLAKE NULL
7 CLARK NULL
8 SCOTT NULL
9 KING NULL
10 TURNER 0
11 ADAMS NULL
12 JAMES NULL
13 FORD NULL
14 MILLER NULL
/*
조인하기.
'선거' 를 검색했을때 naver, daum, nate, google, twitter 에서 가져올 수 있음.
하나로 묶어서 가져오기 위해 조인걸기.
*/
>install.packages("doBy") // 출력 시 order by 하기 위한 패키지
> library(doBy)
> emp[order(sal,decreasing = T),c("ename","sal")] // decreasing = True 주면 desc
ename sal
9 KING 5000
8 SCOTT 3000
13 FORD 3000
4 JONES 2975
6 BLAKE 2850
7 CLARK 2450
2 ALLEN 1600
10 TURNER 1500
14 MILLER 1300
3 WARD 1250
5 MARTIN 1250
11 ADAMS 1100
12 JAMES 950
1 SMITH 800
> emp[order(deptno, -sal), c("ename", "sal", "deptno")] // 이중 정렬 '-'붙이면 desc
ename sal deptno
9 KING 5000 10
7 CLARK 2450 10
14 MILLER 1300 10
8 SCOTT 3000 20
13 FORD 3000 20
4 JONES 2975 20
11 ADAMS 1100 20
1 SMITH 800 20
6 BLAKE 2850 30
2 ALLEN 1600 30
10 TURNER 1500 30
3 WARD 1250 30
5 MARTIN 1250 30
12 JAMES 950 30
> Sys.Date()+as.difftime(4,units = "weeks") // 4주후의 날짜
[1] "2016-04-30"
> format(Sys.Date(), "%A") // 오늘날짜
[1] "토요일"
> Sys.Date()+as.difftime(100, units = "days") // 100일 후의 날짜
[1] "2016-07-11"
> aggregate(sal~job, emp, max) // = select max(sal) from emp group by job
job sal
1 ANALYST 3000
2 CLERK 1300
3 MANAGER 2975
4 PRESIDENT 5000
5 SALESMAN 1600
> aggregate(sal~deptno, emp, max) // 부서별로 가장 많이 받는
deptno sal
1 10 5000
2 20 3000
3 30 2850
> aggregate(sal~deptno, emp, sum) // 합
deptno sal
1 10 8750
2 20 10875
3 30 9400
// 마지막 인자에 max, sum, length(수), mean(위도, 경도에서 많이 사용. 평균값 구함), min 사용 가능
> data.frame(max(emp$sal), min(emp$sal), sum(emp$sal), mean(emp$sal), length(emp$sal))
최대 최소 합 평균 개수
max.emp.sal. min.emp.sal. sum.emp.sal. mean.emp.sal.
1 5000 800 29025 2073.214
length.emp.sal.
1 14
> dept<-read.csv("/home/sist/dept.csv",header = T,sep=",")
// emp에서는 "ename","sal","deptno" , dept에서는 "deptno","dname","loc" 가져오는데 deptno가 같은것으로
// 오라클 = select ename, sal, deptno, dname, loc from emp, dept where emp.deptno=dept.deptno
> merge(emp[,c("ename","sal","deptno")],dept[,c("deptno","dname","loc")], by="deptno")
deptno ename sal dname loc
1 10 CLARK 2450 ACCOUNTING NEW YORK
2 10 KING 5000 ACCOUNTING NEW YORK
3 10 MILLER 1300 ACCOUNTING NEW YORK
4 20 SMITH 800 RESEARCH DALLAS
5 20 ADAMS 1100 RESEARCH DALLAS
6 20 JONES 2975 RESEARCH DALLAS
7 20 FORD 3000 RESEARCH DALLAS
8 20 SCOTT 3000 RESEARCH DALLAS
9 30 ALLEN 1600 SALES CHICAGO
10 30 BLAKE 2850 SALES CHICAGO
11 30 WARD 1250 SALES CHICAGO
12 30 MARTIN 1250 SALES CHICAGO
13 30 TURNER 1500 SALES CHICAGO
14 30 JAMES 950 SALES CHICAGO
// emp, dept 전체 조인 , select *
> x<-merge(emp,dept,by="deptno")
> x
deptno empno ename job mgr hiredate sal comm
1 10 7782 CLARK MANAGER 7839 1981-06-09 2450 NULL
2 10 7839 KING PRESIDENT NULL 1981-11-17 5000 NULL
3 10 7934 MILLER CLERK 7782 1982-01-23 1300 NULL
4 20 7369 SMITH CLERK 7902 1980-12-17 800 NULL
5 20 7876 ADAMS CLERK 7788 1983-01-12 1100 NULL
6 20 7566 JONES MANAGER 7839 1981-04-02 2975 NULL
7 20 7902 FORD ANALYST 7566 1981-12-03 3000 NULL
8 20 7788 SCOTT ANALYST 7566 1982-12-09 3000 NULL
9 30 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300
10 30 7698 BLAKE MANAGER 7839 1981-05-01 2850 NULL
11 30 7521 WARD SALESMAN 7698 1981-02-22 1250 500
12 30 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400
13 30 7844 TURNER SALESMAN 7698 1981-09-08 1500 0
14 30 7900 JAMES CLERK 7698 1981-12-03 950 NULL
dname loc
1 ACCOUNTING NEW YORK
2 ACCOUNTING NEW YORK
3 ACCOUNTING NEW YORK
4 RESEARCH DALLAS
5 RESEARCH DALLAS
6 RESEARCH DALLAS
7 RESEARCH DALLAS
8 RESEARCH DALLAS
9 SALES CHICAGO
10 SALES CHICAGO
11 SALES CHICAGO
12 SALES CHICAGO
13 SALES CHICAGO
14 SALES CHICAGO
// 조인 걸린 상태에서, ~뒤에 나오는 애가 그룹 걸리는 애.(loc = 지역별)
> aggregate(sal~loc, x, sum)
loc sal
1 CHICAGO 9400
2 DALLAS 10875
3 NEW YORK 8750
> tapply(x$sal, x$loc, sum) // tapply 는 가로출력
BOSTON CHICAGO DALLAS NEW YORK
NA 9400 10875 8750
> x<-aggregate(sal~job, emp, sum)
> barplot(x$sal, main="Salary Bar Chart", xlab = "Name", ylab = "Salary", names.arg = x$job, col = rainbow(15)) // 막대 그래프. xlab = x축 라벨
> barplot(x,ylab = "인원수", col = c("red", "yellow", "skyblue"), legend = rownames(x)) // 첨부파일
> barplot(b,col=rainbow(15), horiz=TRUE) // horiz = 막대그래프 가로로 나타내기
> x<-merge(emp, dept) // emp, dept 테이블을 merge 시켜 x 로 사용능
> attach(x)
The following objects are masked from emp:
comm, deptno, empno, ename, hiredate, job, mgr, // 여기있는 변수들 그냥 사용 가능
sal