Flask-Classy

blueprintと何が違うのかなと。

クラス名とメソッド名からURLが自動的に決められるのが、brueprintよりも便利かなぁ。

今度使ってみる。

pythonのsubprocessを使おうと思った

pythonで外部コマンドを叩くときにos.systemにするかcommands使うか迷ったりするんだけどpopenもあるしsubprocessもあって何使えばいいのかさっぱりわからん。

という状態だったんだけど、subprocessを使うのが正解らしい。

subprocess モジュールは新しくプロセスを生成して、そのプロセスを扱う一貫したインタフェースを提供します。それは従来からある他のモジュールよりも高レベルなインタフェースを提供します。そして os.system(), os.spawn(), os.popen(), popen2.() や commands.() のような従来の関数の置き換えを目的としています。

そんなわけでsubprocessを使っていこうと思った。

今週の土曜日(4/13)はShizuoka.pyです

今週末はShizuoka.pyなので、興味があれば参加してみてください。

僕はこの土日で発表資料大体作り上げ、あとは行くだけになったので気楽です。最近pythonでpptxを作ろうかと思っていてスライド作ってみたのでそれをLTに入れておきました。あとSphinxの話でもします。

それから、懇親会はPhotoに決まりましたので、現時点で参加が濃厚な方はお知らせください。

次回はこのスタイルでやるのがいいのか、ハンズオン入れていく感じのほうがいいのかは最後に時間が余れば、もしくは懇親会で議論しようかなと思ってます。

  • Flask
  • Sphinx

なんかはハンズオンするのにちょうどいいんじゃないかなぁと思っているけど。

python-pptxでいろいろ捗りそう

化合物の番号リストを入れたらデータベースからデータ取ってきて良い感じに並べて表にしてみたいな、サマリーを自動で作りたい。

あんな苦行みんなよくやるなぁと思っていたら、実際はみんなぶつくさ言いながらやってた。

pptxなんてxmlをzipで固めたやつだから展開して中のXML書き換えてまたzipで戻すサービスつくればいいじゃんと思いついたので作ってみたんだけど、なんかいまいちだったので放置してあった。

  • テンプレートのメンテどうすんだよ?
  • カラムの属性どうやって管理すんだよ?(実際は転置してあるので一番左の列)

前者に関してはpython-pptxというパッケージがあるらしいのでこれを使えば解決しそう。ドキュメント読んだけど表の作り方は分からなかったのでソース読めばいいのかな。

問題は後者だけどどうしようかなー。

docoptでCLI用のオプションを記述するのが良い感じ

python-livereloadのソース読んでたらdocoptというモジュールを使っていて、「optparseでもargparseでもないのか、なんだこれ?」と調べてみた。

optparse,argparseのようにオプションを登録してhelp,usageをつくるのではなく、helpの文字列からオプションをparseして組み立てるものだそうだ。

Command-line interface description language(CLI記述言語)と銘打っているので、python限定というわけではなく、Ruby,CoffeeScript,PHPなんかにも実装があるようだ。

cmd = """Python LiveReload

Usage:
    livereload [-p <port>|--port=<port>] [-b|--browser] [<directory>]

Options:
    -h --help                       show this screen
    -p <port> --port=<port>         specify a server port, default is 35729
    -b --browser                    open browser when start server
"""

def main():
    args = docopt(cmd)
    port = args.get('--port')
    root = args.get('<directory>')
    autoraise = args.get('--browser')

使い方は簡単で、ヘルプの文字列書いたらdocoptに食わせるだけ。どの言語でも同じようにヘルプを書けるので嬉しいかも。積極的につかっていこうっと。

日本語の分かりやすい説明もあった。

Cscope

この間の三島Haskellで@karky7にcscopeを教えてもらったので、朝からいじっていたのだけどetagsとの違いがよく分からなかった。規模がでかいとこっちのほうがいいのだろうけど、.emacsにいちいち書かないといけないのが面倒くさそうだなと思ったが、virtualenvで作った仮想環境のlibを登録してしまえばいいのかなぁ。

pydocかpypiで気軽にソースコードが見られるようになっていればなぁと思う

HaskellのHackageだと関数ごとにソースコードへのリンクがついていて便利。

