ORACLE PGX를 생물의 사람이 실제로 사용해 본다 ②(데이터 통합)

오랜만입니다. 그렇다고 계속해서 갑시다!
이번은, 전회 실시한 단백질 상호작용의 데이터를 PGX에 읽어들이게 할 수 있었던 계속으로서, 한층 더 이 데이터내에 약제와 단백질의 연결의 데이터를 더해(통합시켜) 보려고 합니다! !

하는 것



①단백질과 약제의 연결 데이터를 입수



이 데이터를 얻기 위해 이번에는 "DrugBank"을 사용했습니다!



DrugBank란, 약제 자체의 데이터(구조식, 기능 등)나, 약제가 결합, 작용하는 것(단백질 등)의 정보(무엇과 무엇이 결합하고 있는지?어디에 결합하고 있는가?등)를 제공하는 사이트입니다.
그러나 데이터를 얻으려면 계정 등록이 필요합니다! !

얻고 싶은 정보는 어떤 약물과 어떤 단백질이 결합되어 있는가? 그래서, "DrugBank"의 페이지내에 있는 < Downloads⇒PROTEIN IDENTIFIERS >의 순서로 선택해, 그 페이지의 의 란의 All를 다운로드합니다.


$ curl -Lfv -o filename.zip -u EMAIL:PASSWORD https://www.drugbank.ca/releases/5-0-9/downloads/target-all-polypeptide-ids

☝ 실제로 사이트 내에 게재된 커맨드입니다! 커멘드의 EMAIL:PASSWORD에는 계정 등록에 사용한 EMAIL, PASSWORD를 입력해 주세요. 물론 GUI의 조작으로 로컬 환경에 떨어뜨릴 수도 있습니다! (맨 오른쪽의 를 선택)

다운로드한 데이터는 zip 형식으로 저장됩니다. 그런 다음 압축을 풀면 두 개의 CSV 파일이 생성됩니다. 이번은 이 중 all.csv라는 분을 이용합니다! (실제로 그 연결의 의미의 유무에 관계없이 결합하는 데이터가 모두 들어 있는 것입니다)

이 데이터와, 전회의 기사에서 작성한 데이터를 이용해 갑니다!

② 필요한 정보를 추출하여 성형한다



create_drug_edge.sh
#!/bin/bash

sed 's/"\([^"]*\)"//g' all.csv > temp_all_1.csv
awk -v FS=',' -v OFS=',' '{if (NR != 1) print $1, $3}' temp_all_1.csv > temp_all.csv
awk -v FS='\t' -v OFS=',' '{if (NR != 1) print $1, $3}' uniprot.tab > temp_uniprot_id.csv
awk -v FS=',' -v OFS=',' '{if (NR != 1) print $1, $13}' temp_all_1.csv > temp_drug_ids.csv
awk -v FS=',' -v OFS=',' '{split($2, array, "; "); for (i in array) { print $1, array[i] }}' temp_drug_ids.csv > temp_drug_ids_split.csv
sort -t ',' -k 2 temp_uniprot_id.csv | uniq > temp_uniprot_id_sorted.csv
sort -t ',' -k 1 temp_drug_ids_split.csv > temp_drug_ids_sorted.csv
join -t ',' -1 2 -2 1 -o 0 1.1 2.2 temp_uniprot_id_sorted.csv temp_drug_ids_sorted.csv > temp_drug_edge.csv
awk -v FS=',' -v OFS=',' '{print $2,$3=$3",1"}' temp_drug_edge.csv > drug_edge.csv
awk -v FS=',' -v OFS=',' '{print $2,$1,"0","0","0","0","0","0","0","0"}' drug_edge.csv | sort | uniq > detailed_drug_edge.csv

rm temp_* drug_edge.csv

이것은 그래프의 가장자리에 해당하는 데이터입니다. 이전과 다른 점으로,
  • 데이터 내에서 쉼표로 구분 된 것 이외에 단백질 이름 등에 쉼표가 있다는 것을 잘 인식하지 못했기 때문에 먼저 컬럼 당 완전한 쉼표로 구분 한 것
  • Drug ID에 관한 컬럼에서, 어느 단백질에 결합하는 약제가 1개 이상인, 즉 그 컬럼내에 「;」 단락으로 약제 ID가 기술되어 있었으므로, 그것을 흩어지게 하여 하나하나 2로 나눈 (for 루프 구문을 사용하고 있음)

  • 예: Protein ID,…,DB00023; DB00044; DB00099
    Protein ID,DB00023Protein ID,DB00044Protein ID,DB00099
  • 가장자리 속성은 값이 없지만 이전에 만든 가장자리 속성 수와 일치해야하므로 해당 부분에 '0'값을 삽입했습니다

  • 있습니다.

    create_drug_node.sh
    #!/bin/bash
    
    awk -v FS=',' -v OFS=',' '{print $1,"*",$1}' detailed_drug_edge.csv | sort | uniq > drug_node.csv
    

    이것은 노드에 해당하는 데이터의 추출입니다. 노드 속성에는 ID 번호가 있습니다.

    그리고 이러한 데이터와 이전에 작성한 PPI(단백질 상호작용)의 데이터를 통합합니다.

    create_drug_ppi_edgelist.sh
    #!/bin/bash
    
    sh create_ppi_node.sh 100000 
    sh create_ppi_edge.sh 12000000
    sh create_drug_edge.sh
    sh create_drug_node.sh
    
    cat drug_node.csv detailed_drug_edge.csv ppi_node.csv ppi_edge.csv > drug_ppi_edgelist.csv
    

    명령의 숫자는 인수입니다. 적당히 딱 좋은 인수를 넣어주세요!

    ③PGX로 불러오기



    이전부터 계속 말하고 있습니다만, PGX에 읽어들이기 위해서는 JSON 파일이 필요합니다.

    drug_ppi_edgelist.json
    {
      "uri": "置いてあるディレクトリまでのパス/drug_ppi_edgelist.csv"
    , "format": "edge_list"
    , "vertex_id_type": "string"
    , "vertex_labels": false
    , "edge_label": false
    , "vertex_props":[
        {"name":"name", "type":"string"}
      ]
    , "edge_props":[
        {"name":"neighborhood", "type":"integer"}
      , {"name":"fusion", "type":"integer"}
      , {"name":"cooccurence", "type":"integer"}
      , {"name":"coexpression", "type":"integer"}
      , {"name":"experimental", "type":"integer"}
      , {"name":"database", "type":"integer"}
      , {"name":"textmining", "type":"integer"}
      , {"name":"combined_score", "type":"integer"}
      ]
    , "separator": ","
    }
    

    덧붙여서 전회와 완전히 같습니다 (웃음)

    ※이번 이것을 이용하면 단백질, 약제의 노드의 정보의 식별은 할 수 없습니다만, 약제 쪽은 ID 번호로 표시되므로 식별 가능하다고 하는 것으로 고려하고 있지 않습니다!



    자, 읽어 보겠습니다.
    pgx > G = session.readGraphWithProperties("置いてあるディレクトリのパス/drug_ppi_edgelist.json")
    
    PgxGraph[name=drug_ppi_edgelist,N=24493,E=11365453,created=1509003440476]
    

    그래프 구조로 로딩에 성공했습니다! 좋았어,,,

    다음에 넣은 그래프 구조의 데이터 검색을 간단하게 해 보려고합니다! 그럼!

    좋은 웹페이지 즐겨찾기