본문 바로가기
Database

빅데이터 - R 사용법

by 보리하늘 2017. 12. 20.
728x90
반응형

>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





728x90
반응형

댓글