포스팅 목차
26. Display the total number of employees working in the company.
* 회사에서 근무하는 총직원의 수를 집계하시오.
- 파이썬 & R 패키지 호출 및 예제 데이터 생성 링크
- [집계함수] 데이터 건수, 데이터 기초 분석을 위한 기초 통계량 측정
|
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 예제로 만나는 테이블 데이터 처리 방법 리스트
반응형
댓글