>RE::VISION CRM

R 데이터 분석

[DSM1809] statistical data analysis using R

YONG_X 2018. 8. 24. 15:29


maintenance_data.csv


# dataset source: https://www.kaggle.com/ludobenistant/predictive-maintenance

m1 <- read.csv("maintenance_data.csv")

plot(m1$temperatureInd, m1$pressureInd, col=ifelse(m1$broken==1, 2,1))






# (Steel Plate) Fault analysis data


faultcolnames.txt


faults1.txt









|----Data Engineering ----| - - - - - |---- Data Science ----|



# KBO2018 데이터 연습용

hit0 <- read.csv("https://t1.daumcdn.net/cfile/blog/99B515435B87998B07?download")



plot(hit0$HR, hit0$AVG, col=rgb(0,0,1,0.2), pch=19, cex=2*hit0$AB/max(hit0$AB),
   main="KBO 2018",
   xlab="HR",
   ylab="AVG")
text(hit0$HR, hit0$AVG, labels=hit0$선수명, cex=0.3, pos=2)
abline(lm(hit0$AVG~hit0$HR), col="red", lwd=2)
abline(h=median(hit0$AVG), lty=2, col="darkgrey")
abline(v=quantile(hit0$HR, c(0.1,0.9)), lty=3, col="darkgrey")
text(32, 0.37, "주의: 아시안게임 이전까지의 성적이므로 \n최종 시즌성적과는 별 관계가 \n없을 수 있음 ", cex=0.4)



#--------------------------------
## [1]  팀별 평균타율 ??

## [2] 팀별 홈런수 합계와 이루타수 합계간의 관계는??
# ----- scatterplot

ax <- aggregate(hit0$HR~hit0$'팀명', FUN=sum)
names(ax) <- c("team", "HR")
ay <- aggregate(hit0$X2B~hit0$'팀명', FUN=sum)
names(ay) <- c("team", "X2B")
axy <- merge(ax, ay, by="team")
plot(axy$HR, axy$X2B, pch=19,
   xlim=c(0,max(axy$HR)),  ylim=c(0,max(axy$X2B)))
text(axy$HR, axy$X2B, pos=2, labels=axy$team)

boxplot(hit0$SAC~hit0$'팀명')


### Review ###############
max() ; min() ; median()
length()
table()
for(i in 1:n) {  }
m <- NA ; is.na(m)
hist()
plot(density())
polygon()
lines()
plot(..., type="", lty=2, lwd=2, col="red", pch=19)
boxplot()
df[row,col]
sort(vector)
df[order(...,decreasing=T),]
head() ; tail()
merge() ; aggregate()
rbind(), cbind()



#----- mtcars 데이터를 사용한 주요 명령 복습 -----


# 연비에 비해서 마력수가 높은가?

plot(sort(mtcars$hp/mtcars$mpg))

max(mtcars$hp/mtcars$mpg)

mtcars1 <- mtcars[order(mtcars$hp/mtcars$mpg),]

head(mtcars1,3) ; tail(mtcars1,3)


plot(mtcars1$hp/mtcars1$mpg)

text(mtcars1$hp/mtcars1$mpg, labels=row.names(mtcars), 

  cex=0.6, pos=2)

abline(h=median(mtcars1$hp/mtcars1$mpg), lty=3)


length(mtcars$wt)

plot(table(mtcars$vs, mtcars$gear))


# 반복문

carnames <- row.names(mtcars)[1:10]

for(i in 1:length(carnames)) { 

   carnames[i] <- paste0(carnames[i], "_", as.character(i)) 

 }



carnames[length(carnames)+1] <- NA 

is.na(carnames)


hist(mtcars$mpg, prob=T)

lines(density(mtcars$mpg), col="darkblue")

polygon(density(mtcars$mpg), col=rgb(0,0,1,0.5))


plot(mtcars$wt, mtcars$mpg, lty=2, lwd=2, col="red", pch=19,

  main="wt & mpg - relationship")

abline(lm(mtcars$mpg~mtcars$wt), lty=3)


boxplot(mtcars$wt~mtcars$vs)

table(mtcars[1:10,c("vs","cyl")])


# derived variable creation using aggregate and merge

med_wtbycyl <- aggregate(wt~cyl, data=mtcars, FUN=median)

names(med_wtbycyl) <- c("cyl", "med_wt_byCyl")

mwbc1 <- merge(mtcars[, c("mpg","wt", "cyl")], med_wtbycyl, by="cyl", all.x=T) 

mwbc1$rel_wt <- mwbc1$wt/mwbc1$med_wt_byCyl

head(mwbc1)


rbind(mtcars[1:3,], mtcars[7:10,])

cbind(mtcars[,1:2], mtcars[,c("am", "gear")])





###--- Additional R Features -----


[추가1] 텍스트 데이터 처리 함수


nchar(row.names(mtcars))

strsplit(row.names(mtcars)[1:5], split=" ")

gsub("-","__","Porsche 914-2") # gsub(pattern, replacement, x)

substr(row.names(mtcars)[1:5], 1,4)



[추가2] R의 강력한 무기 3종


data.table : Enhanced data.frame for faster processing

ggplot2 : data visualization

dplyr : a flexible grammar of data manipulation



# dplyr

# library(dplyr)

# msleep이라는 df에서 두 컬럼을 추출한 후 6줄만 출력

# pipeline 연산자( %>% )로 명령을 연결 


msleep %>% 

    select(name, sleep_total) %>% 

    head





#-- scripts ----------------



A01_r_intro_scrpt_201809_a.txt



A02_stat_scrpt_20180821.txt



A05_kbobank_scrpt_201809.txt



A07_review_scrpt_20180913.txt





