読者です 読者をやめる 読者になる 読者になる

yoshidabenjiro's blog

respect Yoshua Bengio.

Pandas メジャーアップデート(0.20.1)の要点〜高速 I/O、集約関数強化など

こんにちは。吉田弁二郎です。

先日(5月5日)、pandas の最新版 0.20.1 がリリースされました。agg/transformメソッドがgroupbyしなくても使えるようになり、10倍以上高速な I/O を実現する feather-format が(試験的に)導入され、スライスの際に頻繁に利用されていた.ixインデクサが deprecated となるなど、全般的に着実な改善もしくは変更がされている印象です。以下、リリースノートのハイライト部分より、目についたものをピックアップしていきます。

続きを読む

GPU 版 TensorFlow 環境を AWS 上にコマンド一発で立ち上げるスクリプトを書きました

こんにちは。吉田弁二郎です。

前置き

最近、TensorFlow のインストールは pip により簡単にできるようになりました。一方で GPU 環境の整備(CuDNN の準備等)が相変わらず面倒だと思うことも多く、GPU 自体の進歩も早いのでオンプレ環境に手を出すのも少しためらわれる感じもします。そこで Amazon Web Services (AWS) の GPU インスタンスを使ってみるものの、毎回ゼロから手作業で TensorFlow 環境を構築するのもそろそろ効率的にしたい、という状況になっています。

そんな訳で、コマンド一発で環境構築するための自動化スクリプトを書きました。もしかしたら誰かがやっているかもしれませんが気にしない。

やり方としては、Ansible を使います。Ansible はエージェントレスな構成管理ツールなどと言われ Web 系の人たちが使っていますが、要するにサーバ上でのディレクトリ作成やソフトウェアのインストール等を自動化するものです。リモートマシン、ローカルマシンのそれぞれに Python2 が入っていれば pip install ansible で使い始めることができます*1

ここでは、Ubuntu Server 16.04 LTS (HVM) を選択し(=あらかじめ GPU 開発環境が設定されていない)、最小限の工数で済ませるために nvidia-docker を使い、TensorFlow の docker image を取得することを大きな方針とします。

*1:Python3 対応もされ始めているものの、現状は2系で安定稼働します。今回書いたコードも Python2 で動かすことを前提としています。ただ、Ansible を動かすために2系が必要というだけなので、数値計算用に3系が独立して存在していても問題ないはずです。

続きを読む

conda の環境名に応じて ipython / jupyter notebook の起動時読み込みライブラリを変更させる

こんにちは。吉田弁二郎です。

ipython コンソールや jupyter notebook をお使いの方は、起動時の自動処理設定ができることをご存知かもしれません。具体的には、

~/.ipython/profile_default/startup

に置かれたスクリプトが起動時に自動的に読み込まれます。適当に numpy などを import するスクリプトを用意しておけば、 毎回手作業する苦痛から解放されるわけですね。

ところで、anaconda / conda でパッケージ管理する場合、

conda create -n another_env python=3.6 numpy pandas

などとして独立した開発環境 (another_env) を用意して作業を進めることも多いと思います。今回は、独立した conda 環境ごとに ipython 起動時に読み込まれるライブラリを自動的に変えるための startup スクリプトを書いたので、ここに紹介しておきます。

続きを読む

pyenv 環境下で Anaconda を使う際、source activate が落ちる現象の対処法

こんにちは。吉田弁二郎です。だいぶ間が空いてしまいました。

小ネタの紹介です。Python 実行環境を管理するために pyenv を使う方も多いのではないかと思います。私は Anaconda のバージョンを複数入れるのに使っています。ところが、

conda create -n new_env python=3.6 numpy scipy pandas

などと書いて独立した開発環境を作った後、

source activate new_env

として環境を変更しようとすると、ターミナルが落ちてしまう現象が起こります。(原因は理解しておらず)

この対処は簡単で、

alias activate_env="source $PYENV_ROOT/versions/$(pyenv version-name)/bin/activate"

として activate を直接叩きにいけば大丈夫です。pyenv version-name は現在選択されている Python バージョンの名称だけ(例えば Anaconda2-4.3.0)を表示するコマンドで、pyenv があればデフォルトで使えます。こうしておくと、pyenv global xxx としてバージョンを切り替えた後も activate のパスを気にしなくてよくなるので気楽ですね。

現象を確認した環境
  • MacOSX 10.11.6
  • GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin15)
  • pyenv 1.0.7-12-g235eea3
  • Anaconda2-4.3.0

Python 使いのための、Python と Ruby の違い(基本文法)

こんにちは。吉田弁二郎です。

今回は、web 開発の主力言語の一つとなっている Ruby の文法について、Python との違いをまとめます。文法の完全な紹介を目指すのではなく、特に紛らわしい項目の差分に注目していきます。そのため、Ruby 独自の文法的な事項(module/include/extend, Proc など)には触れていませんのでご容赦を。なお、今回は Python 3.5.2 および Ruby 2.3.1 で確認しています。

続きを読む

pandas で pivot_table が機能しない場合の対処(DataError: No numeric types to aggregate)

こんにちは。吉田弁二郎です。

Python でデータ分析をする際には pandas を使うのが標準的です。特に、通常はデータを横持ちで格納しているDBから抽出してクロス集計をするというような時には、pandas.pivot_table を使うと便利ですね。最近この関数がうまく使えなかった経験をしたので、対策を記録しておきます。(小ネタ)

続きを読む

混合ポアソン分布を題材に、変分ベイズ法を理解する④

こんにちは。吉田弁二郎です。有給消化中です。

前回、混合ポアソン分布に対して変分ベイズ法を適用し、実際に学習が行われた様子を見ました。
yoshidabenjiro.hatenablog.com

ところで、推定した分布が真の分布とどの程度異なっているのか、やはり定量的に把握したいと思うのが人情というものです。そこで今回は補足的な内容として、Kullback-Liebler ダイバージェンス(もしくは KL 情報量)を基準として学習の進捗を観察します。

続きを読む