ch0nny_log

[빅데이터분석] R _ 26. GROUP BY절 두개의 컬럼 사용 본문

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

[빅데이터분석] R _ 26. GROUP BY절 두개의 컬럼 사용

chonny 2024. 6. 28. 15:19
문제1. 부서번호, 직업, 부서번호별 직업별 토탈월급을 출력하시오. (세로출력)
1) SQL
select deptno, job, sum(sal)
	from emp
    group by deptno, job;​
2) R 
a<- aggregate(sal~deptno +job,emp,sum)
library(doBy)
orderBy(~deptno, a)​

문제2. 부서번호, 직업, 부서번호별 직업별 토탈월급을 가로로 출력하시오
tapply(emp$sal,list(emp$deptno, emp$job) ,sum)​
설명: list 함수로 숫자와 문제를 묶어줌
※ R의 자료구조
vector  
matrix  
data frame  
list  서로 다른 데이터 유형을 갖는 자료구조

array  
문제3. 위에서 출력되고 있는 결과에서 NA를 0으로 출력하시오.
(데이터 시각화를 하려면 반드시 NA가 0 이여야함)
X<- tapply(emp$sal,list(emp$deptno, emp$job) ,sum)
is.na(X)​

true 를 0 으로 만드세여
x <- tapply( emp$sal, list(emp$deptno,emp$job) , sum )

x[is.na(x)] <- 0   # True 자리에 0 이 들어갑니다.
x​

문제 4. 아래의 sql을 r로 구현하시오.
1) SQL
select to_char(hiredate,'RRRR'), sum(decode,10,sal,0)) as '10',
							     sum(decode,10,sal,0)) as '20',
                                 sum(decode,10,sal,0)) as '30'
          from emp
          group by to_char(hiredate,'RRRR');​

2) R

tapply(emp$sal, list(format(as.Date(emp$hiredate), '%Y'),emp$deptno),sum)
문제 5. 아래의 x변수 결과에서 컬러명과 로우명을 출력하시오.
x<-tapply(emp$sal, list(format(as.Date(emp$hiredate), '%Y'),emp$deptno),sum)​
colnames(x)
rownames(x)

 

※ 그래프별 유형  
원형그래프 데이터간의 비율을 확인 
막대그래프 데이터간의 크기별 차이를 확인
라인그래프 시계열 데이터의 시기별 추이 확인

 

문제 6. 위의 출력된 결과로 막대 그래프를 그리시오 
x<-tapply(emp$sal, list(format(as.Date(emp$hiredate), '%Y'),emp$deptno),sum)
x[is.na(x)] <- 0   # True 자리에 0 이 들어갑니다.
barplot(x,col = rainbow(5),legend=rownames(x),beside =T,density = 50)​

설명: density는 그래프 색의 투명도 / beside = T는 부서별 데이터를 년도별로 따로 쓰게끔함
문제 7. 타이나닉데이터 프레임을 생성하시오. 
setwd("c:\\data")
tat <- read.csv("tatanic2.CSV",header=T)
tat​
문제 8. 아래의 SQL을 R로 구현하시오.
1) SQL
select class, decode(sum(sex, 'male',1,0)) as 'male',
			  decode(sum(sex, 'female',1,0)) as 'female'
              
        from tat
        group by class​

2) R 

x<- tapply(tat$caseno, list(tat$class,tat$sex),length)
x
문제 9. 위의 결과를 막대그래프로 시각화 하시오. 
x <- tapply( tat$caseno,  list( tat$sex ,tat$class ), length )
x
barplot(x, col = rainbow(3),legend=rownames(x),beside =T,density = 50)
               


문제 10. 직업, 직업별 토탈월급을 가로로 출력하시오. (가로로 출력해야 원형그래프 그리기 좋음)
x<- tapply(emp$sal, emp$job, sum)
x​
문제 11. 직업, 직업별 토탈월급을 가지고 원형(pie) 그래프로 그리시오.
pie(x,col=rainbow(5), density = 80)​
문제 12. 위의 그래프를 3D로 그리시오. (3D 패키지 설치)
install.packages('plotrix')
library(plotrix)

pie3D(x, explode = 0.1, labels =rownames(x))​

설명: exlode 가 벌어짐 정도 입니다.
문제 13. 위의 원형 그래프에 비율을  표시하기 위한 데이터를 만드시오.
x2 <- aggregate( sal ~ job, emp, sum )
x2
pct <- round( x2$sal / sum(emp$sal) * 100, 1 ) 
pct

job_label <- paste( x2$job, ':' , pct , '%' )
job_label​

 

문제 14.  일반 원형 그래프에 job_label 을 사용해서 시각하시오.
pie( x,  labels=job_label, col=rainbow(14), density=80 )​

 

문제 15.3D 원형 그래프에 job_label 을 사용해서 시각화 하시오 
pie3D( x , explode=0.1, labels= job_label )​

문제 16. 티이타닉 데이터의 데이터 성별 비율을 원형 그래프로 시각화 하기 위해서 성별, 성별별 인원수를 가로로 출력하시오. 
tapply(tat$caseno,tat$sex,length)​
문제 17. 원형 그래프의 비율을 라벨로 붙이기 위해서 성별별 인원수의 비율 데이터를 만드시오. 
t2 <- aggregate(caseno ~ sex, tat, length)
pct <- round( t2$caseno/sum(t2$caseno)*100,1)
sex_label <- paste( t2$sex, ':', pct, '%')
sex_label​

문제 18. 위 문제를 원형 그래프로 시각화 하시오. 
pie3D( x , explode=0.1, labels= sex_label )​
pie( x,  labels=sex_label, col=rainbow(14), density=80 )