본문 바로가기
통계프로그램 비교 시리즈/프로그래밍비교(Oracle,Python,R,SAS)

[데이터 필터링 - 접두어 Like 검색] 특정 문자열이 포함된 데이터 추출 - 20 (오라클 SQL, R, Python, SAS)

by 기서무나구물 2021. 8. 6.

포스팅 목차

     

    20. Display employee names for employees whose name ends with alphabet.

     

    * 이름이 알바벳 대문자 'S'로 끝나는 직원을 선택하시오.


    • Oracle : like, substr 함수
    • 파이썬 Pandas : str.endswith(), str.contains() 함수, .query() 구문
    • R 프로그래밍 : endsWith(), subset() 구문
    • R Dplyr Package : endsWith(), filter() 구문, str_detect() 함수, grepl() 문자열 함수, filter_all, any_vars, str_detect() 함수
    • R sqldf Package : like 연산자
    • Python pandasql Package : like 연산자
    • R data.table Package : %like% 연산자, grepl() 함수, endsWith() 함수
    • SAS Proc SQL : like 연산자, substr 함수
    • SAS Data Step : like 연산자, substr 함수
    • Python Dfply Package : filter_by() 구문, mask() 구문, endswith() 함수,
    • 파이썬 Base 프로그래밍 :

     


    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 예제로 만나는 테이블 데이터 전처리 방법 리스트

     

    반응형

    댓글