<쉽게 배우는 R 데이터 분석 p.160>

문제 1. popadults 는 해당 지역의 성인 인구, poptotal은 전체 인구를 나타냅니다. midwest 데이터에 '전체 인구 대비 미성년 인구 백분율' 변수를 추가하세요.

total 이라는 새로운 변수 추가

 

문제 2. 미성년 인구 백분율이 가장 높은 상위 5개 country(지역)의 미성년 인구 백분율을 출력하시오.

문제 3. 다음과 같은 분류표의 기준에 따라 미성년 비율 등급 변수를 추가하고, 각 등급에 몇 개의 지역이 있는지 알아보세요.
library(ggplot2)
data <- data %>% mutate(level = ifelse(data$total >= 40, "large",
					ifelse(data$county > 30, "middle", "small")))
table(data$level)
qplot(data$level)

large middle small
   32    396     9

 

문제 4. popasian은 해당 지역의 아시아인 인구를 나타냅니다. '전체 인구 대비 아시아인 인구 백분율' 변수를 추가하고 하위 10개 지역의 state(주), county(지역), 아시아인 인구 백분율을 출력하세요.
data <- midwest %>%
	mutate(tot_asian = (popasian/poptotal)*100) %>%
    arrange(tot_asian) %>%
    select(state, county, tot_asian) %>%
    tail(10)
data

 

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

1. 데이터는 어떻게 생겼나? - 데이터 프레임 이해하기

*데이터 프레임(Data Frame)

- 가장 많이 사용하는 데이터 형태로, 행과 열로 구성된 사각형 모양의 표처럼 생김

(3개의 행과 4개의 열로 구성된 데이터 프레임)

행을 보면 세 명의 자료임을 알 수 있고, 열은 성별, 연령, 학점, 연봉의 4가지 속성으로 되어 있음

>> 이 표는 '4개의 속성에 대한 3명의 자료로 구성된 데이터 프레임'이라고 할 수 있다.

 

'열'은 속성이다.

세로로 나열되는 열은 '속성'을 나타냄. 열은 '컬럼(Column)' 또는 '변수(Variable)'라고 불림

>> 만약, 어떤 데이터가 100가지 속성에 대한 정보를 가지고 있다면, 그 데이터는 100개의 컬럼 또는 100개의 변수를 가지고 있다고 표현할 수 있다.

 

'행'은 한 사람의 정보다.

가로로 나열되는 행은 각 사람에 대한 정보를 보여줌. 행은 '로(Row)' 또는 '케이스(Case)'라고 불림

행이 반드시 사람이어야 하는 건 아니지만, 무엇이든 하나의 단위가 하나의 행으로 구성될 수 있다. 예를 들어, 하나의 도시, 하나의 거래 내역, 하나의 웹 사이트 접속 기록도 행이 될 수 있다. 

>> 만약, 어떤 데이터가 30명의 정보로 구성되어 있다면, 그 데이터는 30개의 Row 또는 30개의 Case를 가지고 있다고 표현할 수 있다.

 

데이터가 크다 = 행이 많다 또는 열이 많다

데이터를 분석하는 입장에서 봤을 때 행이 많은 것과 열이 많은 것 중 무엇이 더 중요할까?

>> 열이 많은 것이 더 중요하다. (행이 많은 것은 Computer Power로 해결)

>> 데이터의 양을 의미하는 행보다 데이터의 '다양성'을 의미하는 열이 많은 것이 분석의 측면에서 더 중요

 

행이 늘어나더라도 분석 기술의 측면에서는 별다른 차이가 생기지 않는다. 메모리를 늘려보고, 그래도 힘들다면 분산 처리 시스템을 구축하면 된다.

반면, 열이 많아지면 변수를 조합할 수 있는 경우의 수가 늘어난다. 예를 들어, 학점과 연봉의 관계는 전공이 무엇인지에 따라 다른 양상으로 나타날 수 있다. 여기에 출신지, 자격증, 성별, 직업군 등 수십 가지 변수가 추가되면 경우의 수가 기하급수적으로 늘어난다. 여러 변수의 영향을 동시에 고려할 수 있는 복잡한 분석 방법을 활용해야 할 필요성이 생기게 된다.

행이 많다 > 컴퓨터가 느려짐 > 고사양 장비 구축
열이 많다 > 분석 방법의 한계 > 고급 분석 방법 필요

 

2. 데이터 프레임 만들기 - 시험 성적 데이터 만들기

데이터 프레임은 데이터를 직접 입력해 만들 수도 있고, 외부의 데이터를 가져와 만들 수도 있다.

*데이터 직접 입력해서 데이터 프레임 만들기 (4명의 학생이 영어 시험과 수학 시험을 봤다고 가정)

1. 변수 만들기

- 학생 4명의 영어 점수와 수학 점수를 담은 변수를 각각 만듦

english <- c(100, 45, 80, 70)  # 영어 점수 변수 생성
math <- c(50, 60, 90, 100)  # 수학 점수 변수 생성

 

2. 데이터 프레임 만들기

- 데이터 프레임을 만들 때는 data.frame( )을 이용 (데이터 프레임을 구성할 변수를 괄호 안에 쉼표로 나열)

#english, math로 데이터 프레임 생성해서 df_midterm에 할당
df_midterm <- data.frame(english, math)
df_midterm

##  english math
## 1    100   50
## 2     45   60
## 3     80   90
## 4     70  100

cf. 데이터 프레임의 이름을 정할 때 앞에 'Data Frame'의 약자인 'df'를 붙여 두면 다른 변수들과 구별하기 쉬움.

 

3. 생성된 데이터에 새로운 열 추가하기 (학생들의 반에 대한 정보를 추가해보기)

class <- c(1, 1, 2, 2)
df_midterm <- data.frame(class, english, math)
df_midterm

##    class english math
## 1      1     100   50
## 2      1      45   60
## 3      2      80   90
## 4      2      70  100

 

4. 분석하기

- 데이터 프레임이 완성되면 분석해보기. mean( )을 이용해 전체 학생의 영어 점수와 수학 점수 평균을 구해볼 것

mean(df_midterm$english)  #df_midterm의 english로 평균 산출
## [1] 73.75

mean(df_midterm$math)  #df_midterm의 mathfh 평균 산출
## [1] 75

mean ( ) 안에 입력된 df_midterm$english는 'df_midterm 데이터 프레임 안에 있는 english 변수'를 의미한다.

cf. 달러 기호($)는 데이터 프레임 안에 있는 변수를 지정할 때 사용한다.

 

5. 데이터 프레임 한 번에 만들기

- 위에서는 여러 변수를 각각 만든 후에 합치는 형태로 데이터 프레임을 만들었다. 이 방법 외에 data.frame( ) 안에 변수와 값을 나열해서 한 번에 만드는 방법도 있다.

df_midterm <- data.frame(class = c(1, 1, 2, 2),
						 english = c(100, 45, 80, 70),
                         math = c(50, 60, 90, 100))
df_midterm

##    class english math
## 1      1     100   50
## 2      1      45   60
## 3      2      80   90
## 4      2      70  100

cf. 코드가 길어질 경우에는 쉼표 뒤에서 엔터키를 눌러 다음 줄로 넘기는 것이 좋음. 전체적인 구조가 한 눈에 잘 들어오기 때문에 코드를 이해하기 쉽고 오류를 쉽게 찾을 수 있음.

 

3. 외부 데이터 이용하기 - 축적된 시험 성적 데이터 불러오기

직접 데이터를 입력하기보다 외부에서 생성된 데이터를 불러와 분석하는 경우가 더 많다.

* 데이터를 관리할 때 가장 많이 사용되는 엑셀 파일과 CSV 파일을 불러와 데이터 프레임을 만드는 방법 보기

 

1. 깃허브(bit.ly/doit_ra)에서 실습에 사용할 excel_exam.xlsx 파일 다운로드하기 (cf. 깃허브에서 실습 파일을 다운로드하는 방법은 블로그 내 ' ' 포스팅 참고)

2. 프로젝트 폴더에 엑셀 파일 삽입하기

- 데이터 파일을 불러오려면 현재 작업중인 프로젝트 폴더에 불러올 파일을 삽입해야한다. excel_exam.xlsx 파일을 프로젝트 폴더에 넣기

