Subscribed unsubscribe Subscribe Subscribe

stuff

あれこれ

Jim Dale の Voldemort の話

Jim Dale のナレーションする Harry Potter オーディオブックを 4 巻まで聞いた。3 巻まででも既にその上手さに感心しつつ臨場感たっぷりだわと喜んで聞いていたのだけど、4 巻に入って今までのは余興であったことを知る。Voldemort の声!!

1巻にも Voldemort は出てきてはいるのだが、Quirell の頭にへっついててほぼ瀕死だったのであまり迫力はなかった;のに対して 4巻 The Goblet of Fire で謎のスープの中から復活を遂げた 100% Voldemort の勢いと自己陶酔っぷりがすごくて、それが Jim Dale で倍増された。4 巻冒頭の The Riddle House での死にかけな hissing voice も不気味でよかったが、ラストの Harry と Death Eater たち前でのモノローグ、そして Harry の Expelliarmus と対抗したときの high-piched screeching な Avada Kedavra! が最高だった。聞いててビクッとした。

あと Dale がいつも Voldemort の t を発音しないのがなんなのだろうと思ってたらそれが正確な発音だと JK Rowling が 2年前にツイートしたらしかった。映画1作目で t の発音を出してしまってナアナアになったらしい。

映画は 1-2 しかみていないのでヴォルデモー氏が一体どんな雰囲気だったのかは知らない。…と思っていま Voldemort 復活のところの youtube を見た。

プロットは追ってるのだけど、面白さが激減している。子供向けに怖くなくしたのかしら?見た目的にも Voldemortは赤目に猫のようなスリットが入ってるはずだし、声も迫力もあまりない…。あと本では Wormtail が whimpering mess で地面にうずくまって震えて泣き喚いて許しを請うてるのを Voldemort が飴と鞭でいたぶってるのがさらに残虐性を増幅させてて恐ろしいし面白いのだが、映画ではむしろ Wormtail が優秀な僕だった。手首切って治してもらうのがスムーズすぎる。そもそも Wormtail も Death Eater も Voldemort のことを「クソ恐ろしい〜ヒエ〜ヤベ〜」って思ってなさそう。 Malfoy とか Voldemort の前で偉そうにしすぎだ!頭が高い!誰だと思ってるんだ、He who must not be named だぞ!という気持ちに

まあその他いろいろ youtube をみてみたりすると Sirius と Lupin が35前後のはずなのにオッサンすぎだし、とくに Lupin は優しくナイーブなはずなのに(←狼男なのにナイーブだというのが彼のキャラクターの特徴を作っているのに〜)映画は(というかyoutube)なんか alpha でマッチョな感じだし、話や予算を削るのはしょうがないにしても、キャラクター設定や役作りをもうちょっと深めてくれたら映画もよりよくなったんじゃないかしらと勝手に思っている。と思う気がしていままでなるべくハリポタ映画からは離れていたのだけどいまこうしてチラ見してみたらやはりそう思った。ただ Hogwarts のセットとか Quiddich とかテーマ音楽とかはとてもすばらしい。

以上、とても今更な話ではある。

次に聞くのは 5巻から7巻でとくに Dolores Umbridge とか Bellatrix Lestrange がどう Jim Dale によって表現されるのかがとても楽しみである!あと Kreacher! Dale は Dobby も Winky も超素晴らしく(とくにWinky が Hogwarts kitchen でバタービール読みまくって酔っ払ってしゃっくり出まくってるところとか) Kreacher は一体どうなる!たのしみ。

ssrA タグ

ssrA がどう働くのかを理解せずにいままで使ってきたが、大腸菌以外の細菌でも使えるかが気になったので調べた。

ソース

ssrA?

  • ssrA は 250~400 bp 程度の RNA
  • tRNA (Ala) とmRNAの両方の機能を持っている。tmRNAとも呼ばれる。
  • Andersen et al が最後の3aaを LAA (wt) から LVA/ASV/AAV に変えて分解速度の違うバージョンを作った。これを使って LVA tag とか ASV tag とか呼ばれたりもする。

はたらき

  • コーディング配列の途中で切れてるmRNAなどによって止まってしまったリボソームをみつけたら:
    • まず tRNAの機能でアラニンをくっつけ、
    • 続いて mRNAの機能で N-AANDENYALVA-C を翻訳して
    • C末端にタグがついたポリペプチドとして放り出される

f:id:yashima1:20170221051615p:plain:w400
Karzai 2000 Nat Structural Biol

  • タンパク質分解
    • sspB が ssrA tag の前半に結合、clpX が後半部分に結合し、分解される

f:id:yashima1:20170221052622p:plain:w300 f:id:yashima1:20170221052022p:plain:w300
McGinness 2006

