개인적으로 파이썬 프로그래밍 강의 자료를 준비하는 도중에, 현재 오라클에서 일하시는 지인분께서 실습환경을 클라우드 상에 구성하는 것이 어떻겠냐는 제안을 받았습니다. 제안과 함께 좋은 기회를 소개시켜 주셔서 AWS에 대해 공부하는 과정을 포스팅하고자 합니다.

아마존 웹 서비스 (AWS) 는 전 세계 1위 점유율을 차지하고 있는 클라우드 플랫폼 입니다. AWS는 IT 인프라 구축에 필요한 많은 서비스를 제공합니다.

AWS는 예전에 Minecraft 서버 구축할때 EC2 무료버전 위에서 돌린 기억이 있늗네 이 기회를 통해서 많은 배움의 기회가 되었으면 좋겠습니다.

 

제가 소개하고자 하는 프로그램은 생활코딩과 함께하는 AWS 탐구생활 입니다. 하루 실습 포함 2시간 정도의 수업으로 7일간 학습이 진행됩니다. 현재(2019년 4월 기준) 이 프로그램을 통해 학습을 수료하게 되면 AWS 무료 크레딧 20달러를 받을 수 있다고 합니다.

 

https://pages.awscloud.com/cloud-in-life-coding-everybody-2019.html

 

클라우드 서비스 | 클라우드 컴퓨팅 솔루션| Amazon Web Services

엔터프라이즈 변혁 AWS를 사용하여 뱅킹을 재창조하는 Capital One Capital One이 어떻게 교육, 장기 계획, 고객 요구에 대한 끊임없는 집중을 통해 클라우드 우선 전략을 구현했는지 알아보십시오. 자세히 알아보기  고객에 집중 2014년에 Capital One은 이제 막 프라이빗 클라우드 기능을 사용하기 시작하면서 AWS도 실험해 보는 단계였습니다. 이 회사는 고객이 원하는 기능을 최대한 빨리 구축하기 위해 AWS를 선택했습니다. 어려운 문

aws.amazon.com

위 링크에서 가입하여 참여하실 수 있습니다.

 

 

오리엔테이션 Youtube 자료 입니다.

그래프 만들기

데이터를 보기 쉽게 그림으로 표현한 것을 '그래프' 라고 합니다. 데이터의 원 자료나 통계표 보다는 시각화된 그래프가 의미와 특징을 더 쉽게 파악할 수 있습니다.

우리는 R의 ggplot2 패키지를 사용하여 그래프를 그리는 방법을 알아보겠습니다.

 

ggplot2

ggplot2는 레이어 구조의 문법 체계를 가지고 있습니다. 배경을 만들고, 그 위에 그래프를 그리고, 그래프의 축 범위, 색, 표식을 추가하는 순서로 그래프가 만들어지게 됩니다.

ggplot2를 사용하려면 당연히 ggplot2 패키지를 불러와야만 합니다.

library(ggplot2)

 

1. 산점도

레이어 구조 순서로 산점도를 만듭니다.

# 배경 만들기
ggplot(data = mpg, aes(x = displ, y = hwy)) + 
	geom_point() # 배경에 산점도 추가

 

그래프 설정을 변경하는 코드를 추가하여 축 범위를 설정하여 보겠습니다.

# 배경 만들기
ggplot(data = mpg, aes(x = displ, y = hwy)) + 
	geom_point() + # 배경에 산점도 추가
	xlim (3,6) +
	ylim (10, 30)

 

2. 막대 그래프

집단별 평균표를 만들어서 막대 그래프를 그릴 수 있습니다.

library(ggplot2)
library(dplyr)

df_mpg <- mpg %>%
	group_by(drv) %>%
	summarise(mean_hwy = mean(hwy))

ggplot(data = df_mpg, aes(x = drv, y = mean_hwy)) + geom_col()

 

크기 순으로 정렬하려면 reorder() 함수를 사용하면 막대를 크기 순으로 정렬할 수 있습니다.

ggplot(data = df_mpg, aes(x = reorder(drv, -mean_hwy), y = mean_hwy)) + geom_col()

 

빈도 막대 그래프 또한 그릴 수 있습니다. geom_bar() 를 사용하면 됩니다.

ggplot(data = mpg, aes(x = drv)) + geom_bar()

연속 변수를 x에 지정하면 값의 분포를 파악할 수 있습니다.

ggplot(data = mpg, aes(x = hwy)) + geom_bar()

 

3. 선 그래프

데이터를 선으로 표현한 그래프를 선 그래프라고 합니다. 주로 시간에 따라 달라지는 데이터를 표현할 때 선 그래프를 이용합니다.

