-
https://cran.r-project.org/web/views/Cluster.html
CRAN Task View: Cluster Analysis & Finite Mixture Models
This CRAN Task View contains a list of packages that can be used for finding groups in data and modeling unobserved cross-sectional heterogeneity. Many packages provide functionality for more than one of the topics listed below, the section headings are ma
cran.r-project.org
# k-means # 군집화(clustering) : 그룹패턴찾는과정 k-means 정보의 유사성에 따라 대상을 분류하는 기법을 군집 분석 # 침입탐지, 고객 그룹 세분화, 타깃마케팅 # # # k-nn과비슷 # n개의 데이터를 k개의 클러스터중 하나에 할당. k는 군집화된 클러스터의 갯수 # 클러스터 내의 차이(거리)를 최소화 , 클러스터 간의 차이를 최대화 하는것이 목표 # # centroids 클러스터의 중심 거리를 전부 구한후 그 평균 teens<-read.csv('snsdata.csv') str(teens) table(teens$gender ,useNA = "ifany" ) # 종류별 카운트 NA는 계산안함 ->useNA #table(teens$age) 범주형 데이터에 대해서 각각에 대해서 #연속적 함수 summary(teens$age) # na 갯수 확인 가능 #13~20 정상 범위 비정상 범위 NA #ifelse(조건, 참, 거짓) teens$age <- ifelse(teens$age>=13 & teens$age<20, teens$age, NA) summary(teens$age) #1.연습문제(주말) #성별컬럼의 결측값을 적절하게 처리하시오 (knn ->성별유추 ) # 36개의 컬럼,,, 친구컬럼,, teens$female<-ifelse(teens$gender =="F" & !is.na(teens$gender),1,0) teens$female # 여자 = 1 ,남자이거나 na = 0 teens$no_gender<-ifelse(is.na(teens$gender),1,0) teens$no_gender table(ifelse(teens$gender =="F" & !is.na(teens$gender),1,0)) #여성 22000명 남성 &NA 8000 table(ifelse(teens$gender =="F",1,0)) #여성 22000명 ,남성 5000명(NA는 계산에서 제외됨) summary(teens$age) #5523NA mean(teens$age) #NA 결측값 포함이기 떄문에 무조건 결측값 mean(teens$age,na.rm=TRUE) #NA가 제외외 #데이터를 그룹화 한다음 그룸단위로 특정 통계함수 적용 aggregate #NA를 제가한 다음, 졸업연도를 기준으로 그룹화, 그룹별 평균 연력을 출력 #teens 데이터 에서 gradyear 열을 기준으로 그룹화 한다음 #그룹별로 age그룹별로 컬럼값의 평균을 구해라 aggregate(data=teens,age ~ gradyear,mean,na.rm=TRUE) #gradyear로그룹화 age별로 구할함수 mean ns제거 #누락값 대처 하기 위해 avg_age<-ave(teens$age, teens$gradyear,FUN=function(x) mean(x,na.rm=TRUE)) teens$age<-ifelse(is.na(teens$age),avg_age,teens$age) #age빈값이면avg_age, 아니면 원래값 teens$age summary(teens$age) teens$age interests<-teens[5:40] interests #표준화 평균0 표준편차 1 lapply(interests, scale) lapply(interests, max) #열단위로 언급한 횟수 lapply(interests, min) lapply(interests, var) interests_z<-as.data.frame(lapply(interests, scale)) set.seed(2345) teen_clusters<-kmeans(interests_z,5) #첫번쨰 두번제 인수자리 표준화한데이터, k 값 teen_clusters #36차원 공간 중심점의 좌표 teen_clusters$size teen_clusters$centers #좌표 teens$clusters<-teen_clusters$cluster # 클러스터 번호 출력 teens$clusters teens[1:5,c('clusters','gender','age','friends')] #클러스터별 나이의 평균 aggregate(data=teens,age~clusters,mean) # 나이와 상관없음 #클러스터별 여학생수의 평균 aggregate(data=teens,female ~ clusters,mean) #각 클러스터별 친구수의 평균 aggregate(data=teens,friends ~ clusters,mean) 연습문제 1. 성별 컬럼의 결측값을 적절하게 처리하시오.(knn->성별유추) 2. iris 데이터에 대해 3개의 클러스터로 나누세요. 3. 2번에서 만든 결과에 대해, 임의의 iris 데이터가 입력되었을때 어느 클러스터에 속하는지 출력하는 프로그램을 작성하시오.