ほかの微生物

  • もしその生物が ClpXP システムをもってるなら、tmRNAを調べて peptide tag のコーディング領域を使えばいいはず
  • The tmRNA website
    • ゲノムが読まれてる生物なら、生物名またはNCBI Accession No をいれるだけで、tmRNA やアダプターペプチド配列などを自動的に吐き出してくれる!

matplotlib: ヒストグラム

matplotlib.pyplot.hist を使う

f:id:yashima1:20170220000426p:plain:h250 f:id:yashima1:20170220000717p:plain:h250

# -*- coding:utf-8 -*-    # 日本語

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('ggplot')

# データの読み込み
data = np.transpose(np.genfromtxt('data.csv',delimiter=',',skip_header=1))
name = ("data1","data2")

# Fig のハコの作成
fig, ax = plt.subplots()

# ヒストグラム
ax.hist(data,               
        label = name,
        bins = 15,         # 棒の数
        range = (0,80),    # x軸のレンジ
        )

# グラフのラベリング
ax.legend()    # レジェンドの表示
ax.set_xlabel("Diameter (nm)")
ax.set_ylabel("Count")
ax.set_ylim([0,35])

plt.show()

外部 python module を OSX にインストール

  • pythonのことはよくわからないが見よう見まねで dnaplotlib module を mac にインストールする

1) module をダウンロードして site-packages に保存

  • ダウンロードした dnaplotlib ディレクトリを /Library/Python/2.7/site-packages に放り込む

というのを決めた経緯

sudo find / -name "site-packages"

でしまう場所を探したところ、いくつかでてくる:

/Library/Python/2.7/site-packages
/opt/local/lib/python2.7/site-packages
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
  • /opt/local/ (Unix系)と /Library/ (OSX) は機能がリダンダントなのかしら?中身をみてみると /Library/ には大量のファイルがあるのに対して /opt/local/ には2つしかない。なのでとりあえず /Library/ にいれることにした
  • 公式ページ にいろいろ書いてありそう

2) .bash_profile に $PYTHONPATH

以下を ~/.bash_profile に足す(編集後に teminal の再起動か source ~/.bash_profile する必要あり)

export PYTHONPATH="$PYTHONPATH:/Library/Python/2.7/site-packages"
  • いちおう$PYTHONPATHと書いたが、もともと空っぽ変数のようである(printenvで確認)
  • 他にもやり方はあるかも(sys.pathにappend する?)(公式ページをいつか読む)
  • まあとは言っても terminal (bash) を起動するたびにこれが読み込まれるわけだし、ちゃんと働くので、とりあえずこれでよしとする

おわり

これで import dnaplotlib できるようになる

matplotlib: CSV ファイルの読み込み

  • matplotlib グラフ描画のための csv ファイルの読み込み方について。
  • この記事で棒グラフを書いた。こんどはデータファイルを外部から読み込みたい
  • numpy.genfromtxt, numpy.loadtxt, pandas.read_csv を使ってみる
  • まとめ:全部あまり変わらない気もする。敢えて言えば numpy.genfromtxt

f:id:yashima1:20170219012510p:plain:h250   f:id:yashima1:20170219005817p:plain:h250

name = ['S1','S2','S3','S4','S5','S6','S7','S8','S9','S10']
value = [9.77,2.36,2.52,2.08,8.88,2.34,2.13,9.75,5.39,2.09]
stdev = [0.14,0.61,0.60,0.28,0.17,0.65,0.48,0.87,0.52,0.23]

numpy.genfromtxt を使う

import numpy as np

## データの読み込み
# 1) 数値のみ (dtype=np.float)
data = np.genfromtxt('data.csv',delimiter=',',skip_header=1)

# 2) 数値+文字列(dtype="string") 
data = np.genfromtxt('data.csv',delimiter=',',dtype="string",skip_header=1)

# データの分解
name = data[:,0]
value = data[:,1].astype(np.float)    # string を float に変換
stdev = data[:,2].astype(np.float)
  • dtype=None にするとそれぞれの要素は string や float で読み込めるのだが、np.void型になる。ここから column をどう取り出せばいいのかがわからん。ので使わない。
  • よって dtype=“string"として全部文字列で引き出す。もちろん数回に分けてそれぞれdtypeを分けてもいいのだけど、このように後から np.array のデータ型を変える方がラクな気がする
  • dtype 未入力 or dtype=“float” とすると、文字が読み込まれないのでダメ(数字のみのデータならあり)

numpy.loadtxt を使う

import numpy as np

# 1) 数値のみ
data1 = np.loadtxt('data.txt',delimiter=',',skiprows=1)

# 2) 数値+文字列(全部 string として読み込む)
data2 = np.loadtxt('data.txt',dtype="string",delimiter=',',skiprows=1))

