大志を抱く少年記

野心だけはいっちょ前な理系大学院生のブログです。

MkDocs 使ってみた。

昨日任された業務を紹介しよう。

Web上でパワポの内容をWebページで見れるようにして!

というものだ。
こんなとき、MkDocsがとても便利。

MkDocsの公式に飛ぶ。 f:id:kimoppy126:20170708094043p:plain

サイト自体がMkDocsで作られてる。 こんなページがMarkdownでお手軽に作れるのがMkDocs。 いちよPythonのアプリだけどPythonでコーディングするわけじゃない。

インストー

動作環境

MkDocs supports Python versions 2.6, 2.7, 3.3, 3.4, 3.5 and pypy.

を満たしていればOK

pipのインストー

pipはデフォルトでインストールされているはずだが、ない場合や古い場合、インストールが必要。

  • pipをすでにインストール済みの場合。
    以下のコマンドでアップデート

    pip install --upgrade pip
    
  • インストールしてない場合。
    get-pip.pyをダウンロードして以下のコマンド

    python get-pip.py
    

MkDocsのインストー

pipを使ってMkDocsをインストールする。

pip install mkdocs

$ mkdocs --version
mkdocs, version 0.15.3

Windowsを使っている場合

python -m pip install mkdocs
python -m mkdocs

Webページの構築

mkdocs new my-project
cd my-project

Getting started is super easy.

super easyですね。
mkdocs.ymlというconfigファイルとdocsというドキュメントのソースファイルを入れるファイルが作られます。docsにはデフォルトでindex.mdが入ってます。MkDocsはビルドインのサーバーなので、ドキュメントを作りながらWeb上でどう表示されるのか見ることができる。
mkdocs.ymlと同じディレクトリ上で、以下のコマンドを打つと、サーバーが立ち上がる。

$ mkdocs serve
INFO    -  Building documentation...
INFO    -  Cleaning site directory
[I 160402 15:50:43 server:271] Serving on http://127.0.0.1:8000
[I 160402 15:50:43 handlers:58] Start watching changes
[I 160402 15:50:43 handlers:60] Start detecting changes

適当なWebブラウザでhttp://127.0.0.1:8000/にアクセスすると、f:id:kimoppy126:20170708101048p:plain
こんな感じでデフォルトのホームページが見れる。

MkDocsはオートリロードに対応しているので、mkdocs.ymldocs内のファイルに変更を加えるとすぐにWeb上に反映される。

ドキュメントの追加

docs/ディレクトリに.mdファイルを追加することに加え、mkdocs.ymlを編集する必要がある。しなくても自動で読み込まれるが、アルファベット順で並べられるため、ドキュメントの順番を指定したい場合は編集する。
最上位の階層に2つのページを追加する場合、以下のように編集する。

pages:
- 'index.md'
- 'about.md'

このままではディレクトリの名前がページの名前として認識され、docs/index.mddocs/about.mdページが追加される。

自分で指定した名前をページに与えたい場合は以下のようにする。

pages:
- Home: 'index.md'
- About: 'about.md'

階層を持った構造にしたい場合

以下のようにセクションタイトルの下に関連ページを並べれば、サブセクション構造を持ったページが作られる。

pages:
- Home: 'index.md'
- User Guide:
    - 'Writing your docs': 'user-guide/writing-your-docs.md'
    - 'Styling your docs': 'user-guide/styling-your-docs.md'
- About:
    - 'License': 'about/license.md'
    - 'Release Notes': 'about/release-notes.md'

ドキュメント中に画像やgithubのページを含めたい場合

docs/以下のディレクトリに適切に配置すればよい 例えばGithubCNAREファイル、PNGフォーマットのscreenshot.png画像を追加したいとき、ファイルのレイアウトを以下のようにする。

mkdocs.yml
docs/
    CNAME
    index.md
    about.md
    license.md
    img/
        screenshot.png

あとはドキュメント中にマークダウン記法で書けばいいだけ。