3. readx1 패키지 설치하고 로드하기

- 엑셀 파일을 불러오려면 엑셀 파일을 불러오는 기능을 제공하는 패키지를 이용해야 한다. readxl 패키지를 설치하고 로드한다. ( cf. readxl의 맨 뒷 글자는 소문자 엘 ) 

install.packages("readxl") 
library(readxl)

 

4. 엑셀 파일 불러오기

- readxl 패키지에서 제공하는 read_excel( )을 이용해 엑셀 파일을 불러온다. read_excel( )은 엑셀 파일을 데이터 프레임으로 만드는 기능을 한다. 괄호 안에 양쪽에 큰따옴표와 함께 불러올 엑셀 파일명을 넣으면 되고, 확장자(.xlsx)까지 기입해야한다.

cf. R에서는 파일명을 지정할 때 항상 앞 뒤에 따옴표를 넣는다. 만약, 프로젝트 폴더가 아닌 다른 폴더에 있는 엑셀 파일을 불러오려면 파일 경로를 지정하면 된다. 경로를 지정할 때는 슬래시(/)를 사용한다.

df_exam <- read_excel("d:/easy_r/excel_exam.xlsx")

 

5. 분석하기

- mean( )을 이용해 전체 평균을 구할 수 있다.

 

엑셀 파일 첫 번째 행이 변수명이 아니라면?

변수명 없이 첫 번째 행부터 바로 데이터가 시작되는 엑셀 파일

read_excel( )은 기본적으로 엑셀 파일의 첫 번째 행을 '변수명'으로 인식해 불러온다. 변수명 없이 첫 번째 행부터 바로 데이터가 시작되는 경우, 첫 번째 행의 데이터가 변수명으로 지정되면서 유실되는 문제가 발생한다.

df_exam_novar <- read_excel("excel_exam_novar.xlsx")
df_exam_novar

##      1 1__1   50   98 50__1
## 1    2    1   60   97    60
## 2    3    2   25   80    65
## 3    4    2   50   89    98
## 4    5    3   20   98    15
## 5    6    3   50   98    45
## 6    7    4   46   98    65
## 7    8    4   48   87    12

출력 결과를 보면, 엑셀 파일 첫 번째 행을 변수명으로 인식해 원본과 달리 7행까지만 존재하는 문제가 발생한 것 보임.

>> col_names = F 파라미터를 설정하면 첫 번째 행을 변수명이 아닌 데이터로 인식해 불러오고, 변수명은 'X__숫자'로 자동 지정된다. (F는 대문자로 입력해야함)

df_exam_novar <- read_excel("excel_exam_novar.xlsx", col_names = F)
df_exam_novar

##   X__1 X__2 X__3 X__4 X__5
## 1    1    1   50   98   50
## 2    2    1   60   97   60
## 3    3    2   25   80   65
## 4    4    2   50   89   98
## 5    5    3   20   98   15
## 6    6    3   50   98   45
## 7    7    4   46   98   65
## 8    8    4   48   87   12

cf. R에는 참(TRUE)과 거짓(FALSE) 중 하나로 구성되는 논리형 벡터(Logical Vectors)라는 변수 타입이 있다. 논리형 벡터는 어떤 값이 참인지 거짓인지를 나타내는데, 여기서는 col_names = F의 F가 '거짓'을 의미한다. '열 이름(Column Name)을 가져올 것인가?'라는 질문에 '그렇지 않다'라는 답을 한 셈이다. <<논리형 벡터는 반드시 대문자 TRUE 또는 FALSE로 입력해야 하고, 앞글자만 따서 T 또는 F를 입력해도 된다.>>

 

엑셀 파일에 시트가 여러 개 있다면?

여러 개의 시트로 구성된 엑셀 파일을 불러올 경우 sheet 파라미터를 이용해 몇 번째 시트의 데이터를 불러올지 지정할 수 있다. 

# 엑셀 파일의 세 번째 시트에 있는 데이터 불러오기
df_exam_sheet <- read_excel("excel_exam_sheet.xlsx", sheet = 3)

 

 

 

(출처; 쉽게 배우는 R 데이터 분석, 김영우)

+ Recent posts