ggplot(data = economics, aes(x = data, y =umemploy)) + geom_line()

 

4. 상자 그림 (Boxplot)

상자그림은 데이터의 분포를 직사각형의 상자 모양으로 표현한 그래프 입니다. qplot 에서의 상자그림은 한 변수의 분포만 볼 수 있었지만 ggplot2 의 상자그림은 여러 변수를 비교하여 볼 수 있습니다.

ggplot(data = mpg, aes(x = drv, y = hwy)) + geom_boxplot()

 

 

// 참고자료

영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019

이영호, "확률과통계"  가천대학교, 2019

'Programming > R' 카테고리의 다른 글

WordCloud2  (0) 2019.05.27
텍스트 마이닝 - KoNLP  (0) 2019.05.20
데이터 정제하기 (데이터 클린징)  (0) 2019.04.15
데이터 전처리  (0) 2019.04.14
변수 조작하기  (0) 2019.04.10

Do it R 에서 제공하는 분석 도전 문제 풀이 입니다. 160쪽의 문제 입니다. 이번에도 ggplot2의 midwest 데이터를 사용하여 데이터 분석을 실습하는 문제 입니다.

패키지와 문제에 필요한 데이터를 불러오고 사본을 만듭니다.

library(ggplot2)
library(dplyr)

midwest_raw <- as.data.frame(ggplot2::midwest)
midwest_new <- midwest_raw

 

View() 등으로 데이터를 파악한 뒤 바로 문제를 풀어 보았습니다.

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

#1번 문제
midwest_new <- midwest_new %>% mutate(percyouth = (poptotal - popadults)/poptotal * 100)

 

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

#2번 문제
midwest_new %>% arrange(desc(percyouth)) %>% 
  select(county, percyouth) %>% 
  head(5)

## county percyouth
## 1  ISABELLA  51.50117
## 2 MENOMINEE  50.59126
## 3    ATHENS  49.32073
## 4   MECOSTA  49.05918
## 5    MONROE  47.35818

 

3. 다음과 같은 분류표의 기준에 따라 미성년 비율 등급 변수를 추가하고, 각 등급에 몇 개의 지역이 있는지 알아보세요.

분류 기준
large 40% 이상
middle 30 ~ 40% 미만
small 30% 미만
#3번 문제
midwest_new <- midwest_new %>% 
  mutate(gradeyouth = ifelse(percyouth >= 40 ,"large",
                             ifelse(percyouth >= 30,"middle","small")))
table(midwest_new$gradeyouth)

## large middle  small 
##    32    396      9 

 

4. popasian은 해당 지역의 아시아인 인구를 나타냅니다. '전체 인구 대비 아시아인 인구 백분율' 변수를 추가하고 하위 10개 지역의 state(주), county(지역), 아시아인 인구 백분율을 출력하세요.

#4번 문제
midwest_new <- midwest_new %>% 
  mutate(ratio_asian = popasian/poptotal*100)

midwest_new %>% arrange(ratio_asian) %>% 
  select(state, county, ratio_asian) %>% 
  head(10)

##   state    county ratio_asian
## 1     WI MENOMINEE  0.00000000
## 2     IN    BENTON  0.01059210
## 3     IN   CARROLL  0.01594981
## 4      OH    VINTON  0.02703190
## 5     WI      IRON  0.03250447
## 6     IL     SCOTT  0.05315379
## 7     IN      CLAY  0.06071645
## 8     MI    OSCODA  0.06375925
## 9     OH     PERRY  0.06654625
## 10    IL     PIATT  0.07074865

Source code

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/midwest_160p%EF%BB%BF

 

// 참고자료

영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019

이영호, "확률과통계"  가천대학교, 2019

'Study > Data Mining' 카테고리의 다른 글

통계적 가설 검정  (0) 2019.05.31
Do it R분석 도전 (midwest) - 123  (0) 2019.04.10
Kaggle  (0) 2019.03.15
R language  (0) 2019.03.15
EDA (탐색적 데이터 분석)  (0) 2019.03.14

Flow Machine은 최첨단 기계 학습 및 신호 처리 기술을 기반으로 한 새로운 기술을 개발하여 새로운 음악을 창조하는 데 계속 도전하고 있습니다.


Flow Machine은 Flow Machine Professinal이라는 AI지원 음악 작곡 시스템을 주요 부분으로 가지고 있습니다. 제작자는 다양한 음악 데이터를 분석하여 만든 다양한 음악 규칙에 따라서 자신이 원하는 다양한 스타일에 멜로디를 작곡할 수 있습니다. 제작자는 Flow Machine 을 조작하여 멜로디, 코드 및 베이스를 생성해 내고 이것에서 영감을 받은 아티스트는 자신의 아이디어를 첨가하여 새로운 음악을 만들어 냅니다. 

