在docker容器中,安裝jupyter於ubuntu:14.04,由mac連線到running jupyter

想使用ubuntu:14.04基礎容器來做python程式prototype的工具,一方面,一些要使用的生資軟體只能在ubuntu環境下使用,另一方面,ubuntu:14.04算是很輕的小容器,希望讓最後的鏡像小一點。

這邊製作的容器主要是要使用bioawk和netMHC程式,所以dockerfile中會有安裝他的相關訊息。

這邊有幾個重點:

1. 安裝完所有jupyter需要的python library和ubuntu相關library
2. 在virtual environment中安裝jupyter
3. docker網路設置(port forwarding)
4. jupyter notebook網路設定(讓localhost以外的ip登入)

首先奉上dockerfile,裡面有所需的library

################################################################
# Dockerfile
# Version:          1
# Software:         BioAwk/Jupyter
# Software Version: 201703
# Description:      Basic image for Bioawk/Jupyter/Python3/plotly/numpy
# Provides:         autotools-dev|automake|cmake|curl|fuse|git|wget|zip|build-essential|pkg-config|python2.7|python-dev|python-pip|zlib1g-dev
#################################################################
# Source Image
FROM ubuntu:14.04

################## BEGIN INSTALLATION ######################

# apt update and install global requirements
RUN apt-get update     && \
    apt-get install -y software-properties-common && \
    apt-get install -y    \
        autotools-dev     \
        automake          \
        cmake             \
        curl              \
        fuse              \
        git               \
        wget              \
        zip               \
        build-essential   \
        gcc               \
        pkg-config        \
        csh               \
        tcsh              \
        byacc             \
        flex              \
        liblzma-dev       \
        lib1g-dev         \
        libblas-dev       \
        liblapack-dev     \
        gfortran          \
        libfreetype6-dev  \
        libpng-dev        \
        libjpeg8-dev
RUN apt-get install -y  python3\
                        python3-pip
                        python3-dev\
                        python3.4-venv
Copy /bioapps /bioapps
WORKDIR /bioapps/
ENV PATH /bioapps/netMHC-4.0:$PATH

WORKDIR /bioapps/bioawk-master
RUN make
ENV PATH /bioapps/bioawk-master:$PATH

CMD ["/bin/bash"]

# change workdir
WORKDIR /var/data
RUN chmod 777 /var/data
RUN python3 -m venv test
RUN . test/bin/activate && pip3 install --upgrade pip && pip3 install -vU setuptools && pip3 install jupyter
RUN . test/bin/activate && pip3 install numpy && pip3 install plotly
##################### INSTALLATION END #####################

# File Author / Maintainer
MAINTAINER weitinglin <weitinglin66@gmail.com>

裡面安裝的東西主要由python pip3相關的依賴、bioawk在make時的依賴。過程會創建一個
虛擬環境test,並且在裡面安裝jupyter,和會使用到的package。

接下來,在運行這個容器的時候,要把port口掛在出來。

docker run -p 8888:8888 -it netmhc:latest

接者,在執行jupyter的時候,要用下面的指定

jupyter notebook --allow-root --no-browser --ip="*"

進入安裝有jupyter的python virtual environment
source test/bin/activate

執行jupyter,因為在docker container中,會是root模式,所以使用allow-root,另外,因為不需要直接跳開視窗,所以使用no-browser,最後,一個關鍵動作 –ip="*",讓所有外來ip都可以進入。過程中,有一些小技巧,比如pip3設定出現問題了,該怎麼刪掉再重新裝一次,可以使用apt-get purget python3-pip,然後再重新安裝一次。然後,會需要瞭解一下docker port forwarding的原理。

參考文章:
How to install pip with Python 3?
make bioawk錯誤,需安裝的檔案
安裝jupyter在ubuntu上面
ValueError “Expected version spec” when installing local wheel via pip
How to install pyzmq for iPython Notebook in a Python 3 virtual environment?
Networking features in Docker for Mac
From inside of a Docker container, how do I connect to the localhost of the machine?
Using localhost for to access running container
Jupyer notebook 安全性設定

關於W3C(World Wide Web Consordium)的二三事

在處理許多項目時,不管是視覺化或是網頁資料的爬梳,甚至是文字編碼等,都會找到W3C相關網站,就蠻好奇這到底是什麼組織,後來發現這組織跟網路的發展大有關係,是由網路之父Tim Berners-Lee(建立起URL,HTML,HTTP粗稿),在1994所創立的。

