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

[기초 통계량 - 건수 집계] 데이터 건수, 데이터 기초 분석을 위한 기초 통계량 측정 - 26 (오라클 SQL, R, Python, SAS)

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

포스팅 목차

     

    26. Display the total number of employees working in the company.

     

    * 회사에서 근무하는 총직원의 수를 집계하시오.


    • Oracle : count() , distinct
    • 파이썬 Pandas : len(), count(), describe(), nunique(), agg() 함수
    • R 프로그래밍 : nrow(), length(), dim(), str(), summary(), psych::describe(), psych::describeData()
    • R Dplyr Package : summarise(), n(), tally(), count()
    • R sqldf Package : count() , distinct
    • Python pandasql Package : count() , distinct
    • R data.table Package : .N
    • SAS Proc SQL : count() , distinct, dictionary.tables, nobs
    • SAS Data Step : nobs, retain, ARRAY, SUM(), cmiss(), PROC SUMMARY
    • Python Dfply Package : summarize(), .count(), .nunique(), len()
    • 파이썬 Base 프로그래밍 :

     


    1. 오라클(Oracle)

    Count 함수를 사용하여서 회사에 근무하는 총 사원의 수를 계산한다.

    Oracle Programming
    select count(*)              as obs_cnt,
           count(empno)          as emp_cnt,
           count(distinct empno) as emp_unique
    from   emp

     


    2. 파이썬(Pandas)

    • Len() 함수
    Python Programming
    len(emp)

     

    Results
    14

     


    • Count() 함수
    Python Programming
    emp['empno'].count()

     

    Results
    14

     


    • Describe() 함수
    Python Programming
    emp.describe()

     

    Results
      empno mgr sal comm deptno
    count 14.000000 13.000000 14.000000 4.000000 14.000000
    mean 7726.571429 7739.307692 2073.214286 550.000000 22.142857
    std 178.294361 103.714660 1182.503224 602.771377 8.017837
    min 7369.000000 7566.000000 800.000000 0.000000 10.000000
    25% 7588.000000 7698.000000 1250.000000 225.000000 20.000000
    50% 7785.000000 7698.000000 1550.000000 400.000000 20.000000
    75% 7868.000000 7839.000000 2943.750000 725.000000 30.000000
    max 7934.000000 7902.000000 5000.000000 1400.000000 30.000000

     


    • Nunique() 함수
    Python Programming
    emp['empno'].nunique()

     

    Results
    14

     


    • agg() 함수와 count
    Python Programming
    emp.agg(['count'])

     

    Results
      empno ename job mgr hiredate sal comm deptno
    count 14 14 14 13 14 14 4 14

     


    3. R Programming (R Package)

    • Nrow() 함수
    R Programming
    %%R
    
    nrow(emp)

     

    Results
    [1] 14

     


    • Length() 함수
    R Programming
    %%R
    
    length(emp)

     

    Results
    [1] 8

     


    • Dim() 함수
    R Programming
    %%R
    dim(emp)

     

    Results
    [1] 14  8

     


    • Str() 함수
    R Programming
    %%R
    
    str(emp)

     

    Results
    tibble [14 x 8] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
     $ empno   : num [1:14] 7369 7499 7521 7566 7654 ...
     $ ename   : chr [1:14] "SMITH" "ALLEN" "WARD" "JONES" ...
     $ job     : chr [1:14] "CLERK" "SALESMAN" "SALESMAN" "MANAGER" ...
     $ mgr     : num [1:14] 7902 7698 7698 7839 7698 ...
     $ hiredate: Date[1:14], format: "1980-12-17" "1981-02-20" ...
     $ sal     : num [1:14] 800 1600 1250 2975 1250 ...
     $ comm    : num [1:14] NA 300 500 NA 1400 NA NA NA NA 0 ...
     $ deptno  : num [1:14] 20 30 30 20 30 30 10 20 10 30 ...
     - attr(*, "spec")=
      .. cols(
      ..   empno = col_double(),
      ..   ename = col_character(),
      ..   job = col_character(),
      ..   mgr = col_double(),
      ..   hiredate = col_date(format = ""),
      ..   sal = col_double(),
      ..   comm = col_double(),
      ..   deptno = col_double()
      .. )

     


    • Summary() 함수
    R Programming
    %%R
    
    # 관측치와 모든 변수의 요약 통계 구하기.
    
    summary(emp)

     

    Results
         empno         ename               job                 mgr      
     Min.   :7369   Length:14          Length:14          Min.   :7566  
     1st Qu.:7588   Class :character   Class :character   1st Qu.:7698  
     Median :7785   Mode  :character   Mode  :character   Median :7698  
     Mean   :7727                                         Mean   :7739  
     3rd Qu.:7868                                         3rd Qu.:7839  
     Max.   :7934                                         Max.   :7902  
                                                          NA's   :1     
        hiredate               sal            comm          deptno     
     Min.   :1980-12-17   Min.   : 800   Min.   :   0   Min.   :10.00  
     1st Qu.:1981-02-23   1st Qu.:1250   1st Qu.: 225   1st Qu.:20.00  
     Median :1981-09-18   Median :1550   Median : 400   Median :20.00  
     Mean   :1981-09-14   Mean   :2073   Mean   : 550   Mean   :22.14  
     3rd Qu.:1981-12-03   3rd Qu.:2944   3rd Qu.: 725   3rd Qu.:30.00  
     Max.   :1983-01-12   Max.   :5000   Max.   :1400   Max.   :30.00  
                                         NA's   :10                    

     


    • Psych 패키지의 Describe() 함수
    R Programming
    %%R
    
    library("psych")
    
    psych::describe(emp)

     

    Results
             vars  n    mean      sd median trimmed     mad  min  max range  skew
    empno       1 14 7726.57  178.29 7785.0 7739.08  171.98 7369 7934   565 -0.56
    ename*      2 14    7.50    4.18    7.5    7.50    5.19    1   14    13  0.00
    job*        3 14    3.07    1.49    3.0    3.08    1.48    1    5     4  0.15
    mgr         4 13 7739.31  103.71 7698.0 7740.27  133.43 7566 7902   336 -0.23
    hiredate    5 14     NaN      NA     NA     NaN      NA  Inf -Inf  -Inf    NA
    sal         6 14 2073.21 1182.50 1550.0 1935.42 1000.76  800 5000  4200  0.93
    comm        7  4  550.00  602.77  400.0  550.00  370.65    0 1400  1400  0.49
    deptno      8 14   22.14    8.02   20.0   22.50   14.83   10   30    20 -0.35
             kurtosis     se
    empno       -1.16  47.65
    ename*      -1.46   1.12
    job*        -1.58   0.40
    mgr         -1.12  28.77
    hiredate       NA     NA
    sal          0.01 316.04
    comm        -1.83 301.39
    deptno      -1.48   2.14

     


    • psych 패키지의 DescribeData 함수
    R Programming
    %%R
    
    library("psych")
    
    psych::describeData(emp)

     

    Results
    n.obs =  14 of which  4   are complete cases.   Number of variables =  8  of which all are numeric  FALSE  
              variable # n.obs type         H1         H2         H3         H4
    empno*             1    14    4       7369       7499       7521       7566
    ename*             2    14    4      SMITH      ALLEN       WARD      JONES
    job*               3    14    4      CLERK   SALESMAN   SALESMAN    MANAGER
    mgr*               4    13    4       7902       7698       7698       7839
    hiredate*          5    14    4 1980-12-17 1981-02-20 1981-02-22 1981-04-02
    sal*               6    14    4        800       1600       1250       2975
    comm*              7     4    4       <NA>        300        500       <NA>
    deptno*            8    14    4         20         30         30         20
                      T1         T2         T3         T4
    empno*          7876       7900       7902       7934
    ename*         ADAMS      JAMES       FORD     MILLER
    job*           CLERK      CLERK    ANALYST      CLERK
    mgr*            7788       7698       7566       7782
    hiredate* 1983-01-12 1981-12-03 1981-12-03 1982-01-23
    sal*            1100        950       3000       1300
    comm*           <NA>       <NA>       <NA>       <NA>
    deptno*           20         30         20         10

     


    4. R Dplyr Package

    • Summarise 함수와 n()
    R Programming
    %%R
    
    emp %>% summarise(n = n())

     

    Results
    # A tibble: 1 x 1
          n
      <int>
    1    14

     


    • tally() 함수
    R Programming
    %%R
    
    emp %>%  tally()

     

    Results
    # A tibble: 1 x 1
          n
      <int>
    1    14

     


    • Count() 함수
    R Programming
    %%R
    
    emp %>% count()

     

    Results
    # A tibble: 1 x 1
          n
      <int>
    1    14

     


    5. R sqldf Package

    • Count() 함수
    R Programming
    %%R
    sqldf(" select count(*) emp_cnt
            from   emp")

     

    Results
      emp_cnt
    1      14

     


    6. Python pandasql Package

    • Count() 함수
    Python Programming
    ps.sqldf("select count(*) emp_cnt from emp")

     

    Results
      emp_cnt
    0 14

     


    7. R data.table Package

    • .N 함수
    %%R
    
    DT          <- data.table(emp)
    dept_DT     <- data.table(dept)
    
    DT[, .(`emp_cnt` = .N)]

     

    Results
       emp_cnt
    1:      14

     


    8. SAS Proc SQL

    • 회사에 근무하는 전체 직원수를 집계한다.
    SAS Programming
    %%SAS sas
    
    PROC SQL;
      CREATE TABLE STATSAS_1 AS
        select count(*) AS EMP_COUNT
        from   emp;
    QUIT;
    
    PROC PRINT;RUN;

     

    Results
    OBS EMP_COUNT
    1 14

    dictionary.tables에서 사원정보(EMP) 테이블의 관측치 건수를 검색하여서 macro 변수로 할당한 후 출력한다.

    SAS Programming
    %%SAS sas
    
    proc sql;
      select nobs into :nobs separated by ' ' from dictionary.tables
      where libname='WORK' and memname='EMP';
    quit;
    
    %put TNote:  nobs=&nobs;

     

    Results
    Number of Physical Observations
    14

     


    9. SAS Data Step

    데이터를 읽기 전 컴파일 단계에서 사원정보(EMP) 테이블의 관측치 건수를 신규변수(EMP_COUNT)로 할당한 후 데이터 셋으로 출력한다.

    SAS Programming
    %%SAS sas
    
    DATA EMP_1;
         IF 0 THEN SET EMP NOBS=N;
         EMP_COUNT = N;
         KEEP EMP_COUNT;
    RUN;
    PROC PRINT;RUN;

     

    Results
    OBS EMP_COUNT
    1 14

    사원정보(EMP) 테이블에서 관측치 건수를 신규변수(EMP_COUNT)로 할당한 후 관측치 번호와 관측치 건수가 일치하는 위치에서 출력한다. 즉, 최종 관측치를 출력하면서 사전에 할당한 전체 관측치 건수를 출력한다.

    SAS Programming
    %%SAS sas
    
    DATA EMP_1;
     SET EMP NOBS=N;
         EMP_COUNT = N;
         IF N = _N_ THEN OUTPUT;
         KEEP EMP_COUNT;
    RUN;
    PROC PRINT;RUN;

     

    Results
    OBS EMP_COUNT
    1 14

     


     

    SAS Programming
    %%SAS sas
    
    DATA EMP_1;
         RETAIN EMP_CNT 0;
     SET EMP NOBS=N;
         EMP_CNT = EMP_CNT + 1;
         IF EMP_CNT = N THEN OUTPUT;
         KEEP EMP_CNT;
    RUN;
    PROC PRINT;RUN;

    • [ 참고 ]

    - 배열을 사용하여서 수치형 변수와 문자형 변수 개수 카운트 후 결측치를 소유한 변수의 개수를 제거한다;

    - CMISS 함수는 문자형 결측치와 수치형 결측치를 포함한 결측치의 개수를 카운트한다.

    - N 함수는 수치형 결측치 개수를 카운트한다.;

    SAS Programming
    %%SAS sas
    
    DATA EMP_REF;
     SET EMP;
         ARRAY VAR1[*] _NUMERIC_;
         ARRAY VAR2[*] _CHARACTER_;
         VAR3 = DIM(VAR1);
         VAR4 = DIM(VAR2); 
    
         TOTAL_VAR = SUM(VAR3,VAR4);
         MISS_VAR  = CMISS(OF VAR1[*] VAR2[*]);
         NONM_VAR  = SUM(TOTAL_VAR,-MISS_VAR);
    RUN;
    PROC PRINT DATA=EMP_REF(OBS=3);RUN;

     

    Results
    OBS empno ename job mgr hiredate sal comm deptno VAR3 VAR4 TOTAL_VAR MISS_VAR NONM_VAR
    1 7369 SMITH CLERK 7902 1980-12-17 800 . 20 6 2 8 1 7
    2 7499 ALLEN SALESMAN 7698 1981-02-20 1600 300 30 6 2 8 0 8
    3 7521 WARD SALESMAN 7698 1981-02-22 1250 500 30 6 2 8 0 8

     


    • PROC SUMMARY 를 사용하여서 수치형 변수에 대한 비결측치 관측치 개수를 카운트;
    SAS Programming
    %%SAS sas
    
    PROC SUMMARY DATA=EMP;
         VAR _NUMERIC_;
         OUTPUT OUT=EMP_COUNT(DROP=_:) N=;
    RUN;
    PROC PRINT DATA=EMP_COUNT;RUN;

     

    Results
    OBS empno mgr hiredate sal comm deptno
    1 14 13 14 14 4 14

     


    10. Python Dfply Package

     

    Python Programming
    emp >> summarize( emp_cnt = X.empno.count() )

     

    Results
      emp_cnt
    0 14

     


     

    Python Programming
    emp >> summarize( emp_cnt = X.empno.nunique() )

     

    Results
      emp_cnt
    0 14

     


    • [참고] 전체 건수 삽입
    Python Programming
    emp >> mutate( emp_cnt = len(emp) ) >> head(5)

     

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

     


     

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

     

    반응형

    댓글