python関連ウェブ資料
このページにpythonに関する個人的なメモがあるが,もっと系統的に書かれたウェブ上の資料としては次のようなのがある.自分で探して勉強すると良い.
pyenvで環境構築
pyenv
というツールを利用すると,簡単に科学技術計算のためのpython環境を整えることができるから,使い始める最初に行うべきと思う(2017-04-11).Anacondaという便利ツールもあるが,営利企業による提供なので,ここではpyenv
を記載しておく(pyenvで十分に簡単なので).
以下のようにしてGitHubから取ってきてホームディレクトリに置く.
~/.bashrc
などに,
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
のような設定を書いてパスが通るようにする.
以下のようにしてインストールしたいバージョンを探す.
numpy
やscipy
など,科学技術計算に必要なものをまとめてインストールしてくれるanaconda-4.0.0
を指定してインストール.
二行目のglobal
でマシン全体のデフォルト設定を指定している.
とすることで,現在そのマシンで利用可能なバージョンを確認できる.
ソースコードの文字コードを指定
下記のように,先頭の次の行にコメント行としてutf-8
指定を記述しておく.
数値を文字列に変換
例えば,
のようにすれば,変数nの値が代入される.この時の(date,year)をタプルと呼ぶらしい.
文字列に数値を代入する際には,この%の後にタプルとして列挙すれば良いらしい.
print文だけでなく,文字列の表現でならば何処でも使用可能らしい.例えば,
のようにすれば,連番ファイル名のファイルを作成可能.
どの方法が新しい・古いか知らないが,他の方法として,次のような2つの方法がある.2つ目のものが短くて分かりやすい.
配列
arrという配列の宣言として,
とすれば,何も入っていない長さ0の配列ができる.
配列に要素を加える場合,
とすることで加えることができる.
なので,1から10までの数値の配列が欲しいときは,
とすることで,arr=[1,2,3,4,5,6,7,8,9,10]
となるハズ.
他に,次のような内包表記というものがあり,この方が速いし,読みやすい?
for文とrange()
とすると,
i= 1
i= 2
i= 3
i= 4
i= 5
i= 6
i= 7
i= 8
i= 9
となる.10は含まれない.
glob()
連番ファイルなどを編集するのに便利なクラス.
などとすれば,001/hoge001,…, 002/hoge001,…, のようなファイルに対して処理を行える.
importしているモジュールのファイルの場所を特定する
そのモジュールの中身を調べたい時などにまずはファイルの場所を調べなければならない.
optparseを使って引数をとる
optparseよりは次のdocoptの方が圧倒的にエレガントと思うのでそちらをおすすめする
http://docs.python.jp/2.6/library/optparse.html
を参考にした.
上記のようにして引数をとることができるようになり,自動的に-h
オプションが追加され,
ヘルプを表示できるようになる.
docoptを使って引数をとる
usageやoptionsをdocstringに記述しておけば,それを解析してコマンドライン引数をとってくるということをやってくれる.
説明書を書いたらそのまま動くものができるみたいな素晴らしい方法.
下記参考:
例えば,
上記のようなプログラムを作ると,以下のように,ヘルプメッセージはそのdocstringそのものだし,そのdocstringを解析して,オプションや引数を辞書型変数に代入してくれる.
簡単で便利.
YAMLの書き込み・読み込み
YAMLはデータを人間にとって見易いテキストとして保存するための言語.
Python用にはいくつかモジュールが存在するらしいが,PyYAMLというやつが一般的らしい.
のようにして,load
とdump
を行うことができる.
numpy arrayデータのYAMLの書き込み・読み込み
のように,list型とnp.array型との間の変換を行って,YAMLとして扱えばよし.
クラスインスタンスを返すclassmethod
上記のようなclassmethodを用意すると,
とすることで,SomeClass
のインスタンスを作成できる.
__init__()
を用いたクラス作成とは別の方法でクラスを作る際に使える.
subprocessを使った並列処理
並列処理にはホントはmultiprocessモジュールを使うべきなのだろうが,ここではsubprocessを用いた場合のやり方を.
のようにして用いる.
shell=True
というオプションを指定すると,cmd.split()
のような渡し方ではなく,文字列をダイレクトに渡してShellで実行するようになる.
そのため,セキュリティ上は少々問題があるが,セキュリティが問題とならない状況ではこの方が楽と思われる.
並列実行する場合は下記のようなコードとなる.
簡単な時間計測
以下のように,time
モジュールを利用して,開始時間と終了時間の差を秒で計測できる.
loggingの利用
参考
参考であげたリンクで,とりあえず以下のようにして,loggerとhandlerを生成すべしと書かれている.
主要な関数では,loggerを引数で受け取って設定できるようにすべしとも書かれている.
こうすることで,この関数をライブラリとして利用するときの利便性があがるらしい.
Jupyter Notebook
とするとウェブブラウザでpythonプログラミングができる.
- ipythonからjupyterに名称変更されて以降,pythonだけでなくいろいろな言語に対応している.
- ウェブブラウザで実行するからといってネット接続が必要なわけではない.
- シミュレーションのための実験ノートのような位置づけで,カードという単位でプログラムを実行していくことができ,
markdown形式の文章も挿入できるから,どのような数式をプログラミングして結果としてどのような結果が得られたかのグラフ描画までを一つのノートにできる.
Jupyter Lab
現在はまだ開発中とのことなのだが,ほとんどのことは問題なく使える.
以下のようにインストールして起動すればよい.
自作モジュールimport
上記のような構成のnotebook my_note.ipynb
の中で,src/my_module.py
を import したい場合,notebookの中で次のようにパスを指定して import する.
Python tips