https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=257831838&start=slayer

 

난생처음 R 코딩 & 데이터 분석

168개의 코드 예제를 기반으로 프로그래밍 기초부터 데이터 분석까지 다루며, R에서 사용하는 문법을 최대한 쉽게 설명하고 있다. 또한 4단계 반복 학습 시스템을 통해 프로그래밍 감각을 제대로

www.aladin.co.kr

01 carData 패키지의 MplsStops 데이터셋은 차량이나 사람의 수상한 멈춤 행동에 대한 미니애폴리스 경찰의 보고 데이터를 저장하고 있다. 다음의 물음에 답하기 위한 R코드를 작성하시오.

# 패키지 설치
install.packages("carData")

# carData 패키지 로드
library(carData)

# MplsStops 데이터셋 로드
data("MplsStops")

 

(1) 수상한 행동을 한 행인의 인종 비율(race)을 원그래프로 나타내시오.

# race 열 벡터
race <- MplsStops$race

# race 도수분포
freq_race <- table(race)

# 원 그래프
pie(freq_race,
    main='수상한 행동을 한 행인의 인종 비율',
    )

 

(2) 수상한 멈춤인지 교통신호에 의한 멈춤인지(problem)의 비율을 원그래프로 나타내시오. 단, 수상한 멈춤(suspicious)은 빨간색으로, 교통신호에 의한 멈춤(traffic)은 파란색으로 나타낸다.

# problem 열 벡터
problem <- MplsStops$problem

# problem 도수분포
freq_problem <- table(problem)

# 원 그래프
pie(freq_problem,
    main='멈춤 비율',
    col=c('red', 'blue')
    )

 

(3) 수상한 멈춤을 한 사람에 대한 수색여부(personSearch) 비율을 원그래프로 나타내시오.

# personSearch 열 벡터
ps <- MplsStops$personSearch

# personSearch 도수분포
freq_ps <- table(ps)

# 원 그래프
pie(freq_ps,
    main='수색여부 비율'
    )

 

(4) 수상한 멈춤을 한 사람의 성별(gender) 비율을 3차원 원그래프로 나타내시오. 단, 파이의 색을 남성은 오렌지색, 여성은 초록색, 기타는 노란색으로 지정한다.

# plotrix 패키지 설치
install.packages('plotrix')

# plotrix 패키지 로드
library(plotrix)

# gender 열 벡터
gender <- MplsStops$gender

# gender 도수분포
freq_gender <- table(gender)

# 3D 원 그래프
pie3D(freq_gender,
      main='성별 비율',
      labels=c('Female', 'Male', 'Unknown'), # 파이별 레이블 명
      labelcex=1.0, # 레이블 폰트 크기
      col=c('green', 'orange', 'yellow')
      )

02 DAAG 패키지의 greatLakes 데이터셋은 1918~2009년 사시의 4개 호수에 대한 수위 측정 데이터를 저장하고 있다. 다음과 같이 ds를 생성한 뒤 다음 물음에 답하기 위한 R 코드를 작성하시오.

# 패키지 로드
library(DAAG)

# greatLakes 데이터셋 로드
data("greatLakes")

ds <- data.frame(year=1918:2009, greatLakes)

 

(1) Erie호의 연도별 수위 변화를 선그래프로 나타내시오.

# year 열 벡터
year <- ds$year

# Erie 호수 열 벡터
erie <- ds$Erie

# 선 그래프
plot(year, # x data
     erie, # y data
     main='Erie 호수의 연도별 수위 변화',
     type='l', # 선 그래프 종류
     xlab='연도',
     ylab='수위'
     )

 

(2) michHuron호의 수위 변화를 다음과 같은 모양의 그래프로 작성하시오.

# year 열 벡터
year <- ds$year

# michHuron 호수 열 벡터
mh <- ds$michHuron

# 선 그래프
plot(year, # x data
     mh, # y data
     main='michHuron 호 수위',
     type='b', # 선 그래프 종류
     lty=5, # 선의 종류
     col='red',
     xlab='연도',
     ylab='수위'
     )

 

(3) Erie, michHuron, StClair 호수의 연도별 수위 변화를 하나의 그래프로 작성하되 호수별로 선의 색을 다르게 하시오(y축 값의 범위는 173~177.5, 선의 종류(type)는 'b'로 설정).

# year 열 벡터
year <- ds$year

# 각 호수의 열 벡터
erie <- ds$Erie
mh <- ds$michHuron
sc <- ds$StClair

plot(year, # x data
     erie, # y data
     main='연도별 수위 변화',
     type='b', 
     col='red',
     xlab='연도',
     ylab='수위',
     ylim=c(173, 177.5) # y값 범위
     )

lines(year, # x data
      mh, # y data
      type='b',
      col='green')

lines(year, # x data
      sc, # y data
      type='b',
      col='blue')

