๊ธฐ์ ํต๊ณ(Descriptive Statistics)
๊ธฐ์ ํต๊ณ : ์๋ฃ๋ฅผ ์์ฝํ๋ ๊ธฐ์ด์ ์ธ ํต๊ณ๋, ๋ณ์์ ํน์ฑ ํ์
๋ฐ ๋ชจ์ง๋จ ์ ์ถ
๋ํฏ๊ฐ : ํ๊ท (Mean), ํฉ๊ณ(Sum), ์ค์์(Median), ์ต๋น์(mode), ์ฌ๋ถ์์(quartile) ๋ฑ
์ฐํฌ๋ : ๋ถ์ฐ(Variance), ํ์คํธ์ฐจ(Standard deviation), ์ต์๊ฐ(Minimum), ์ต๋๊ฐ(Maximum), ๋ฒ์(Range) ๋ฑ
๋น๋์นญ๋ : ์๋(Skewness), ์ฒจ๋(Kurtosis)
์ค์ตํ์ผ ๊ฐ์ ธ์ค๊ธฐ
setwd("C:/ITWILL/2_Rwork/data")
data = read.csv("descriptive.csv", header=TRUE)
head(data) # ๋ฐ์ดํฐ์
ํ์ธ
data Mart
resident gender age level cost type survey pass
๊ฑฐ์ฃผ์ง์ญ ์ฑ๋ณ ๋์ด ํ๋ ฅ์์ค ์ํ๋น ํ๊ต์ ํ ๋ง์กฑ๋ ํฉ๊ฒฉ์ฌ๋ถ
๋ช
๋ชฉ(1~3) ๋ช
๋ชฉ(1,2) ๋น์จ ์์ด(1,2,3) ๋น์จ ๋ช
๋ชฉ(1,2) ๋ฑ๊ฐ(5์ ) ๋ช
๋ชฉ(1,2)
* ์ธ๊ตฌํต๊ณํ๋ณ์ : ๊ฑฐ์ฃผ์ง์ญ, ์ฑ๋ณ, ๋์ด, ํ๋ ฅ์์ค
1. ์ฒ๋๋ณ ๊ธฐ์ ํต๊ณ๋
1) ๋ช
๋ชฉ/์์ด ์ฒ๋ ๋ณ์์ ๊ธฐ์ ํต๊ณ๋
๋ช
๋ชฉ์ ์๋ฏธ์๋ ์์น๋ก ํํ๋ ๋ณ์ - ์ฑ๋ณ(gender)
length(data$gender)
summary(data$gender) # ์ต์,์ต๋,์ค์์,ํ๊ท -์๋ฏธ์์
table(data$gender) # ๊ฐ ์ฑ๋ณ ๋น๋์ - outlier ํ์ธ-> 0, 5
data = subset(data,data$gender == 1 | data$gender == 2) # ์ฑ๋ณ outlier ์ ๊ฑฐ
x = table(data$gender) # ์ฑ๋ณ์ ๋ํ ๋น๋์ ์ ์ฅ
x # outlier ์ ๊ฑฐ ํ์ธ
barplot(x) # ๋ฒ์ฃผํ(๋ช
๋ชฉ/์์ด์ฒ๋) ์๊ฐํ -> ๋ง๋์ฐจํธ
prop.table(x) # ๋น์จ ๊ณ์ฐ : 0< x <1 ์ฌ์ด์ ๊ฐ
y = prop.table(x)
round(y*100, 2) #๋ฐฑ๋ถ์จ ์ ์ฉ(์์์ 2์๋ฆฌ)
2) ๋ฑ๊ฐ์ฒ๋ ๋ณ์์ ๊ธฐ์ ํต๊ณ๋
์์ฑ์ ๊ฐ๊ฒฉ์ด ์ผ์ ํ ๋ณ์(survey) - ๋ง์
/๋บ์
์ฐ์ฐ ๊ฐ๋ฅ
survey = data$survey
survey
summary(survey) # ๋ง์กฑ๋(5์ ์ฒ๋)์ธ ๊ฒฝ์ฐ ์๋ฏธ ์์
x1<-table(survey) # ๋น๋์
x1
hist(survey) # ๋ฑ๊ฐ์ฒ๋ ์๊ฐํ -> ํ์คํ ๊ทธ๋ฆผ
pie(x1)
3) ๋น์จ์ฒ๋ ๋ณ์์ ๊ธฐ์ ํต๊ณ๋ : cost ๋ณ์
summary(data$cost) # ์์ฝํต๊ณ๋ - ์๋ฏธ์์(mean) - 8.784
mean(data$cost) # NA
data$cost
๋ฐ์ดํฐ ์ ์ - ๊ฒฐ์ธก์น ์ ๊ฑฐ ๋ฐ outlier ์ ๊ฑฐ
plot(data$cost)
data = subset(data,data$cost >= 2 & data$cost <= 8) # ์ด์ ๊ธฐ์ค
cost๋ณ์ ์ถ์ถ
cost = data$cost
cost
2. ๋ํฏ๊ฐ
1) ํ๊ท (Mean)
mean(cost)
* ํ๊ท ์ด ๊ทน๋จ์น์ ์ํฅ์ ๋ฐ๋ ๊ฒฝ์ฐ -> ์ค์์(median) ๋์ฒด
2) ์ค์์(Median) : ์ ๋ ฌ -> ์ค์๊ฐ
median(cost) # 5.4
sort(cost) #์ค๋ฆ์ฐจ์ ์ ๋ ฌ
sort(cost, decreasing = TRUE)
์ค์์ ๊ตฌํ๊ธฐ
length(cost) #248
์ ์ฒด๊ธธ์ด ์ง์ = (n/2๋ฒ์งธ + n/2+1๋ฒ์งธ)/2
์ ์ฒด ๊ธธ์ด ํ์ = n/2๋ฒ์งธ
idx = length(cost)/2 #n/2๋ฒ์งธ ์์ธ
์ ๋ ฌ
cost_sort = sort(cost)
(cost_sort[idx] + cost_sort[idx+1])/2 #5.4
3) ์ต๋น์(mode) : ์ฐ์ํ๋ณ์ hist() ์ด์ฉ
hist(cost) #๊ฐ์ฅ ๋์ ๋ด์ ๊ณ๊ธ = 6.5
<์ต๋น์, ์ค์์, ํ๊ท ์ ๊ด๊ณ>
1) ์ต๋น์=์ค์์=ํ๊ท : ์ข์ฐ ๋์นญ
2) ์ต๋น์ > ์ค์์ > ํ๊ท : ์ค๋ฅธ์ชฝ ๊ธฐ์ธ์ด์ง
3) ์ต๋น์ < ์ค์์ < ํ๊ท : ์ผ์ชฝ ๊ธฐ์ธ์ด์ง
[ํด์ค] ๊ทน๋จ์น์ ์ํด์ ํ๊ท ๊ณผ ์ค์์ ์์น๋ ๋ณ๊ฒฝ
4) ํฉ๊ณ(Sum)
sum(cost)
5) ์ฌ๋ถ์์(quartile)
quantile(cost, 1/4) # 1 ์ฌ๋ถ์์ - 25%, 4.6
quantile(cost, 3/4) # 3 ์ฌ๋ถ์์ - 75%, 6.2
quantile(cost)
0% 25% 50% 75% 100%
2.1 4.6 5.4 6.2 7.9
* IQR = Q3 - Q1 (IQR : ์ด์์น ์ฒ๋ฆฌํ ๋ ์ฌ์ฉ๋๋ ์ ์๋ฒ์ฃผ)
Q1 - 1.5 * IQR ~ Q3 + 1.5 * IQR
์๋ฃ ์ ๋ ฌ sort() VS order()
sort(x) : ํด๋น x๋ณ์์ ๊ฐ์ผ๋ก ์ ๋ ฌ ํ ๊ฐ ๋ณํ
order(x) : ํด๋น x๋ณ์์ ๊ฐ์ผ๋ก ์ ๋ ฌ ํ ํ ๋ฒํธ(index) ๋ฐํ
x = data$cost
sort(x) #2.1~7.9 ๊ฐ(value)
order(x) #17~232 : ์์ธ(index)
x[17] #2.1
x[232] #7.9
ex. ํน์ ๋ณ์(cost)๋ฅผ ๊ธฐ์ค์ผ๋ก dataset์ ๋ ฌ
dim(data)
head(data)
tail(data)
data_order = data[order(data$cost), ] #์ค๋ฆ์ฐจ์ ์ ๋ ฌ
#๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ : order(data$cost, decreasing = TRUE)
head(data_order)
tail(data_order)
3. ์ฐํฌ๋ (0์ ์๋ ด์ ๋์ ์ํด ํ๊ท ์์์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ ์๋ค. 0์ ๊ฐ๊น์ธ์๋ก ํ๊ท ์ ๋ฐ์ง๋์ด ์๋ค.)
1) ๋ถ์ฐ(Variance)
var(x) #๋ถ์ฐ : 1.291597
๋ถ์ฐ ์์
mu = mean(cost)
n = length(cost)
var = sum((cost-mu)^2) / n
var #1.291597
2) ํ์คํธ์ฐจ(Standard deviation)
sd(cost) #1.138783 ํ์คํธ์ฐจ๋ ๋ถ์ฐ์ ์์ ์ ๊ณฑ๊ทผ
sqrt(var(cost)) #1.138783
ํ์คํธ์ฐจ -> ๋ถ์ฐ
sd(cost) ** 2 #1.296826
3) ์ต์๊ฐ/์ต๋๊ฐ/๋ฒ์
min(cost) #์ต์๊ฐ 2.1
max(cost) #์ต๋๊ฐ 7.9
range(cost) #๋ฒ์(min ~ max) 2.1 7.9
4) ํ์ค๊ฐ = (X-ํ๊ท ) / ํ์คํธ์ฐจ
๋์ผํ ์ฒ๋(scale) ๊ธฐ์ค์ผ๋ก ๊ฐ์นํ๊ฐ
ex. ํ๊ธธ๋ : ๊ตญ์ด 70(๋ฐ ํ๊ท 59, ํธ์ฐจ 15), ์ํ 70์ (๋ฐ ํ๊ท 51, ํธ์ฐจ 18)
kor_z = (70-59)/15
mat_z = (70-51) / 18
kor_z #0.7333333
mat_z #1.055556
[ํด์] ์ํ์ ์ 70์ ์ด ๊ตญ์ด์ ์ 70์ ๋ณด๋ค ๊ฐ์น๊ฐ ๋๋ค
4. ๋น๋์นญ๋ : ํจํค์ง ์ด์ฉ
install.packages("moments") # ์๋/์ฒจ๋ ์ํ ํจํค์ง ์ค์น
library(moments)
cost = data$cost # ์ ์ ๋ data
cost
1) ์๋ - ํ๊ท ์ ์ค์ฌ์ผ๋ก ๊ธฐ์ธ์ด์ง ์ ๋
skewness(cost) # -0.297234
0๋ณด๋ค ํฌ๋ฉด ์ผ์ชฝ ๊ธฐ์ธ์ด์ง(์ค๋ฅธ์ชฝ๋ฐฉํฅ ๋น๋์นญ ๊ผฌ๋ฆฌ)
0๋ณด๋ค ์์ผ๋ฉด ์ค๋ฅธ์ชฝ ๊ธฐ์ธ์ด์ง(์ผ์ชฝ๋ฐฉํฅ ๋น๋์นญ ๊ผฌ๋ฆฌ)
0๊ณผ ๊ฐ์ผ๋ฉด ์ข์ฐ๋์นญ
2) ์ฒจ๋ - ํ์ค์ ๊ท๋ถํฌ์ ๋น๊ตํ์ฌ ์ผ๋ง๋ ๋พฐ์กฑํ๊ฐ ์ธก์ ์งํ
kurtosis(cost) # 2.683438
์ ๊ท๋ถํฌ ์ฒจ๋ = 3
3) ํ์คํ ๊ทธ๋จ : ๋์นญ์ฑ
hist(cost)
๋ฐ๋๋ถํฌ๊ณก์ ๊ณผ ํ์ค์ ๊ท๋ถํฌ ๊ณก์
๋จ๊ณ1. ํ์คํ ๊ทธ๋จ ํ๋ฅ ๋ฐ๋
hist(cost, freq = F) #freq = F ์กฐ๊ฑด์ผ๋ก y์ถ์ ๋จ์๊ฐ ๋ฐ๋๋ก ๋ฐ๋๋ค
(ํ๋ฅ )๋ฐ๋ ๋ถํฌ ๊ณก์ : ํ์คํ ๊ทธ๋จ์ ๋ฐ๋ ์ถ์
๋ฐ๋(R ํ๋ฅ ๋ฐ๋ํจ์) = ํ๋ฅ ์ ์ ๋ถ๊ฐ(๋ฉด์ ) ๊ณ์ฐ
๋ฐ๋ ์ถ์ : ํ๋ฅ ๋ถํฌ ํน์ฑ์ ์ถ์
ํ์ค์ ๊ท๋ถํฌ ๊ณก์
?density # KDE[Kernel Density Estimation]
lines(density(cost), col='blue')
๋จ๊ณ2. ํ์ค์ ๊ท๋ถํฌ ๊ณก์
?dnorm # Normal Distribution
ํ๊ท ๋ฐ ํ์ค ํธ์ฐจ๋ฅผ ์ด์ฉํ์ฌ ํ์ค์ ๊ท ๋ถํฌ์ ํ๋ฅ ๋ฐ๋ ๋ถํฌ ๊ณ์ฐ
x = seq(0, 8, 0.1)
curve(dnorm(x, mean(cost), sd(cost)), col='red', add = T) #dnorm : ์ ๊ท๋ถํฌ ์ถ์ ์กฐ๊ฑด
[ํด์] ์๋ < 0 : ์ค๋ฅธ์ชฝ์ผ๋ก ๊ธฐ์ธ์๋ค. ์ฒจ๋๋ ์ ๊ท๋ถํฌ 3๋ณด๋ค ์๋งํ ๋ชจ์์ด๋ค. ์ฆ cost๋ ์ ๊ท๋ถํฌ์ ์ฐจ์ด๊ฐ ์๋ค.
๋จ๊ณ3. QQ-plot
qqnorm(cost, main = 'cost QQ-plot') #real value
qqline(cost, col='red') #์ ๊ท๋ถํฌ๋ฅผ ๋ํ๋ด๋ ์ง์ ํ ๊ทธ๋ํ
[ํด์] ์ ๊ท๋ถํฌ์ ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
๋จ๊ณ4. ์ ๊ท์ฑ ๊ฒ์
๊ท๋ฌด๊ฐ์ค : ์ ๊ท๋ถํฌ์ ์ฐจ์ด๊ฐ ์๋ค or ๋๋ฆฝ๊ฐ์ค : ์ ๊ท๋ถํฌ์ ์ฐจ์ด๊ฐ ์๋ค.
shapiro.test(cost) #p-value = 0.002959 < 0.05
[ํด์] ๋๋ฆฝ๊ฐ์ค ์ฑํ
* ์๋, ๋ํ๊ฐ์ ๊ด๊ณ
์๋ > 0, ์ต๋น์ < ์ค์์ < ํ๊ท : ์ผ์ชฝ ๊ธฐ์ธ์ด์ง
์๋ < 0, ์ต๋น์ > ์ค์์ > ํ๊ท : ์ค๋ฅธ์ชฝ ๊ธฐ์ธ์ด์ง
5. ๊ธฐ์ ํต๊ณ ๋ณด๊ณ ์ ์์ฑ๋ฒ
๋น๋๋ถ์ : ๋
ผ๋ฌธ์์ ์ธ๊ตฌํต๊ณํ์ ํน์ฑ ๋ฐ์
1) ๊ฑฐ์ฃผ์ง์ญ
data$resident2[data$resident == 1] = "ํน๋ณ์"
data$resident2[data$resident >=2 & data$resident <=4] = "๊ด์ญ์"
data$resident2[data$resident == 5] = "์๊ตฌ๊ตฐ"
x = table(data$resident2)
prop.table(x) # ๋น์จ ๊ณ์ฐ
y = prop.table(x)
round(y*100, 2) #๋ฐฑ๋ถ์จ ์ ์ฉ(์์์ 2์๋ฆฌ)
2) ์ฑ๋ณ
data$gender2[data$gender== 1] = "๋จ์"
data$gender2[data$gender== 2] = "์ฌ์"
x = table(data$gender2)
prop.table(x) # ๋น์จ ๊ณ์ฐ
y = prop.table(x)
round(y*100, 2) #๋ฐฑ๋ถ์จ ์ ์ฉ(์์์ 2์๋ฆฌ)
3) ๋์ด
summary(data$age)# 40 ~ 69
data$age2[data$age <= 45] = "์ค๋
์ธต"
data$age2[data$age >=46 & data$age <=59] = "์ฅ๋
์ธต"
data$age2[data$age >= 60] = "๋
ธ๋
์ธต"
x = table(data$age2)
prop.table(x) # ๋น์จ ๊ณ์ฐ
y = prop.table(x)
round(y*100, 2) #๋ฐฑ๋ถ์จ ์ ์ฉ(์์์ 2์๋ฆฌ)
4) ํ๋ ฅ์์ค
data$level2[data$level== 1] = "๊ณ ์กธ"
data$level2[data$level== 2] = "๋์กธ"
data$level2[data$level== 3] = "๋ํ์์กธ"
x = table(data$level2)
prop.table(x) #๋น์จ ๊ณ์ฐ
y = prop.table(x)
round(y*100, 2) #๋ฐฑ๋ถ์จ ์ ์ฉ(์์์ 2์๋ฆฌ)
5) ํฉ๊ฒฉ์ฌ๋ถ
data$pass2[data$pass== 1] <-"ํฉ๊ฒฉ"
data$pass2[data$pass== 2] <-"์คํจ"
x = table(data$pass2)
prop.table(x) # ๋น์จ ๊ณ์ฐ : 0< x <1 ์ฌ์ด์ ๊ฐ
y = prop.table(x)
round(y*100, 2) #๋ฐฑ๋ถ์จ ์ ์ฉ(์์์ 2์๋ฆฌ)
์ ๋ค์ด์ํ๋ง (UpDown Sampling)
1. sample(n, size) : ๋น๋ณต์์ถ์ถ
sample(x=10:20, size=5, replace = FALSE) #20 11 10 15 14
sample(c(10:20, 30:40), 10) #35 16 13 12 34 20 31 19 30 38
2. up/down ์ํ๋ง
๋ณต์์ถ์ถ ๋ฐฉ์ y๋ณ์์ ๋น์จ์ ๋ง์ถ๋ ์ํ๋ง ๋ฐฉ์
ํ์์ฑ :๋ชจ๋ธ ํ์ต ์ ๋์ผํ ๋น์จ๋ก ์ํ๋งํ ๋
install.packages('caret')
library(caret)
weather = read.csv('weather.csv')
dim(weather) #366 15
str(weather)
table(weather$RainTomorrow)
No Yes
300 66
y๋ณ์ ์์ธํ ๋ณ๊ฒฝ
weather$RainTomorrow = as.factor(weather$RainTomorrow)
str(weather) # $RainTomorrow : Factor
y๋ณ์ ์ ์ธ
weather_df = subset(weather, select = -RainTomorrow)
dim(weather_df) #366 14
Up sample : y์ ๋์ ๋น์จ ๊ธฐ์ค (y ๋ณ์ ์ถ๊ฐ)
up_weather = upSample(weather_df, weather$RainTomorrow)
str(up_weather) #600
dim(up_weather) #600 15
Down sample : y์ ๋์ ๋น์จ ๊ธฐ์ค (y ๋ณ์ ์ถ๊ฐ)
down_weather = downSample(weather_df, weather$RainTomorrow)
str(down_weather) # 132 obs
table(down_weather$Class)
No Yes
66 66
y๋ณ์ ์ด๋ฆ ๋ณ๊ฒฝ
cols = names(down_weather)
cols
cols[15] = 'RainTomorrow' #15๋ฒ ์์ธ ํ๋๋ง ์ด๋ฆ ๋ณ๊ฒฝ
names(down_weather) = cols
str(down_weather)
'๋ฐ์ดํฐ๋ถ์๊ฐ ๊ณผ์ > R' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DAY29. R ์ด์ ๋ฆฌ ๋ฌธ์ (0) | 2021.10.26 |
---|---|
DAY28. R ์์๋ธ๋ชจ๋ธ (0) | 2021.10.25 |
DAY27. R ์ฐ๊ด๋ถ์ (0) | 2021.10.22 |
DAY26. R ๊ตฐ์ง๋ถ์(2) (0) | 2021.10.21 |
DAY25. R ๊ตฐ์ง๋ถ์ (0) | 2021.10.21 |