2014年07月たのしいPython今夜コードを書いているすべてのヒトへプロフィールAuthor:辻真吾(つじしんご)www.tsjshg.infoいまは、大学の研究室を主な拠点に、色々やってます。このブログはPythonの話題が中心ですが、どちらかというと日々の仕事で使う知識を、自分のためにメモしたものです。万が一どなたかの役に立てば光栄です。githubgoogle-code-prettify管理者ページこのブログをリンクに追加する自前のcolormapを用意するmatplotlibのcolormapは豊富なので、普段はそこから選べば良いのですが、他のツールで作った画との整合性など、自前でcolormapを用意したいときもあります。基本的には、ここの説明に従えば良いんですが、ちょっと英語が何言ってるか分からなかったので、日本語解説メモしておきます。cdict1)こんな感じで作ったmycmをcmap引数としてmatshowなどに渡せば良いんですが、微妙に書き方が分かりにくいです。cdict1はRGBに分かれています。それぞれのタプルは3つの要素からできていて、最初の数字は0から1まで変化させて、色の始点と終点を決めています。各タプルの要素は2つでいいんじゃないか?と思いますが、確かに色が連続的に変化するときは、2つで十分なので、3つめの要素は2つ目と一緒にします。このコードだと、たとえばこんな画が出来ます。色を連続的に変化させたいときはこれで終わりですが、色の変化を不連続にしたいときに、3つ目の要素が効いてきます。3つ目の要素は新たな始点を定義します。cdict1)たとえば、コードをこのように変更すると、画はこう変わります。redの0.5に相当する2つ目タプルの3つ目の要素が0.0になっています。赤の要素がcolorbar半分のところで、一度1.0まで上り詰めてRGBすべて1.0の白になったあと、不連続にRだけ0.0になるので、再び水色(Rが0でGとBが100%)に色が戻って、その後、赤の要素が増えて行くことになります。分かりにくいですが、理解出来ると、なんでも出来るので、やっぱりよく出来てるなーと思うところです。ちなみに、matplotlibに関してすごいよくまとまっているサイトを見つけたので、貼っておきます。top↑matshowを使うmatplotlibは便利なんですが、何でもできる反面、1つの事にたいして、やり方が複数あるような気がして、その点はについては、Python的では無いという感じがします。(Pythonはひとつのことに対する実現方法をひとつにすることで、全体の分かり易さを実現しています。)というわけで、pandas.DataFrameに格納されたデータをヒートマップにするコードを貼っておきます。本体とcolorbarを描く領域の位置と大きさをfig.add_axesで微妙に調整しています。今はダミーですが、実際は行の名前の長さなどで調整すると良いかと思います。cax=axcolor)fig.show()出力例です。Engine(GAE)は、あんまりアクセス数がなければ無料で使えて、PythonでWebアプリが作れるので便利です。独自ドメインで運用しようとする場合、面倒な設定が必要なのかと思っていたのですが、簡単でした。Appsに登録しないと駄目というような記事も見かけるのですが、変わったのかな。お名前.comでとったドメインをこの説明に従って設定するだけで、すぐ使えるようになりました。世の中、便利になりすぎて、どんどん怠惰になってる気がする・・・。top↑MarvericksへアップグレードMacOSの新しいOSが出ても基本的には半年くらい待つことにしています。3連休と言うことで、Python本の次回作を書こうと思いつつ、試験前の学生みたいに違うことを始めてしまいました。10.9.4にして概ね良好な動きですが、いくつか嵌まった点を。XQuartzが起動しているのに、「xauth起動のためにはX11が必要」としつこく言ってくる点は、XQuartzの再インストールで解決。VirtualBoxを起動後、ゲストOSがすべて謎のエラーで起動出来ないときは焦りましたが、これもVirtualBoxの再インストールで回避。C-fでデフォルトのディレクトリがルートディレクトリになるという地味な不具合が。最初なんだか分からなかった。こんなところで、勘弁してもらえるといいけど・・・。4年前のiMacですが、全体的にはいまのところ不満はありません。追記いろいろと不具合はあるもので、CyberduckがJava6のランタイムを必要とするらしく、そのままでは起動しません。この情報に助けられました。あやうく、7をインストールするところだった。Xなるものが必要らしく、これをインストールしたら起動しました。MacはJavaがデフォルトで入ってないって、すごい決断したもんだと思うところです。top↑matplotlibで2次元ヒストグラムものすごい沢山のデータポイントを単純に2次元にプロットすると、あんまり意味がない散布図が出来上がってしまうので、そんなときには2次元ヒストグラムが便利です。LogNormclf()figsize=(10,10)subplot(1,1,1,aspect=1)hist2d(x,y,(200,200),norm=LogNorm())colorbar(shrink=0.78)aspect=1とすることで、散布図の縦横比がcolorbarを加えたあとも崩れません。もとのデータの性質にもよりますが、頻度をlogで表示したほうが画がそれっぽく見えますが、このあたりは印象操作もできそうでちょっと危険です。colorbarは、shrinkの引数で少しサイズを小さくしています。出来上がりはこんな感じです。