인류의 복지와 편익을 위한 인프라 건설을 주도하는토목공학과
제목
[토목빅데이터마이닝 중간평가] 다변량 데이터분석 R 실습 중간평가 주요코딩 (박영훈 교수)
작성일
2026.10.06
작성자
부천대학교 토목공학과
# ============================================================ # 토목빅데이터마이닝 중간평가 실습 # 주성분분석 + 인자분석 + 군집분석 # ============================================================ # ============================================================ # 1. company.csv 다변량 데이터 주성분분석 # ============================================================ # ------------------------------------------------------------ # 필요한 package 설치 # 최초 1회만 설치하면 됨 # ------------------------------------------------------------ install.packages("psych") library(psych) # ------------------------------------------------------------ # 1-0. 데이터 불러오기 # ------------------------------------------------------------ company=read.csv("company.csv", fileEncoding="euc-kr") head(company) str(company) summary(company) names(company) # 첫 번째 열이 지사명 또는 ID인 경우 제외 company1=company[,-1] head(company1) # ------------------------------------------------------------ # 1.1 상관관계 분석 # ------------------------------------------------------------ cor(company1) pairs(company1) pairs.panels(company1) # pairs.panels(company1)의 결과를 보고 # # - 두 번째로 높은 상관계수 # - 가장 높은 상관계수 # - 가장 낮은 상관계수 # # 확인 # ------------------------------------------------------------ # 1.2 표준화 # ------------------------------------------------------------ company2=scale(company1) head(company2) pairs.panels(company2) # ------------------------------------------------------------ # 주성분분석 # ------------------------------------------------------------ pca1=prcomp(company2) summary(pca1) pca1 # ------------------------------------------------------------ # Scree Plot # 최적 주성분 개수 결정 # ------------------------------------------------------------ plot(pca1,type='l') # summary(pca1)의 Cumulative Proportion과 # Scree Plot을 이용하여 # 최적 주성분 개수를 결정 # ------------------------------------------------------------ # 1.3 총분산 설명비율 # ------------------------------------------------------------ summary(pca1) # 출력 결과의 # # Proportion of Variance # Cumulative Proportion # # 을 이용하여 # # - 최적 주성분으로 설명 가능한 총분산 # - 주성분 1이 설명 가능한 총분산 # - 주성분 2가 설명 가능한 총분산 # # 확인 # ------------------------------------------------------------ # 1.4 PC1, PC2와 최종평가 결과의 상관계수 # ------------------------------------------------------------ # ※ 아래의 "최종평가"는 company.csv의 # 실제 최종평가 변수명과 동일하게 사용 plot(pca1$x[,1],company1$최종평가) cor(company1$최종평가, pca1$x[,1]) plot(pca1$x[,2],company1$최종평가) cor(company1$최종평가, pca1$x[,2]) # ------------------------------------------------------------ # Biplot # ------------------------------------------------------------ biplot(pca1, choices=c(1,2)) # ------------------------------------------------------------ # 1.5 업무효율화와 불량률의 상관관계 # ------------------------------------------------------------ cor(company1) pairs.panels(company1) # cor(company1) 결과에서 # # - "업무효율화"와 가장 상관도가 높은 항목 # - "불량률"과 가장 상관도가 높은 항목 # # 확인 # ============================================================ # 2. attitude 데이터 탐색적 인자분석 # ============================================================ # ------------------------------------------------------------ # 필요한 package 설치 # 최초 1회만 설치하면 됨 # ------------------------------------------------------------ install.packages("psych") install.packages("GPArotation") library(psych) library(GPArotation) # ------------------------------------------------------------ # 데이터 확인 # ------------------------------------------------------------ head(attitude) str(attitude) summary(attitude) cor(attitude) # ============================================================ # 2.1 Varimax 회전 # 인자 개수 = 3 # ============================================================ fa3=fa(attitude, nfactors=3, rotate="varimax") print(fa3, digits=2, sort=T) # 출력 결과에서 # privileges 항목의 첫 번째 인자 적재값 확인 # ============================================================ # Varimax 회전 # 인자 개수 = 4 # ============================================================ fa4=fa(attitude, nfactors=4, rotate="varimax") print(fa4, digits=2, sort=T) # 출력 결과에서 # privileges 항목의 첫 번째 인자 적재값 확인 # ============================================================ # 2.2 privileges 항목의 공통성 # ============================================================ # 인자 개수 3개 print(fa3, digits=2, sort=T) # 출력 결과의 h2 확인 # h2 × 100 = 설명되는 비율(%) # 인자 개수 4개 print(fa4, digits=2, sort=T) # 출력 결과의 h2 확인 # h2 × 100 = 설명되는 비율(%) # ============================================================ # 2.3 회전 없음 # 인자 개수 = 3 # ============================================================ fa3_n=fa(attitude, nfactors=3, rotate="none") print(fa3_n, digits=2, sort=T) # learning 항목의 # 첫 번째 인자 적재값 확인 # ============================================================ # 회전 없음 # 인자 개수 = 4 # ============================================================ fa4_n=fa(attitude, nfactors=4, rotate="none") print(fa4_n, digits=2, sort=T) # learning 항목의 # 첫 번째 인자 적재값 확인 # ============================================================ # 2.4 learning 항목의 공통성 # ============================================================ # 인자 개수 3개 print(fa3_n, digits=2, sort=T) # learning의 h2 × 100 # → 설명되는 비율(%) # 인자 개수 4개 print(fa4_n, digits=2, sort=T) # learning의 h2 × 100 # → 설명되는 비율(%) # ============================================================ # 3. company.csv 다변량 데이터 군집분석 # ============================================================ # ------------------------------------------------------------ # 3-0. 데이터 불러오기 # ------------------------------------------------------------ company=read.csv("company.csv", fileEncoding="euc-kr") head(company) str(company) summary(company) names(company) # 첫 번째 열이 지사명 또는 ID인 경우 # 수치형 변수만 분석에 사용 company1=company[,-1] # 지사명을 행 이름으로 지정 # dendrogram에서 각 지사명을 확인하기 위함 rownames(company1)=company[,1] # ============================================================ # 3.1 Euclidean 거리 # Complete Linkage # ============================================================ hc1=hclust( dist(company1, method="euclidean"), method="complete" ) plot(hc1) # Dendrogram을 보고 # DMS와 같은 군집에 속하는 지사 확인 # ============================================================ # 3.2 Euclidean 거리 # Single Linkage # ============================================================ hc2=hclust( dist(company1, method="euclidean"), method="single" ) plot(hc2) # Dendrogram을 보고 # DMS와 같은 군집에 속하는 지사 확인 # ============================================================ # 3.3 Model-based Clustering # ============================================================ # ------------------------------------------------------------ # 필요한 package 설치 # 최초 1회만 설치하면 됨 # ------------------------------------------------------------ install.packages("mclust") library(mclust) # ------------------------------------------------------------ # 표준화 # ------------------------------------------------------------ company_scale=scale(company1) # ------------------------------------------------------------ # Model-based Clustering # ------------------------------------------------------------ mc=Mclust(company_scale) # ------------------------------------------------------------ # 최적 군집수 확인 # ------------------------------------------------------------ summary(mc) # ------------------------------------------------------------ # BIC 및 군집 결과 그래프 # ------------------------------------------------------------ plot(mc)