######
# 연습문제
#  3부터 52까지 정수값을 가진 컬럼 A와 그 값의 제곱인 Asqr라는
# 두개의 컬럼으로 구성된 practice1 이라는 이름의 데이터프레임을 생성하라


A <- 3:52
Asqr <- A^2
practice1 <- data.frame(A, Asqr)


#--------------------
# 연습 : mtcars 에서 2두번째 4번째 행의 mpg를 추출하라

mtcars[c(2,4),"mpg"]
mtcars$mpg[c(2,4)]


plot(mtcars$mpg)


# 한 컬럼에 NA가 없는 dataframe의 모든 컬럼, 행을 추출
mydata3[!is.na(mydata3$v1),]



# 연습
# mtcars 데이터에서 연비 mpg가 20이상인 자동차의 수는?
length(mtcars[mtcars$mpg>=20,]$mpg)

# mtcars 데이터에서 연비가 30이상이고 무게 wt가 4 미만인 자동차들의
# 이름만 출력!

row.names(mtcars[mtcars$mpg>=30 & mtcars$wt<4,])
row.names(mtcars[mtcars$mpg>=30 | mtcars$wt<4,])


# mtcars 데이터에서 연비가 30이상인 차들 중에서 wt가 가장 가벼운 차의 wt는?





#################
#  연습 : 복습

#####################
# mtcars에서 hp(마력) 순으로 중간 50%에 해당하는 자동차들의 이름을
알파벳순으로 출력하라!

( nrow(mtcars) - (nrow(mtcars)/4) )

round(quantile(1:nrow(mtcars),c(0.25,0.75)))

mm1 <- mtcars[order(mtcars$hp),]
mm2 <- head(mm1, nrow(mtcars)-round(quantile(1:nrow(mtcars),c(0.25,0.75)))[1])
mm3 <- tail(mm2, nrow(mm2)-round(quantile(1:nrow(mtcars),c(0.25,0.75)))[1])



통계학 summary

시행 : 결과는 알지 못하지만 결과로 나타날 수 있는 가능한 경우를 알고 있는 "실험"

표본공간 : 시행에서 나타날 수 있는 가능한 모든 결과들의 집합

확률변수가 취하는 값이 연속형이면 분포함수는 확률밀도함수

이항분포 : 연속된 n번의 독립적 시행에서 각 시행이 확률 p를 가질 때의 이산 확률 분포

정규분포는
종모양 ; 양과 음 양 방향으로 무한대까지 ;
평균 주변에 집중 ; 평균과 표준편차에 따라 모양 결정 

평균 0, 표준편차 1인 정규분포 --> 표준정규분포

평균과 중앙값이 같으면 왜도(skewness)는 0 

표준정규분포의 왜도는 0, 첨도(kurtosis)는 3

Q-Q 플롯 : 분포의 정규성을 확인하기 위한 챠트

중심극한정리 : 모집단의 분포와 상관없이 모집단에서 추출한 표본의 크기가 충분히 클 때 표본평균의 분포가 정규분포를 따른다

카이제곱분포 : k개의 서로 독립적인 표준정규 확률변수를 각각 제곱한 다음 합해서 얻어지는 분포. 독립성 또는 동질성 검정에 사용

t-분포의 자유도는 (표본의 갯수-1). 자유도가 커질수록 표준정규분포에 근접


가설검정 : 모수에 대한 가설을 수립하고 어떤 가설을 선택할 것인지를 결정하는 작업

추정량이 가져야할 바람직한 성질
불편성(unbiasedness) ; 유효성(efficiency) ; 일치성(consistency)

유의수준 : 검정에서 1종오류를 범할 확률의 최대허용한계

단측검정은 대립가설이 방향성을 가짐. 양측검정은 방향성 없음

t-검정( t.test() )에서 alternative="greater" 옵션 : 단측검정

등분산성이 성립하지 않는 t-검정에서는 var.equal=F  옵션

등분산성검정에서 p-value = 0.3 인 결과를 얻었다면 (0.05 유의 수준에서) 등분산성 성립. 0.05보다 작아야 차이가 있다는 것(영가설 기각 --> 대안가설 채택)

심슨의 역설 : 부분에 대한 평균이 크다고 해서 전체에 대한 평균까지 크다는 보장은 없다

ANOVA 분산분석은 세 집단이상의 분포 차이 검정

피어슨 상관계수 범위는 -1~1

독립변수가 하나면 단순선형회귀분석 둘이상이면 다중선형회귀분석



# 통계 Cheat sheet 

http://blog.daum.net/revisioncrm/372


InstEval.csv


xAPI-Edu-Data.csv


kbo_20180830.csv



A02_stat_scrpt_20180821.txt
0.05MB
A02_stat_scrpt_20180821.txt
0.05MB
xAPI-Edu-Data.csv
0.04MB
A03_statB_scrpt_20170419.txt
0.02MB
stat_xtra_scrpt_20180903.txt
0.01MB
faultcolnames.txt
0.0MB
InstEval.csv
2.75MB
kbo_20180830.csv
0.01MB
maintenance_data.csv
0.06MB
A07_review_scrpt_20180913.txt
0.0MB
A01_r_intro_scrpt_201809_a.txt
0.04MB
A02_stat_scrpt_20180821.txt
0.05MB
A07_review_scrpt_20180913.txt
0.0MB
faults1.txt
0.29MB
A05_kbobank_scrpt_201809.txt
0.01MB
A02_stat_scrpt_20180821.txt
0.03MB
A02_stat_scrpt_20180821.txt
0.05MB
A01_r_intro_scrpt_201809.txt
0.04MB
A02_stat_scrpt_20180821.txt
0.03MB
A07_review_scrpt_20180913.txt
0.0MB