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)