Flow Machine은 음악을 처음부터 끝까지 만드는 것이 아니라 아티스트에게 영감을 주고 창의력을 향상시키는 도구의 역할을 합니다. 

Flow Machine은 멜로디와 코드 진행을 갖는 복수의 Sheet을 학습하고 멜로디의 전이 확률, 코드 전환 확률 등을 모델링하여. 새로운 멜로디와 코드 진행을 얻는 것이 특징입니다.

 

여기에서 Flow Machine을 활용한 음악을 들어보실 수 있습니다.

https://www.youtube.com/watch?v=LSHZ_b05W7o

 

 

흥미로운점은 AI는 인간의 창조성을 위협하려는 것, 경쟁자가 아니라 인간의 창의성을 돕는 도구, 협업자의 역할을 해준다는 것 입니다. AI의 무궁무진한 발전이 인간을 위협하기보다는 인간에게 많은 도움을 가져올 것으로 보입니다.

 

 

## 참고자료

https://www.flow-machines.com/

https://av.watch.impress.co.jp/docs/series/dal/1178759.html

데이터를 그냥 사용할 수 있으면 정말 좋겠지만 실제 데이터는 클린징을 거쳐야 분석에 사용될 수 있는 경우가 많습니다. 이번 시간에는 결측치와 이상치를 정제하는 방법을 알아보겠습니다.

1. 결측치 정제하기

결측치란 누락된 값, 비어 있는 값, NULL Data 를 의미합니다. 실제 데이터는 데이터 수집 과정에서 발생한 오류 등으로 인해 결측치가 포함되어 있는 경우가 많기 때문에 이 결측치를 정제하는 과정을 거쳐야만 함수 사용에 문제가 발생하지 않고 분석 결과에 왜곡이 없습니다.

 

 

Data Download

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/sample_NoNA.csv

 

ark1st/Doit_R_ARKS_CODE

Do it R 학습 및 블로그 작성에 있어서 가공한 데이터와 코드를 업로드 하는 공간 입니다. - ark1st/Doit_R_ARKS_CODE

github.com

 

 

 

결측치 실습에는 mpg 데이터 중 class, cty, hwy만 뽑아 임의로 수정한 파일을 실습에 사용하겠습니다.

sample.csv를 다운로드 하여 불러오기 합니다.

mpg_sample <- read.csv("sample_NoNA.csv")

 

1.1. 결측치 확인하기

View(mpg_sample)로 데이터를 확인해 보니 빠진 데이터들이 존재 합니다. R에서는 결측치를 대문자 NA로 표시하는 것을 알 수 있습니다.

View(mpg_sample)

 

결측치를 정제하기 위해서는 결측치가 들어 있는지 확인해야 합니다. 결측치를 확인하기 위해서는 is.na()를 사용합니다. 혹은 is.na()table() 에 적용하면 데이터에 결측치가 몇 개 들어있는지 출력해 줍니다.

is.na(mpg_sample) #결측치 전체 출력 (결과는 생략)
table(is.na(mpg_sample)) #결측치 테이블 출력

## FALSE  TRUE 
##  689    13 

위 TRUE 빈도에서 13개의 결측치가 확인되었습니다.

 

