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

[문자 함수] 문자 길이 측정 - 87

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

포스팅 목차

    87. Display those employees whose name contains not less than 5 chars

     

    * 사원 이름이 5글자 이상인 직원을 선택하시오.


    • Oracle : length()
    • 파이썬 Pandas : str.match(), str.len(), loc[], str.len()
    • R 프로그래밍 : grep(), subset(), grepl(), stringr::str_detect(), stringr::str_length(), nchar(), as.character()
    • R Dplyr Package : dplyr::filter(), stringr::str_length(), grepl(), stringr::str_detect(), nchar(), as.character()
    • R sqldf Package : length() 함수
    • Python pandasql Package : length() 함수
    • R data.table Package : stringr::str_length()
    • SAS Proc SQL : length()
    • SAS Data Step : length()
    • Python Dfply Package : str.match(), str.len()
    • 파이썬 Base 프로그래밍 :

     


    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)

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

    반응형

    댓글