포스팅 목차
81. Display the common jobs from department number 10 and 20
* 부서번호 10(회계부서)과 20(연구부서)에 공통으로 존재하는 직무를 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [데이터 추출] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - IN 연산자
|
1. Oracle(오라클)
연구부서('20')에 근무하는 직원들의 직무를 선택 후에 회계부서('10')에서 근무하는 직원의 직무 중에서 연구부서('20') 직원들의 직무에 존재하는 직무를 선택한다.
Oracle Programming |
select job
from emp
where deptno=10
and job in (select job from emp where deptno=20);
2. Python Pandas(파이썬)
전체 직원들의 직무 중에서 연구부서 직원들의 직무에 해당하는 직무로 일하고 있는 직원들을 선택 후 회계부서(10)에 근무하는 직원들을 선택한다.
Python Programming |
emp[(emp['deptno']==10) & emp['job'].isin(emp[emp['deptno'] == 20]['job']) ]
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
13 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 |
3. R Programming (R Package)
- string Vs Base 함수 : https://stringr.tidyverse.org/articles/from-base.html
전체 직원들의 직무 중에서 연구부서 직원들의 직무에 해당하는 직무로 일하고 있는 직원들을 선택 후 회계부서(10)에 근무하는 직원들을 선택한다.
R Programming |
%%R
emp[emp$deptno == 10 & emp$job %in% unlist(emp[emp$deptno == '20', "job" ]),]
Results |
# A tibble: 2 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
2 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
4. R Dplyr Package
연구부서('20') 직원들의 직무 선택 후 전체 직원들의 직무 중에서 이에 해당하는 직무를 선택하고, 회계부서(10)에 근무하는 직원중에서 앞에서 선택한 직무로 근무하는 직원들을 선택한다.
R Programming |
%%R
emp %>%
dplyr::filter( deptno==10 & job %in% ( emp %>% dplyr::filter( deptno == 20 ) %>% dplyr::select(job) %>% unlist() ))
Results |
# A tibble: 2 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
2 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
5. R sqldf Package
연구부서('20')에 근무하는 직원들의 직무를 선택 후에 회계부서('10')에서 근무하는 직원의 직무 중에서 연구부서 직원들의 직무에 존재하는 직무를 선택한다.
R Programming |
%%R
sqldf(" select job
from emp
where deptno=10
and job in (select job from emp where deptno=20);")
Results |
job
1 MANAGER
2 CLERK
6. Python pandasql Package
연구부서('20')에 근무하는 직원들의 직무를 선택 후에 회계부서('10')에서 근무하는 직원의 직무 중에서 연구부서('20') 직원들의 직무에 존재하는 직무를 선택한다.
Python Programming |
ps.sqldf("select job from emp where deptno=10 and job in (select job from emp where deptno=20); ")
Results |
job | |
0 | MANAGER |
1 | CLERK |
7. R data.table Package
연구부서('20')에 근무하는 직원들의 직무를 선택 후 전체 직원들 중에서 이에 해당하는 직무로 근무하는 직원을 선택하고, 해당 직원 중에서 회계부서('10')에 근무하는 직원들을 최종으로 선택한다.
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[(deptno == '10') & DT[,job %in% unlist(DT[deptno == '20', .(job)])]]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
2: 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
8. SAS Proc SQL
연구부서('20')에 근무하는 직원들의 직무를 선택 후에 회계부서('10')에서 근무하는 직원의 직무 중에서 연구부서('20') 직원들의 직무에 존재하는 직무를 선택한다.
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
select job
from emp
where deptno=10
and job in (select job from emp where deptno=20);
QUIT;
PROC PRINT;RUN;
Results |
OBS | job |
1 | MANAGER |
2 | CLERK |
9. SAS Data Step
SAS Programming |
%%SAS sas
PROC SORT DATA=EMP OUT=EMP_1;
BY JOB;
RUN;
DATA STATSAS_2;
MERGE EMP_1(KEEP=JOB DEPTNO WHERE=(DEPTNO=10) IN=A)
EMP_1(RENAME=DEPTNO=DEPTNO1 KEEP=JOB DEPTNO WHERE=(DEPTNO1=20) IN=B);
BY JOB;
IF (A AND B) AND LAST.JOB;
RUN;
PROC PRINT;RUN;
Results |
OBS | job | deptno | DEPTNO1 |
1 | CLERK | 10 | 20 |
2 | MANAGER | 10 | 20 |
10. Python Dfply Package
- pull_list() 사용자 함수 별도 생성
Python Programming |
# [참고] 함수 사용. (52번 예제 참고) : AttributeError: 'DataFrame' object has no attribute 'ix'
@pipe
def pull_list(df, column=-1):
return df.loc[:, column]
emp >> \
filter_by( X.deptno==10, \
X.job.isin(emp >> filter_by(X.deptno == 20) >> select(X.job) >> pull_list("job")) )
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
6 | 7782 | CLARK | MANAGER | 7839.0 | 1981/01/09 | 2450 | NaN | 10 |
13 | 7934 | MILLER | CLERK | 7782.0 | 1982/01/23 | 1300 | NaN | 10 |
[다양한 데이터 전처리 방법 목록 링크] SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE
'통계프로그램 비교 시리즈 > 프로그래밍비교(Oracle,Python,R,SAS)' 카테고리의 다른 글
[데이터 전처리 비교- 데이터 추출] 비상관 서브쿼리를 만족하는 데이터 추출 - NOT IN 연산자 - 83 (0) | 2021.11.10 |
---|---|
[데이터 전처리 비교- 데이터 추출] 비상관 서브쿼리를 만족하는 데이터 추출 - 중복 제거를 통한 유일한 값 추출 - IN 연산자 - 82 (0) | 2021.09.01 |
[데이터 전처리- 날짜함수 예제] 특정 기간 전후 날짜 계산- 날짜 증감 - 80 (0) | 2021.08.31 |
[데이터 전처리- 날짜함수 예제] 현재 시간 출력 - 79 (0) | 2021.08.31 |
[데이터 전처리- 날짜함수] 가장 빠른 요일에 해당하는 날짜 반환 - 78 (0) | 2021.08.31 |
댓글