결측치를 정제하기 위해서는 데이터 전체보다는 구체적으로 어느 변수에 결측치가 있는지 확인하는 것이 좋습니다. table(is.na()에 변수명까지 지정하면 해당하는 변수에 결측치가 몇 개 있는지 반환하여 줍니다.

table(is.na(mpg_sample$cty))

## FALSE  TRUE 
##  226     8 

cty 변수에는 결측치가 8개 있는 것으로 확인됩니다. 이때 이 결측치가 포함된 상태 그대로 함수를 적용하여 데이터 분석을 한다면 오류가 발생하거나 왜곡된 값이 출력됩니다.

av = mean(mpg_sample$cty)
av

## [1] NA 

 

1.2. 결측치 제거하기

결측치를 제거하기 위해서 filter()is.na()를 적용해 보겠습니다. cty 변수를 기준으로 결측치를 제거해 보겠습니다.

library(dyplr)
mpg_Nona <- mpg_sample %>% filter(!is.na(cty))

 

여러 변수 동시에 결측치를 제거하려면 논리 연산자 & 를 사용합니다.

mpg_Nona2 <- mpg_sample %>% filter(!is.na(cty) & is.na(hwy))

 


 

데이터 프레임 전체의 결측치를 제거해 주는 함수도 있습니다. na.omit()을 이용하면 변수를 지정하지 않고도 결측치가 있는 행을 제거할 수 있습니다.

mpg_noNa3 <- na.omit(mpg_sample)

 


함수에서 지원하는 파라미터를 활용해도 됩니다. 여러 함수들이 결측치를 제외하고 연산을 수행해 주는 기능을 가지고 있습니다. na.rmT로 설정하면 결측치를 제외하고 함수 연산을 수행합니다.

mean(mpg_sample, na.rm = 'T')

 


데이터가 큰 경우에는 결측치를 제거하고 분석해도 문제가 없습니다. 그러나 데이터가 작고 결측치가 많은 경우에는 결측치를 모두 제거하면 데이터가 손실되어 분석 결과가 왜곡됩니다. 그래서 결측치를 다른 값으로 대체하여 연산하기도 하는데 이것을 결측치 대체법이라고 합니다. 결측치를 대체할 때에는 평균이나 최빈값 등의 대표값을 대체하거나 결측치의 예측값을 추정하여 대체할 수 있습니다.

그러나 지금은 바로 결측치를 대체할 수 없습니다. 왜냐하면 지금의 데이터 상태로는 평균을 구하면 엄청난 왜곡이 있기 때문입니다.

 

2. 이상치 정제하기

mpg_sample 데이터를 확인해 보면 9999 등의 값이 들어 있는 것을 확인할 수 있습니다. 이렇듯 정상 범주에서 크게 벗어난 값을 이상치라고 합니다. 데이터를 수집할 때 오류가 발생하였거나 굉장히 드물게 극단적인 값이 나타날 수도 있습니다. 이러한 이상치가 포함되어 있으면 분석 결과가 왜곡되기 때문에 분석에 앞서 이상치를 제거해야 합니다.

 

2.1. 논리적으로 존재할 수 없는 경우

이 경우는 대부분 범주형 변수에서 볼 수 있는 경우입니다. 성별의 경우 남성은 1, 여성은 2로 설정 되어 있을 때 3이라는 값이 들어 있거나, 논리값 T, F로 결정된 경우에 이상한 값이 들어 있는 경우입니다. 혹은 연속형 변수에서 문자 값이 들어있다거나 하는 경우에도 논리적으로 존재할 수 없는 경우에 해당됩니다.

이 경우에는 table()로 이상치를 확인한 후에 ifelse() 를 사용하여 결측치로 바꾸어 줍니다.

data2 <- ifelse(data$sex == 3, NA, data$sex)

 

2.2. 극단적인 값

논리적으로 존재할 수는 있지만 극단적으로 크거나 작은 값을 극단치라고 합니다. 주로 연속형 변수에서 나타날 수 있습니다. 예를 들어 몸무게 변수에 200kg의 값이 들어 있다면 그것이 논리적으로 존재할 수는 있지만 너무 극단적인 값이기 때문에 분석 결과가 왜곡될 수도 있습니다.

이때에는 정상 범위를 판단하여 정상 범위에서 벗어나는 값을 삭제하여 극단치를 제거합니다. 이때 정상치를 선정하는 기준이 정말 중요합니다. 이 정상치를 선정할 때 납득할 만한 근거가 있어야 통계에는 신빙성이 생기기 때문입니다.

우리는 boxplot 그래프를 이용해서 중심에서 크게 벗어난 값을 극단치로 간주하고 제거하는 실습을 해 보겠습니다.

 

boxplot(mpg_sample$cty)

 

여기서 각 항목이 의미하는 내용입니다.

상자그림 설명
상자 아래 세로 점선 아랫수염 하위 0 ~ 25% 내에 해당하는 값
상자 밑면 1사분위수(Q1) 하위 25% 위치 값
상자 내 굵은 선 2사분위수(Q2) 하위 50% 위치 값(중앙값)
상자 윗면 3사분위수(Q3) 하위 75% 위치 값
상자 위 세로 점선 윗수염 하위 75 ~ 100%내에 해당하는 값
상자 밖 가로선 극단치 경계 Q1, Q3 밖 1.5 IQR 내 최댓값
상자 밖 점 표식 극단치 Q1, Q3 밖 1.5 IQR 내 벗어난 값

 

이때 이것을 수치값으로 확인하고 싶으면 함수 뒤에 $stats 를 삽입하면 됩니다.

boxplot(mpg_sample$cty)$stats
boxplot(mpg_sample$hwy)$stats

 

정상 범위를 파악한 후 이 범위를 벗어난 값을 결측 처리합니다.

mpg_sample$cty <- ifelse(mpg_sample$cty < 9 | mpg_sample$cty > 26, NA, mpg_sample$cty)
mpg_sample$hwy <- ifelse(mpg_sample$hwy < 9 | mpg_sample$hwy > 26, NA, mpg_sample$hwy)

 

다시 평균을 구해봅시다.

meancty <- mean(mpg_sample$cty)

 

1.3. 결측치 대체하기

결측치를 정상적인 평균값으로 대체할 수 있게 되었기 때문에 결측치를 대체하여 보겠습니다.

mpg_sample$cty <- ifelse(is.na(mpg_sample$cty),meancty, mpg_sample$cty)

 

 

Source Code

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/NA_Outl

 

// 참고자료

김영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱,

2019 이영호, "확률과통계" 가천대학교, 2019.03.21

'Programming > R' 카테고리의 다른 글

텍스트 마이닝 - KoNLP  (0) 2019.05.20
그래프 만들기  (0) 2019.04.30
데이터 전처리  (0) 2019.04.14
변수 조작하기  (0) 2019.04.10
데이터 파악하기  (0) 2019.04.09

주어진 데이터를 원하는 형태로 변형하려면 R에서 제공하는 내장 함수들을 사용할 수도 있습니다. 그러나 R에서 제공하는 내장 함수보다 더 편리하게 데이터를 변형하기 위해서 dplyr 패키지를 사용합니다.

 

쉽게 배우는 R데이터 분석 에서는 자주 사용하는 8개의 함수를 제시하였습니다.

함수 기능
filter() 행 추출
select() 열(변수) 추출
arrange() 정렬
mutate() 변수 추가
summarise() 통계치 산출
group_by() 집단별로 나누기
left_join() 데이터 합치기 (열)
bind_rows() 데이터 합치기 (행)

 

dplyr 함수는 데이터 프레임 변수 뒤에 %>% 기호 (파이프 연산자) 를 사용해서 함수들을 연결하여 함수를 적용할 수 있습니다. %>% 기호는 R Studio 에서는 Ctrl + Shift + M 을 누르면 삽입할 수 있습니다.

Do it R에서 제공하는 csv_exam 파일을 활용하여 실습하여 보도록 하겠습니다.

library(dplyr)
exam <- read.csv("csv_exam.csv") 

 

1. 조건에 맞는 데이터 추출하기 (행)

전에 배웠던 ifelse로도 같은 역할을 할 수 있습니다. 그러나 dplyr의 filter() 함수를 사용하면 더 간편하게 원하는 데이터를 추출해 낼 수 있습니다.

1반의 학생들의 데이터만 추출해 보겠습니다.

exam %>% filter(class == 1)

 

2반이 아닌 학생들의 데이터를 추출하려면 같지 않다!= 기호를 사용하여 추출할 수 있습니다.

exam %>% filter(class != 2)

 

초과, 미만, 이상, 이하도 동일하게 기호를 사용하면 됩니다. 영어 점수가 60점 이상인 경우만을 추출해 보겠습니다.

exam %>% filter(english >= 60)

 

여러 조건을 동시에 충족하게 하려면 그리고를 의미하는 논리 연산자 & 를 사용하면 됩니다.

exam %>% filter(english >= 60 & math >= 60)

 

여러 조건 중 하나를 충족하게 하려면 또는을 의미하는 | 기호를 사용하면 됩니다.

exam %>% filter(english >= 60 | math >= 60)

 

매치 연산자 %in% 을 사용하여 변수의 값이 지정된 조건에 해당되는지 한번에 확인할 수도 있습니다.

1, 3, 5반만 추출

exam %>% filter(class %in% c(1,3,5))

 

추출한 행으로 데이터를 만들수도 있습니다.

higher_60 <- exam %>% filter(english >= 60 | math >= 60)

 

2. 필요한 변수만 추출하기 (열)

dplyr 함수의 select() 함수는 필요한 열을 추출할 수 있습니다.

exam %>% select(math) # math 열만 추출

 

여러 열을 추출하려면 ,를 활용하여 변수명을 나열하면 됩니다.

exam %>% select(math,english)

 

변수를 제외하려면 빼기 기호 - 를 사용하면 됩니다.

exam %>% select(-math) #math 열 제외하고

 

3. 함수 조합하기

dplyr 함수는 파이프 연산자 %>% 를 이용해 조합할 수 있습니다.

exam %>% 
   filter(class == 1) %>% 
   select(math)

 

4. 정렬하기

arrange()를 이용하여 데이터를 원하는 순서로 정렬할 수있습니다.

1) 오름차순으로 정리하기

