(並行世界)Pythonでアプリつくる話 その2

前回の続きからでございます

プロジェクトの作成までは終わったので、ちょこちょこと設定していきます

前回、Djangoを使ってプロジェクト作成までしたので、ディレクトリ構成はこんな感じのはず

$ tree -L 1 .
.
├── bin
├── include
├── lib
├── manage.py
├── pyvenv.cfg
└── test_project

$ tree -L 2 test_project
test_project
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

いろいろファイルができているのでそれぞれの役割を説明し............ない! めんどくさいし!必要なときに調べたらいいじゃん! とりあえず大事なファイルは

manage.py

settings.py

この2つ! ということで、次に行きます

settings.py

色々設定したいので、その名の通りsettings.pyを見ていきます

ひとまずエディタでこれを開きます。 長々といろいろ書いてありますが、とりあえずタイムゾーンの設定をします サーバーっぽいですね

# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/

LANGUAGE_CODE = 'ja-JP'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_L10N = True
USE_TZ = False

LANGUAGE_CODEとTIME_ZONEを変えます これはまぁ、分かりやすいやつ

USE_TZも変えた なんだこれ、、、TZはTimeZoneかな?

いろいろ調べてみると、TZはやっぱりTimeZoneでした 日時を取得するときとかに、USE_TZがtrueになっていると、タイムゾーン情報が日時情報とともに記録されるらしい でも、TimeZoneを使う場合はpytz(pythonタイムゾーン変換ライブラリ)をつかってあげるべきらしいので、今日のところはFalseで進めます いろんなタイムゾーンからのアクセスをちゃんと管理するなら、ここはTrueでpytzを使うようにしよう(忘れるなよ、未来の私)

再開)

サーバーについてはいつのまにかそれっぽいものができてくるので、ここではサーバーで使用するデータベースの構築をする

データベース

サーバーで管理する情報は大きく分けて2通りの管理方法がある!(ぶっちゃけ、1つだ)

  1. テキストに書き込んでおいておく
  2. データベースを組む

迷うことなくデータベースを組みましょう 最近は便利なもので、簡単にセットアップできるようです

データベースと言えば、SQLiteやらMySQLやらPostgreSQLやらなにやらかんやらありますが、こういうテスト用みたいな軽量サーバーはSQLite一択ですね

さっそく入れましょう......

!!!?!?!?!

!?

なんてこった.... 入っててよかった!! 堤真一の気持ちが今わかった

https://i.ytimg.com/vi/7WewJcm-kY0/maxresdefault.jpg

さっきのsettings.pyの中に最初っから書いちゃってますね ありがてぇ

# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

入っているとわかったらもう作るだけ! migrateしましょう!!!

....

migrate???

はい、migrateです

マイグレートといいます

migrateは、データベース内のデータを保持しつつ、構成し直せちゃう的なものです 細かいところはまた誰かが解説してくれているので追々

$ python3 manage.py migrate

Operations to perform:
  Synchronize unmigrated apps: messages, staticfiles
  Apply all migrations: contenttypes, admin, sessions, auth
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying sessions.0001_initial... OK

こんな感じで完了です

はっっや!!!

すっげ!!!

ジャンゴさん半端ないっす

マジ半端ないっす

ありがとう、先人の皆様

プログラミングって、ほんと偉大な方々のお陰で誰でも学べるようになってるよね

すばらしい

でも、すっ飛ばしたところはちゃんと理解しておかないと痛い目を見るのもまた、乙だよね

サイトを立ち上げるぞー

実はジャンゴさん、はじめてのサイト的なものを仕込んでおります どこまでも気が利く ありがとう

$ python3 manage.py runserver

これでサーバーが動き出す

Performing system checks...

System check identified no issues (0 silenced).
December 14, 2017 - 23:55:53
Django version 1.8, using settings 'test_project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

すげぇ、ガンダムをたやすく扱うアムロになった気分だ

いや、この速さはもはやシャア・アズナブル.....

立ち上がったサイトをみるには下記のアドレスを適当なブラウザに入力するだけ

http://127.0.0.1:8000/

はい簡単

f:id:motchy83:20171214235713p:plain

しかもめっちゃこれから頑張ってね的なこと言ってる

ジェントルすぎるわ

興奮冷めやらぬ感じですが、今日はここまで

(並行世界)Pythonでアプリつくる話

バケガクばっかりやってられっか!!

というつらい気持ちにならないように、プログラムのことも並行してやりましょうという日

なぜPython?

バーロォ、... 好きだからだよ

https://orig00.deviantart.net/841a/f/2013/005/6/6/detective_conan_derp_png_by_jinsuke04-d5qh5kf.png

アプリ化って何使うの

1, ... 2, ... ジャンゴ!!

http://blog-imgs-96.fc2.com/o/n/e/onepiece1919/20160806051527b3d.png

そう、かの有名なDjangoです

こっちです

https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Django_logo.svg/1200px-Django_logo.svg.png

本題

Djangoとは?

今日の参考文献はこちら

workshop_tutorialJP · GitBook

とりあえずテスト用にpythonの仮想環境を立ち上げる

$ mkdir test_django
$ cd test_django
$ python3 -m venv django_env

ちゃんとできているか確認します

$ tree -L 1 django_env

treeはHomebrewでいれとこう

こんな感じで出たらOK

django_env/
├── bin
├── include
├── lib
└── pyvenv.cfg

今日の時点で最新のDjangoはVer.2.0らしいので、それを入れる

