BookmarkSubscribeRSS Feed

[SAS/R] 결측치 제거 - Group by Sum

Started ‎04-30-2024 by
Modified ‎04-30-2024 by
Views 286

 

게시글은 SAS와 R언어를 활용하여 데이터 셋의 결측치를 제거하고, a 칼럼별의 조건 값을 기준으로 b칼럼(수치형)의 합계 (group by sum)를 구하고자 한다.

 

 

Q. basic1.csv 데이터셋 에서 'f1'컬럼 결측 데이터를 제거하고, city'와 'f2'을 기준으로 묶어 합계를 출력합니다.

또한, 'city가 경기이면서 f2가 0'인 조건에 만족하는 f1 값을 출력.

 

 

[SAS]

 

library(dplyr)
df=read.csv('../input/bigdatacertificationkr/basic1.csv')

df %>% 
   filter(!is.na(f1)) %>% 
   group_by(city,f2) %>% 
   summarise(value=sum(f1)) %>% 
   filter(city=='경기' & f2==0) %>% 
   data.frame %>% select(value)

 

 

 

1. library(dplyr)

R은 오픈소스 프로그램으로 많은 유저들이 통계 도구들을 만들어 온라인 상에 무료로 기능을 쓸 수 있게 배포합니다.

패키지를 사용하기 위해서는 1) 패키지를 설치하고 2) 패키지를 로드 합니다.

1) insall.package(dplyr): 처음에 패키지를 설치하기 위해서 사용하는 명령문.

2) library(dplyr): 패키지를 설치한 후, 패키지를 불러오기 위한 명령문

dplyr 이란 패키지를 불러옵니다.

dplyr 패키지는 데이터 전처리에 특화된 패키지로 데이터를 처리하는 함수군으로 구성되어 있습니다.

%>% 체인 연산자 기호와 함께 데이터 전처리에서 사용됩니다.

​​

2. read.csv

파일을 불러오는 명령문

 

3. Filter

하나 이상의 조건 값만을 데이터로 필터링 해서 결과값을 출력합니다.

한가지 조건일 수도 있고 두 가지 이상의 조건일 수도 있습니다.

두 가지 조건값이게 되면 '&' (and) '|' (or) 등과 같은 수학기호 연산자를 사용해서 조건 값을 늘려나갈 수 있습니다.

 

 

df %>%
  filter(salary %in% c(18, 634, 1322)

 

 

위 %in% function은 여러개의 데이터를 불러올 때 사용합니다.

Salary의 칼럼 중 18, 634, 1332의 값만을 필터링 하게 됩니다.

 

 

 

 

df %>% 
   filter(!is.na(f1)) %>%

 

is.na() 는 NA값을 표시하고, !is.na는 NA값을 제가 합니다.
즉, NA값이 아닌 데이터만을 필터링하게 됩니다.


4. group by
Group by function은 데이터를 그룹화하는데 사용합니다.
특정 열을 기준으로 데이터를 그룹화해 집계 함수를 설정하면 그룹 단위의 결과값을 출력합니다.


5. summarise
다양한 통계함수를 사용해서 데이터 셋의 특정 변수에 속한 값들을 하나의 통계값으로 요약하여 출력하는 function입니다.
summaize()와 동일한 function으로 평균, 중위값, 최소값, 최대값, 분산, 표준편차, 4분위값, 합계, 빈도수 등을 출력할 수 있습니다.

 

 

 [SAS] 

 

/* 1. */
proc import datafile='/home/u45061472/basic1.csv'
            out=mydata
            dbms=csv
            replace;
run;

/* 2. */
data cleaned_data;
    set mydata;
    where not missing(f1);
run;

/* 3. */
proc summary data=cleaned_data nway;
    class city f2;
    var f1;
    output out=sum_data sum=total_f1;
run;

/* 4.  */
proc print data=sum_data;
    title 'Sum of f1 grouped - city and f2';
    var city f2 total_f1;
run;

/* 5.  */
data filtered_data;
    set mydata;
    if city='경기' and f2=0;
run;

proc print data=filtered_data;
    title 'Values of f1 where city is 경기 and f2 is 0';
    var f1;
run;


1. Proc Import
​외부 데이터를 불러오기 위한 명령문 입니다.
DBMS: 로드할 파일 형식
OUT: sas 내부에 있는 work라이브러리의 mydata라는 셋을 만든다. 라는 의미를 갖고 있습니다.


2. Data Cleaned_data~
새로운 데이터셋인 Cleaned_Data를 만듭니다.
set mydata: mydata 셋을 순차적으로 읽습니다.
where not missing(f1): where 은 조건절로 데이터 필터링에 사용하는 function입니다. not missing은 결측치가 아닌 값들을 출력하는 명령어 입니다.


3. Proc Summary
데이터의 요약 통계를 생성하는데 사용합니다.
수치형 변수에 대한 평균, 중앙값, 합계, 최소값, 최대값 등의 통계량을 출력합니다.
nway: nway를 사용하지 않을 경우에는 지정된 변수들의 모든 가능한 조합에 대한 요약 통계량이 생성되지만, nway를 설정한 경우에는 class 문에 지정된 그룹 변수들을 기준으로 데이터를 그룹화하고 각 그룹에 대한 요약 통계량들을 생성합니다.

 

 

image.png

 

image.png

 

 

 

 

Version history
Last update:
‎04-30-2024 07:09 AM
Updated by:
Contributors

sas-innovate-2024.png

Available on demand!

Missed SAS Innovate Las Vegas? Watch all the action for free! View the keynotes, general sessions and 22 breakouts on demand.

 

Register now!

Article Labels
Article Tags