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

[문자 함수] 문자 검색 함수 - 88

by 기서무나구물 2022. 9. 26.

포스팅 목차

    88. Display those departments whose name start with ‘S’ while location name end with ‘O’.

     

    * 부서 이름이 ‘S’로 시작하고, 해당 부서가 위치하는 곳의 지명이 ‘O’로 끝나는 부서 정보를 출력하시오.


    • Oracle : like 연산자
    • 파이썬 Pandas : str.startswith(), str.endswith(), str.match()
    • R 프로그래밍 : base::startsWith(), base::endsWith(), stringr::str_detect()
    • R Dplyr Package : dplyr::filter(), stringr::str_detect()
    • R sqldf Package : like 연산자
    • Python pandasql Package : like 연산자
    • R data.table Package : like 연산자, grepl()
    • SAS Proc SQL : like 연산자
    • SAS Data Step : like 연산자, prxmatch()
    • Python Dfply Package : filter_by(), str.startswith(), str.endswith()
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

     

    like 함수를 사용하여서 부서 이름이 ‘S’로 시작하고, 해당 부서가 위치하는 곳의 지명이 ‘O’로 끝나는 부서 정보를 출력하시오

     

    Oracle Programming
    select * 
    from   dept 
    where  dname like 'S%' 
      and  loc   like '%O'

     


    2. Python Pandas(파이썬)

     

    pandas.Series.str.startswith 와 pandas.Series.str.endswith 함수를 사용하여서 문자열이 특정 글자로 시작하거나 특정 문자로 끝나는지를 확인하여 선택한다.

     

    Python Programming
    dept[dept['dname'].str.startswith("S") & dept['loc'].str.endswith("O")]

     

     

    Results
    deptno dname loc
    30 SALES CHICAGO

     


    Python Programming
    dept[ dept['dname'].str.match("^S") & dept['loc'].str.match(".*O$") ]

     

     

    Results
    deptno dname loc
    30 SALES CHICAGO

     


    3. R Programming (R Package)

     

    startsWith 와 endsWith 함수를 사용하여서 문자열이 특정 글자로 시작하거나 특정 문자로 끝나는지를 확인하여 선택한다. 부서명이 “S”로 시작하고, 부서가 위치한 지명이 “O”로 끝나는 곳에 해당하는 부서 정보를 선택한다.

     

    Oracle Programming
    %%R
    
    dept[ base::startsWith(dept$dname,"S") & base::endsWith(dept$loc,"O") , ]

     

     

    Results
    # A tibble: 1 x 3
      deptno dname loc    
       <dbl> <chr> <chr>  
    1     30 SALES CHICAGO

     


    stringr::str_detect 함수를 사용하여서 문자열에서 사용자가 지정한 특정 패턴과 일치 여부를 확인하여 선택한다. “^S” 는 문자열이 “S”로 시작되는지 여부를 판단하고, “O$”는 문자열이 “O”로 끝나는지 여부를 판단한다.

     

    Oracle Programming
    %%R
    
    dept[stringr::str_detect(dept$dname, "^S") & stringr::str_detect(dept$loc, "O$") ,]

     

     

    Results
    # A tibble: 1 x 3
      deptno dname loc    
       <dbl> <chr> <chr>  
    1     30 SALES CHICAGO

     


    4. R Dplyr Package

     

    stringr::str_detect 함수를 사용하여서 문자열에서 사용자가 지정한 특정 패턴과 일치 여부를 확인하여 선택한다. “^S” 는 문자열이 “S”로 시작되는지 여부를 판단하고, “O$”는 문자열이 “O”로 끝나는지 여부를 판단한다.

    부서명이 “S”로 시작하고, 부서가 위치한 지명이 “O”로 끝나는 곳에 해당하는 부서 정보를 선택한다.

     

    Oracle Programming
    %%R
    
    dept %>% 
      dplyr::filter( stringr::str_detect(dname, "^S") & stringr::str_detect(loc, "O$") )

     

     

    Results
    # A tibble: 1 x 3
      deptno dname loc    
       <dbl> <chr> <chr>  
    1     30 SALES CHICAGO

     


    5. R sqldf Package

    like 함수를 사용하여서 부서 이름이 ‘S’로 시작하고, 해당 부서가 위치하는 곳의 지명이 ‘O’로 끝나는 부서 정보를 출력하시오

     

    R Programming
    %%R
    
    sqldf("select * from dept where dname like 'S%' and loc like '%O'")

     

     

    Results
      deptno dname     loc
    1     30 SALES CHICAGO

     


    6. Python pandasql Package

    like 함수를 사용하여서 부서 이름이 ‘S’로 시작하고, 해당 부서가 위치하는 곳의 지명이 ‘O’로 끝나는 부서 정보를 출력하시오

     

    Python Programming
    ps.sqldf("select * from dept where dname like 'S%' and loc like '%O'")

     

     

    Results
    deptno dname loc
    30 SALES CHICAGO

     


    7. R data.table Package

     

    %like% 함수를 사용하여서 부서 이름이 ‘S’로 시작하고, 해당 부서가 위치하는 곳의 지명이 ‘O’로 끝나는 부서 정보를 출력하시오

     

    R Programming
    %%R
    DT <- data.table(emp)
    dept_DT <- data.table(dept)
    
    dept_DT[dname %like% '^S' & loc %like% 'O$', ]

     

     

    Results
       deptno dname     loc
    1:     30 SALES CHICAGO

     


    grepl 함수를 사용하여서 문자열에서 사용자가 지정한 특정 패턴과 일치 여부를 확인하여 선택한다. “^S” 는 문자열이 “S”로 시작되는지 여부를 판단하고, “^.*O$”는 문자열이 “O”로 끝나는지 여부를 판단한다. 결과적으로 부서명이 “S”로 시작하고, 부서가 위치한 지명이 “O”로 끝나는 곳에 해당하는 부서 정보를 선택한다.

     

    R Programming
    %%R
    DT      <- data.table(emp)
    dept_DT <- data.table(dept)
    
    dept_DT[grepl("^S", dname) & grepl("^.*O$", loc), ]

     

     

    Results
       deptno dname     loc
    1:     30 SALES CHICAGO

     


    8. SAS Proc SQL

    like 함수를 사용하여서 부서 이름이 ‘S’로 시작하고, 해당 부서가 위치하는 곳의 지명이 ‘O’로 끝나는 부서 정보를 출력하시오

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select * 
        from   dept 
        where  dname like 'S%' 
          and  loc like '%O';
    QUIT;
    PROC PRINT;RUN;

     

     

    Results
    deptno dname loc
    30 SALES CHICAGO

     


    9. SAS Data Step

    like 함수를 사용하여서 부서 이름이 ‘S’로 시작하고, 해당 부서가 위치하는 곳의 지명이 ‘O’로 끝나는 부서 정보를 출력하시오

     

    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2;
     Set dept;
         where dname like 'S%' 
          and  loc   like '%O';
    RUN;
    
    PROC PRINT;RUN;

     

     

    Results

    deptno dname loc
    30 SALES CHICAGO

     


    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2;
     Set dept;
         pos1 = prxmatch('/^S/', dname);
         pos2 = prxmatch('/O(\s)+$/', loc);
         pos3 = prxmatch('/O$/', trim(loc));
         where prxmatch('/^S/', dname) > 0
           and prxmatch('/O(\s)+$/', loc) > 0; 
    RUN;
    
    PROC PRINT;RUN;

     

     

    Results
    deptno dname loc pos1 pos2 pos3
    30 SALES CHICAGO 1 7 7

     


    10. Python Dfply Package

    • X.loc 로 변수명 지정하는 경우 에러 발생 (59번 참고)
      • 에러문 : AttributeError: ‘NotImplementedType’ object has no attribute ‘dtype’
      • 관련이슈 : https://github.com/kieferk/dfply/issues/65
      • 조치사항 : 1) 변수명 사전 변경하여 처리 2) X[‘loc’] 로 변수 지정하는 방법

     

    Python Programming
    dept >> filter_by( X.dname.str.startswith("S"),
                       X['loc'].str.endswith("O"))

     

     

    Results

    deptno dname loc
    30 SALES CHICAGO

     


    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE]   SQL EMP 예제로 만나는 테이블 데이터 전처리 방법 리스트

     

    반응형

    댓글