Cupcake indexer is a snazzy new project for indexing small cakes.
![Screenshot](img/screenshot.png)
*Above: Cupcake indexer in progress*

テーマの設定

ドキュメントをどう表示させるか(サイトの見た目)を変更する場合、 mkdocs.ymlファイルを編集し、themeを設定します。

site_name: MkLorum
pages:
    - Home: index.md
    - About: about.md
theme: readthedocs

theme: readthedocsに設定すると、こんな感じ。

f:id:kimoppy126:20170708110548p:plain

ビルドインのテーマはmkdocsreadthedocsしかないぽいけどサードパーティーにはいい感じのが結構ありそう

サードパーティーのテーマは以下から入手可能
MkDocs Themes · mkdocs/mkdocs Wiki · GitHub

テーマのカスタマイズに関しては以下を参考に
Styling Your Docs - MkDocs

Templateの利用

ある程度整ったTemplateが配布されてたりする。 Templateから作った方が、いろいろ勝手がわかりやすい。

GitHub - BPA-CSIRO-Workshops/btp-manuals-md: This contains all material for Markdown version of BTP workshops

HTMLへの出力

Markdownで作ったファイルをHTMLに出力できる。mkdocs.ymlと同じディレクトリで、

mkdocs build

これにより新しくsiteディレクトリが作られる。

$ ls site
about  fonts  index.html  license  search.html
css    img    js          mkdocs   sitemap.xml

sitemap.xml filemkdocs/search_index.jsonといったファイルも作られる。
gitでファイルを管理している場合、siteファイルはgitの管理下に置きたくないので、以下のコマンドで.gitignore file"site/"を追加する。

echo "site/" >> .gitignore

感想

絵文字が使えなかったのがとても残念だけどかなり便利。というかMarkdownが便利。

参考

www.mkdocs.org

Webスクレイピングで、、

インターンの方でWebスクレイピングが必要になったので、お勉強。

shop.oreilly.com

f:id:kimoppy126:20170702162842p:plain

 

このHTML中の

<tr class="gift" id="gift1"><td>
<tr class="gift" id="gift2"><td>
<tr class="gift" id="gift3"><td>
<tr class="gift" id="gift4"><td>
<tr class="gift" id="gift5"><td>
をとってきたいんだけど、

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html, "html.parser")
for sibling in bsObj.find("table").tr.next_sibilings:
print(sibling)
でとってこれて、

from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html, "html.parser")
for sibling in bsObj.find("tbody").tr.next_sibilings:
print(sibling)

でとってこれないのがなんでかわからない。

AttributeError: 'NoneType' object has no attribute 'tr'
エラーから考えるとtbodyはタグとして認識されてない(?)ぽい

へるぷみー

O/Nの罠

4℃ O/N

お久しぶりである。

O/Nという表現、なんだかわかるだろうか?
OverNightの略である。
有機化学の実験プロトコルだとよくあるそうだが、自分の場合、一次抗体を抗原に反応させる際に登場した。

というか、今、登場してて、あれ、OverNightって、夜が明ければいいもんだと思ってたけど、実際どうなんだろ。。23:45だけど、明日の5時半には実験を始めたい。つまり6時間弱しか反応時間ないわけだけど、これってOverNightと言っていいんだろうか。。

少し調べてたら、基本的にOverNightは8時間以上を表すらしい。平均睡眠時間が8時間とかなのかな?

まぁでも、おそらくメーカー保証として、OverNightで反応しない抗体は商品として売れない。程度のものだと思う。つまり、品質保証の尺度として、使われているんじゃなかろうか。
賞味期限の原理と同じで、おそらく少しくらい短くても反応はすると考えられる。
ほとんどの食料を賞味期限が切れてから食っている自分からしたら、こんなあいまいな表現はギリギリを攻めてしまう。

抗体の質が良ければ室温10分でも検出されるらしいし、今回モノクロナール抗体を使ってるし。
たぶん大丈夫だろ。。

