포스팅 목차
136. Display the department name the no of characters of which is equal to no of employees in any other department?
* 부서이름의 길이와 부서에 속한 부서원의 숫자와 같은 부서의 정보를 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- length 예제 : 22
- [데이터 추출] 특정 조건을 만족하는 데이터 추출 - 비상관 서브쿼리(In), 문자길이(length)
- 데이터 전처리 (SQL, Pandas, R Prog, Dplyr, Dfply, SQLDF, PANDASQL, DATA.TABLE, SAS, Proc Sql)
|
1. Oracle(오라클)
서브쿼리에서 부서별 직원수를 카운트 후 dept 테이블에서 부서 이름의 길이와 동일한 부서의 정보를 출력한다.
Select dname
from dept
where length(dname) in (select count(*) from emp group by deptno);
2. Python Pandas(파이썬)
부서별 직원수를 카운트 후 isin() 함수를 사용하여서 dept 테이블에서 부서 이름의 길이와 같은 부서 정보를 출력한다.
dept[ dept['dname'].str.len().isin(emp.groupby('deptno')['ename'].count().reset_index().ename) ]
Results |
deptno | dname | loc | |
2 | 30 | SALES | CHICAGO |
3. R Programming (R Package)
aggregate() 함수를 사용하여 부서별 직원수를 카운트 후 이 선택된 결과를 %in% 함수를 통하여 dept 테이블에서 부서 이름의 길이와 같은 부서 정보를 출력한다.
%%R
dept[ stringr::str_length(dept$dname) %in% unlist(aggregate(empno~deptno, emp, length)[, "empno" ]) , ]
Results |
# A tibble: 1 x 3
deptno dname loc
<dbl> <chr> <chr>
1 30 SALES CHICAGO
4. R Dplyr Package
부서별 직원수를 카운트 후 이 선택된 결과를 %in% 함수를 통하여 dept 테이블에 전달하여서 부서 이름의 길이와 같은 부서 정보를 출력한다.
%%R
dept %>% filter( nchar(as.character(dname)) %in% ( emp %>% group_by(deptno) %>% tally() %>% dplyr::select(n) %>% unlist() ) )
Results |
# A tibble: 1 x 3
deptno dname loc
<dbl> <chr> <chr>
1 30 SALES CHICAGO
5. R sqldf Package
서브쿼리에서 부서별 직원수를 카운트 후 dept 테이블에서 부서 이름의 길이와 같은 부서 정보를 출력한다.
%%R
sqldf(" Select *
from dept
where length(dname) in (select count(*) from emp group by deptno);")
Results |
deptno dname loc
1 30 SALES CHICAGO
6. Python pandasql Package
서브쿼리에서 부서별 직원수를 카운트 후 dept 테이블에서 부서 이름의 길이와 동일한 부서의 정보를 출력한다.
import copy
ps.sqldf(" Select * from dept \
where length(dname) in (select count(*) from emp group by deptno); ")
Results |
deptno | dname | loc | |
0 | 30 | SALES | CHICAGO |
7. R data.table Package
부서별 직원수를 카운트 후 이 선택된 결과를 %in% 함수를 통하여 dept 테이블에 전달하여서 부서 이름의 길이와 같은 부서 정보를 출력한다.
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
salgrade_DT <- data.table(salgrade)
dept_DT[stringr::str_length(dname) %in% DT[, .N, by = .(deptno)]$N,]
Results |
deptno dname loc
1: 30 SALES CHICAGO
8. SAS Proc SQL
서브쿼리에서 부서별 직원수를 카운트 후 dept 테이블에서 부서 이름의 길이와 동일한 부서의 정보를 출력한다.
%%SAS sas
PROC SQL;
create table STATSAS_1 as
Select dname
from dept
where length(dname) in (select count(*) from emp group by deptno);
QUIT;
PROC PRINT;RUN;
Results |
OBS | dname |
1 | SALES |
9. SAS Data Step
%%SAS sas
DATA DEPT_1;
SET DEPT;
DNAME_LEN = LENGTH(COMPRESS(DNAME));
RUN;
PROC SORT DATA=DEPT_1;
BY DNAME_LEN;
RUN;
PROC SUMMARY DATA = EMP NWAY;
CLASS DEPTNO;
VAR EMPNO;
OUTPUT OUT=EMP_1(DROP=_:) N=DNAME_LEN;
QUIT;
PROC SORT DATA=EMP_1;
BY DNAME_LEN;
RUN;
* DATA STEP;
DATA STATSAS_2;
MERGE DEPT_1(IN=A) EMP_1(IN=B);
BY DNAME_LEN;
IF A AND B;
RUN;
PROC PRINT;RUN;
Results |
OBS | deptno | dname | loc | DNAME_LEN |
1 | 20 | SALES | CHICAGO | 5 |
10. Python Dfply Package
# [참고] 함수 사용. (52번 예제 참고) : AttributeError: 'DataFrame' object has no attribute 'ix'
@pipe
def pull_list(df, column=-1):
return df.loc[:, column]
dept >> \
filter_by( X.dname.str.len().isin( emp >> \
group_by('deptno') >> \
summarize(emp_cnt = X.empno.count()) >> \
select(X.emp_cnt) >> \
pull_list("emp_cnt")))
Results |
deptno | dname | loc | |
2 | 30 | SALES | CHICAGO |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 전처리 방법 리스트
반응형
댓글