R프로그램_작업형 제1유형 문제
install.packages("corrplot")
library(corrplot)
corrplot(mcor)
가장 왼쪽 mpg와 상관성이 가장 높은 (파란색)은 drat, vs, am gear 등이다.
정규화는 scale() 함수를, PCA(주성분 분석)은 prcomp() 함수를 이용한다.
mpg를 제외하려면 첫 번째 열을 제외해야 하니, mtcars[, -1] 표현한다. 아래 데이터를 보면 누적 설명 분산량이 92%를 넘기려면 PC1, PC2, PC3, PC4 이상이 되어야 한다.
df<-mtcars[,-1]
df_scale<-scale(df)
summary(prcomp(df_scale))
> summary(prcomp(df_scale))
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 2.400 1.628 0.77280 0.51914
Proportion of Variance 0.576 0.265 0.05972 0.02695
Cumulative Proportion 0.576 0.841 0.90071 0.92766
PC5 PC6 PC7 PC8
Standard deviation 0.47143 0.45839 0.36458 0.28405
Proportion of Variance 0.02223 0.02101 0.01329 0.00807
Cumulative Proportion 0.94988 0.97089 0.98419 0.99226
PC9 PC10
Standard deviation 0.23163 0.15426
Proportion of Variance 0.00537 0.00238
Cumulative Proportion 0.99762 1.00000
이건 특정 열에 있는 값을 space 를 중심으로 나눈 후, 한쪽을 취해서 새로운 열로 만드는 예제이다.
먼저 mtcars의 index를 보자. Mazda 가 업체명이고, Mazda RX4 Wag가 모델명이다. 이 둘이 space로 분리되어 있다.
rownames(mtcars)
> rownames(mtcars)
[1] "Mazda RX4" "Mazda RX4 Wag"
[3] "Datsun 710" "Hornet 4 Drive"
[5] "Hornet Sportabout" "Valiant"
[7] "Duster 360" "Merc 240D"
[9] "Merc 230" "Merc 280"
[11] "Merc 280C" "Merc 450SE"
[13] "Merc 450SL" "Merc 450SLC"
[15] "Cadillac Fleetwood" "Lincoln Continental"
[17] "Chrysler Imperial" "Fiat 128"
[19] "Honda Civic" "Toyota Corolla"
[21] "Toyota Corona" "Dodge Challenger"
[23] "AMC Javelin" "Camaro Z28"
[25] "Pontiac Firebird" "Fiat X1-9"
[27] "Porsche 914-2" "Lotus Europa"
[29] "Ford Pantera L" "Ferrari Dino"
[31] "Maserati Bora" "Volvo 142E"
sapply(데이터 셋, 함수) 형식으로 사용한다. 문자열을 나누는 것이므로 strsplit() 함수를 쓴다.
brand<-sapply(strsplit(rownames(mtcars)," "),`[`,1)
여기서 '[' ,1로 표현하면 위 업체명, 모델명 중 업체명만을 하나의 열로 만든다는 것.
brand<-sapply(strsplit(rownames(mtcars)," "),`[`,1)
brand
> brand
[1] "Mazda" "Mazda" "Datsun" "Hornet"
[5] "Hornet" "Valiant" "Duster" "Merc"
[9] "Merc" "Merc" "Merc" "Merc"
[13] "Merc" "Merc" "Cadillac" "Lincoln"
[17] "Chrysler" "Fiat" "Honda" "Toyota"
[21] "Toyota" "Dodge" "AMC" "Camaro"
[25] "Pontiac" "Fiat" "Porsche" "Lotus"
[29] "Ford" "Ferrari" "Maserati" "Volvo"
이걸 mtcars 맨 끝열에 추가하면 되므로,
mtcars<-cbind(mtcars,brand)
다음은 ggplot으로 그래프로 그리는 것이다.
위에서 뽑은 PC1, PC2를 이용하여 산점도를 그림.
먼저 주성분 분석을 prcomp를 통해 진행한 후, mtcars 데이터 셋에 두 개의 열로 추가한다.
그리고 x축은 PC1, y축은 PC2로 하되, 색은 각 brand 명으로 지정하여 산점도로 그린다.
pca2<-prcomp(mtcars[,-12], scale=T)
pca2$x[,1:2]
mtcars<-cbind(mtcars,pca2$x[,1:2])
library(ggplot2)
ggplot(mtcars,aes(x=PC1, y=PC2, color=brand))+geom_point()+labs(color="brand")
작업유형 1은 총 3문제가 나온다.
데이터 전처리와 그래프 그리는 것 까지, 기초적인 문법 연습하는 것이 필요하구나.