Pythonで似たことやりたい時には、(pypi上ではソースコードを読めないので)、pydoc -pでブラウザからアクセスすればいいと思うのだけど

  • htmlがケバい
  • トップにもとのファイルの参照があるだけで個別のメソッドのコードを気軽に参照出来ない
  • しかもfile://のリンクはchromeでは効かない(解決方法)し、サーバーだとアクセスできなくて面倒くさい

という状況なのでgit cloneしたコードをtmpディレクトリに置いてEmacsでetags付けて参照しするのが僕の最近のデフォなのだけど、さすがに効率悪いよなぁと思っているので改善したい。

なんかいい方法はないものか。

git pullしたらSupervisor+Gunicornをrestartする設定

gitでpullしたらgunicorn restartできないかなと思って調べた。

supervisorctl status gunicorn | sed "s/.*[pid ]\([0-9]\+\)\,.*/\1/" | xargs kill -HUP

でrestartできるので、これを.git/hooks/post-mergeに書いておけばいいうようだ。

(あとでやる)

Python for Data Analysisはpandas: The Definitive Guide

あまり深く考えすにタイトルだけで購入したのだが、良い意味で裏切られた。でも分析の手法を期待して買うと退屈かもしれない。

ProductName Python for Data Analysis
Wes Mckinney
Oreilly & Associates Inc / 3634円 ( 2012-10-29 )


この本はpandasの作者がそのライブラリの説明を事細かに語っているという内容です。

pandasは何かというと

Python has long been great for data munging and preparation, but less so for data analysis and modeling. pandas helps fill this gap, enabling you to carry out your entire data analysis workflow in Python without having to switch to a more domain specific language like R.pandas

データプレパレーションと分析のギャップを埋めるためのライブラリです。

具体的にはpythonに(Rでいう)dataframeを与えます。実際にはdataframeに加えてSQLでいうところのjoin(many-to-manyとかone-to-many,outer,inner)とかgroupingもできるし、multiindex(階層型のインデックス)もサポートしているので、使いやすい。

Rでデータの前処理をやる気にはなかなかならないと思うので、大体他の言語でデータを綺麗にしてからRにぶち込むという流れが多いと思うが、pandas+scipy+matplotlibを使えば分析までできるし、scikit-learnを利用すればさらに機械学習も可能。どうしてもRが使いたければrpy2使えばいい。

本の内容は5章くらいまでをipythonやnumpyの基本的な事柄に割いているのと、appendixになぜかpythonの基礎が載っているという状況なので、Rユーザーの置き換えを意識して構成されているのかなぁ?という感じ。8章はmatplotlibの説明。

5章からpandasの機能がずらずらと紹介されていてデータの要約のやり方とか、欠損値の扱い方とかデータの変換とかRでよくやるであろうことを丁寧に説明している。で、章の最後に実際の例が載っているんだけど、この部分は読んでて楽しい。

読んで覚えるというよりは、pandasを使っていてわからないことが出てきたらこの本をあたって理解するという使い方のほうがいいかもしれない。

本書を読んでpandasを積極的に使っていこうと思ったので、ググったらちょっと前にtokyo.scipyで事例紹介されていたみたいで、、、行きたかったなぁ。

Sphinxでmobi化がうまくいっていない

昨日からFlask入門のやつをSphinxに移植していた。

1364111792

epubはさくっとmakeできたのだけど、Sphinx mobi builderにならってビルドしてみたけどNotImplementedErrorがでたので、Sphinxでmobiにするのは諦めてcalibreを使った。

Exception occurred:
  File "/Users/kzfm/Sphinx_projects/kindlebuilder/kindlebuilder/kindlewriter.py", line 295, in visit_image
    raise NotImplementedError("should implement this feature")
NotImplementedError: should implement this feature

ちょっと負けた感があるので、Shizuoka.pyまでにはいい感じのmobi変換のやり方を見つけておきたい。あとSend to Kindle Buttonでmobiをkindleに送れるように設定できるのだろうか?できるのであればSphinxでつくったGitHub Pagesにmobi用のボタンつけることができてかなり快適になると思うんだけどなぁ。

というような内容のLTをやれればと思っているので、興味があればShizuoka.pyに参加よろしくお願いします。