W3C主要是由會員群體所維護的,會員超過8747人來自超過400個公司、大學,組織下面有大概56個針對不同技術問題的組別,負責發展和各種網路標準的討論,發表超過4954份技術報告,包含357個網頁技術標準。

裡頭有很多很棒的文檔(非常詳盡的針對許多網頁的議題,所發展的,幾乎每一個都可以是一本書的資訊量),較廣泛的議題或是適用性高的幾乎都會另外有一個次分支組織在處理這樣的討論。

W3C LogoWeb Accessibility initiative

關於網頁可進性(Web Accessibility)該如何提升

1. Tips for Getting Started with Web AccessibilityTips for Getting Started with Web Accessibility
2. Easy Checks – A First Review of Web Accessibility

W3C Internationalization Activity logo

如何提升網頁的國際性(Internationalization)

1. Localization vs. Internationalization
2. Internationalization Quick Tips for the Web

Network Analysis中評估網絡節點重要性的指標

用network來整合生物醫學資料並且使用它來探勘知識是一個非常好的方法,且network的建構具有高度的自由度和知識領域特異性,實際上,有一些拓墣學上的指標可以用來描述特定節點的重要性,這邊介紹11種可以用來描繪節點之於整個網絡關係的算法指標:

Local-based methoed

Local-based的方法一次只考慮單一個節點和他周遭的關係

Degree

最基礎的指標,單個節點的連接數
Deg(v)=|N(v)|

Jeong H, Mason SP, Barabasi AL, Oltvai ZN: Lethality and centrality in protein networks. Nature. 2001, 411: 41-42. 10.1038/35075138.

Maximum Neighborhood Component

