ch0nny_log

[빅데이터분석] R _ 27. EQUI JOIN/OUTER JOIN/SELF JOIN 본문

빅데이터 분석(with 아이티윌)/R

[빅데이터분석] R _ 27. EQUI JOIN/OUTER JOIN/SELF JOIN

chonny 2024. 6. 28. 15:49
SQL VS R
equi join merge
non equi join
outer join
self join

EQUI JOIN

문제1. dept.csv 를 내려받아 dept 데이터 프레임을 생성하시오 
dept <-read.csv('dept.csv',header = T)
dept​
문제2. 이름과 부서위치를 출력하시오.
1) SQL
select e.ename , d.loc
	from emp e, dept d
    where e.empno =d.deptno;​
2) R
merge(emp, dept,by='deptno') #두 테이블을 merge 하여 보기​

답)

x<-merge(emp, dept,by='deptno') #두 테이블을 merge 하여 보기
x [   ,c('ename','loc')]
문제3. 근무 위치가 dallas에서 근무하는 이름,월급, 부서위치를 출력하시오/.
x <-merge(emp, dept,by='deptno') #두 테이블을 merge 하여 보기
x[x$loc == 'DALLAS',c('ename','sal','loc')]​
문제 4. 커미션이 NULL 인사원들의 이름, 부서위치와 커미션을출력하시오
x <-merge(emp, dept,by='deptno')
x[is.na(x$comm),c('ename','loc')]​


OUTER JOIN

문제1. 아래의 OUTER JOIN SQL을 R로 구현하시오.
1) SQL
select e.ename, d.loc
	from emp e, dept d
    where e.deptno(+) = d.empno;​

2) R

   x<- merge(emp, dept, by = 'deptno', all.y = TRUE) 
     x [              , c("ename", "loc") ]
## x= emp /y=dept -> all.y = y에 있는 데이터가 모두나오게 해라

 

문제2. 아래의 sql의 결과를 r로 구현해라.
1) SQL
select  e.ename, d.loc
           from   emp   e,   dept   d
           where  e.deptno = d.deptno (+);​

2) R
x<- merge(emp, dept, by = 'deptno', all.x = TRUE) 
     x [              , c("ename", "loc") ]​

문제 3. 아래 SQL을 R로 구현하시오.
1) SQL
select  e.ename, d.loc
            from   emp   e   full  outer  join   dept   d
            on ( e.deptno = d.deptno );​
2) R
 x <- merge( emp,  dept,  by="deptno", all=T )
     x[          , c("ename", "loc")  ]​


 SELF JOIN

문제1. 아래의 SQL을 R로 구현하시오
1) SQL
select 사원.ename, 관리자.ename
	from emp 사원, emp 관리자
    where 사원.mgr = 관리자.empno;​
2) R
x<-merge(emp,emp, by.x='mgr',by.y='empno')
     x[          , c("ename.x", "ename.y")  ]​

 

문제2. 아래의 SQL을 R 로 구현하시오 !
1) SQL

 select  사원.ename, 관리자.ename
          from  emp  사원, emp  관리자
          where  사원.mgr  = 관리자.empno  and  사원.sal > 관리자.sal ;

2) R

  x[x$sal.x >x$sal.y, c('ename.x','ename.y')]
문제3. 사원 이름과 직속상사의 이름을 가지고 사원 테이블의 조직도를 시각화하시오, 
1) igraph 설치
install.packages('igraph')
library(igraph)​

2) 

x <-  merge( emp,  emp,  by.x="mgr", by.y="empno") 

a <- x[              ,  c( "ename.x", "ename.y") ]
a

b <- graph.data.frame( a, directed=T )
plot(b)
문제 4. 위의 그래프를 구글 goolevis를 이용해서 시각화 하시오.
install.packages("googleVis")
library(googleVis)

a <- merge(emp,emp, by.x="empno",by.y="mgr", all.y=T)

org <- gvisOrgChart(a, idvar="ename.y",parentvar="ename.x",
        options=list(width=600, height=250, size='middle', allowCollapse=T))

plot(org)​

설명: width=600 :  조직도 그래프의 너비를 600 픽셀로 지정
        height=250 : 조직도 그래프의 높이를 250 픽셀로 지정
        size='middle'  : 조직도 그래프의 노드의 크기를 중간으로 지정 (small, large)
        allowCollapse=T : 조직도 그래프에서 노드를 클릭하여 해당 하위노드를 숨기거나
                                     표시할 수 있게 허용하겠다. 

문제 5. 부서위치, 부서위치별 토탈월급을 출력하시오.
1) SQL
select d.loc, dum(e.sal)
	from emp e, dept d
    where e.deptno =d.deptno
    group bt d.loc;​

2) R (세로 출력)

x <- merge( emp, dept, by="deptno", all=T)
aggregate( x$sal ~ x$loc,  x,  sum, na.action=na.pass)

## na.action에 대한 기본값은 na.omit인데 이는 na값을 포함하는 행을 제외합니다.
## na.pass값은 na 값을 그대로 유지하도록함.

3) R(가로출력)
x <- merge( emp, dept, by="deptno", all=T)
tapply( x$sal,x$loc,  sum)​

문제 6. 위 문제를 막대그래프로 시각화 하시오
x2<-tapply( x$sal,x$loc,  sum)
barplot(x2,col=rainbow(4))​

문제 7. sql 포폴에서 했던 데이터를 이용해서오늘 배운내용으로 간단하게 시각화 하시오.