포스팅 목차
20. Display employee names for employees whose name ends with alphabet.
* 이름이 알바벳 대문자 'S'로 끝나는 직원을 선택하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [문자열 검색(접미어) 및 문자열 함수] 특정 문자열이 포함된 데이터 추출
|
1. 오라클(Oracle)
Oracle Programming |
select ename from emp
where ename like '%S';
Oracle Programming |
select ename from emp
where substr(ename,1,1) = 'S';
2. 파이썬(Pandas)
- endswith 함수를 사용하여서 사원이름이 "S"로 끝나는 사원을 선택.
Python Programming |
emp[ emp['ename'].str.endswith("S") ]
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
10 | 7876 | ADAMS | CLERK | 7788.0 | 1983/01/12 | 1100 | NaN | 20 |
11 | 7900 | JAMES | CLERK | 7698.0 | 1981/12/03 | 950 | NaN | 30 |
Python Programming |
emp.loc[(emp.ename.str.endswith("S")) , ["ename"]]
Results |
ename | |
3 | JONES |
10 | ADAMS |
11 | JAMES |
- query구문과 endswith 함수를 사용하여서 사원이름이 "S"로 끝나는 사원을 선택.
Python Programming |
emp.query('ename.str.endswith("S")', engine='python')[['ename']]
Results |
ename | |
3 | JONES |
10 | ADAMS |
11 | JAMES |
3. R Programming (R Package)
- endsWith 함수를 사용하여서 ename 변수에서 S로 끝나는 관측치 선택
R Programming |
%%R
emp[ (endsWith(emp$ename, "S")) , c("ename") ]
Results |
# A tibble: 3 x 1
ename
<chr>
1 JONES
2 ADAMS
3 JAMES
R Programming |
%%R
emp[which(endsWith(emp$ename, "S")), c("ename") ] %>% as.data.frame()
Results |
ename
1 JONES
2 ADAMS
3 JAMES
- subset구문에서 endsWith 함수를 사용하여서 ename 변수에서 S로 끝나는 관측치 선택
R Programming |
%%R
subset(emp,subset= (endsWith(ename, "S")) , select=c(empno,ename) )
Results |
# A tibble: 3 x 2
empno ename
<dbl> <chr>
1 7566 JONES
2 7876 ADAMS
3 7900 JAMES
4. R Dplyr Package
- endsWith 함수를 사용하여서 ename 변수에서 사원이름이 S로 끝나는 관측치 선택
R Programming |
%%R
emp %>% filter( endsWith(ename, "S") ) %>% dplyr::select(ename)
Results |
# A tibble: 3 x 1
ename
<chr>
1 JONES
2 ADAMS
3 JAMES
* stringr 패키지의 str_detect 패턴 매칭 함수를 사용하여서 ename 변수에서 사원이름이 S로 끝나는 관측치 선택.
- $는 문장의 맨 뒤를 의미
R Programming |
%%R
emp %>% filter( stringr::str_detect(ename,"S$") ) %>% dplyr::select(ename)
Results |
# A tibble: 3 x 1
ename
<chr>
1 JONES
2 ADAMS
3 JAMES
- 기본 함수 grepl 패턴 매칭 함수를 사용하여서 ename 변수에서 사원이름이 S로 끝나는 관측치 선택.
R Programming |
%%R
emp %>% filter( base::grepl("S$", ename) ) %>% dplyr::select(ename)
Results |
# A tibble: 3 x 1
ename
<chr>
1 JONES
2 ADAMS
3 JAMES
- [참고] 모든 변수의 값 중에서 "S" 나 "K" 로 끝나는 값 선택
R Programming |
%%R
emp %>% dplyr::filter_all(any_vars(str_detect(., "(S|K)$"))) %>% as.data.frame()
Results |
empno ename job mgr hiredate sal comm deptno Tot_salary sal
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 NA 9600
2 7566 JONES MANAGER 7839 1981-04-02 2975 NA 20 NA 35700
3 7782 CLARK MANAGER 7839 1981-01-09 2450 NA 10 NA 29400
4 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20 NA 13200
5 7900 JAMES CLERK 7698 1981-12-03 950 NA 30 NA 11400
6 7934 MILLER CLERK 7782 1982-01-23 1300 NA 10 NA 15600
5. R sqldf Package
* like 함수를 사용하여서 사원명이 S로 끝나는 사원을 선택
R Programming |
%%R
sqldf("select ename from emp where ename like '%S'")
Results |
ename
1 JONES
2 ADAMS
3 JAMES
6. Python pandasql Package
* like 함수를 사용하여서 사원명이 S로 끝나는 사원을 선택
Python Programming |
ps.sqldf("select ename from emp where ename like '%S'")
Results |
ename | |
0 | JONES |
1 | ADAMS |
2 | JAMES |
7. R data.table Package
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[endsWith(ename, "S"), .(ename)]
Results |
ename
1: JONES
2: ADAMS
3: JAMES
R Programming |
%%R
DT[grepl("^.*S$", ename), .(ename)]
Results |
ename
1: JONES
2: ADAMS
3: JAMES
8. SAS Proc SQL
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
SELECT A.*
FROM EMP A
where ename like '%S';
QUIT;
PROC PRINT;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | . | 20 |
2 | 7876 | ADAMS | CLERK | 7788 | 1983-01-12 | 1100 | . | 20 |
3 | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | . | 30 |
9. SAS Data Step
SAS Programming |
%%SAS sas
DATA STATSAS_2;
SET EMP;
where ename like '%S';
RUN;
PROC PRINT;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | . | 20 |
2 | 7876 | ADAMS | CLERK | 7788 | 1983-01-12 | 1100 | . | 20 |
3 | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | . | 30 |
10. Python Dfply Package
Python Programming |
emp >> filter_by(X.ename.str.endswith("S"))
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
10 | 7876 | ADAMS | CLERK | 7788.0 | 1983/01/12 | 1100 | NaN | 20 |
11 | 7900 | JAMES | CLERK | 7698.0 | 1981/12/03 | 950 | NaN | 30 |
Python Programming |
emp >> mask(X.ename.str.endswith("S"))
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
3 | 7566 | JONES | MANAGER | 7839.0 | 1981/04/02 | 2975 | NaN | 20 |
10 | 7876 | ADAMS | CLERK | 7788.0 | 1983/01/12 | 1100 | NaN | 20 |
11 | 7900 | JAMES | CLERK | 7698.0 | 1981/12/03 | 950 | NaN | 30 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 전처리 방법 리스트
반응형
댓글