본문 바로가기

CS/R | DA

R 데이터 가공, gapminder 라이브러리, 데이터 정렬 검색, 데이터 프레임 병합

@데이터 가공(data wrangling)
-데이터를 보다 효과적으로 분석하기 위해 데이터를 만지고 변형하는 작업
-거의 모든 분야에서 적절한 데이터 가공 필요
(통계 분석, 시각화, 모델링 등)

gapminder 라이브러리

-세계 각국의 기대 수명, 1인당 국내총생산, 인구 데이터 등을 집계해놓은 gapminder 데이터 셋의 일부를 담고 있음

@샘플과 속성의 추출
-각 나라의 기대 수명
> gapminder[, c("country", "lifeExp")]


-행에는 이름이 지정되지 않은 경우가 많아 행 번호를 지정하거나 조건식을 이용하는 것이 일반적
> gapminder[1 : 15, ]


-국가 이름이 "Croatia"인 샘플을 조건식 사용해 추출
> gapminder[gapminder$country == "Croatia", ]


-국가 이름이 "Croatia"인 샘플의 인구(pop) 속성만 조건식 사용해 추출
> gapminder[gapminder$country == "Croatia", "pop"]


-국가 이름이 "Croatia"인 샘플의 인구(pop) 속성과 기대 수명(lifeExp) 속성만 조건식 사용해 추출
> gapminder[gapminder$country == "Croatia", c("lifeExp","pop")]
# 추출할 속성이 여러 개일 경우 c() 이용해 벡터로 묶음


-Croatia의 1990년도 이후의 기대 수명과 인구 추출
> gapminder[gapminder$country=="Croatia"&gapminder$year>1998, c("lifeExp", "pop")]
# 조건식 여러 개를 논리 연산자로 결합



@행, 열 단위 연산
-R에서 제공하는 apply() 이용해 데이터 프레임에 포함된 여러 항목을 한꺼번에 연산 처리
> apply(gapminder[gapminder$country=="Croatia", c("lifeExp", "pop")], 2, mean)


데이터 가공

-데이터 프레임을 중심으로 R이 제공하는 다양한 연산자와 함수를 이용해 이루어지는 작업
-보다 정교하게 추출하려면 조건식 여러 개를 논리 연산자로 결합
-데이터를 탐색하는 과정에서 샘플들의 요약 통계 혹은 행, 열 단위의 빠른 연산이 필요한 때가 있음
-R에서 제공하는 apply() 이용하면 데이터 프레임을 구성하는 여러 항목을 한꺼번에 연산 가능
-base R의 데이터 가공 기법이 인덱스 기반 데이터 접근에 기초하고 있다면 dplyr 라이브러리는 filter 혹은 select 같은 입출력 관계의 함수로 구현함으로써 사용자들이 보다 직관적으로 활용 가능
-따라서 데이터 가공에 특화된 라이브러리를 사용하는 것이 더 효율적
-탐색적 데이터 분석 과정에서 시각화와 데이터 가공은 매우 긴밀하게 연결되어 시각화를 위한 효율적인 가공 기법도 필요


@샘플과 속성 추출
-select() : 열 지정 시 " "없이 열 이름을 그대로 사용할 수 있음
> select(gapminder, country, year, lifeExp)


-filter() : 특정 샘플(행) 추출 시 사용
-조건식 구성은 base R과 유사하나 함수 내에서 인덱싱을 위해 데이터 프레임의 이름을 매번 입력하지 않아도 되므로 명형어가 간결
> filter(gapminder, country=="Croatia")



@행, 열 단위의 연산
-group by() : 데이터 프레임에 포함된 factor형 속성을 활용해 전체 데이터를 그룹으로 분류 가능
보통 summarise()를 연이어 사용해 그룹별 통계 지표를 한번에 산출
> summarise(group_by(gapminder, continent, country), pop_avg = mean(pop))



@%>% 연산자를 이용한 연속 처리
일련의 가공 작업 연결
> gapminder %>% group_by(continent, country)%>%summarise(pop_avg=mean(pop))

== > summarise(group_by(gapminder, continent, country), pop_avg = mean(pop))


데이터 정렬과 검색

-정렬과 검색 통해 데이터 자세히 관찰 가능
-arrange()
> arrange(x_avg, desc(V_arg))
뭐 이런 식


-데이터 셋에 중간 통계 값이 포함된 경우도 있으므로 주의 필요
-최댓값의 검색은 max() 사용할 수도 있지만 속성값을 확인할 수 있는 arrange()를 사용하는 게 더 안전


@Date형 데이터 활용
-Date형 속성은 1개월은 31일, 1년은 12개월로 구성되어 일반 숫자형처럼 처리할 경우 데이터 간의 간격이 일정하지 않아 시각화나 모델링 단계에서 잘못 적용될 수 있으므로 특별 처리 필요
-속성 하나에 세 가지 속성(연-월-일) 정보를 포함하는 것이므로 적절히 가공하면 데이터를 보다 세밀하게 분석 가능


데이터 프레임 병합

예) 새로 만들어질 데이터 프레임에서 구분자가 될 year를 key에, 측정값의 속성 이름을 value에 지정하면 gather()은 데이터 프레임을 다음과 같이 재구성
> library(tidyr)
> elec_gen_df = gather(elec_gen, -country, key = "year", value = "ElectricityGeneration")
> elec_use_df = gather(elec_use, -country, key = "year", value = "ElectricityUse")

-재구성된 데이터 프레임을 merge()를 이용해 하나의 데이터 프레임으로 병합
> elec_gen_use = merge(elec_gen_df, elec_use_df)



Tiny Star