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

[기초 통계량 - 총합계(Total) 계산] 조건절을 만족하는 데이터 합계 계산 및 결측치 대체 - 35 (오라클 SQL, R, Python, SAS)

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

포스팅 목차

     

    35. Display the total salary drawn by analyst working in dept no 30.

     

    * 부서번호 30에 근무하는 직원에게 지급되는 총 급여를 계산하시오.


    • Oracle : sum(), nvl()
    • 파이썬 Pandas : sum, replace()
    • R 프로그래밍 : sum(), ifelse(), replace_na()
    • R Dplyr Package : filter(), dplyr::summarise(), ifelse()
    • R sqldf Package : sum(), ifnull()
    • Python pandasql Package : sum(), ifnull()
    • R data.table Package : sum(), ifelse()
    • SAS Proc SQL : sum(), ifn(), coalesce()
    • SAS Data Step : proc summary, sum=, coalesce, ifn
    • Python Dfply Package : filter_by(), summarize(), .replace()
    • 파이썬 Base 프로그래밍 :

     


    1. 오라클(Oracle)

    • 부서번호 30에 근무하는 직원에게 지급되는 총 급여(수수료 포함)를 계산
    Oracle Programming
    select sum(sal)+sum(nvl(comm,0)) as salary_1,
           sum(sal + nvl(comm,0))    as salary_2
    from   emp 
    where  deptno=30;

     


    2. 파이썬(Pandas)

    • replace()함수를 사용하여서 수수료의 결측값을 0으로 변경 후 급여와 수수료를 합산한다.
    Python Programming
    sum(emp[emp['deptno'] == 30]['sal']) + sum(emp[emp['deptno'] == 30]['comm'].replace(np.nan,0))

     

    Results
    11600.0

     


    3. R Programming (R Package)

    • 부서번호 30에 근무하는 직원을 선택 후 ifelse()함수를 사용하여서 수수료의 결측값을 0으로 변경 후 급여와 수수료를 합산한다.
    R Programming
    %%R
    
    sum(emp[emp$deptno == 30 , c("sal") ]) + sum( ifelse(emp$deptno != 30 | is.na(emp$comm),0,emp$comm) )

     

    Results
    [1] 11600

     


    • replace_na()함수를 사용하여서 수수료의 결측값을 0으로 변경 할 수 있다.
    R Programming
    %%R
    
    replace_na(emp$comm,0)

     

    Results
     [1]    0  300  500    0 1400    0    0    0    0    0    0    0    0    0

     


    4. R Dplyr Package

    부서번호 30에 근무하는 직원을 선택 후 ifelse()함수를 사용하여서 수수료의 결측값을 0으로 변경 후 급여와 수수료를 합산한다.

    R Programming
    %%R
    
    emp %>% filter(deptno == 30) %>% dplyr::summarise(tot_sal = sum(sal+ifelse(is.na(comm),0,comm)))

     

    Results
    # A tibble: 1 x 1
      tot_sal
        <dbl>
    1   11600

     


    5. R sqldf Package

    ifnull()함수를 사용하여서 수수료의 결측값을 0으로 변경 후 급여와 수수료를 합산한다.

    R Programming
    %%R
    sqldf("select sum(sal)+sum(ifnull(comm,0)) Tot_sal from emp where deptno=30")

     

    Results
      Tot_sal
    1   11600

     


    6. Python pandasql Package

    • Where 구문과 sum() 함수
    Python Programming
    ps.sqldf("select sum(sal)+sum(ifnull(comm,0)) Tot_sal from emp where deptno=30")

     

    Results
      Tot_sal
    0 11600.0

     


    7. R data.table Package

    부서번호 30에 근무하는 직원을 선택 후 ifelse()함수를 사용하여서 수수료의 결측값을 0으로 변경 후 급여와 수수료를 합산한다.

    R Programming
    %%R
    
    DT          <- data.table(emp)
    
    DT[deptno == 30, .(Tot_sal = sum(sal, na.rm = TRUE) + sum(ifelse(is.na(comm), 0, comm), na.rm = TRUE))]

     

    Results
       Tot_sal
    1:   11600

     


    • ifelse 구문과 sum() 함수
    R Programming
    %%R
    
    DT[deptno == 30, .(tot_sal = sum(sal + ifelse(is.na(comm), 0, comm)))]

     

    Results
       tot_sal
    1:   11600

     


    8. SAS Proc SQL

    • Where 구문과 sum() 함수
    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select sum(sal)+sum(coalesce(comm,0))     AS tot_sal_1,
               sum(sal)+sum(ifn(comm = .,0,comm)) AS tot_sal_2
        from   emp
        where  deptno=30;
    QUIT;
    PROC PRINT;RUN;

     

    Results
    OBS tot_sal_1 tot_sal_2
    1 11600 11600

     


    9. SAS Data Step

    • Where 구문, Proc summary 프로시져와 sum()
    SAS Programming
    %%SAS sas
    
    DATA STATSAS_2;
     SET EMP;
         tot_sal_1 = SAL + coalesce(comm,0);
         tot_sal_2 = SAL + ifn(comm = .,0,comm);
         where  deptno=30;
    RUN;
    
    PROC SUMMARY DATA=STATSAS_2;
         VAR tot_sal_1 tot_sal_2;
         OUTPUT OUT=STATSAS_21(DROP=_:) SUM=;
    RUN;
    PROC PRINT;RUN;

     

    Results
    OBS tot_sal_1 tot_sal_2
    1 11600 11600

     


    10. Python Dfply Package

    filter_by, summarize와 sum()

     

    Python Programming
    emp >> filter_by( X.deptno == 30 ) >> summarize( tot_sal = ( X.sal + X.comm.replace(np.nan,0) ).sum() )

     

    Results
      tot_sal
    0 11600.0

     

     


     

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

     

    반응형

    댓글