K-Digital Training

221202 | R 데이터 분석 / 예제모음

콩세 2022. 12. 5. 07:59

Q. 예제 1

변수 my_exam에 들어있는 데이터를 사용해서 4개의 변수를 추가로 만들고,

각각의 산점도, 밀도추정, 표준정규분포, n(평균,1), n(0, 표준편차), 실 분포도를 구하시오.

# Q.
#+ dataset: my_exam, 4개의 변수(db, java, japan, eng)
#+ 산점도, 밀도추정(density), 표준정규분포, n(평균,1), n(0,표준편차), 실 분포도

my_exam
names(my_exam)

db <- my_exam$database
jv <- my_exam$java
jp <- my_exam$japan
eng <- my_exam$eng

x11(); par(mfrow=c(4,6))



# db
# 산점도
plot(main="db_산점도",db)
# 밀도추정
plot(main="db_밀도추정",density((db)))
# 표준정규분포
mean(db);sd(db)

plot(db, dnorm(db), 
     main="db_n(0.1)-표준", type="l")
# n(평균,1)
plot(db, dnorm(db,56.123,1),
     main="db_mean:56.133 sd:1", type="b")
# n(0,표준편차)
plot(db, dnorm(db,0,19.595),
     main="db_mean:0 sd:19.595", type="b")
# 실 분포도
plot(db, dnorm(db,56.123,19.595),
     main="db_mean:56.123 sd:19.595", type="b")


# jv
# 산점도
plot(main="jv_산점도",jv)
# 밀도추정
plot(main="jv_밀도추정",density((jv)))
# 표준정규분포
mean(jv);sd(jv)
plot(jv, dnorm(jv), 
     main="db_n(0.1)-표준", type="l")
# n(평균,1)
plot(jv, dnorm(jv,84.533,1),
     main="db_mean:84.533 sd:1", type="b")
# n(0,표준편차)
plot(jv, dnorm(jv,0,12.173),
     main="db_mean:0 sd:12.173", type="b")
# 실 분포도
plot(jv, dnorm(jv,84.533,12.173),
     main="db_mean:84.533 sd:12.173", type="b")


# jp
# 산점도
plot(main="jp_산점도",jp)
# 밀도추정
plot(main="jp_밀도추정",density((jp)))
# 표준정규분포
mean(jp);sd(jp)
plot(jp, dnorm(jp), 
     main="db_n(0.1)-표준", type="l")
# n(평균,1)
plot(jp, dnorm(jp,75.766,1),
     main="db_mean:75.766 sd:1", type="b")
# n(0,표준편차)
plot(jp, dnorm(jp,0,14.246),
     main="db_mean:0 sd:14.246", type="b")
# 실 분포도
plot(jp, dnorm(jp,75.766,14.246),
     main="db_mean:75.766 sd:14.246", type="b")


# eng
# 산점도
plot(main="e_산점도",eng)
# 밀도추정
plot(main="e_밀도추정",density((eng)))
# 표준정규분포
mean(eng);sd(eng)
plot(eng, dnorm(eng), 
     main="db_n(0.1)-표준", type="l")
# n(평균,1)
plot(eng, dnorm(eng,62.9,1),
     main="db_mean:62.9 sd:1", type="b")
# n(0,표준편차)
plot(eng, dnorm(eng,0,24.329),
     main="db_mean:0 sd:24.329", type="b")
# 실 분포도
plot(eng, dnorm(eng,62.9,24.329),
     main="db_mean:62.9 sd:24.329", type="b")

답 :

 


 

Q. 예제 2

ggplot2::mpg 데이터셋을 활용하여 다음 요구사항을 해결하세요.

# Q. ggplot2::mpg 데이터셋을 활용하여 다음 요구사항을 해결하세요.

# 1) 다음과 같은 객체를 생성하게요.
# my_mpg (mpg 객체 복사본), f_cost(연료정보_new)
library(dplyr)

my_mpg <- ggplot2::mpg            # my_mpg
names(my_mpg)

f_cost <- data.frame(f = c("c", "d", "e", "p", "r", "electric"),
                     cost_f = c(2.35, 2.38, 2.11, 2.76, 2.22, 1.12),
                     stringsAsFactors = T)
names(f_cost)  # 위에서 f_cost라는 데이터프레임을 만들고, 그 안에 f, cost_f라는 열을 생성.

class(my_mpg)
class(f_cost)
dim(my_mpg)    # 234, 11
dim(f_cost)   #6, 2

unique(my_mpg$fl) %>% length()  # 5가지 종류
unique(f_cost$f) %>% length()   # 6가지 종류

my_mpg2 <- inner_join(f_cost, my_mpg,
          by=c("f" = "fl"))
dim(my_mpg2)  #234,12

my_mpg3 <- left_join(f_cost, my_mpg,
          by=c("f" = "fl"))
dim(my_mpg3)  #235,12

# 2) left_join()을 활용하여 my_mpg 객체에 cast_f 변수를 추가하세요.

# 3) left_join()가 제대로 적용되었는지 확인하기 위하여 다음 변수를 조회(10행만)하세요.
#+ model, class, cost_f
names(my_mpg3)

my_mpg3 %>%
  filter(f %in% c("c", "electric")) %>%
  select(model, class, f,  cost_f) %>%
  head(10)

 


 

Q. 예제 3

ggplot2::midwest dataset을 활용하여 다음 요청 사항을 해결하세요.

# Q. ggplot2::midwest dataset을 활용하여 다음 요청 사항을 해결하세요.
# 1) midwest의 복사본을 생성하여 "전체 인구 대비 미성년 인구 백분율" 파생변수를 추가하세요.
# 참고: 성인인구(popadults), 전체인구(poptotal)

midwest <- ggplot2::midwest
names(midwest)
midwest %>% View()

# 변수 <- (전체인구-성인인구)/전체인구*100

midwest2 <- midwest %>%
  mutate(nonage_r=(poptotal-popadults)/poptotal*100)

midwest2 %>% View()

#___________________________________________
midwest3 <- midwest
midwest3$nonage_r <- (midwest$poptotal-midwest$popadults)/midwest$poptotal*100
midwest3 %>% View()



# 2) 미성년 인구 백분율이 40~43%에 해당하는 지역(country)을 출력하세요.
# 출력: state, county, 미성년 인구 백분율(nonage_r)
midwest2 %>%
  select(state, county, nonage_r) %>%
  filter(nonage_r >=40 & nonage_r <=43)

# 방법2
midwest2 %>%
  select(state, county, nonage_r) %>%
  filter(between(nonage_r,40,43))



# 3) 미성년 비율에 대한 분류기준 등급(파생변수)을 추가하고, 각 등급에
# 해당하는 지역이 몇 개 있는지 확인하세요.
# 등급 : large(38%이상), middle(30~38% 미만), small(30% 미만)
midwest2$level <- ifelse(midwest2$nonage_r >= 38, "large",
                  ifelse(midwest2$nonage_r >= 30, "middle", "small"))

midwest2 %>% View()
table(midwest2$level)


# 4) 전체 인구 대비 아시아인 인구 백분율을 비교하여 하위 15개 지역에
# 대한 정보를 출력하세요.
# 출력: state(주), county(지역명), popasian(아시아 인구),
# poptotal(전체인구), 아시아인 인구 백분율
midwest2$asian_r <- midwest$popasian/midwest$poptotal*100
midwest2 %>% View()

midwest2 %>%
  select(state, county, asian_r) %>%
  arrange(asian_r) %>%
  head(15)

 


 

Q. 예제 4

ggplot2::mpg을 활용하여 다음 요청 사항을 해결하세요.

# Q. ggplot2::mpg 사용해서 문제풀기
#+ total((c+h)/2), test(22>=pass), 
#+ grade 파생변수
#+ 31(ex), 21(good), 15(normal), poor


search()
library(dplyr)

my_mpg <- ggplot2::mpg
names(my_mpg)

my_mpg$total <- (my_mpg$cty+my_mpg$hwy)/2
my_mpg$test <- ifelse(my_mpg$total>=22, "pass","fail")
my_mpg$grade <- ifelse(my_mpg$total>=31,"ex",
                       ifelse(my_mpg$total>=21,"good",
                              ifelse(my_mpg$total>=15,"normal","poor")))

my_mpg %>% View()