Grinnを使った統計解析

GrinnというRのパッケージを使って統合解析を行ったのでまとめておく。あくまでもメモスタイル。

Grinnとは

バイオインフォマティクスのプラットフォーム。Neo4jというアプリケーションで使える内部グラフデータベース、オミクス研究向けのRパッケージを含む。 グラフデータベースには、KEGGや SMPDB、ENSEMBLといったいくつかのデータベースを含んでいる。異なるネットワークの再構築が可能。例えば、

  • metabolite-protein-gene
  • metabolite-protein, metabolite-pathway
  • protein-gene
  • protein-pathway
  • gene-pathway

インストー

必要ソフト
  • R
  • shiny
  • 以下のコマンドを用いたRパッケージのインストー

      #Install devtools R package, 
      if not exist
      install.packages("devtools")
    
      #Install grinn package
      library(devtools)
      devtools::install_github("kwanjeeraw/grinn")
      library(grinn)
    

内部データベース

Human, Arabidopsis, Mouse, Rat, Saccharomyces cerevisiae and Escherichia coli k-12に対するデータベースが利用可能。Humanデータベースはデフォルトで利用可能。

Grinnのデータベースは以下から入手可能。 https://sourceforge.net/projects/grinn/

データベースの切り替え

  • Neo4jが必要

    • 起動

      $ bin/neo4j start
      Active database: graph.db
      Directories in use:
      ・
      ・
      ・
      Neo4j is already running (pid 20733)
      
    • 確認

      $ curl -H Accept:application/json 
      http://localhost:7474/db/data/
      {
      "extensions" : { },
      "node" : "http://localhost:7474/db/data/node",
      "relationship" : 
      "http://localhost:7474/db/data/relationship",
      "node_index" : "http://localhost:7474/db/data/index/node",
      "relationship_index" :"http://localhost:7474/db/data/index/relationship",
      "extensions_info" : "http://localhost:7474/db/data/ext",
      "relationship_types" : "http://localhost:7474/db/data/relationship/types",
      "batch" : "http://localhost:7474/db/data/batch",
      "cypher" : "http://localhost:7474/db/data/cypher",
      "indexes" : "http://localhost:7474/db/data/schema/index",
      "constraints" : "http://localhost:7474/db/data/schema/constraint",
      "transaction" : "http://localhost:7474/db/data/transaction",
      "node_labels" : "http://localhost:7474/db/data/labels",
      "neo4j_version" : "3.2.1"
      

      }

    • 停止

       $ bin/neo4j stop
      
  • データベースの確認、切り替え

      #Change the internal database by providing the database url, e.g. "http://database.location:7474/db/data/"
      setGrinnDb("http://localhost:7474/db/data/")
    
      #Check current internal database location
      getGrinnDb()
    

解析

  • fetchGrinnNetwork 生物学的ネットワークの再構築。Grinnの内部データベースを用いる
  • fetchCorrGrinnNetwork 加重相関ネットワークの算出とGrinnの内部ネットワークを用いたネットワークの拡張
  • fetchDiffCorrGrinnNetwork 差動相関ネットワークの算出とGrinnの内部ネットワークを用いたネットワークの拡張
  • fetchModuGrinnNetwork 表現型相関ネットワークの算出とGrinnの内部ネットワークを用いたネットワークの拡張
  • fetchGrinnCorrNetwork Grinn内部データベースを用いた生物学的ネットワークの再構築
  • input formats Grinnで使用できるインプットのフォーマット

fetchModuGrinnNetworkを用いた40サンプルでの解析

f:id:kimoppy126:20170612200928p:plain
こんな感じ。

ちょっと便利シリーズ

unicodedata モジュールが便利そう。