arrange() 에 기준으로 삼을 변수를 입력하면 오름차순으로 정렬됩니다.

exam %>% arrange(math)

 

2) 내림차순으로 정리하기

arrange() 함수 내에 desc() 함수를 적용하면 내림차순으로 정렬할 수 있습니다.

exam %>% arrange(desc(math))

 

5. 파생변수 추가하기

mutate() 함수를 사용하면 기존 데이터에 파생변수를 보다 더 쉽게 만들 수 있습니다.

exam %>% 
  mutate(total = math + english + science)

 

mutate()에서도 ifelse()를 적용하여 연속형 변수를 범주화 할 수 있습니다.

exam %>% 
  mutate(test = ifelse(science >= 60, "p", "f"))

 

6. 집단별로 요약 통계량 내기

group_by() 와 summarise()를 사용하면 집단별로 요약 통계량을 파악할 수 있습니다.

exam %>% 
    group_by(class) %>%    #class 로 나누기
    summarise(mean_math = mean(math))    #class 별 평균

summarise() 함수 안에는 연속형 변수만 들어갈 수 있습니다.

 

7. 데이터 합치기

1) 열 데이터 합치기

left_join()을 사용하면 데이터의 행을 합칠 수 있습니다. 변수를 추가한다고 볼 수 있습니다. by = 파라미터에서 기준으로 삼을 변수명을 지정해 줄 수 있습니다.

