ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • day5
    데이터 분석/R 2020. 6. 26. 09:39

     

    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 데이터가 입력되었을때
    어느 클러스터에 속하는지 출력하는 프로그램을 작성하시오.
    

    '데이터 분석 > R' 카테고리의 다른 글

    KoNLP 설치오류시 대처방법  (0) 2020.06.30
    day6  (2) 2020.06.29
    day4  (0) 2020.06.25
    학습모델평가  (0) 2020.06.24
    Rday2  (0) 2020.06.23
Designed by Tistory.