K-Digital Training

221129 | R 데이터 분석 / 분포 대칭성 - 왜도, 첨도 / 분포도 - plot, density() / R 예제

콩세 2022. 12. 2. 07:55

분포 대칭성

## 3. 분포 대칭성 ----

# 3-1. 왜도
#+ sk > 0 : 꼬리가 오른쪽.
#+ sk < 0 : 꼬리가 왼쪽.

install.packages("psych")

library(fBasics)

names(my_mpg)

skewness(my_mpg$cty)
skewness(my_mpg$cty, na.rm=T)      # NA가 있을 경우

#
library(psych)
skew(my_mpg$cty)



# 3-2. 첨도
# 왜도는 꼬리를 보고, 첨도는 머리를 보면 된다..

#+ kt > 0 : 뾰족하다 (nd보다)
#+ kt < 0 : 납작하다 (nd보다)

# fBasics
kurtosis(my_mpg$cty)              # nd보다 뾰족한거.

# psych
kurtosi(my_mpg$cty)
kurtosi(my_mpg$cty, na.rm=T)      # NA가 있을 경우

 


분포도

## 4. 분포도 ----
names(my_mpg)

?plot()

par(mfrow = c(2,2))  # plot이 2행 2열로 나옴


plot(my_mpg$cty, main="도심연비")   # plot 타이틀
plot(my_mpg$cty,
     main="도심연비", type="l")     # line으로
plot(my_mpg$cty,
     main="도심연비", type="h")     # 히스토그램으로
plot(my_mpg$cty, 
     main="도심연비", type="b")     # line, histo 둘 다


# smooth density (평활밀도도)
#+ density()  # 추정치

density(my_mpg$cty)
plot(density(my_mpg$cty),
     main="도심연비-평활밀도")


# 왜도와 첨도

# 왜도 (꼬리중심)
fBasics::skewness(my_mpg$cty)         # 0.7863773

# 첨도 (머리중심)
fBasics::kurtosis(my_mpg$cty)         # 1.430539

 


 

Q. 예제1 | 각 교과목에 대한 왜도 값에 부합하는 분포도를 그리시오.

 

# Q. 각 교과목에 대한 왜도 값에 부합하는 분포표를 그리시오.
# dts : ss_exam.csv

my_ss <- read.csv("dts/ss_exam.csv")
names(my_ss)

my_ss
plot(density(my_ss$database),
     main="db_sk -0.012", type = "l")
plot(density(my_ss$java),
     main="jv_sk -0.566", type = "l")
plot(density(my_ss$japan),
     main="jp_sk -0.742", type = "l")
plot(density(my_ss$eng),
     main="eng_sk -0.318", type = "l")

# 교수님 답
search()
library(fBasics)
library(dplyr)
?skewness()

sk <- my_exam %>%
  summarise(skewness(database),
            skewness(java),
            skewness(japan),
            skewness(eng))
sk <- round(sk,2)

kt <- my_exam %>%
  summarise(kurtosis(database),
            kurtosis(java),
            kurtosis(japan),
            kurtosis(eng))
kt <- round(kt,2)

#
sk
kt

#
plot(density(my_exam$database),
     main=paste("DB", "sk:",sk[1], "kt:",kt[1]))
plot(density(my_exam$java),
     main=paste("JAVA", "sk:",sk[2], "kt:",kt[2]))
plot(density(my_exam$japan),
     main=paste("JP", "sk:",sk[3], "kt:",kt[3]))
plot(density(my_exam$eng),
     main=paste("Eng", "sk:",sk[4], "kt:",kt[4]))

Q. 예제2 | 하기 요구사항에 충족되는 결과를 도출하세요.

# Q. 하기 요구사항에 충족하는 결과를 도출하세요.
# [dataset: ggplot2::mpg]
# 1. 각 제조사별, 구동방식별 평균-고속도로연비, 평균-도심연비, 차종대수를 조회하세요.

# [dataset : ss_exam 활용] # 추가적으로 SQL도 확인요청
# 2. 한 개 과목이 80점 이상인 인원 중 각 class별 java 평균을 출력하세요.
# 3. class가 2,4,5인 경우의 과목별 평균을 출력하세요. (2/4/5-전체 or 반별)

# 1번..
my_mpg <- ggplot2::mpg
names(my_mpg)

unique(my_mpg$manufacturer)

my_mpg %>%
  group_by(manufacturer, drv) %>%
  summarise(hwy=mean(hwy), cty=mean(cty), n())


# 1번 sql..
search()
library(sqldf)

sqldf("

      select manufacturer, drv, avg(hwy), avg(cty), count(*)
      from my_mpg
      group by manufacturer, drv
      
      ")


# 2번..
my_ss %>%
  filter(database >=80 | java >=80 | japan >=80 | eng >=80) %>%
  group_by(class) %>%
  summarise(mean(java))


# 3번..
my_exam %>%
  filter(class %in% c(2,4,5)) %>%
  group_by(class) %>%
  summarise(mean(database), mean(java), mean(japan), mean(eng))

# 3번을 eng로 내림차순
my_exam %>%
  filter(class %in% c(2,4,5)) %>%
  group_by(class) %>%
  summarise(db=mean(database), jv=mean(java), jp=mean(japan), eng=mean(eng)) %>%
  arrange(-eng)

Q. 예제3 | ggplot2::mpg dataset을 활용하여 다음 요구사항을 해결하세요.

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

# 1) mpg의 차종별(class) 도심연비(cty)의 평균을 구해보세요.
names(my_mpg)
my_mpg %>%
  group_by(class) %>%
  summarise(mean(cty))


# 2) 1번 output을 이용하여 차종별 평균도심연비, 최대연비, 최소연비를 조회하고
#    각 컬럼기준으로 정렬(내림차순)하여 연비(cty)기준으로 볼 때 어떤 차종을 선택하는 것이
#    보다 유리한지 확인하세요.
names(my_mpg)
my_mpg %>%
  group_by(class) %>%
  summarise(mean = mean(cty), max = max(cty), min = min(cty)) %>%
  arrange(-max)
# A : subcompact


# 3) 어떤 자동차 회사(manufacturer)의 평균 고속도로 연비(hwy)가 가장 높은지 확인하시고,
#    평균 hwy가 가장 높은 회사 5곳을 출력하세요.
my_mpg %>%
  group_by(manufacturer) %>%
  summarise(mean=mean(hwy)) %>%
  arrange(-mean) %>%               # honda의 평균 고속도로 연비가 가장 높다.
  head(5)                          # honda / volkswagen / hyundai / audi / pontiac


# 4) suv(class) 차종(model)을 가장 많이 생산하는 제조사 3곳을 출력하세요.
my_mpg %>%
  filter(class == "suv") %>%
  group_by(manufacturer) %>%
  summarise(n=n()) %>%
  arrange(-n) %>%
  head(3)


# 5) suv를 생산하는 제조사 중에서 평균도심연비가 가장 좋은 모델 5개를 출력하세요.
my_mpg %>%
  filter(class == "suv") %>%
  group_by(manufacturer) %>%
  summarise(mean=mean(cty)) %>%
  arrange(-mean) %>%
  head(5)