$ pip3 install django==2.0

ではまず、プロジェクトをつくっちゃう

$django-admin startproject test_project

無事インストールできると、こんな感じ

$ tree -L 1 .
.
├── bin
├── include
├── lib
├── manage.py
├── pyvenv.cfg
└── test_project
$ tree -L 2 test_project
test_project
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

manage.pyおよび、test_projectができました

つづきはまた今度〜

質量を分析するとはなんたるか

仰々しいタイトルで始めてしまいましたが、前回の続きです。 理論的に計算したモノアイソトピック質量みたいなものをいつまでも扱うのであれば、大した難しさはないのですが(知らんだけ)、実際に分析するとなると話は別らしい。

実分析の結果をどうみるか

質量分析計の単純性能は

  1. 分解能(Resolution)
  2. 質量精度(Mass Accuracy)

で決まる。 質量分析計で採取したデータは横軸にm/zをとったスペクトルが膨大に集まったもので、このスペクトルはイオン検出器が受け取った電気的な信号の波形である。この波形がシャープであればそれだけ、より精度良くm/zを求めることができる。一方で、理論値と計算値のズレについても着目しなければならない。たとえシャープな波形が得られたとしても、ズレていては元も子もない。つまり、質量精度はAccurate MassとExact Massの差である。

質量精度がいいと、何がいいの?

質量精度がいいと、分析して得られたスペクトル情報から、もとの分子式を精度良く推定することができるようになる。

ちなみに、質量精度の単位はない。 {質量精度 = {|理論値 - 測定値|}/{理論値}}だからである。 しかしまぁ、これをよく見ればわかるのが、m/zが大きいところを対象に計算すると、単純に分母が大きくなるので質量精度は小さくなりそうだ。 質量精度は小さければ小さいほど、良い値である。 つまり、どれくらいのm/zを対象にして計算した質量精度か、というところを明記しておかないと、大した意味をなさないようだ。

多価イオン解析の足がかり

この質量精度は多価イオン解析にとって最も大切な考え方。 そもそも多価イオン解析とは、多価イオンとして検出されるものがあり、これは便利だぞ、と言わんばかりに計算し、もとの分子式を言い当てようというものだからである。 多価イオンとして検出される代表格がタンパクである。 検出されたものが何価なのかがわからないことには、質量が決まらない。そこで、スペクトル間のm/z差を見る。多価イオンみたいなものは、だいたいm/z差が1くらいの感覚でスペクトルとしてでてくる性質がある。しかし、実際のスペクトルを見ると「あれ?0.5くらいしかないぞ?」となる。ここでm/zは電荷数で割っていたことを思い出し、0.5×価数 = 1的なことなんだなと思えば、2価であることが分かる。つまり、 価数は、m/z差の逆数 でだいたい分かるのである。

今日はここまで。。。

質量分析データの正しい見方を学ぶ回

ざっくりとした方針にしたがっていくと、まずは多価イオン解析を学ぶそうだ(先週の私、談。) ちょっとこれまたざっくりとしすぎたなという感は否めないので、もう少し細分化してこつこつやっていくことにします。

とりあえず 質量分析データの正しい見方をしっていますか?

これを理解しよう。キソのキソが大切とか、有名な予備校先生がテレビで言ってた!!

同位体存在比を忘れない

原子の相対質量は中学校で習うやつね。{^{12}C}を基準とした質量って習ったやつ。 窒素Nは中性子の数がひとつ違いになっている質量数14の{^{14}N}と15の{^{15}N}があるので、これらに存在比(誰かが頑張って調べたんだろう) で平均したものが原子量ということでした。

単位がややこしすぎる

  • u :(ゆー)って読むらしい。
  • Da:(ダルトン)って読むらしい。名前つけちゃう人多いよね、うん。でも案外覚えやすいのよね。そういうのって。

これらは「原子の相対質量」に対する単位だそうな。つまりまぁ、10uだったら、{^{12}C}の10倍ですよってことらしい。

  • m/z, exact mass質量分析やるならこの単位にも慣れておいてねってところ。

m/zは質量数を電荷数で割ったものということで、いろいろ細かい風習なりルールがあるらしい。このあたりは質量分析学会が定義しているらしいので、そっちを参照するなりしよう。 電荷数はまぁなんとなしに分かるが、質量数ってなんだろう、って話が大事。

質量数は分子量じゃあ、ありません これは、さっき出てきた同位体もごちゃまぜにして計算しないでねっていうこと。 じゃあ、何を使うかというとモノアイソトピック質量。 モノアイソトピック質量は天然存在比が最大の同位体質量ということなので、単位はuかDaです。また、精度も{1×10^{-3}}以下まで計算する必要があるそうな。 これは、質量分析計はm/zで分離できるので、同位体は別物として出てくるからでした。分子量でまとめちゃったらダメですね。

*1 *2

次回は「質量分析計の性能」から再開しますー

*1:モノアイソトピック質量は計算上の質量で、ExactMassと呼びます

*2:本当に計測した質量はAccurateMassと呼びます

いい感じのソフトウェアをつくりたいというざっくりとした目標で走り出したらどうなるかを体現する予定

何がしたいのか

化学系企業で働いていると感じる 「めんどくさい」 を改善したい、ただそれだけ

ざっくりすぎる方針

  1. 多価イオン解析をまなぶ
  2. 世間のツールをあさる
  3. ちょっと数学力でがんばる
  4. よさげな言語で記述する
  5. 良さげなツールで公開する

以上