Skip to content

Instantly share code, notes, and snippets.

@enujo
Created July 28, 2017 05:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save enujo/3788d891dc49b0ede67656e863add884 to your computer and use it in GitHub Desktop.
Save enujo/3788d891dc49b0ede67656e863add884 to your computer and use it in GitHub Desktop.
# getwd()
# setwd("D:/BigData/Source")
# getwd()
# 1~20까지의 값을 갖는 5행 4열의 행렬 mData생성
mData <- matrix(c(1:20), nrow=5)
mData
# mData의 1열을 제외한 2~4열의 값을 갖는 행렬 mdData 생성
mdData <- mData[,-1] # 행이라면 반대로 [-1,]
mdData
# mData의 각 행의 합을 출력
sumData <- apply(mData,1,sum) # 행
sumData
sumData <- apply(mData,2,sum) # 열
sumData
# breastcancer.csv 파일 불러오기
bcData <- read.csv("./BigData/breastcancer.csv")
# bcData를 편집기로 확인
fix(bcData)
# bcData 기본적인 데이터 구성 확인 데이터가 어떤 속성으로 구성되어 있는지
str(bcData) # b는 1 m은 2 Factor 두가지라는 소리
# 환자를 식별하는 값이 id 열은 행으로 구분할 수 있기 때문에 제거하고 분석
bcDelData <- bcData[-1]
bcDelData
# 예측하고자 하는 정보는 진단
# 진단 열의 종류와 값의 정보 출력
table(bcDelData$진단)
bcDelData$진단[3]
# 예측하고자 하는 정보가 가독성이 어려운 경우에는 가독성을 갖도록 정보를 변경
str(bcData)
# 진단 열의 데이터 클래스 형식이 Factor 를 변경할때는 replace가 아닌 factor를 이용
bcDelData$진단 <- factor(bcDelData$진단, levels =c("B","M"), c("양성","악성"))
bcDelData
# 진단 열의 값의 확률을 확인 : prop.table()
table(bcDelData$진단)
prop.table(table(bcDelData$진단))
# 소수점 이하의 출력을 제어
round(prop.table(table(bcDelData$진단))*100,1)
# 사용자 함수 생성 : normalize
# 값을 표준화 (0~1)하는 함수
normalize <- function(x){
result <- (max(x)-min(x) -(max(x)-x)) / (max(x)-min(x))
#rangeN<- max(x) min(x)
#result <- (rangeN - (max(x)-x)) / rangeN
return(result)
}
normalize(c(1,2,3,4,5))
normalize(c(0.01,0.02,0.03,0.04,0.05))
# 진단 항목을 제외한 모든 항목을 normalize함수를 사용하여 값을 표준화
fix(bcDelData)
# 데이터 프레임 형식의 항목들을 함수처리 하는 경우에는 lapply() 행렬의 합 곱 등
bcData_normalize <- as.data.frame(lapply(bcDelData[2:31],normalize))#32개중에 id 빼서 31개 진단을 빼고
fix(bcData_normalize)
# 데이터를 훈련(training)데이터와 평가(test)데이터로 구분
bcData_train <- bcData_normalize[1:469,] # 행으로 자름
bcData_train
bcData_test <- bcData_normalize[470:569,]
bcData_test
# 진단 항목에 대한 데이터도 훈련데이터와 평가 데이터로 구분
bcData_train_label <- bcDelData[1:469, 1] # 1부터469까지 첫번째를 가져옴 470or 500 으로하면 1:1 매칭이 안된다
bcData_train_label
bcData_test_label <- bcDelData[470:569, 1]
bcData_test_label
# knn 알고리즘을 실행하기 위해서 필요한 라이브러리 설치
install.packages("class")
library(class)
# knn알고리즘 : knn(훈련데이터, 평가데이터, 분석할 값(범주), 이웃의 개수)
# train : 학습용 데이터/test : 평가용 데이터/ cl : 학습용 데이터의 결과(진단)요소/ k : 평가의 고려되는(계산되는) 이웃한 데이터(값)의 개수
bcData_eval_pred<-knn(train=bcData_train, test=bcData_test,cl=bcData_train_label, k=5) #주로 k값은 홀수로 값을 변경하며 3개보단 5개를 했을때 좋은 결과를 도출
bcData_eval_pred
# 예측한 결과를 테이블 형식으로 확인할때 사용 : crossTable()
install.packages("gmodels")
library(gmodels)
CrossTable(x=bcData_test_label, y=bcData_eval_pred, prop.chisq = FALSE)
# 출력 결과를 그래프로 그리기
install.packages("ggplot2")
library(ggplot2)
qplot(bcData_train$반지름_평균, bcData_train$부드러움_평균, data=bcData_train, color=bcData_train_label)
qplot(bcData_train$대칭도_평균, bcData_train$오목점_평균, data=bcData_train, color=bcData_train_label)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment