포스팅 목차
87. Display those employees whose name contains not less than 5 chars
* 사원 이름이 5글자 이상인 직원을 선택하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [문자 함수] 문자 길이 측정
|
1. Oracle(오라클)
length() 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다.
Oracle Programming |
Select *
from emp
where length(ename)>= 5;
2. Python Pandas(파이썬)
pandas.Series.str.match 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다. pandas.Series.str.match는 패턴 매칭 함수로 변수 길이가 5글자 이상인 패턴을 체크한다.
Python Programming |
emp[ emp['job'].str.match("^.....") ].head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
Python Programming |
emp.loc[(emp.ename.str.match("^.....")) , ].head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
pandas.Series.str.lenmatch 함수를 사용하여서 변수의 길이가 5글자 이상인 직원을 선택한다.
Python Programming |
emp[ emp['ename'].str.len() > 4 ].head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
Python Programming |
emp.loc[(emp.ename.str.len() > 4) , ].head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
pandas.Series.str.match 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다. pandas.DataFrame.query를 사용하여서 해당 조건에 만족하는 사원의 정보를 추출한다.
Python Programming |
emp.query('ename.str.match("^.....")', engine='python').head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
Python Programming |
emp.query('ename.str.len() > 4', engine='python').head()
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
3. R Programming (R Package)
- string Vs Base 함수 : https://stringr.tidyverse.org/articles/from-base.html
grep 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다. grep 함수는 패턴 매칭 함수로 변수 길이가 5글자 이상인 패턴을 체크한다.
R Programming |
%%R
emp[ grep("^.....", emp$ename) , ][1:5, ]
Results |
# A tibble: 5 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
grepl 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다. subset 함수를 사용하여서 해당 조건에 만족하는 사원의 정보를 추출한다.
R Programming |
%%R
subset(emp, subset=grepl("^.....", emp$ename), )[1:5, ]
Results |
# A tibble: 5 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
stringr::str_detect 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다. subset 함수를 사용하여서 해당 조건에 만족하는 사원의 정보를 추출한다.
R Programming |
%%R
library(stringr)
subset(emp,subset= (stringr::str_detect(emp$ename, "^.....") ) , )[1:5, ]
Results |
# A tibble: 11 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
6 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
7 7788 SCOTT ANALYST 7566 1982-12-09 3000 NA 20
8 7844 TURNER SALESMAN 7698 1981-09-08 1500 0 30
9 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20
10 7900 JAMES CLERK 7698 1981-12-03 950 NA 30
11 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10
stringr::str_length 함수를 사용하여서 변수의 길이가 5글자 이상인 직원을 선택한다.
R Programming |
%%R
emp[ stringr::str_length(emp$ename) > 4 , ][1:5, ]
Results |
# A tibble: 5 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
nchar 함수를 사용하여서 변수의 길이가 5글자 이상인 직원을 선택한다.
R Programming |
%%R
emp[ nchar(as.character(emp$ename)) > 4 , ][1:5, ]
Results |
# A tibble: 5 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
stringr::str_length 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다. subset 함수를 사용하여서 해당 조건에 만족하는 사원의 정보를 추출한다.
R Programming |
%%R
subset(emp, subset= (stringr::str_length(emp$ename) > 4) , select=c(empno,ename))[1:5, ]
Results |
# A tibble: 5 x 2
empno ename
<dbl> <chr>
1 7369 SMITH
2 7499 ALLEN
3 7566 JONES
4 7654 MARTIN
5 7698 BLAKE
4. R Dplyr Package
stringr::str_length 함수를 사용하여서 변수의 길이가 5글자 이상인 직원을 선택한다.
R Programming |
%%R
emp %>%
dplyr::filter( stringr::str_length(ename) > 4 ) %>%
head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
6 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
grepl 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택하고, filter 함수를 사용하여서 해당 조건에 만족하는 사원의 정보를 추출한다.
R Programming |
%%R
emp %>%
dplyr::filter( grepl('^.....', ename)) %>%
head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
6 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
stringr::str_detect 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다. filter 함수를 사용하여서 해당 조건에 만족하는 사원의 정보를 추출한다.
R Programming |
%%R
emp %>%
filter( stringr::str_detect(ename,"^.....") ) %>%
head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
6 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
nchar 함수를 사용하여서 변수의 길이가 5글자 이상인 직원을 선택한다.
R Programming |
%%R
emp %>%
dplyr::filter( nchar(as.character(ename)) > 4 ) %>%
head()
Results |
# A tibble: 6 x 8
empno ename job mgr hiredate sal comm deptno
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
6 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
5. R sqldf Package
length() 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다.
R Programming |
%%R
sqldf("Select * from emp where length(ename) > 4;") %>% head()
Results |
empno ename job mgr hiredate sal comm deptno
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
6 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10
6. Python pandasql Package
length() 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다.
R Programming |
ps.sqldf("Select * from emp where length(ename)>4;").head()
Results |
empno | ename | job | mgr | hireate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
7654 | MARTIN | SALESMAN | 7698.0 | 1981/09/28 | 1250 | 1400.0 | 30 |
7698 | BLAKE | MANAGER | 7839.0 | 1981/03/01 | 2850 | NaN | 30 |
7. R data.table Package
stringr::str_length 함수를 사용하여서 변수의 길이가 5글자 이상인 직원을 선택한다.
R Programming |
%%R
DT <- data.table(emp)
DT[stringr::str_length(ename) > 4, ][1:5, ]
Results |
empno ename job mgr hiredate sal comm deptno
1: 7369 SMITH CLERK 7902 1980-12-17 800 NA 20
2: 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30
3: 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20
4: 7654 MARTIN SALESMAN 7698 1981-09-28 1250 1400 30
5: 7698 BLAKE MANAGER 7839 1981-03-01 2850 NA 30
8. SAS Proc SQL
length() 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다.
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
Select *
from emp
where length(ename)>= 5;
QUIT;
PROC PRINT data=STATSAS_1(obs=3);RUN;
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | . | 20 |
7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30 |
7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | . | 20 |
9. SAS Data Step
length() 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다.
SAS Programming |
%%SAS sas
DATA STATSAS_2;
Set emp;
where length(ename)>= 5;
RUN;
PROC PRINT data=STATSAS_2(obs=3);RUN;
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | . | 20 |
7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30 |
7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | . | 20 |
10. Python Dfply Package
Python Programming |
emp >> filter_by(X.job.str.match("^.....")) >> head(3)
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7521 | WARD | SALESMAN | 7698.0 | 1981/02/22 | 1250 | 500.0 | 30 |
Python Programming |
emp >> filter_by(X.ename.str.match("^.....")) >> head(3)
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
length() 함수를 사용하여서 변수의 길이를 체크하여서 사원 이름이 5글자 이상인 직원을 선택한다.
Python Programming |
emp >> filter_by(X.ename.str.len() > 4) >> head(3)
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno |
7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7499 | ALLEN | SALESMAN | 7698.0 | 1981/02/20 | 1600 | 300.0 | 30 |
7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 전처리 방법 리스트
'통계프로그램 비교 시리즈 > 프로그래밍비교(Oracle,Python,R,SAS)' 카테고리의 다른 글
[데이터 추출] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 비교 연산자(=) - 89 (1) | 2022.09.26 |
---|---|
[문자 함수] 문자 검색 함수 - 88 (1) | 2022.09.26 |
[데이터 전처리] 비상관 서브쿼리(Uncorrelated Subqueyr) 를 만족하는 데이터 추출 - 상하 결합 UNION 연산자 - 86 (0) | 2022.09.23 |
[데이터 전처리 비교- 데이터 추출] 비상관 서브쿼리를 만족하는 데이터 추출 & 부등호 연산 - 85 (0) | 2022.06.13 |
[데이터 전처리 비교- 테이블 결합] LEFT JOIN (왼쪽 결합) 으로 2개 테이블 결합 - 오른쪽 테이블에 미존재 데이터 추출 - 84 (0) | 2021.11.15 |
댓글