# データの分解は上記 np.genfromtxt と同様
  • ここではほとんどnp.genfromtxtと同じ?
  • np.genfromtxtdtype=None で違う型が取り出せるが、loadtxt ではできない。これがnp.genfromtxtの利点かもしれないが、その後の numpy.void を使いこない私からすればあまり変わらない
  • 読み込みスピードは pandas.read_csvに比べて 15倍遅い(STOP USING numpy.loadtxt())らしいので、使わなくてよいならば使わないほうが無難?

pandas.read_csv を使う

import pandas as pd

# データの読み込み: DataFrame 型
data = pd.read_csv("name.csv")    # header がない場合は header=None

# データの分解:DataFrame をもっと聞きなれる np.array に変えてみる
name = np.array(data.iloc[:,0])
value = np.array(data.iloc[:,1])
stdev = np.array(data.iloc[:,2])
  • column の data type が全部一緒ならばそれぞれ string / float として渡されるので変換する必要はなし

まとめ

全部に共通して (1) データファイルを読み込む (2) 使いやすいように np.float in np.ndarray に変換する という意味では手間は同じだった(np.void が使いこなせれば np.genfromtxt のほうが簡単かもしれない)。どれかを優先して選ぶ理由は私には特にないが、敢えて言えば、 import pandas しなくてすむほうがいいから numpy を使い、そして速さやその拡張性から np.genfromtxt のほうがいいかな。というわけで np.genfromtxt をとりあえず使うことにする。

参考

matplotlib: 棒グラフ

たとえばこういうデータ:

f:id:yashima1:20170219012510p:plain:h200

今回はこのデータをスクリプトに直接打ち込む。ファイルからの読み込みはこの記事

import numpy as np
import matplotlib.pyplot as plt
plt.style.use('ggplot')

# データの用意
name = ['S1','S2','S3','S4','S5','S6','S7','S8','S9','S10']
value = [9.77,2.36,2.52,2.08,8.88,2.34,2.13,9.75,5.39,2.09]
stdev = [0.14,0.61,0.60,0.28,0.17,0.65,0.48,0.87,0.52,0.23]

# 棒グラフの準備
N = len(name)    # サンプル数
index = np.arange(N)    # 場所インデックス
bar_width = 0.7    # バーの幅(0から1の間)

# 棒グラフを描く
fig, ax = plt.subplots(figsize=(3,3))
ax.bar(index, value, bar_width, yerr=stdev)    # 棒グラフ:場所、値、幅、エラー
ax.margins(0.04,0)    # y軸とバーの間にスキマ

# ラベル
ax.set_xlabel('Samples')
ax.set_ylabel('Value')
ax.set_xticks(index + bar_width / 2)
ax.set_xticklabels(name)

plt.show()

f:id:yashima1:20170219005817p:plain:w250

参考

matplotlib: 画像サイズの設定 と 保存

matplotlib でグラフ描画 → ベクター形式で保存 → イラレで編集 という流れで作業を進めることが多い。つまり、matplotlib で厳密な修飾はしなくていいものの、サイズの大きさが毎回あってるというだけでイラレでの編集が簡単になる。そこでサイズの変え方と保存方法について学ぶことにする

まず Figure size & dpi の確認

画像サイズの初期設定は以下から確認

import matplotlib.pyplot as plt

# make fig & plot
fig, ax = plt.subplots()
ax.plot((1,2),(1,2))

dpi = fig.get_dpi()
size = fig.get_size_inches()
print "DPI: %i" % dpi
print "Size in inches: %.2f x %.2f" % (size[0], size[1])
print "Pixels: %i x %i" % (dpi * size[0], dpi * size[1])

私は 80 dpi, 8 x 6 inch であった。初期設定を変えたい場合は ~/.matplotlib/matplotlibrc 内の figure.figsizefigure.dpi を変えればいい。

Figure size & dpi を設定する方法

import matplotlib.pyplot as plt

# 1) Fig 作成時に指定する
plt.figure(figsize=(8,6), dpi=100)    # 8 inch x 6 inch, 100 dpi

# 2) Fig 作成時に指定するやり方その2:subplotsを使う。一番便利?
fig, ax = plt.subplots(figsize=(3, 3), dpi=100)

# 3) あとから指定もできる
fig2 = matplotlib.pyplot.gcf()     # figハンドルを指定してない場合
fig2.set_size_inches(18.5, 10.5)
fig2.set_dpi(100)

画像の形式を指定して保存

import matplotlib.pyplot as plt

# make fig & plot
fig, ax = plt.subplots()
ax.plot((1,2),(1,2))