unicodedata.name(chr[, default])
文字 chr に付いている名前を、文字列で返します。名前が定義されていない場合には default が返されますが、この引数が与えられていなければ ValueError を発生させます。
unicodedata.decimal(chr[, default])
文字 chr に割り当てられている十進数を、整数で返します。この値が定義されていない場合には default が返されますが、この引数が与えられていなければ ValueError を発生させます。
unicodedata.digit(chr[, default])
文字 chr に割り当てられている数値を、整数で返します。この値が定義されていない場合には default が返されますが、この引数が与えられていなければ ValueError を発生させます。
unicodedata.numeric(chr[, default])
文字 chr に割り当てられている数値を、float で返します。この値が定義されていない場合には default が返されますが、この引数が与えられていなければ ValueError を発生させます。
6.5. unicodedata — Unicode データベース — Python 3.6.1 ドキュメント

クエリに渡される値を数値に変換しようとしてたら偶然みつけたモジュール。 使いそうなのでメモ。

int()とかstr()とかを使わなくて済む。 でもわざわざモジュールをインポートしなきゃならない。あれ、こっちのがめんどいか。。

どんだけ使うかで使い分けですかね。



あと、

dict型のgetメソッドがを知りませんでした。辞書にキーがなかった場合default値を与えられる。ってだけ。

test_dict = {'YEAR':'2017', 'MONTH':'6', 'DAY':'5'}
print(test_dict)
print test_dict_1.get('YEAR')
print test_dict_1.get('YEARS','Not found')

出力

{'MONTH': '6', 'DAY': '5', 'YEAR': '2017'}
2017
Not found

ただそれだけだけど、あると便利。

参考
Python dictionary get() Method

サラダチキンクッキング

 

コンビニのサラダチキンって、おいしくないですか?
先輩に糖質制限ダイエットしてる人がいて、昼ご飯よくサラダチキン食ってたんですけど、自分もこの前買ったらほんとおいしい。

いろいろ食べ比べたら、セブンのがやっぱ一番おいしい。

 

 

筋トレしてないし別にダイエットもしてないんだけど、サラダチキンがふと食いたくなる。

そんなとき、ありませんか?

 

ってことで作ってみよう!!

というのが今日の朝8時頃思いついたこと。

 

休日の過ごし方が最近暇人。
お金ないしこんくらいしかやることないんだ。

 

recipe.rakuten.co.jp

 

このレシピ参考にして作ってみよう。

 


暇なんだ。楽しみを料理に求めてるんだ。おいしくできたら研究室の永久保存食にしてやる。

 

 

 

あ、そういえば昨日、映画「何者」見ました。

 

リアルだなぁ

有村架純かわいいなぁ

タバコ吸いながら話すのえもいなぁ

 

くらいしか思いませんでした。以上です。

優先事項

 優先してやるべきことが、わからなくなる問題

 

やりたいこと、やらなきゃいけないことはたくさんあるし片っ端から手つけてるけど全部中途半端になってる気がする。
一個一個が重すぎて、達成までが遠すぎて、緊急度優先で作業を進めてる。

 

今やりたいことをとりあえずリスト化

 

  • 研究室の論文発表、PRについていくために研究内容について基礎的な情報のインプット(教科書、論文)
  • 基礎実験の復習。作業。
  • PythonでWebアプリ開発できるようになる
  • Pythonコーディング力もっとつける
  • Rで統計解析に詳しくなる(Rの基礎から)
  • 上に付随して統計に関する知識のインプット
  • インターン先でできることを増やす。バイオインフォに関する知識のインプット
  • 院試の勉強(生化学から)
  • Scienceの情報にもっと触れる。現状の科学事情に詳しくなる。
  • 興味のある遺伝子分野の勉強(ハートウェル遺伝学)
  • 英語の勉強(for 論文、学会)

がぁ。

まだまだ出てくるけどとりあえずこんなもんか。。
ぁあああやらなきゃならんのに時間ないし焦る。

 

一日ずっと何かをしているけど終わってみればなにした今日。。って感じ。

 

 

とりあえず、なにやろう。

 

プログラミング系はとりあえず後回しにするか。。
でも頭が疲れた時にはちょうどいいんだよなぁ…