test1 <- data.frame(id = c(1,2,3,4,5),
                    midterm = c(60,80,70,90,85))

test2 <- data.frame(id = c(1,2,3,4,5),
                    final = c(60,80,70,90,85))

total <- left_join(test1, test2, by = "id") #id를 기준으로 합친다.

 

2) 행 데이터 합치기

bind_rows()를 사용하여 행 데이터를 합칠 수 있습니다. 데이터의 양이 늘어난다고 볼 수 있습니다.

group_a <- data.frame(id = c(1,2,3,4,5),
                    test = c(60,80,70,90,85))

group_b <- data.frame(id = c(6,7,8,9,10),
                    test = c(70,83,65,95,80))

group_all <- bind_rows(group_a, group_b)

 

Source Code

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/data_Pretreatment

 

// 참고자료

김영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱,

2019 이영호, "확률과통계" 가천대학교, 2019.03.21

'Programming > R' 카테고리의 다른 글

그래프 만들기  (0) 2019.04.30
데이터 정제하기 (데이터 클린징)  (0) 2019.04.15
변수 조작하기  (0) 2019.04.10
데이터 파악하기  (0) 2019.04.09
외부 데이터로 데이터프레임 만들기  (0) 2019.03.30

Do it R 에서 제공하는 분석 도전 문제 풀이 입니다. 123쪽의 문제 입니다. ggplot2의 midwest 데이터를 사용하여 데이터 분석을 실습하는 문제 입니다. midwest는 미국 동북중부 437개 지역의 인구 통계 정보를 담고 있습니다.

 

먼저 문제를 풀기 전에 필요한 패키지를 불러오겠습니다. 우리는 변수의 이름을 바꿔야 하므로 dplyr 패키지를 불러와야 하고 ggplot2 패키지 내의 데이터를 사용하기 때문에 ggplot2 패키지를 불러옵니다. 그 후 데이터 프레임을 만듭니다.

library(dplyr)
library(ggplot2)
#데이터 프레임 불러오기
midwest_raw<-as.data.frame(ggplot2::midwest)

 

1. ggplot2의 midwest 데이터를 데이터 프레임 형태로 불러온 다음 데이터의 특징을 파악하세요.

데이터를 불러왔으면 가장 먼저 데이터 프레임의 복사본을 생성하는 것이 좋습니다. 변수를 가공하면서 실수 등으로 데이터가 손실될 수 있기 때문입니다. 1번 문제는 데이터의 특징을 파악하는 문제 입니다. str() 함수와 View() 함수로 데이터를 간략히 파악하여 보았습니다. summrary() 함수나 head() 함수 등을 사용하여 파악할 수도 있습니다.

#데이터 프레임의 복사본 생성하기
midwest_new<-midwest_raw

#1번 문제
str(midwest_new)
View(midwest_new)

 

2. poptotal(전체인구) 변수를 total로, popasian(아시안 인구) 변수를 asian으로 수정하세요.

rename() 함수를 사용해서 변수의 이름을 바꿀 수 있습니다.

#2번 문제
midwest_new <- rename(midwest_new, total=poptotal)
midwest_new <- rename(midwest_new, asian=popasian)

 

3. total, asian 변수를 이용해 '전체 인구 대비 아시아 인구 백분율' 파생변수를 만들고, 히스토그램을 만들어 도시들이 어떻게 분포하는지 살펴보세요.

