포스팅 목차
19. Display the names of employees whose name starts with alphabet S.
*이름이 알파벳 'S'로 시작하는 직원의 이름을 출력하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [문자열 검색(접두어) 및 문자열 함수] 특정 문자열이 포함된 데이터 추출
|
1. 오라클(Oracle)
Like 연산자를 사용하여서 사원명(ename) 변수에서 사원 이름이 S로 시작하는 관측치를 선택한다.
Oracle Programming |
select ename from emp
where ename like 'S%';
Oracle Programming |
select ename from emp
where substr(ename,1,1) = 'S';
2. 파이썬(Pandas)
- SQL - WHERE column_name LIKE 's%'
- Python - column_name.str.startswith('s')
- SQL - WHERE column_name LIKE '%s'
- Python - column_name.str.endswith('s')
- SQL - WHERE column_name LIKE '%s%'
- Python - column_name.str.contains('s')
- startswith 함수를 사용하여서 사원이름이 "S"로 시작하는 사원을 선택.
Python Programming |
emp[ emp['ename'].str.startswith("S") ]
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | hiredate_D | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 | 1980-12-17 |
7 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 | 1982-12-09 |
Python Programming |
emp.loc[(emp.ename.str.startswith("S")) , ["ename"]]
Results |
ename | |
0 | SMITH |
7 | SCOTT |
- query구문과 endswith 함수를 사용하여서 사원이름이 "S"로 시작하는 사원을 선택.
- pandas query 에러 발생(TypeError: 'Series' objects are mutable, thus they cannot be hashed)
- 조치사항 : using python engine instead of numexpr engine
Python Programming |
emp.query('ename.str.startswith("S")', engine='python')[['ename']]
Results |
ename | |
0 | SMITH |
7 | SCOTT |
3. R Programming (R Package)
startsWith 함수를 사용하여서 ename 변수에서 S로 시작하는 관측치 선택한다.
R Programming |
%%R
emp[ (startsWith(emp$ename, "S")) , c("ename") ]
Results |
# A tibble: 2 x 1
ename
<chr>
1 SMITH
2 SCOTT
R Programming |
%%R
emp[which(startsWith(emp$ename, "S")), c("ename") ] %>% as.data.frame()
Results |
ename
1 SMITH
2 SCOTT
subset구문에서 startsWith 함수를 사용하여서 ename 변수에서 S로 시작하는 관측치를 선택한다.
R Programming |
%%R
subset(emp,subset= (startsWith(ename, "S")) , select=c(empno,ename) )
Results |
# A tibble: 2 x 2
empno ename
<dbl> <chr>
1 7369 SMITH
2 7788 SCOTT
4. R Dplyr Package
startsWith 함수를 사용하여서 ename 변수에서 사원이름이 S로 시작하는 관측치 선택
R Programming |
%%R
emp %>% filter( startsWith(ename, "S") ) %>% select(ename)
Results |
# A tibble: 2 x 1
ename
<chr>
1 SMITH
2 SCOTT
stringr 패키지의 str_detect 패턴 매칭 함수를 사용하여서 ename 변수에서 사원이름이 S로 시작하는 관측치를 선택한다.
- ^는 문장의 맨 처음을 의미
R Programming |
%%R
emp %>% filter( str_detect(ename,"^S") ) %>% select(ename)
Results |
# A tibble: 2 x 1
ename
<chr>
1 SMITH
2 SCOTT
기본 함수 grepl 패턴 매칭 함수를 사용하여서 ename 변수에서 사원이름이 S로 시작하는 관측치를 선택한다.
R Programming |
%%R
emp %>% filter( grepl("^S", ename) ) %>% select(ename)
Results |
# A tibble: 2 x 1
ename
<chr>
1 SMITH
2 SCOTT
R Programming |
%%R
emp %>% filter( grepl("D", ename) ) %>% select(ename)
- [참고] 모든 변수의 값 중에서 "C" 나 "A" 로 시작되는 값 선택
R Programming |
%%R
emp %>% filter_all(any_vars(str_detect(., "^(C|A)")))
Results |
# A tibble: 8 x 10
empno ename job mgr hiredate sal comm deptno Tot_salary annualsal$sal
<dbl> <chr> <chr> <dbl> <date> <dbl> <dbl> <dbl> <dbl> <dbl>
1 7369 SMITH CLERK 7902 1980-12-17 800 NA 20 NA 9600
2 7499 ALLEN SALE~ 7698 1981-02-20 1600 300 30 480000 19500
3 7782 CLARK MANA~ 7839 1981-01-09 2450 NA 10 NA 29400
4 7788 SCOTT ANAL~ 7566 1982-12-09 3000 NA 20 NA 36000
5 7876 ADAMS CLERK 7788 1983-01-12 1100 NA 20 NA 13200
6 7900 JAMES CLERK 7698 1981-12-03 950 NA 30 NA 11400
7 7902 FORD ANAL~ 7566 1981-12-03 3000 NA 20 NA 36000
8 7934 MILL~ CLERK 7782 1982-01-23 1300 NA 10 NA 15600
- data.table 의 %like% 를 사용
R Programming |
%%R
library(data.table)
emp %>% filter( ename %like% "^S" ) %>% dplyr::select(ename)
Results |
# A tibble: 2 x 1
ename
<chr>
1 SMITH
2 SCOTT
5. R sqldf Package
Like 연산자를 사용하여서 사원명(ename) 변수에서 사원 이름이 S로 시작하는 관측치를 선택한다.
R Programming |
%%R
sqldf("select ename from emp where ename like 'S%'")
Results |
ename
1 SMITH
2 SCOTT
6. Python pandasql Package
Like 연산자를 사용하여서 사원명(ename) 변수에서 사원 이름이 S로 시작하는 관측치를 선택한다.
Python Programming |
ps.sqldf("select ename from emp where ename like 'S%'")
Results |
ename | |
0 | SMITH |
1 | SCOTT |
7. R data.table Package
R Programming |
%%R
DT <- data.table(emp)
dept_DT <- data.table(dept)
DT[ ename %like% "^S" , .(ename)]
Results |
ename
1: SMITH
2: SCOTT
R Programming |
%%R
DT[grepl("^S", ename), .(ename)]
Results |
ename
1: SMITH
2: SCOTT
8. SAS Proc SQL
Like 연산자를 사용하여서 사원명(ename) 변수에서 사원 이름이 S로 시작하는 관측치를 선택한다.
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 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | . | 20 |
2 | 7788 | SCOTT | ANALYST | 7566 | 1982-12-09 | 3000 | . | 20 |
SAS Programming |
%%SAS sas
PROC SQL;
CREATE TABLE STATSAS_1 AS
SELECT A.*
FROM EMP A
where substr(ename,1,1) = 'S';
QUIT;
PROC PRINT;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | . | 20 |
2 | 7788 | SCOTT | ANALYST | 7566 | 1982-12-09 | 3000 | . | 20 |
9. SAS Data Step
Like 연산자를 사용하여서 사원명(ename) 변수에서 사원 이름이 S로 시작하는 관측치를 선택한다.
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 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | . | 20 |
2 | 7788 | SCOTT | ANALYST | 7566 | 1982-12-09 | 3000 | . | 20 |
SAS Programming |
%%SAS sas
DATA STATSAS_2;
SET EMP;
where substr(ename,1,1) = 'S';
RUN;
PROC PRINT;RUN;
Results |
OBS | empno | ename | job | mgr | hiredate | sal | comm | deptno |
1 | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | . | 20 |
2 | 7788 | SCOTT | ANALYST | 7566 | 1982-12-09 | 3000 | . | 20 |
10. Python Dfply Package
Python Programming |
emp >> filter_by(X.ename.str.startswith("S"))
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
Python Programming |
emp >> mask(X.ename.str.startswith("S"))
Results |
empno | ename | job | mgr | hiredate | sal | comm | deptno | |
0 | 7369 | SMITH | CLERK | 7902.0 | 1980/12/17 | 800 | NaN | 20 |
7 | 7788 | SCOTT | ANALYST | 7566.0 | 1982/12/09 | 3000 | NaN | 20 |
[SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 전처리 방법 리스트
댓글