Eco Life & Bioteco

biology and technology in MY LIFE

공부/R & Python

[R]r 데이터 프레임 행이름 변경하기, 상관성 분석 시각화

bioteco 2020. 11. 17. 19:21

r을 조금씩 공부하면서 작고 소소한 부분을 수정하고 싶어지네요..

할 수 있는 분석들은 굉장히 많은데 나에게 맞는 데이터를 먼저 만들어야 한다는 압박감이 계속듭니다.

 

이번 포스팅에서는

데이터 프레임을 핸들링하면서 행이름을 변경하기 위해

공부한 내용을 적어보고자 합니다.


먼저 필요한 패키지는 특별히 없습니다.

2020/11/03 - [공부/R] - [R]r에서 엑셀파일, CSV파일 불러오기

 

[R]r에서 엑셀파일, CSV파일 불러오기

R을 사용하다보면 .txt파일을 이용할 때보다는 엑셀, CSV파일을 불러오는 경우가 많습니다. 저는 그래요..^^;; 그래서 CSV 파일과 엑셀자료를 R로 가지고 오는 방법에 대해 작성해보려고 합니다. 1.

fishingbass.tistory.com

제가 몇일전에 작성했던 엑셀파일과 CSV파일을 불러오는 내용인데요.

여기서 사용했던 코드를 이용할 것입니다.

참고하실 분들은 링크로 들어가보세요~

 

먼저 파일을 불러와줍니다.

저는 임의로 생성한 파일을 가지고 분석을 해보았습니다.

> library(readxl)
> data <- data.frame(read_xlsx(path = "c:/123.xlsx", col_names = TRUE))
New names:
* `` -> ...1
> data
     ...1  a  b  c  d
1     car 10 56 54 65
2   train 65 21 65 32
3   cycle 98 11 98 21
4 license  1  2  5 54
5   start 23 45  7  8
6    demo 49 84 32 96
7  banana 54  6 12  5
> str(data)
'data.frame':	7 obs. of  5 variables:
 $ ...1: chr  "car" "train" "cycle" "license" ...
 $ a   : num  10 65 98 1 23 49 54
 $ b   : num  56 21 11 2 45 84 6
 $ c   : num  54 65 98 5 7 32 12
 $ d   : num  65 32 21 54 8 96 5

...1이라는 열 이름은 r에서 임의로 생성해준 이름입니다.

readxl 코드를 이용해서 불러온 파일을 데이터프레임으로 만들어서 data라는 이름으로 지정해주었습니다.

5개의 열과 7개의 행이 생성된 것을 확인할 수 있습니다.

 

여기서 오늘의 핵심

1열을 행이름으로 두고 싶은데...?

 

> rownames(data)
[1] "1" "2" "3" "4" "5" "6" "7"
> row.names(data) <- c("car","train","cycle","license","start","demo","banana" )
> data
           ...1  a  b  c  d
car         car 10 56 54 65
train     train 65 21 65 32
cycle     cycle 98 11 98 21
license license  1  2  5 54
start     start 23 45  7  8
demo       demo 49 84 32 96
banana   banana 54  6 12  5

그래서 먼저 rownames를 이용해서 지금 열이 어떻게 지정되어 있는지 확인하고

row.name()을 이용해서 data안에 car, train, cycle 등의 이름으로 변경해주었습니다.

그 결과 행 이름이 원하는 내용으로 변경되었습니다.

 

그러면 1열이 필요가 없어졌잖아요?

이제 지워줘 보도록 하겠습니다.

 

> data <- data[ ,-1]
> data
         a  b  c  d
car     10 56 54 65
train   65 21 65 32
cycle   98 11 98 21
license  1  2  5 54
start   23 45  7  8
demo    49 84 32 96
banana  54  6 12  5

그러면 제가 원하는 데이터 프레임으로 데이터를 수정해보았습니다.

더 간편하고 쉬운방법이 있습니다만,

실전에서 엑셀을 이용하다가 급하게 r에서 분석할 때에는 

지금과 같은 상황이 많이 발생하실 겁니다.

 

 

저도 요즘에는 에초에 엑셀에서 작업할 때 r에서 분석하기 쉽도록 데이트를 정리하고 있는데요.

그렇지 않은 경우에는 다음과 같은 방법으로 데이터를 만져도 좋을 거 같다는 생각이드네요..^^

 


추가 분석으로 상관성 분석을 해보았습니다.

제가 이렇게 데이터 프레임을 만진 이유는 상관성 분석을 하기 위해서 인데요.

상관성 분석을 위해서는 다양한 방법이 있습니다만,

저는 

ggcorrplot(), Hmisc()

를 이용해서 분석을 해보았습니다.

> data_corr <- round(cor(data), 1)
> ggcorrplot(data_corr, hc.order = TRUE, type = "lower", lab = TRUE,
+            lab_size = 3, method = "circle", 
+            colors = c("black", "grey", "white"), 
+            title = "example", 
+            ggtheme=theme_classic)

위에서 핸들링한 데이터로 상관성 분석한 결과를 그래프로 시각화 해보았습니다.

상관성 분석 시각화

저는 상관성 분석을 논문에 제출할 때 대부분 데이블로 제시했었던 경험이 많았었습니다.

항상 그래프로 한번에 보여줄 수 있는 재미있는 방법이 없을까.. 

고민을 했었는데

r에서는 다양하게 분석이 가능하더라구요.

현재 이 그림은 상관성 분석결과로 상관계수를 색상으로 표현한 결과 입니다.

 

p 값을 구하고자 한다면...?

 

> library(Hmisc)
> corr.test <- rcorr(as.matrix(data), type = "pearson")
> corr.test
      a     b     c     d
a  1.00 -0.19  0.71 -0.30
b -0.19  1.00 -0.03  0.67
c  0.71 -0.03  1.00  0.02
d -0.30  0.67  0.02  1.00

n= 7 


P
  a      b      c      d     
a        0.6880 0.0746 0.5109
b 0.6880        0.9409 0.1002
c 0.0746 0.9409        0.9642
d 0.5109 0.1002 0.9642  

> p <- as.matrix.data.frame(corr.test$P)
> p
           [,1]      [,2]       [,3]      [,4]
[1,]         NA 0.6880023 0.07458542 0.5109489
[2,] 0.68800228        NA 0.94091754 0.1001940
[3,] 0.07458542 0.9409175         NA 0.9642368
[4,] 0.51094889 0.1001940 0.96423676        NA

다음과 같이 구할 수 있습니다.

Hmisc를 이용하면 상관계수와 p값을 한번에 볼 수 있는 장점이 있습니다.

2개의 값중에서 p값만 보고 싶다면

p값만 따로 data.frame으로 만들어서 따로 확인 할 수 도 있습니다.


적은 분들이더라도 제 포스팅 내용이 도움이 되었으면 합니다...^^

그럼 오늘 하루도 힘내세요!!