파생 변수를 만들고 hist() 함수를 이용하여 히스토그램을 출력합니다.

#3번 문제
midwest_new$percasian <- (midwest_new$asian / midwest_new$total) * 100
hist(midwest_new$percasian)

 

4. 아시아 인구 백분율 전체 평균을 구하고, 평균을 초과하면 "large", 그 외에는 "small"을 부여하는 파생변수를 만들어 보세요.

평균을 구하고 ifelse() 함수를 이용하여 파생변수를 만듭니다.

#4번 문제
percasian_mean <- mean(midwest_new$percasian)
percasian_mean
## [1] 0.4872462
midwest_new$mean <- ifelse(midwest_new$percasian > percasian_mean, "large", "small")

5. "large"와 "small"에 해당하는 지역이 얼마나 되는지 빈도표와 빈도 막대 그래프를 만들어 확인해 보세요.

#5번 문제
table(midwest_new$mean)
## large small 
##  119   318 
qplot(midwest_new$mean)

Source code

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/midwest_123p

 

 

// 참고자료

영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019

이영호, "확률과통계"  가천대학교, 2019.03.21

'Study > Data Mining' 카테고리의 다른 글

통계적 가설 검정  (0) 2019.05.31
Do it R 분석 도전 (midwest) - 160  (0) 2019.04.17
Kaggle  (0) 2019.03.15
R language  (0) 2019.03.15
EDA (탐색적 데이터 분석)  (0) 2019.03.14

1. 변수명 바꾸기

데이터의 특징 파악 이후, 분석 시 변수를 기억하기 편하도록 변수명을 바꾸어 주는 작업을 해 주어야 합니다.

패키지 설치

변수명을 바꿀 때에는 R의 패키지인 dplyr 패키지 내의 rename() 함수를 사용합니다. 패키지를 설치하고 불러옵니다.

install.packages("dplyr")
library(dplyr)

 

데이터 프레임 복사본 만들기

이번에도 실습 데이터로 ggplot2에 내장된 mpg데이터를 사용하겠습니다. 데이터 분석을 하기 위해 변수를 가공해야 할 때는 원본 데이터를 직접 사용하는 것 보다는 언제든 원본으로 되돌릴 수 있도록 복사본을 만들어 사용하는 습관을 들이는 것이 좋습니다.

mpg_raw <- ggplot2::mpg
mpg_new <- mpg_raw

 

변수명 바꾸기

복사본을 생성한 후 rename()을 사용하여 변수명을 바꿔보겠습니다. mpg 데이터의 hwy 변수는 고속도로 연비를 나타내는 변수 입니다. 이 변수를 highway 라는 변수명으로 바꾸어 보겠습니다. 또한 cty 변수는 도시 연비를 나타내는 변수 입니다. 이 변수를 city 라는 변수명으로 바꾸어 보겠습니다.

mpg_new <- rename(mpg_new, highway = hwy)
mpg_new <- rename(mpg_new, city = cty)
head(mpg_new)

# A tibble: 6 x 11
#  manufacturer model displ  year   cyl trans      drv     city highway fl    class  
#  <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int>   <int> <chr> <chr>  
# 1 audi         a4      1.8  1999     4 auto(l5)   f        18      29 p     compact
# 2 audi         a4      1.8  1999     4 manual(m5) f        21      29 p     compact
# 3 audi         a4      2    2008     4 manual(m6) f        20      31 p     compact
# 4 audi         a4      2    2008     4 auto(av)   f        21      30 p     compact
# 5 audi         a4      2.8  1999     6 auto(l5)   f        16      26 p     compact
# 6 audi         a4      2.8  1999     6 manual(m5) f        18      26 p     compact

 

2. 파생변수 만들기

데이터에 들어 있는 변수만 이용하여 분석할 수도 있지만 변수를 조합하여 새 변수를 만들고 이 변수들을 분석하는 경우도 많습니다. 또한 연속형 변수를 범주형의 형태로 바꾸어 범주형에서 사용되는 빈도분석 등의 분석 기법을 적용할 수도 있습니다. 이번에도 mpg 데이터를 그대로 사용 하여 진행하겠습니다.

mpg 데이터 내에는 2개의 연비 변수가 있었습니다. 도시 연비를 나타내는 cty 변수와 고속도로 연비를 나타내는 hwy 변수 입니다. 전의 실습에서 cty는 city로, hwy는 highway로 이름을 바꾸었습니다. 이 두 변수의 평균을 내어 통합 연비 변수를 추가하여 보겠습니다.

