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

[데이터 전처리- 문자함수 예제] 문자 proper case 문자로 변환 방식 비교 - 65

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

포스팅 목차

    65. Display the name of employees in proper case

     

    * 직원의 이름을 proper case로 변경하여 출력하시오. proper case는 단어의 첫 글자는 대문자로 나머지 글자는 소문자로 변환한다.


    • Oracle : initcap()
    • 파이썬 Pandas : .str.title()
    • R 프로그래밍 : lapply(), str_to_title
    • R Dplyr Package : mutate(), str_to_title()
    • R sqldf Package : upper(), substr()
    • Python pandasql Package : upper(), substr()
    • R data.table Package : str_to_title()
    • SAS Proc SQL : PROPCASE() 함수
    • SAS Data Step : PROPCASE() 함수
    • Python Dfply Package : .str.title()
    • 파이썬 Base 프로그래밍 :

     


    1. Oracle(오라클)

    • Initcap 함수를 사용하여서 직원 이름을 proper case로 변환한다.
    Oracle Programming
    select ename,
           initcap(ename) ename_initcap
    from   emp

     


    2. Python Pandas(파이썬)

    • Title() 함수는 직원명을 Proper case 문자로 변환한다.
    Python Programming
    import copy
    
    withmooc = copy.copy(emp)
    withmooc
    
    withmooc['ename_proper'] = withmooc['ename'].str.title()
    display(withmooc.head())

     

    Results
      empno ename job mgr hiredate sal comm deptno ename_proper
    0 7369 SMITH CLERK 7902.0 1980/12/17 800 NaN 20 Smith
    1 7499 ALLEN SALESMAN 7698.0 1981/02/20 1600 300.0 30 Allen
    2 7521 WARD SALESMAN 7698.0 1981/02/22 1250 500.0 30 Ward
    3 7566 JONES MANAGER 7839.0 1981/04/02 2975 NaN 20 Jones
    4 7654 MARTIN SALESMAN 7698.0 1981/09/28 1250 1400.0 30 Martin

     


    3. R Programming (R Package)

    • str_to_title 함수는 직원명을 Proper case 문자로 변환한다.
    R Programming
    %%R
    
    withmooc <- emp
    
    withmooc['ename_proper'] = lapply(withmooc['ename'],str_to_title )
    head(withmooc)

     

    Results
    # A tibble: 6 x 9
      empno ename  job        mgr hiredate     sal  comm deptno ename_proper
      <dbl> <chr>  <chr>    <dbl> <date>     <dbl> <dbl>  <dbl> <chr>       
    1  7369 SMITH  CLERK     7902 1980-12-17   800    NA     20 Smith       
    2  7499 ALLEN  SALESMAN  7698 1981-02-20  1600   300     30 Allen       
    3  7521 WARD   SALESMAN  7698 1981-02-22  1250   500     30 Ward        
    4  7566 JONES  MANAGER   7839 1981-04-02  2975    NA     20 Jones       
    5  7654 MARTIN SALESMAN  7698 1981-09-28  1250  1400     30 Martin      
    6  7698 BLAKE  MANAGER   7839 1981-03-01  2850    NA     30 Blake       

     


    4. R Dplyr Package

    str_to_title 함수는 직원명을 소문자로 변환한다. mutate() 함수를 사용하여서 신규 변수를 생성한다.

    R Programming
    %%R
    
    emp %>% 
      dplyr::mutate(ename_proper = str_to_title (ename)) %>%
      head()

     

    Results
    # A tibble: 6 x 9
      empno ename  job        mgr hiredate     sal  comm deptno ename_proper
      <dbl> <chr>  <chr>    <dbl> <date>     <dbl> <dbl>  <dbl> <chr>       
    1  7369 SMITH  CLERK     7902 1980-12-17   800    NA     20 Smith       
    2  7499 ALLEN  SALESMAN  7698 1981-02-20  1600   300     30 Allen       
    3  7521 WARD   SALESMAN  7698 1981-02-22  1250   500     30 Ward        
    4  7566 JONES  MANAGER   7839 1981-04-02  2975    NA     20 Jones       
    5  7654 MARTIN SALESMAN  7698 1981-09-28  1250  1400     30 Martin      
    6  7698 BLAKE  MANAGER   7839 1981-03-01  2850    NA     30 Blake       

     


    5. R sqldf Package

    sqldf에서 직접 지원하는 proper case 함수가 없어서 Upper 함수(문자를 대문자로 변환)와 Lower 함수(문자를 소문자로 변환)를 사용하여서 직원 이름을 Proper case 형태로 변환한다.

    R Programming
    %%R
    
    sqldf("select upper(substr(ename,1,1))||lower(substr(ename,2)) as ename_proper from emp") %>% head()

     

    Results
      ename_proper
    1        Smith
    2        Allen
    3         Ward
    4        Jones
    5       Martin
    6        Blake

     


    6. Python pandasql Package

    • Substr() 함수를 사용하여서 직원 이름을 proper case로 변환한다.
    Python Programming
    ps.sqldf("select upper(substr(ename,1,1))||lower(substr(ename,2)) as ename_proper from emp;").head()

     

    Results
      ename_proper
    0 Smith
    1 Allen
    2 Ward
    3 Jones
    4 Martin

     


    7. R data.table Package

    • stringr::str_to_title 함수는 Proper case 문자로 변환한다.
    R Programming
    %%R
    
    DT <- data.table(emp)
    
    DT[,ename_proper := str_to_title(ename)][1:10, ]

     

    Results
        empno  ename       job  mgr   hiredate  sal comm deptno ename_proper
     1:  7369  SMITH     CLERK 7902 1980-12-17  800   NA     20        Smith
     2:  7499  ALLEN  SALESMAN 7698 1981-02-20 1600  300     30        Allen
     3:  7521   WARD  SALESMAN 7698 1981-02-22 1250  500     30         Ward
     4:  7566  JONES   MANAGER 7839 1981-04-02 2975   NA     20        Jones
     5:  7654 MARTIN  SALESMAN 7698 1981-09-28 1250 1400     30       Martin
     6:  7698  BLAKE   MANAGER 7839 1981-03-01 2850   NA     30        Blake
     7:  7782  CLARK   MANAGER 7839 1981-01-09 2450   NA     10        Clark
     8:  7788  SCOTT   ANALYST 7566 1982-12-09 3000   NA     20        Scott
     9:  7839   KING PRESIDENT   NA 1981-11-17 5000   NA     10         King
    10:  7844 TURNER  SALESMAN 7698 1981-09-08 1500    0     30       Turner

     


    8. SAS Proc SQL

    • Propcase() 함수를 사용하여서 직원 이름을 proper case로 변환한다.
    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select PROPCASE(ename) as ename_PROPCASE 
        from emp;
    QUIT;
    PROC PRINT data=STATSAS_1(obs=3);RUN;

     

    Results
    OBS ename_PROPCASE
    1 Smith
    2 Allen
    3 Ward

     


    9. SAS Data Step

    • Propcase() 함수를 사용하여서 직원 이름을 proper case로 변환한다.
    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2; 
     SET emp;
         ename_PROPCASE = PROPCASE(ename);
         keep ename ename_PROPCASE;
    RUN;
    
    PROC PRINT data=STATSAS_2(obs=3);RUN;

     

    Results
    OBS ename ename_PROPCASE
    1 SMITH Smith
    2 ALLEN Allen
    3 WARD Ward

     


    10. Python Dfply Package

    • Title() 함수를 사용하여서 직원 이름을 proper case로 변환한다.
    Python Programming
    emp >> mutate(ename_Title = X.ename.str.title()) >> head(5)

     

    Results
      empno ename job mgr hiredate sal comm deptno ename_Title
    0 7369 SMITH CLERK 7902.0 1980/12/17 800 NaN 20 Smith
    1 7499 ALLEN SALESMAN 7698.0 1981/02/20 1600 300.0 30 Allen
    2 7521 WARD SALESMAN 7698.0 1981/02/22 1250 500.0 30 Ward
    3 7566 JONES MANAGER 7839.0 1981/04/02 2975 NaN 20 Jones
    4 7654 MARTIN SALESMAN 7698.0 1981/09/28 1250 1400.0 30 Martin

     


    [ 다양한 데이터 전처리 방법 목록 링크] SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE

    반응형

    댓글