User Tools

Site Tools


manipulation_of_ani_matrix_data_file_using_r

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
manipulation_of_ani_matrix_data_file_using_r [2023/02/15 11:51] – [Label을 자유롭게 편집하기] hyjeongmanipulation_of_ani_matrix_data_file_using_r [2023/02/15 17:04] (current) – [Label을 자유롭게 표시하기] hyjeong
Line 1: Line 1:
-====== R을 이용하여 ANI matrix 자료 다루기(작성 중) ====== +====== R을 이용하여 ANI matrix 자료 다루기 ====== 
-제목은 ANI matrix(행렬)라고 하였으나 실제로는 dataframe 형태의 자료를 다루는 기술에 관하여 작성한 글이다. 실습용 파일 {{ :ani_r_exercise.zip}}을 다운로드하여 압축을 해제한다. RefSeq genome 51개를 [[https://github.com/widdowquinn/pyani|pyani]](blast)로 처리하여 얻은 결과 중 일부 파일과 newick tree 및 accession 관련 파일이 포함되어 있다.+제목은 ANI matrix(행렬)라고 하였으나 실제로는 **dataframe 자료**를 다루는 기술에 관하여 작성한 글이다. 실습용 파일 {{ :ani_r_exercise.zip}}을 다운로드하여 압축을 해제한다. RefSeq genome 51개를 [[https://github.com/widdowquinn/pyani|pyani]](blast)로 처리하여 얻은 결과 중 일부 파일과 newick tree 및 accession 관련 파일이 포함되어 있다.
  
   $ unzip ANI_R_exercise.zip   $ unzip ANI_R_exercise.zip
Line 10: Line 10:
       inflating: accessions.txt       inflating: accessions.txt
  
-[[http://stat405.had.co.nz/r-style.html|해들리 위캠이 권하는 R 스타일 가이드]]에 의하면 할당문에는 = 말고 <-를 쓰라고 권장하는데 이는 나의 습과는 배치된다. 취향의 문제니까 별로 중요하지는 않다.+[[http://stat405.had.co.nz/r-style.html|해들리 위캠이 권하는 R 스타일 가이드]]에 의하면 할당문에는 '=말고 '<-'를 쓰라고 권장하는데 이는 나의 습과는 배치된다. 취향의 문제니까 별로 중요하지는 않다. 대부분의 프로그래밍 언어에서 '='를 쓴다는 현실을 잊지 말도록 하자.
   Use <-, not =, for assignment.   Use <-, not =, for assignment.
 ===== 데이터 파일을 읽어들이고 기본 점검하기 ===== ===== 데이터 파일을 읽어들이고 기본 점검하기 =====
Line 17: Line 17:
 매트릭스가 아니라 dRep의 Ndb.csv 파일과 같이 <id1>,<id2>,<value> 형태의 파일이라면 임포트한 뒤 reshape 라이브러리를 사용하여 매트릭스로 전환하도록 한다([[https://blog.genoglobe.com/2018/04/r-reshape-pairwise.html|참조글]]). 매트릭스가 아니라 dRep의 Ndb.csv 파일과 같이 <id1>,<id2>,<value> 형태의 파일이라면 임포트한 뒤 reshape 라이브러리를 사용하여 매트릭스로 전환하도록 한다([[https://blog.genoglobe.com/2018/04/r-reshape-pairwise.html|참조글]]).
  
-pyani 결과물에서는 행과 열의 이름의 이미 같은 순서대로 존재한다. 굳이 확인하고 싶다면 다음과 같이 한다.+pyani 결과물에서 행과 열의 이름은 이미 같은 순서다. 굳이 확인하고 싶다면 다음과 같이 한다.
   > x = colnames(ani)   > x = colnames(ani)
   > y = rownames(ani)   > y = rownames(ani)
Line 99: Line 99:
   ...   ...
      
-이미 대칭 상태가 되도록 처리를 마친 ani 데이터프레임의 row 라벨을 균주명으로 치환한 ani_s를 생성한 뒤 클러스터링을 해 보자. 아래에 보인 코드의 for{} 블록 내부에 있는 row.names() 함수를 names()로 바꾸면 컬럼 라벨을 바꾸는 효과가 있다.+이미 대칭 상태가 되도록 처리를 마친 ani 데이터프레임의 row 라벨을 균주명으로 치환한 ani_s를 생성한 뒤 클러스터링을 해 보자. 아래에 보인 코드의 for{} 블록 내부에 있는 row.names() 함수를 names()로 바꾸면 컬럼 라벨을 바꾸는 효과가 있다. Named vector를 이용하는 매우 유용한 예제이므로 잘 익혀두기 바란다. 바꾸기 전의 라벨이 key 벡터에 들어있고, 바꾸고 나서의 라벨은 names(key)로 지정함을 잊지 말자.
  
   > data = read.table("accession-strain.csv",sep=",",stringsAsFactors=F)   > data = read.table("accession-strain.csv",sep=",",stringsAsFactors=F)
-  > key = data[,1] +  > key = data[,1]         # GCF_000463565.1 
-  > names(key) = data[,2]+  > names(key) = data[,2]  # Paenibacillus polymyxa WLY78 
 +  > key 
 +         Paenibacillus polymyxa WLY78      Paenibacillus polymyxa DSM 365  
 +                    "GCF_000463565.1"                   "GCF_000714835.1"  
 +  ...
   > ani_s = ani   > ani_s = ani
   > for (i in row.names(ani_s)) {   > for (i in row.names(ani_s)) {
Line 169: Line 173:
   > heatmap.2(as.matrix(ani),col=greenred(10),trace="none",scale="none",dendrogram=c("row"))   > heatmap.2(as.matrix(ani),col=greenred(10),trace="none",scale="none",dendrogram=c("row"))
   > library(ComplexHeatmap)   > library(ComplexHeatmap)
-  > Heatmap(as.matrix(ani), name="test", row_names_gp = gpar(fontsize = 5), column_names_gp = gpar(fontsize = 5)) +  > Heatmap(as.matrix(ani), name="ANI", row_names_gp = gpar(fontsize = 5), column_names_gp = gpar(fontsize = 5)) 
 +{{ :heatmap_20230215.png?400 |Heatmap()으로 그렸음.}}
 이번에는 row와 column을 서로 다른 방식으로 클러스터링해 보자. row는 임포트한 트리(ezTree_51_pfam_rooted.nwk, dendrogram 객체여야 함)를 기준으로 정렬하되 column은 ani 데이터프레임의 값으로 자체적인 클러스터링을 적용한다. 실제로 그려보니 별로 예쁘질 않다. 이번에는 row와 column을 서로 다른 방식으로 클러스터링해 보자. row는 임포트한 트리(ezTree_51_pfam_rooted.nwk, dendrogram 객체여야 함)를 기준으로 정렬하되 column은 ani 데이터프레임의 값으로 자체적인 클러스터링을 적용한다. 실제로 그려보니 별로 예쁘질 않다.
-  > Heatmap(as.matrix(ani), name="test", cluster_rows = tree.2, row_names_gp = gpar(fontsize = 5), column_names_gp = gpar(fontsize = 5))+  > Heatmap(as.matrix(ani), name="ANI", cluster_rows = tree.2, row_names_gp = gpar(fontsize = 5), column_names_gp = gpar(fontsize = 5))
 row와 column 전부 tree.2를 기준으로 정렬해 보자. row와 column 전부 tree.2를 기준으로 정렬해 보자.
-  > Heatmap(as.matrix(ani), name="test", cluster_rows = tree.2, cluster_columns = tree.2, row_names_gp = gpar(fontsize = 5), column_names_gp = gpar(fontsize = 5))+  > Heatmap(as.matrix(ani), name="ANI", cluster_rows = tree.2, cluster_columns = tree.2, row_names_gp = gpar(fontsize = 5), column_names_gp = gpar(fontsize = 5))
 ==== Label을 자유롭게 표시하기 ==== ==== Label을 자유롭게 표시하기 ====
-위에서 보인 ani 데이터프레임의 라벨 치환 사례에서는 accession-strain.csv 파일로부터 data 데이터프레임을 만들고, 이로부터 key라는 named vector를 생성하여 사용했었다. 그러나 Heatmap() 함수에서는 각 축의 고유한 라벨은 그대로 두되 그림으로 나타낼 라벨만 원하는 형태로 바꿀 수 있다. 그러나 data 데이터프레임으로부터 key와는 반대 구조를 갖는 named vector(key.2)를 만들어야 한다. 편의상 row label만 실제 균주의 full name으로 바꾸어서 heatmap을 그려 보자. +위에서 보인 ani 데이터프레임의 라벨 치환 사례에서는 accession-strain.csv 파일로부터 data 데이터프레임을 만들고, 이로부터 key라는 named vector를 생성하여 사용했었다. 그러나 Heatmap() 함수에서는 각 축의 고유한 라벨은 그대로 두되 그림으로 나타낼 라벨만 원하는 형태로 바꿀 수 있다. 단, data 데이터프레임으로부터 아까의 것과는 반대 구조를 갖는 named vector(key.2)를 만들어야 한다. 편의상 row label만 실제 균주의 full name으로 바꾸어서 heatmap을 그려 보자. 
-  > key.2 = data[,2] +  > key.2 = data[,2]        # Paenibacillus polymyxa WLY78 
-  > names(key.2) = data[,1] +  > names(key.2) = data[,1] # GCF_000463565.1 
-  > Heatmap(ani, name = "test", row_labels = key.2[rownames(ani)], row_names_gp = gpar(fontsize = 5), column_names_gp = gpar(fontsize = 5)) +  > key.2 
- +                        GCF_000463565.1                       GCF_000714835.1  
 +         "Paenibacillus polymyxa WLY78"      "Paenibacillus polymyxa DSM 365"  
 +  ... 
 +  > Heatmap(as.matrix(ani), name = "ANI", row_labels = key.2[rownames(ani)], row_names_gp = gpar(fontsize = 5), column_names_gp = gpar(fontsize = 5)) 
 +{{ :heatmap_20230215b.png?400 |Row label을 치환하여 그린 heatmap. 데이터프레임 자체의 row label은 바뀌지 않았다.}} 
 +ComplexHeatmap의 활용법을 자세히 알아보려면 [[https://jokergoo.github.io/ComplexHeatmap-reference/book/index.html|Complete Reference]]를 참고하기 바란다.
manipulation_of_ani_matrix_data_file_using_r.1676429460.txt.gz · Last modified: by hyjeong