mpg_new$total <- (mpg_new$city + mpg_new$highhway)/2
head(mpg_new)
# A tibble: 6 x 12
#  manufacturer model displ  year   cyl trans     drv   city highway fl   class    total
#  <chr>      <chr> <dbl> <int> <int> <chr>      <chr> <int>   <int> <chr> <chr>   <dbl>
# 1 audi       a4      1.8  1999     4 auto(l5)   f        18      29 p     compact  23.5
# 2 audi       a4      1.8  1999     4 manual(m5) f        21      29 p     compact  25  
# 3 audi       a4      2    2008     4 manual(m6) f        20      31 p     compact  25.5
# 4 audi       a4      2    2008     4 auto(av)   f        21      30 p     compact  25.5
# 5 audi       a4      2.8  1999     6 auto(l5)   f        16      26 p     compact  21  
# 6 audi       a4      2.8  1999     6 manual(m5) f        18      26 p     compact  22  

추가된 변수의 평균을 구해보겠습니다.

mpg_avg <- mean(mpg_new$total)
mpg_avg
# [1] 20.14957

 

조건문을 사용하여 파생변수 만들기

변수를 조합한 파생변수를 만들 수도 있지만 조건에 따라서 각기 다른 값을 반환시켜 주는 조건문 함수를 이용하여 파생 변수를 만들 수도 있습니다. 이 작업은 연속형 변수의 범주화 작업이라고 말할 수 있습니다. 연속형 변수를 일정한 기준에 따라 범주화 함으로써 범주형 변수에서 사용할 수 있는 빈도 분석등의 기법을 적용할 수 있게 됩니다.

여기서 주의해야 할 점은 기준값을 정할 때 데이터를 나누는 기준이 합당해야만 하다는 점을 염두에 두고 작업해야만 합니다.

R에서의 조건문 함수는 여러 종류가 있지만 가장 많이 사용되는 함수는 ifelse() 함수 입니다. 함수의 원형을 살펴 보겠습니다.

ifelse(test, yes, no)

여기서 test에는 조건이 위치합니다. 조건이 참(T) 일때는 yes 위치의 값이 return 되고, 조건이 거짓(F) 일때는 no 위치의 값이 return 됩니다.

작업해 놓았던 mpg 데이터로 계속 이어서 실습 하겠습니다. mpg 데이터의 total 연비 변수를 만들었고, 이것의 평균을 구해 보았습니다. 여기서 total 값이 평균값 이상일 때 pass, 평균 이하일 때 fail을 부여하여 보겠습니다.

mpg_new$test <- ifelse(mpg_new$total >= mpg_avg , "pass", "fail")
head(mpg_new)
# A tibble: 6 x 13
#  manufacturer model displ  year  cyl trans   drv  city highway fl    class   total test 
# <chr>   <chr> <dbl> <int> <int> <chr>     <chr> <int>   <int> <chr> <chr>   <dbl> <chr>
# 1 audi     a4     1.8  1999     4 auto(l5)   f      18      29 p     compact  23.5 pass 
# 2 audi     a4     1.8  1999     4 manual(m5) f      21      29 p     compact  25   pass
# 3 audi     a4     2    2008     4 manual(m6) f      20      31 p     compact  25.5 pass 
# 4 audi     a4     2    2008     4 auto(av)   f      21      30 p     compact  25.5 pass
# 5 audi     a4     2.8  1999     6 auto(l5)   f      16      26 p     compact  21   pass 
# 6 audi     a4     2.8  1999     6 manual(m5) f      18      26 p     compact  22   pass 

 

중첩 조건문 사용하기

3 개 이상의 등급으로 표시하고 싶을 때에는 ifelse() 안에 ifelse() 를 중첩할 수 있습니다.

mpg_new$test <- ifelse(mpg_new$total >= mpg_avg , "A",
                      ifelse(mpg_new$total >= 15 , "B", "C"))

이때 ifelse 문은 괄호가 닫힐 때까지 유효하기 때문에 보기 좋게 개행을 이용해서 정리해 줄 수도 있습니다.

 

 

Source code

https://github.com/ark1st/Doit_R_ARKS_CODE/blob/master/var_Manu

불러오는 중입니다...

 

 

// 참고자료

영우, 『쉽게 배우는 R 데이터 분석』, 이지스 퍼블리싱, 2019

이영호, "확률과통계"  가천대학교, 2019.03.21

 

'Programming > R' 카테고리의 다른 글

데이터 정제하기 (데이터 클린징)  (0) 2019.04.15
데이터 전처리  (0) 2019.04.14
데이터 파악하기  (0) 2019.04.09
외부 데이터로 데이터프레임 만들기  (0) 2019.03.30
데이터 프레임 만들기  (0) 2019.03.30

+ Recent posts