# 保存のときに、ファイル名の拡張子によってファイル形式を指定する
fig.savefig('test.pdf', transparent=True)
fig.savefig('test.png', dpi=300)  # savefig で dpiも指定できるけど、上記で fig 作成時にやってもok
  • ラスター形式:png
  • ベクター形式:pdf, ps, eps and svg …らしいが、私が eps と ps を指定するとファイルが壊れている。なぜ?
    • pdf がベスト。イラレでも編集しやすい。
    • svg の場合、デフォルトだとテキストがアウトライン化される。 ~/.matplotlib/matplotlibrcファイル(なければ作る)の svg.fonttypenone に変えればテキストデータとして保存される。ただしウェブ上で使う場合などブラウザなどによっては開けなくなるので気をつける。基本的に使わなくていい。
    • transparent=True とすれば、Fig, Axes, Axis などの背景が全て透明になる。

テキストの設定

1) テキストをイラレで編集できるようにする

  • matplotlib のデフォルトだと Type 3 font とやらに指定されているのだが、イラレで開くとアウトライン化されてしまう。テキストとして読み込むには True Type font に変える必要がある。そこで ~/.matplotlib/matplotlibrcファイル(なければ作る)の pdf.fonttypeps.fonttype42 にすれば ok… 42 は TrueType のことらしい (The answer to Life the Universe and Everything)

2) フォントを変える

  • これも初期設定だとDejaVu Sans, Bitstream Vera Sansなどになっていて、イラレにフォントがないのでエラーがでてウザイ。そこでmatplotlibrcfont.sans-serif の一番最初に Arial などをもってくることで回避。
  • でも残念なことに Helvetica が使えない; mac OSX では Helvetica は dfont としてインストールされており、これを TrueType に変えることで matplotlib 出力として使えるようになる。でもべつにそこまでしなくても Arial でいい。

3) 最適なフォントサイズ?

  • 論文の場合 6-8 pt にしろと言われる
  • プレゼンの場合大事じゃない数字は12 pt くらい、大事な数字/ラベルは 20-30 pt
  • matplotlibの初期設定は 10 pt くらいなのでまあちょうどいい(変えるならば matplotlibrc など)

発表や資料作成に最適なサイズ?

サイズ

  • A4 や Letter の横幅が約 8.5 inch
    • グラフは3 inch くらいがちょうどいい
  • PPT の標準スライドは 10x7.5 inch
    • 巨大グラフならば 8x6 inch
    • 小さめなグラフならば 3x3 inch

f:id:yashima1:20170215112510p:plain:h150 f:id:yashima1:20170215112647p:plain:h150

DPI/PPI (pngの場合)

  • 印刷の場合は 300 dpi
  • スクリーンの場合は 100 dpi で十分
    • macbook pro 15 inch は 220 ppi
    • プレゼンに使う 80 inch 巨大スクリーンも <100 ppi のものが多い

matplotlib: Figure と Axes の概念

f:id:yashima1:20170214045418p:plain:w500

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

# スタイル
plt.style.use('ggplot')

# データを用意
x = np.arange(0,15,0.1)    # 0~14.9 まで 0.1 おきの np.array
y1 = np.sin(x)
y2= np.cos(x)

# やり方1:
plt.plot(x, y1, label='line1')
plt.xlabel('x')
plt.ylabel('y')
plt.title('title')
plt.axis([0,15,-2,2])    # [xmin, xmax, ymin, ymax]
plt.legend()
fig1 = plt.gcf()    # "現在のfigure" をしまう(gcf = get current figure)
ax1 = plt.gca()    # "現在のaxies" をしまう (gca = get current axis)

# やり方2:
fig2, ax2 = plt.subplots()    # 最初から figure & axes にしまう
ax2.plot(x, y1, label='line1')
ax2.set_xlabel('x')
ax2.set_ylabel('y')
ax2.set_xlim([0, 15])
ax2.set_ylim([-2, 2])
ax2.legend()

# 後からfigure/axes を呼び出せる
ax1.plot(x, y2, label='line2')
ax1.legend()

ax2.set_ylim([-1,1])
ax2.set_title('title')

# 出力
plt.show()

f:id:yashima1:20170214031648p:plain:w600

Reference

独習 matplotlib

簡単なグラフの書き方

# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np

# スタイル
plt.style.use('ggplot')

# データを用意
x = np.arange(0,15,0.1)    # 0~14.9 まで 0.1 おきの np.array
y = np.sin(x)
y2= np.cos(x)

# やり方1:
plt.plot(x,y,label='line')
plt.xlabel('x')
plt.ylabel('y')
plt.axis([0,15,-2,2])    # [xmin, xmax, ymin, ymax]
plt.title('title')
plt.legend()

# 出力
plt.show()

f:id:yashima1:20170214031553p:plain:w300

備忘録

気になるものごと

  • トラスポゾンの種類/宿主/配列特異性
  • セレクションマーカー同上(まとめ論文とかないのだろうか?)