03 DAAG 패키지의 cfseal 데이터셋은 상업적 포획에 의해 죽은 물개에 대한 데이터를 저장하고 있다. 다음 물음에 답하기 위한 R 코드를 작성하시오.

# DAAG 패키지 설치
install.packages('DAAG')

# DAAG 패키지 로드
library(DAAG)

# cfseal 데이터셋 로드
data("cfseal")

 

(1) 물개의 체중(weight) 분포를 상자그림으로 나타내시오.

# weight 열 벡터
weight <- cfseal$weight

# 상자 그림
boxplot(weight,
        main='물개 체중'
        )

 

(2) 물개의 심장무게(heart) 분포에서 특이값을 찾아 출력하시오.

# heart 열 벡터
heart <- cfseal$heart

# 특이값 
print(boxplot.stats(heart)$out)

 

(3) 물개를 두 그룹으로 나누되 나이가 평균보다 적은 경우는 'young'으로, 평균 이상인 경우는 'old'로 지정한다. 그룹에 따라 무개의 몸무게(weight) 분포를 상자그림으로 나타내시오. 단, 상자의 색은 'old' 인 경우 오렌지색, 'young' 인 경우 초록색으로 한다.

  • case 1
# age, weight 열 벡터
age <- cfseal$age
weight <- cfseal$weight

# 물개 평균 나이
mean_age <- mean(age, na.rm = TRUE)

# 두 그룹
group <- cfseal$group <- ifelse(age < mean_age, 'young', 'old')

boxplot(weight~group,
        main='물개 몸무게 분포',
        col=c('orange', 'green')
        )
  • case 2
# 물개 평균 나이
mean_age <- mean(cfseal$age, na.rm = TRUE)

# 두 그룹
cfseal$group <- ifelse(cfseal$age < mean_age, 'young', 'old')

boxplot(weight~group,
        data=cfseal,
        main='물개 몸무게 분포',
        col=c('orange', 'green')
        )

 

(4) 물개를 세 그룹으로 나누되 몸무게가 Q1 미만인 경우는 'Low', Q1~Q3 사이인 경우는 'middle', Q3를 초과하는 경우는 'high'로 한다. 그룹에 따라 물개의 위(stomach) 무게 분포를 상자 그림으로 나타내시오.

# 몸무게 4분위수
q_weight <- quantile(cfseal$weight, na.rm = TRUE)

# 분위수 그룹
cfseal$group <- ifelse(cfseal$weight < q_weight[2], 'Low',
                       ifelse(cfseal$weight <= q_weight[4], 'middle', 'high'))

boxplot(stomach~group,
        data=cfseal,
        main='위 무게 분포',
        col=c('red', 'green', 'blue')
        )

04 DAAG 패키지의 greatLakes 데이터셋은 4개 호수의 수위 측정 데이터를 저장하고 있다. 다음과 같이 ds를 생성한 뒤 다음 물음에 답하기 위한 R 코드를 작성하시오.

# DAAG 패키지 설치 및 로드
install.packages('DAAG')
library(DAAG)

# greatLakes 데이터셋 로드
data("greatLakes")

ds <- data.frame(greatLakes)

 

(1) Erie호와 michHuron호의 수위 분포를 산점도로 나타내시오.

# 산점도
plot(ds$Erie, # x축
     ds$michHuron, # y축
     main='수위 분포')

 

(2) 4개 호수의 수위를 다중 산점도로 나타내시오.

# 다중 산점도
plot(ds,
     main='수위 분포')

05 DAAG 패키지의 grog 데이터셋은 호주와 뉴질랜드의 주류 소비에 대한 데이터를 저장하고 있다. 다음과 같이 데이터셋을 불러온 뒤, 다음 물음에 답하기 위한 R 코드를 작성하시오.

# DAAG 패키지 설치 및 로드
install.packages('DAAG')
library(DAAG)

# grog 데이터셋 로드
data("grog")

 

(1) 맥주(Beer)와 와인(Wine)에 대한 산점도를 작성하시오.

plot(grog$Beer,
     grog$Wine,
     main='Beer & Wine',
     xlab='Beer',
     ylab='Wine')

 

(2) 맥주(Beer), 와인(Wine), 스피릿(Spirit)에 대한 다중 산점도를 작성하되 점의 색을 호주는 빨간색, 뉴질랜드는 파란색으로 지정하시오. 그리고 나라에 따라 점의 모양도 다르게 하시오.

# 대상 데이터
ds <- grog[, 1:3]

# 그룹 확인
levels(grog$Country)

# 그룹 수치화
group <- as.numeric(grog$Country)

# 그룹 별 색상 및 점 모양
color <- c('red', 'blue')

# 다중 산점도
plot(ds,
     main='Beer & Wine & Spirit',
     pch=c(group), # 점 모양
     col=color[group] # 1: red, 2: blue
     )

+ Recent posts