MNC(v)=|V(MC(v)|, where MC(v) \ is \ a \ maximum \ connected \ component\ of\ the\ G[N(v)]

Density of Maximum Neighborhood Component

DMNC(v)=|E(MC(v))|/|V(MC(v))|^{ \varepsilon },\varepsilon =1.7

Lin CY, Chin CH, Wu HH, Chen SH, Ho CW, Ko MT: Hubba: hub objects analyzer–a framework of interactome hubs identification for network biology. Nucleic Acids Res. 2008, 36: W438-443. 10.1093/nar/gkn257.

Maximal Clique Centrality (proposed in this paper)

MCC(v)= \sum\nolimits_{C \in S(v)} (|C|-1)!
Przulj N, Wigle DA, Jurisica I: Functional topology in a network of protein interactions. Bioinformatics. 2004, 20: 340-348. 10.1093/bioinformatics/btg415.

Global-based methods

這邊主要是six node ranking method的實現,細節可以閱讀shortest path algorithm和它的generalized form k shortest path algorithm。

Closeness

Clo(v)= \sum_{w \in V}\frac{1}{dist(v,w)}
Sabidussi G: The centrality index of a graph. Psychometrika. 1966, 31: 581-603. 10.1007/BF02289527.

EcCentricity

EC(v)=\frac{|V(C(v)|}{|V|}\times \frac{1}{max\begin{Bmatrix}dist(v,w);w \in C(v)\end{Bmatrix}}

Hage P, Harary F: Eccentricity and centrality in networks. Social Networks. 1995, 17: 57-63. 10.1016/0378-8733(94)00248-9.

Radiality

Rad(v)=\frac{|V(C(v))|}{|V(C(v))|}\times \frac{\sum_{w \in C(v)}( \Delta_{C(v)}+1 - dist(v,w) )}{max\begin{Bmatrix}dist(v,w);w\in C(v)\end{Bmatrix}}
Valente TW, Foreman RK: Integration and radiality: Measuring the extent of an individual’s connectedness and reachability in a network. Social Networks. 1998, 20: 89-105. 10.1016/S0378-8733(97)00007-5

BottleNeck(BN)

BN(v)=\sum_{s \in V}p_{s}(v),where\ p_{s}(v) = 1 \ if\ more\ than\ |V(T_{s})|/4\ paths\ from\ node\ s\ to\ other\ nodes\ in\ T_{s}\ meet\ at\ the\ vertex\ v;otherwise\ p_{s}(v)=0

Stress

Str(v)=\sum\nolimits_{s \neq t \neq v \in C(v)}\delta_{st}(v),where\ \delta_{st}(v)\ is\ the\ number\ of\ shortness\ paths\ from\ node\ s\ to\ node\ t\ which\ use\ the\ node\ v
Shimbel A: Structural parameters of communication networks. The bulletin of mathematical biophysics. 1953, 15: 501-507. 10.1007/BF02476438.

Betweenness

BC(v)=\sum\nolimits_{s \neq t \neq v \in C(v)}\frac{\delta_{st}(v)}{\delta_{st}},where\ \delta_{st}(v)\ is\ the\ number\ of\ shortness\ paths\ from\ node\ s\ to\ node\ t\ which\ use\ the\ node\ v
Freeman L: A Set of Measures of Centrality Based on Betweenness. Sociometry. 1977, 40: 35-41. 10.2307/3033543.

Edge Percolated Component

EPC(v)=\frac{1}{|V|}\sum\nolimits_{k=1}^{1000}\sum\nolimits_{t \in V} \delta_{vt}{k}

Chin CS, Samanta MP: Global snapshot of a protein interaction network-a percolation based approach. Bioinformatics. 2003, 19: 2413-2419. 10.1093/bioinformatics/btg339.

XML基本語法規則

XML組成的最小單位為element:

1. start tag
2. value
3. end tag

XML語法規則:

1. every start-tag must have a matching end-tag , or be a self-closing tag
2. tags can’t overlap; elements must be properly nested
        – close the child elements before you close their parents
3. XML documents can have only one root element
4. Obey XML naming conventions
        – start with letter or the dash
        – after first charcter , number, hyphens, perods are allowed
        – Names can’t contain spaces
        – Names can’t contain the colon character
        – Names can’t start with the letters xml(xml, XML, Xml)
        – no space after the opening < character
5. XML is case sensitive
6. XML will keep whitespace in your PCDATA

2017 24th Nucleic Acids Research 資料庫特輯

screenshot.png
每年Nucleic Acids Research期刊的資料庫專刊(database issue)都會整理整年新增加的生醫資料庫和有哪些資料庫有更新,能刊登在Nuclei Acids Research的資料庫都有一點的品質,也是找尋可以利用在自己相關領域的素材。

今年的Database issue總共包含152篇論文,有54個新增的資料庫,另外,98個資料庫有更新。這些資料庫的內容有跟基因體結構、基因表現量、基因調控資訊、蛋白質交互作用等。其中有三個資料庫被特別提出來說明其“breakthrough”的貢獻,分別是denovo-db, Monarch Initiative, Open Targets。

“Breakthrough"的新資料庫

denovo-db

screenshot.png

資料庫主要是收集人類相關的基因變異,總共收集40個研究、23098 trios,共32991個de novo variants,每個variant的資料除了基本的染色體位置、變異種類外,還有在轉錄和轉譯層面的資訊,還有嚴重度分數和頻率,目前驗證階段,還有來自於個人的phenotype資訊。整個資料庫的資料都可以被下載供研究使用。

Monarch Initiative

計畫(說資料庫的話,把他們的企圖講得太小了)主要是想大規模地將其他物種的資訊希望導入到人類疾病和相關機制的推測上,讓genotype-phenotype間的關係能有更多資訊供參考。
Open Targets

screenshot.png

這平台提供藥物標的開發的搜尋和視覺化工具,整合疾病跟潛在藥物標的之關係。

這三個平台都提供API串接資料,可以看出目前生醫界在處理資料的規格慢慢貼近軟體業界的水準

值得注意的資料庫

名稱 類別     介紹    論文
GTRD 轉錄因子調控 紀錄轉錄因子間的交互關係 link
TcoF-DB 轉錄因子調控 記錄轉錄因子和轉錄因子co-factor的交互關係 link
The Gene Ontology 基因功能註釋 基因功能註釋 link
PANTHER 蛋白質功能註釋 跨種蛋白質功能註釋 link
InterPro 蛋白質註釋 蛋白質功能分析,且由不同的蛋白domain link
Protein Ontology 蛋白質註釋 蛋白質功能詮釋 link
OntobeeOntobee link資料庫 有各種ontology結構的資料庫資訊 link
KEGG 代謝路徑 仲要代謝路徑資料庫 link
STRING 蛋白質交互 重要蛋白質交互作用資料庫 link
BioGRIDBioGRID 代謝路徑 重要代謝路徑資料庫 link
pathDIP 訊息傳遞路徑 將現有的訊息傳遞路徑加入但蛋白質間交互的關係來延昇|link
TissueNet 蛋白質互動 蛋白質間的交互關係 link
XTalkDBXTalkDB 訊息傳遞(crosstalk) 註釋不同訊息路徑間的關係 link
Exposome-Explorer 環境飲食基因體學 生物標記跟環境風險因子相關 link
Pharos 藥物蛋白體學 特定疾病相關的蛋白質標的 link
Bio-TDS 生醫資料文字探勘 用自然語言處理技術支持文本式搜尋 link

Gene Set Enrichment Analysis(GSEA)資料格式介紹:gct, cls, gmt

資料種類 內容 格式
基因表現量資料Expression dataset 主要為基因表現量資料 res, gct, pcl, txt
實驗設計資料Phenotype labels 主要為實驗設計,標記各樣本 cls
基因集Gene sets 要用來檢定的各個基因集(可以直接使用GSEA軟件的) gmt, gmx

注意事項:
1. 基因表現量資料中的基因名稱跟基因集都要使用HUGO中基因的名稱,假如使用的是microarray的資料,要注意使用的是哪個平台,要提供那平台的probe註釋(大部分affymetrix的都有內建資料,所以不用太擔心)

基因表現量資料
GCT:Gene Cluster Text
為tab分隔的資料,可以使用純文本編輯器或是excel,不太推薦使用excel,有時候會出現一些數字被轉換成日期的問題

基本原則:

  1. 第一行一定要有#1,2這字串。
  2. 第二行總共要有兩個數字,第一個數字代表這筆基因表現資料總共有幾行,第二行數字代表有幾個樣本。
  3. 接者便是基因表現量資料,第一列為基因名稱或是probe編號,第二行為這些基因或是probe的描述,再來就是所有樣本個別的表現量多寡。
    screenshot.png

實驗設計資料
CLS:Categorical/Continuous files format
screenshot.png
主要用三行表示
1. 第一行有三個數字,第一個數字代表樣本總數,第二個數字為總共有幾個類別,第三個數字都一定為1
2. 第二行要以#開頭,然後有兩個數字,緊接者為各個類別的名稱
3. 第三行則是各個樣本的類別種類

注意事項:
1. 樣本類別也可以是連續變數,比如時間序列的,可以用下面的方式來表示
#numeric
#IncreasingProfle
30 60 90 120 150

基因集資料
這邊介紹兩個主要基因集資料的格式,分別是GMT和CMX,兩個資料格式有兩個差別:
1. GMX基因集資料是以列方式儲存
2. GMT基因集剛好反過來,用行來儲存,適合儲存大於256個以上的基因集
GMX: Gene Matrix file format
screenshot.png
GMT: Gene Matrix file format
screenshot.png

論文閱讀:Tumor neoantigenes:building a framework for personalized cancer immunotherapy 精華簡報

 免疫療法在癌症治療上的角色越來越重要,在化學治療、標靶治療、手術治療、放射治療等等之後,癌症本質上基因變異的多樣性,在使用上面幾種療法下效果較差,而在免疫療法的策略下,讓自己的免疫細胞去殺死癌症,似乎可以解決上面幾個方法的死角,當然免疫療法也有他的局限性,他很大程度的需要依賴自己身體的免疫系統,另外,過度激活的免疫系統也會產生自體免疫的問題,當下最大的難關是很難預測病人的反應性,有的對治療反應性好的,癌細胞可能會戲劇性地消失,如何預測這件事情變得很重要,這篇論文的重點著重於免疫療法中其中一塊,針對個別癌症特異性抗原來當作下手目標。

MedRec:區塊鏈技術應用到病歷系統的實作

MedRecMedRec是由MIT Media Lab中研究生 Ariel Ekblaw, Asaf Azaria , Thiago Vieira在資深研究人員Andrew Lippman帶領下所提出基於區塊鏈在病歷資料上的應用,比較有趣的一點是他們加上一層讓研究者可以參與的方式近來,頗符合目前醫療資料複雜需求中的重要要角。而將區塊鏈應用在醫療資料處理上最重要的目的是提升所謂的interoperability,也就是如何讓單一個病人的資料原本散佈在各個醫療機構中,能有效互通,減少重複檢查的問題,另一方面,也開始逐間導向以病人為中心的儲存方式,因為許多健康資料的來源已不限於醫學中心,大量消費產品已經能讓病人有足夠多自主權或許各式各樣的資料,如23andMe等

This lack of interoperability costs 150,000 lives and $18.6 billion per year, according to the Premier Healthcare Alliance.

詳細的實現內容可以看這篇論文的細節,整體上這他們系統設計的原型有嘗試在跟Beth Israel Deaconess Medical Center內來試驗,希望能將醫院裡現有的資料匯入到MedRec中。

下面的圖表可以看出她們整個設計的架構,主要牽涉到的模組有:


1. smart contract infrastructure
– registrar contract
– patient-provider relationship contract
– summary contract
2. backend API library
– PyEthereum
– PyEthApp

3. Database getekeeper
4. EHR Manager
– ONC’s Blue Button design

screenshot.pngscreenshot.png

參考閱讀:
MedRec: Electronic Medical Records on the Blockchain

MedRec: Medical Data Management on the Blockchain

Asaph Azaria, Ariel Ekblaw, Thiago Vieira, (2016). Andrew Lippman. MedRec: Using Blockchain for Medical Data Access and Permission Management. 2016 2nd International Conference on Open and Big Data

R資料處理小技巧:關於missing data標記,dplyr包中的coalesce/na_if

dplyr中的函數內借鑒許多資料庫操作的函數而來,這邊要分享的一對函數便是這種關係,我們常見一個情況需要將資料中的NA取代成特定得值,或是將某些值當作NA處理,這邊在R dplyr中的coalesce和na_if便是很好的幫手,coalesce函數就是直接借來在SQL中同名的函數名稱在這邊使用,他的功能也是用來做NA取代,放入估計的函數,這邊便來釋放一些例子:

coalesce
coalesce接受vector,然後將第一個遇到的NA值取代成為特定的數值,要發揮它最大的效果可以跟purrr函數的map一起使用,便能大幅增加他的適用性。

# Use a single value to replace all missing values
x <- sample(c(1:5, NA, NA, NA))
coalesce(x, 0L)
# Or match together a complete vector from missing pieces
y <- c(1, 2, NA, NA, 5)
z <- c(NA, NA, 3, 4, 5)
coalesce(y, z)

na_if
na_if(x, y)剛好跟coalesce相反,輸入的vector x中,只要跟vector y中相等的就會被替換變成NA值。

na_if(1:5, 5:1)
x <- c(1, -1, 0, 10)
100 / x
100 / na_if(x, 0)
y <- c("abc", "def", "", "ghi")
na_if(y, "")

useR!2017 比利時布魯塞爾

screenshot.pngscreenshot.png

2017年的useR!會議將在美麗的比利時舉辦,聽這次的主辦人講,吸引大家來比利時唯一的東西便是生產全世界最多且最美味啤酒的地方了,今年會議的舉辦時間為7/4-7/7號,此次由比利時分析公司OpenAnalytics的Tobias Verbeke、Hasselt University統計系的Ziv Shkedy教授、英國Warwick University統計系的Heather Turner、OpenAnalytics的Matthias Verbeke作為籌辦委員。

今年會議的教學主題有下面這些:

Joaquin Vanschoren, Heidi Seibold and Bernd Bischl: OpenML: Connecting R to the Machine Learning Platform OpenML
Stephanie Kovalchik: Sports Analytics with R
Karline Soetaert, Thomas Petzoldtenvironmental modeling using R.
Hana Ševčíková: Introduction to parallel computing with R
Martyn Plummer: Introduction to Bayesian inference with JAGS
Gabor Csárdi: R package development with R-hub
Charlotte Wickham: purrr
Edzer Pebesma: Spatial data in R: new directions
Dirk Eddelbuettel: Extending R with C++: Motivation, Introduction and Examples
Colin Gillespie: Efficient R Programming
Toby Dylan Hocking, Rebecca Killick: Introduction to optimal changepoint detection algorithms
Francois Michonneau, Tracy K. Teal: Data Carpentry: Open and Reproducible Research with R
Arun Srinivasan: data.table for beginners
Signe M. Jensen, Christian Ritz: Dose-response analysis using R
Bhaskar V. Karambelkar: Geospatial visualization using R
Taylor Arnold, Lauren Tilton: Introduction to Natural Language Processing with R