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

[변수 생성 & 결측치 대체] 결측치 대체 후 신규 변수 생성 - 6

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

포스팅 목차

    6. Display employee name and annual salary for all employees.

     

    * 전체 직원의 이름(Name)과 연봉(sal)을 출력하시오


    • [변수 생성 & 결측치 대체] 결측치 대체 후 신규 변수 생성
    • null 값을 대체하기 위한 방법
    • Oracle : nvl 함수, select 구문
    • 파이썬 Pandas : replace 함수, 열 생성
    • R 프로그래밍 : ifelse 함수, replace_na 함수, 열 생성
    • R Dplyr Package : ifelse 함수, mutate 구문
    • R sqldf Package : ifnull 함수, select 구문
    • Python pandasql Package : ifnull 함수, select 구문
    • R data.table Package : ifelse 함수, 열 생성
    • SAS Proc SQL : coalesce 함수, ifn 함수, Select 구문
    • SAS Data Step : coalesce 함수, ifn 함수, 변수 생성
    • Python Dfply Package : replace 함수, mutate 구문
    • 파이썬 Base 프로그래밍 :

     


    1. 오라클(Oracle)

    Oracle Programming
    select empno, ename, 12*sal+nvl(comm,0) as annualsal 
    from   emp;

     


    2. 파이썬(Pandas)

    월 급여에 12를 곱하고 커미션이 존재하는 경우 해당 커미션을 더하여 연봉을 계산하여고, emp 테이블에 해당 금액으로 연봉(annualsal) 변수를 생성한다.

    Python Programming
    emp["annualsal"] = 12 * emp["sal"] + emp["comm"].replace(np.nan,0)
    
    emp[["empno","ename","annualsal"]].head()

     

    Results
      empno ename annualsal
    0 7369 SMITH 9600.0
    1 7499 ALLEN 19500.0
    2 7521 WARD 15500.0
    3 7566 JONES 35700.0
    4 7654 MARTIN 16400.0

     


    3. R Programming (R Package)

    월 급여에 12를 곱하고 커미션이 존재하는 경우 해당 커미션을 더하여 연봉을 계산하여고, emp 테이블에 해당 금액으로 연봉(annualsal) 변수를 생성한다. ifelse 구문을 사용하여서 comm 변수가 null인 경우 0으로 변경하여서 처리한다.

    R Programming
    %%R
    
    emp$annualsal <- 12 * emp["sal"] + ifelse(is.na(emp$comm),0,emp$comm)
    
    emp[ , c("empno","ename","annualsal")]

     

    Results
    # A tibble: 14 x 3
       empno ename  annualsal$sal
       <dbl> <chr>          <dbl>
     1  7369 SMITH           9600
     2  7499 ALLEN          19500
     3  7521 WARD           15500
     4  7566 JONES          35700
     5  7654 MARTIN         16400
     6  7698 BLAKE          34200
     7  7782 CLARK          29400
     8  7788 SCOTT          36000
     9  7839 KING           60000
    10  7844 TURNER         18000
    11  7876 ADAMS          13200
    12  7900 JAMES          11400
    13  7902 FORD           36000
    14  7934 MILLER         15600

     


    replace_na 함수를 사용하여서 커미션(comm) 변수를 처리한다.

    R Programming
    %%R
    emp$annualsal <- 12 * emp["sal"] + replace_na(emp$comm,0)
    
    emp[ , c("empno","ename","annualsal")]

     

    Results
    # A tibble: 14 x 3
       empno ename  annualsal$sal
       <dbl> <chr>          <dbl>
     1  7369 SMITH           9600
     2  7499 ALLEN          19500
     3  7521 WARD           15500
     4  7566 JONES          35700
     5  7654 MARTIN         16400
     6  7698 BLAKE          34200
     7  7782 CLARK          29400
     8  7788 SCOTT          36000
     9  7839 KING           60000
    10  7844 TURNER         18000
    11  7876 ADAMS          13200
    12  7900 JAMES          11400
    13  7902 FORD           36000
    14  7934 MILLER         15600

     


    4. R Dplyr Package

    월 급여에 12를 곱하고 커미션이 존재하는 경우 해당 커미션을 더하여 연봉을 계산하여고, emp 테이블에 해당 금액으로 연봉(annualsal) 변수를 생성(mutate 구문)한다. ifelse 구문을 사용하여서 comm 변수를 처리한다.

    R Programming
    %%R
    
    emp %>% dplyr::mutate(annualsal = 12 * sal + ifelse(is.na(comm),0,comm)) %>% dplyr::select(empno,ename,annualsal)

     

    Results
    # A tibble: 14 x 3
       empno ename  annualsal
       <dbl> <chr>      <dbl>
     1  7369 SMITH       9600
     2  7499 ALLEN      19500
     3  7521 WARD       15500
     4  7566 JONES      35700
     5  7654 MARTIN     16400
     6  7698 BLAKE      34200
     7  7782 CLARK      29400
     8  7788 SCOTT      36000
     9  7839 KING       60000
    10  7844 TURNER     18000
    11  7876 ADAMS      13200
    12  7900 JAMES      11400
    13  7902 FORD       36000
    14  7934 MILLER     15600

     


    5. R sqldf Package

    ifnull(오라클 의 nvl 함수 기능) 함수를 사용하여서 comm변수가 null인 경우 0으로 대체한다.

    R Programming
    %%R
    
    require(sqldf)
    sqldf("select empno, ename, 12*sal+ifnull(comm,0) annualsal from emp")

     

    Results
       empno  ename annualsal
    1   7369  SMITH      9600
    2   7499  ALLEN     19500
    3   7521   WARD     15500
    4   7566  JONES     35700
    5   7654 MARTIN     16400
    6   7698  BLAKE     34200
    7   7782  CLARK     29400
    8   7788  SCOTT     36000
    9   7839   KING     60000
    10  7844 TURNER     18000
    11  7876  ADAMS     13200
    12  7900  JAMES     11400
    13  7902   FORD     36000
    14  7934 MILLER     15600

     


    6. Python pandasql Package

    ifnull(오라클 의 nvl 함수 기능) 함수를 사용하여서 comm변수가 null인 경우 0으로 대체한다.

    Python Programming
    ps.sqldf("select empno, ename, 12*sal+ifnull(comm,0) annualsal from emp")

     

    Results
      empno ename annualsal
    0 7369 SMITH 9600.0
    1 7499 ALLEN 19500.0
    2 7521 WARD 15500.0
    3 7566 JONES 35700.0
    4 7654 MARTIN 16400.0
    5 7698 BLAKE 34200.0
    6 7782 CLARK 29400.0
    7 7788 SCOTT 36000.0
    8 7839 KING 60000.0
    9 7844 TURNER 18000.0
    10 7876 ADAMS 13200.0
    11 7900 JAMES 11400.0
    12 7902 FORD 36000.0
    13 7934 MILLER 15600.0

     


    7. R data.table Package

    월 급여에 12를 곱하고 커미션이 존재하는 경우 해당 커미션을 더하여 연봉을 계산하여고, emp 테이블에 해당 금액으로 연봉(annualsal) 변수를 생성한다. ifelse 구문을 사용하여서 comm 변수가 null인 경우 0으로 변경하여서 처리한다.

    R Programming
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[ , .(empno, ename, annualsal = 12 * sal + ifelse(is.na(comm),0,comm) )]

     

    Results
        empno  ename annualsal
     1:  7369  SMITH      9600
     2:  7499  ALLEN     19500
     3:  7521   WARD     15500
     4:  7566  JONES     35700
     5:  7654 MARTIN     16400
     6:  7698  BLAKE     34200
     7:  7782  CLARK     29400
     8:  7788  SCOTT     36000
     9:  7839   KING     60000
    10:  7844 TURNER     18000
    11:  7876  ADAMS     13200
    12:  7900  JAMES     11400
    13:  7902   FORD     36000
    14:  7934 MILLER     15600

     


    8. SAS Proc SQL

     

    SAS Programming
    %%SAS sas
    
    PROC SQL;
      create table statsas_1 as
        select empno,
               ename, 
               12 * sal + coalesce(comm,0)     as annualsal,
               12 * sal + ifn(comm = .,0,comm) as annualsal_1
        from   emp;
    QUIT;
    PROC PRINT DATA=statsas_1(obs=5);RUN;

     

    Results
    OBS empno ename annualsal annualsal_1
    1 7369 SMITH 9600 9600
    2 7499 ALLEN 19500 19500
    3 7521 WARD 15500 15500
    4 7566 JONES 35700 35700
    5 7654 MARTIN 16400 16400

     


    9. SAS Data Step

    SAS Programming
    %%SAS sas
    
    DATA statsas_2;
     SET EMP;
         annualsal   = 12*sal+coalesce(comm,0);
         annualsal_1 = 12*sal+ifn(comm = .,0,comm);
         keep empno ename annualsal annualsal_1;
    RUN;
    
    PROC PRINT DATA=statsas_2(obs=5);RUN;

     

    Results
    OBS empno ename annualsal annualsal_1
    1 7369 SMITH 9600 9600
    2 7499 ALLEN 19500 19500
    3 7521 WARD 15500 15500
    4 7566 JONES 35700 35700
    5 7654 MARTIN 16400 16400

     


    10. Python Dfply Package

     

    Python Programming
    emp >>                                                         \
       mutate(annualsal = 12*X.sal + X.comm.replace(np.nan,0) ) >> \
       select(X.empno, X.empno, X.sal, X.comm, X.annualsal)     >> \
       head(5)

     

    Results
      empno sal comm annualsal
    0 7369 800 NaN 9600.0
    1 7499 1600 300.0 19500.0
    2 7521 1250 500.0 15500.0

     


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

    반응형

    댓글