전통적 데이터 구조
벡터의 생성과 편집
① 1개 이상의 원소로 구성된 자료 객체입니다.
② 수열연산자(:), c( ) , rep( ), seq( ) 함수 등으로 벡터 생성할 수 있습니다.
③ 벡터는 한가지 형태로만 가능합니다.
④ 서로 다른 속성의 벡터가 합쳐지면 논리형<수치형<문자형 순으로 강제 변환 됩니다.
⑤ 벡터는 다양한 함수(append, sort, replace etc)와 대괄호[ ] 를 사용하여 편집할 수 있습니다.
예시
v1 <-c(1,2,3) # 숫자형 벡터 v1
v2 <-c("a","b","c") # 문자형 벡터 v2
v3 <-c(T,F,F) # 논리형 벡터 v3
v4<-c(v1,v2) # 숫자형+문자형=문자형
v5<-c(v1,v3) # 숫자형+논리형=숫자형
v6<-c(v2,v3) # 문자형+논리형=문자형
v7<-c(v1,v2,v3) # 숫자형+문자형+논리형=문자형
행렬의 생성 및 편집
① 벡터의 확장으로 행과 열을 갖는 데이터 구조입니다.
② 벡터와 마찬가지로 한 가지 형태를 지니며 다른 형태의 원소가 섞이면 강제 변환 됩니다.
③ matrix( ), cbind( ), rbind( ), dim( ) 함수를 이용하여 생성할 수 있습니다.
④ [ ] 연산기호로 일부 원소를 추출하거나 작은 부분집합을 추출하여 편집할 수 있습니다.
⑤ 전치행렬 t( ), 행렬의 수학적 곱셈 %*% , 역행렬 solve( ), 행/열방향 연산 apply( ) 등의 함수 사용이 가능합니다.
배열의 생성 및 편집
① 벡터 및 행렬의 확장으로
② 한 개 이상의 벡터 or 행렬로 이루어진 데이터 구조입니다.
③ array( ), dim( ) 함수를 이용하여 생성할 수 있습니다.
리스트의 생성 및 편집
① 서로 다른 형태의 데이터로 구축된 데이터 구조입니다.
② 벡터, 행렬, 배열과는 서로 다른 형태의 원소(성분)가 함께 포함 될 수 있습니다.
③ 성분끼리 형태가 다를수도 있고 길이도 다를 수 있습니다.
④ 성분의 [[ ]] 겹대괄호로 표시됩니다.
⑤ $ 기호를 사용하여 성분명을 지정할 수 있습니다. ('$성분명')
데이터프레임의 생성 및 편집
① 열 방향 : 변수
② 행 방향 : 관측치
③ 서로 다른 형태의 변수들이 포함될 수 있으며 일반화된 행렬이라고 합니다.
data.frame( ) : 객체를 결합해서 데이터 프레임 구조를 생성할 수 있음
as.data.frame( ) : 행렬→데이터 프레임 구조로 전환할 수 있음
read.table( ) : 외부 데이터를 불러와 데이터프레임 객체로 저장할 수 있음
read.csv( ) : CSV형식의 외부 데이터를 불러와 데이터프레임 객체로 저장할 수 있음
cbind( ) , rbind( ) : 데이터프레임을 병합하여 편집할 수 있음
새로운 개념의 데이터 구조
tidyverse 환경
www.tidyverse.org
R 내부에서는 install.packages("tidyverse") 명령으로 패키지를 설치할 수 있습니다.
R콘솔에서 해당 패키지를 설치하고 활성화하면
tidyverse에 포함된 패키지 목록들도 확인할 수 있습니다.
tidyverse 에 포함된 패키지들을 간략하게 살펴보겠습니다.
ggplot2 | 데이터 시각화에 유용한 패키지. 그래픽 편집, 디자인의 강화, 부가적인 정보의 원활한 융합 |
tibble | 전통적인 데이터구조 중 데이터프레임에 대응하는 새로운 개념의 데이터 프레임을 생성하고 편집할 수 있는 패키지 |
tidyr | tidy 데이터를 다루는 데 도움이 되는 함수를 제공하는 패키지 tidy 데이터란 각 열에 변수, 각 행에 관측치, 관측기준의 일관성을 지니는 조건을 충족하는 데이터 |
readr | csv와 같은 직사각형 데이터를 빠르게 읽어서 쉽게 처리할 수 있도록 돕는 패키지 |
purrr | 함수와 벡터를 다루는 유용한 도구 반복문 등의 구분을 보다 쉽고 명확하게 작성할 수 있도록 돕는 패키지 |
dplyr | 데이터 프레임의 편집을 유연하고 폭넓게 할 수 있도록 돕는 패키지 |
stringr | 문자열 편집을 위해 개발된 패키지 |
forcats | factor(인자)를 다루는 데 특화된 패키지 |
새로운 개념의 데이터 구조인 tibble 데이터 프레임 생성과 편집 방법을 살펴보도록 하겠습니다.
(1) tibble 데이터프레임의 생성
tibble( ) : tibble 데이터 프레임을 생성하는 함수
tribble( ) : 변수명을 지정하고 행별로 각 관측치를 입력하여 데이터 프레임을 구성
기존 데이터프레임보다 대용량의 데이터를 편집하기 용이합니다.
변수의 속성을 명확하게 지정할 수 있어 오류를 방지할 수 있습니다.
단, 변수의 속성을 지정할 때 모든 변수 벡터의 길이가 같아야 합니다.
만약 수치형 원소만으로 구성된 데이터프레임의 경우 일괄 연산이 가능합니다.
변수명 아래에 <int> <dbl> <chr> <lgl> 과 같이 속성이 함께 출력되는 것을 알 수 있습니다.
':' 을 이용하여 수열을 생성한 값은 정수(integer) 즉, <int> 라고 출력되었습니다.
(2) 데이터 프레임의 변환
먼저 tidyverse 패키지에 내장된 tibble 데이터 프레임 중 mpg 데이터를 불러오도록 하겠습니다.
tidyverse 패키지를 library( ) 활성화한 이후에 콘솔에서 mpg를 입력하면
상단의 10행이 출력되는 것을 볼 수 있습니다. 각 변수의 내용도 축약되어 함께 나타납니다.
※ 기존 데이터프레임에서는 head( ) 함수 등으로 지정해야 일부만 출력되었던 것과는 상이합니다.
만약 출력되는 분량을 조절하고 싶다면,
print( ) 함수의 옵션을 조정하여 조절 할 수 있습니다.
as.data.frame( ) 함수를 사용하여
tibble 데이터프레임을 → 기존의 데이터프레임 형태로 바꿀 수 있습니다.
as_tibble( ) 함수는
기존의 데이터프레임을 → tibble 데이터프레임 형태로 바꿔줍니다.
(3) 데이터 프레임의 변수 생성
R 내장 데이터인 mtcars 데이터를 불러와 변수를 생성해 보도록 하겠습니다.
먼저 head(mtcars) 출력 결과를 보면
자동차의 모델명이 변수로 지정되지 않고 행 이름 형태로 이루어져 있음을 확인할 수 있습니다.
이 경우, rownames_to_column(mtcars) 함수를 이용하여
행이름을 rowname 이라는 이름을 가진 변수 값으로 변환 할 수 있습니다.
행이름을 변수 값으로 변환한 뒤에
as_tibble 함수를 적용해야 tibble 데이터 프레임에도 변수 값이 변환 적용됩니다.
만약 as_tibble 함수를 먼저 적용하고 변수값을 변경하면 어떻게 될까요?
기존 데이터프레임을 tibble 데이터프레임으로 변경하니
자동차 모델명이 변수로 지정되어 있지 않아 사라지는 것을 확인 할 수 있습니다.
따라 이후 rownames를 실행하면
새로운 변수가 추가되어 1,2,3....10 으로 지정되는 것을 볼 수 있습니다.
다음으로 dplyr 을 이용한 데이터 프레임 편집에 대해서 알아보도록 하겠습니다.
(1) dplyr 주요함수
filter : 조건을 부여하여 데이터의 전체 관측치 중에서 이 조건에 맞는 관측치를 추출하는 함수
mtcars 데이터 중 mpg 값이 25 미만이고 , cyl 값이 6 또는 8이며, am값이 0과 같은 데이터를 추출해 보겠습니다.
filter(mtcars,mpg<25,cyl%in%c(6,8),am==0)
arrange : tibble 데이터 프레임 내의 특정 변수를 지정하면 그 변수의 크기에 따라 정렬해 주는 함수
arrange( ) 함수를 실행하면 특정 변수를 기준을 오름차순 정렬이 이루어집니다.
특정 변수에 desc( ) 함수를 사용하면 내림차순 정렬이 가능합니다.
arrange( ) 함수내에 2개의 변수를 지정하게 되면
첫 번째 변수를 기준으로 정렬하되, 정렬된 그룹 내에서는 두번째 변수의 기준대로 정렬하게 됩니다.
arrange(mtcars2,hp,desc(mpg))
첫 번째 변수 hp를 기준으로 오름차순 정렬하되
정렬된 그룹내에서는 두번째 변수 mpg를 기준으로 내림차순 정렬하게 됩니다.
select : tibble 데이터 프레임 내의 특정 변수를 지정하여 그 변수만을 추출하는 함수
(※ filter 함수는 조건에 해당하는 값을 추출하는 것이고, select는 선택한 변수의 전체 관측치를 추출)
select(데이터,변수명) : 해당 변수만 추출합니다.
select(데이터,-변수명) : 변수명 앞에 마이너스(-) 를 붙이면 해당 변수만 빼고 나머지 추출합니다.
group_by : tibble 데이터 프레임을 토대로 특정한 변수를 기준으로 하위 그룹을 형성하는 함수
출력 화면에는 구분된 그룹이 출력되지는 않지만, 실제 연산은 하위 그룹별로 이루어 짐
mtcars2 데이터에서 vs 값을 기준으로 하위 그룹을 형성하기 위해
group_by(mtcars2,vs) 함수를 실행했습니다.
출력화면에서는 구분된 그룹이 출력되지는 않지만, 실제 연산은 그룹별로 이루어 집니다.
Groups : vs [2] 대괄호 내에 숫자가 출력되는 것은 생성된 하위 그룹의 개수 입니다.
vs 변수는 0과 1값을 갖기 때문에 괄호 내에 2라는 숫자가 출력됩니다.
다음은 2개의 변수를 기준으로 그룹화한 결과입니다.
먼저 gear 와 cyl 변수는 각각 3개의 그룹으로 이루어져 있음을 확인 할 수 있습니다.
그렇다면 gear와 cyl 변수의 범주 조합은 3*3=9개가 되어야 하는데,
실제 결과는 Groups: gear, cyl [8] 로 출력되어 있습니다.
이는 총 9개 조합 중 실제 관측치가 없는 조합 1개가 있기 때문입니다.
경우에 따라 특정 범주의 조합에 해당하는 관측치가 없을 수도 있다는 것에 유의해야 합니다.
summarize : 조건을 부여하여 원하는 통계량을 자유롭게 산출할 수 있는 함수.
(summary 함수는 모든 변수에 대해 통일된 규칙하에서 특정 통계량을 출력하는 함수.)
mtcars2 전체 데이터와 앞서 생성한 각 그룹(group1,group2,group3,group4) 데이터를 대상으로
mpg 변수의 평균값을 summarize 함수를 실행하여 출력해보았습니다.
n=n( ) 의 의미는 각 그룹별 대상 관측치 수를 함께 출력하라는 의미입니다.
파이프연산자 : 함수 간 데이터 및 결과값을 편리하게 전달할 수 있고,
긴 명령문을 짧게 축약할 수 있는 함수
데이터 프레임 dat 와 R의 함수 f1( ) f2( ) f3( ) 가 있다고 가정할 때,
f3(f2(f1(dat))) = dat에 함수f1을 적용하고→ 그 결과인 f1(dat)에 함수f2를 적용하고
→ 다시 그 결과인 f2(f1(dat))에 f3 함수를 적용한 것을 의미합니다.
이를 파이프 연산자를 통해 다음과 같이 나타낼 수 있습니다.
dat%>%f1%>%f2%>%f3
연산자 우측의 함수에 다른 객체가 이미 존재하고 있다면
좌측의 객체는 우측 함수의 첫번째 객체로 인식됩니다.
즉, x %>% f(y) = f(x,y) 입니다.
만약 x 가 첫번째 객체가 아닌 경우에는 원하는 위치에 마침표('.') 를 표시합니다.
즉, x %>% f(y,.) =f(y,x) 입니다.

'자기계발 > 통계데이터과학과' 카테고리의 다른 글
[기말고사 후기] 2학년 2학기를 마치며 :( (0) | 2022.12.19 |
---|---|
[데이터과학개론] 4장 데이터 과학의 도구 (파이썬, R, git) (1) | 2022.12.15 |
[기말 핵심 요약] 생활과 통계 (통계데이터과학과) (1) | 2022.12.10 |
[기말 핵심 요약] 빅데이터의 이해와 활용 (통계데이터과학과) (4) | 2022.12.10 |
[2학년 2학기] 방통대_통계데이터과학과 중간과제물(중간고사) 후기 (0) | 2022.12.05 |
댓글