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

計算物理屋の研究備忘録

Linux, Cygwin, Mac, zsh, emacs等の使い方、設定などのメモ

Macでたまに使うショートカットのメモ

たまに使うけどコマンドはよく覚えていないのでメモっておく
OS X El Capitan ver. 10.11.5

コマンド 説明
control + option + space 次の入力ソース選択
(入力ソースがUSで) shift + option + a Åの入力

Seabornの色見本

Seabornのメモ

前々回:Seabornのスタイル見本 - 計算物理屋の研究備忘録
前回:Seabornのコンテキスト見本 - 計算物理屋の研究備忘録

グラフも前回のものを使う

カラーパレット

公式サイトのチュートリアルを参考

Choosing color palettes — seaborn 0.7.1 documentation

Seabornでは、Seabornで用意されているカラーパレットとか、matplotlibのカラーマップ?とかいろいろ使える。

Seabornのカラーパレット

Qualitative (or categorical) palettes が6個用意されている。色で見分けやすいカラーマップ。ただし6色まで。

  • deep
  • muted
  • pastel
  • bright
  • dark
  • colorblind

使い方はplot前にsns.set_palette('deep')みたいにするだけ。

import seaborn as sns
sns.set_palette('deep')    # デフォルト
#sns.set_palette('muted')
#sns.set_palette('pastel')
#sns.set_palette('bright')
#sns.set_palette('dark')
#sns.set_palette('colorblind')
sinplot()    # 関数はすでに定義済みとして

Qualitative palettes一覧

deep muted
f:id:keisanbutsuriya:20160601014037p:plain:w300 f:id:keisanbutsuriya:20160607013512p:plain:w300
pastel bright
f:id:keisanbutsuriya:20160607013905p:plain:w300 f:id:keisanbutsuriya:20160607014011p:plain:w300
dark colorblind
f:id:keisanbutsuriya:20160607014342p:plain:w300 f:id:keisanbutsuriya:20160607014351p:plain:w300

他にもcircular color systemsというのに、hlsとhuslというものがある。これは数字を指定することで6色以上使える。

6本以上線を書くための簡単な関数をつくってプロットしてみる。
12本線を引いて、12色使うようにしてみた

def axb():
    x = np.linspace(0, 10, 100)
    for i in np.linspace(0, 5, 12):
        plt.plot(x, x+i)

sns.set_palette('hls', 12)
#sns.set_palette('husl', 12)
axb()

hlsとhusl

hls husl
f:id:keisanbutsuriya:20160607015406p:plain:w300 f:id:keisanbutsuriya:20160607015419p:plain:w300

matplotlibのカラーマップ

matploblitのカラーマップはここに色々載っている

color example code: colormaps_reference.py — Matplotlib 1.5.1 documentation

たとえば、matplotlibのSequential colormapsのBluesをSeabornではこのように使う

sns.set_palette('Blues', 12)  # 12色
axb()
Blues
f:id:keisanbutsuriya:20160607020557p:plain:w300

他にも例えば、Set1なんかは9色まで使えてある程度色が判別しやすい。

sns.set_palette('Set1', 12)    # 9色で一回りしてしまう
axb()
Set1
f:id:keisanbutsuriya:20160607022319p:plain:w300

sns.light_palette と sns.dark_palette

色の名前を指定して、その色を基本とするsequential palettesを作成できる。明るいのがlight_paletteで、暗いのがdark_palette。

sns.light_palette()で作成したパレットをsns.set_palette()に入れて使う感じ
ここで使っているgreenはカラーパレットじゃなく、ただの色の名前。

sns.set_palette(sns.light_palette('green', 12))
#sns.set_palette(sns.dark_palette('green', 12))
axb()
light_palette dark_palette
f:id:keisanbutsuriya:20160607021519p:plain:w300 f:id:keisanbutsuriya:20160607021533p:plain:w300

Seabornのコンテキスト見本

Seabornのメモ

前回:Seabornのスタイル見本 - 計算物理屋の研究備忘録
次回:Seabornの色見本 - 計算物理屋の研究備忘録

コンテキスト

公式サイトのチュートリアルを参考

Controlling figure aesthetics — seaborn 0.7.1 documentation

4つのコンテキストが用意されていて。これも1行書くだけで適用できる。グラフのサイズや文字との比率などが変わる。用意されているのはこの4つ。下に行くほどサイズがでかくなる

  • paper
  • notebook # デフォルト
  • talk
  • poster

前回と同じグラフを使う。importとかplotする関数は用意してあるものとして

使い方

#sns.set_context("paper")
sns.set_context("notebook")    # デフォルト
#sns.set_context("talk")
#sns.set_context("poster")
sinplot()

コンテキスト一覧

paper notebook
f:id:keisanbutsuriya:20160601231055p:plain:w300 f:id:keisanbutsuriya:20160601014037p:plain:w300
talk poster
f:id:keisanbutsuriya:20160601231235p:plain:w300 f:id:keisanbutsuriya:20160601231203p:plain:w300

ブログ上の表示では大きさが変わるのでわかりにくい。クリックかダウンロードして見てみると違いがわかるはず。

paperやデフォルトのnotebookでは文字が小さくて見づらいので使う場合は文字だけ大きくしたほうがいい。

フォントスケール

font_scale=でフォントの大きさを調整できる。この例だと1.5倍される。rc={ }で他のパラメータも調整できる。

sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
sinplot()

f:id:keisanbutsuriya:20160601231927p:plain

Seabornのスタイル見本

次回:Seabornのコンテキスト見本 - 計算物理屋の研究備忘録
次次回:Seabornの色見本 - 計算物理屋の研究備忘録

Seabornとは

matplotlibのグラフのスタイルや配色を見やすくきれいに設定してくれる便利なやつ。基本的にはmatplotlibを使うときにちょっと付け足すだけで使えるのでmatplotlib使いなら簡単。

公式サイト

Seaborn: statistical data visualization — seaborn 0.7.1 documentation

現在の最新バージョンは0.7.0

インストールはcondaが使えればcondaコマンドからできる。pipでもできると思う。

スタイル一覧

darkgrid whitegrid
f:id:keisanbutsuriya:20160601014037p:plain f:id:keisanbutsuriya:20160601014043p:plain
dark white
f:id:keisanbutsuriya:20160601014040p:plain f:id:keisanbutsuriya:20160601014046p:plain
ticks ticks despine
f:id:keisanbutsuriya:20160601014049p:plain f:id:keisanbutsuriya:20160601014222p:plain

使い方

公式サイトのチュートリアルから。

https://web.stanford.edu/~mwaskom/software/seaborn/tutorial/aesthetics.html#aesthetics-tutorial

%matplotlib inline
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
np.random.seed(sum(map(ord, "aesthetics")))

def sinplot(flip=1):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)

# デフォルトのmatplotlib
sinplot()

これはmatplotlibのデフォルトのグラフ。確かに多少色がチカチカする。 f:id:keisanbutsuriya:20160601014031p:plain

Seabornを使うには、デフォルトの設定でよければ一行書くだけ

# Seabornのデフォルト (darkgrid)
import seaborn as sns
sinplot()

Seabornが適用されて、見やすくなる f:id:keisanbutsuriya:20160601014037p:plain

5つの基本的なスタイルが用意されていて、1行書くだけでスタイルを変えることができる。

sns.set_style("darkgrid")     # デフォルト
#sns.set_style("whitegrid")
#sns.set_style("dark")
#sns.set_style("white")
#sns.set_style("ticks")
sinplot()

グラフの上と右の枠線を消すこともSeabornなら可能。matplotlibでは無理らしい?

sns.set_style("ticks")
sinplot()
sns.despine()

これらのグラフはすでに上に載せてある。

どのような値が設定してあるかも確認できる。

sns.set()    # 設定をクリアしてデフォルトに。
sns.axes_style()

上記コマンドの出力がこちら。pythonの辞書形式になっている。

{'axes.axisbelow': True,
 'axes.edgecolor': 'white',
 'axes.facecolor': '#EAEAF2',
 'axes.grid': True,
 'axes.labelcolor': '.15',
 'axes.linewidth': 0.0,
 'figure.facecolor': 'white',
 'font.family': ['sans-serif'],
 'font.sans-serif': ['Arial',
  'Liberation Sans',
  'Bitstream Vera Sans',
  'sans-serif'],
 'grid.color': 'white',
 'grid.linestyle': '-',
 'image.cmap': 'Greys',
 'legend.frameon': False,
 'legend.numpoints': 1,
 'legend.scatterpoints': 1,
 'lines.solid_capstyle': 'round',
 'text.color': '.15',
 'xtick.color': '.15',
 'xtick.direction': 'out',
 'xtick.major.size': 0.0,
 'xtick.minor.size': 0.0,
 'ytick.color': '.15',
 'ytick.direction': 'out',
 'ytick.major.size': 0.0,
 'ytick.minor.size': 0.0}

スタイルをもう少しSeabornで調節したい場合は、上で出てくる辞書形式でsns.set_style()にいれてやる。

sns.set_style("darkgrid", {"axes.facecolor": "red"})
sinplot()

f:id:keisanbutsuriya:20160601014250p:plain

pickleの代わりにjoblibを使って永続化する

joblib.dumpの方が簡単で効率的

プログラムの出力結果をpythonでpandasなどを使って処理してmatplotlibで絵を描くということをよくやる。pythonで加工したデータをなるべく容量小さくまとめて、pythonのオブジェクト形式?を保ったまま保存したい。

デフォルトでpickleを使って圧縮すればできるかもしれないが、joblibを使えば簡単にできる。内部ではpickleを使っている?

使い方メモ

とにかく保存したいものをタプルとかリストにまとめておいて、joblib.dumpする。joblibは事前にインストールが必要。condaとかpipでやっておく

import joblib
a = 3.1415         # 数値
b = [1, 0, 1, 0]   # リスト
c = xxx_dataframe  # pandasのデータフレーム
data = (a, b, c)
joblib.dump(data, 'pydata', compress=3)

joblib.dumpの第二引数はファイル名でなんでもよい。compressオプションで圧縮レベルを指定している。公式のヘルプに書いてあって、1〜9までの数値で大きいほうが圧縮レベルが大きい。通常3くらいが推奨されている。compressを有効にするだけで劇的にファイルサイズが小さくなるのでおすすめ。いろいろ数値を変えて試してみたら、確かに圧縮レベルをあげるとサイズが小さくなった。でもそこまで変わるわけではなさそうなので3くらいでいい。

compressオプションを指定しないと、分割して効率よく保存される。分割じゃなくてどちらかといえば一つにまとめて、サーバーからローカルに持ってきたりしたいので基本的には圧縮する。

読み込んで使う時も簡単で、joblib.loadを使うだけ。pickleとほぼ一緒

import joblib
a, b, c = joblib.load('pydata')

Karabinerを使って、Macのキーバインドを変更

右オプションキーを増やす

Macの日本語キーボード(JIS)では、右オプションキー(AltもしくはMetaキー)がなくてEmacsが不便でしょうがない。MacEmacsユーザーはどうしてるんだろう?

Karabinerというソフトを入れて、かなキーをオプションキーとしても使えるようにする。

Karabinerのインストール

公式サイトから取ってきてインストールするだけ

Karabiner - OS X用のソフトウェア

設定

Karabinerを起動して、

Change Key ==> For Japanese ==> Change KANA key

KANA to Option_R (+ when you type KANA only, send KANAにチェックを入れる。これでかなキーを押しながら他のキーを押すとoptionとして機能して、かなキーを単独で押すとかなキーとして働いてくれる。便利。

Emacs mode

ついでに幾つかEmacs modeを有効にしておく。C-vとかM-vとかが使えるようなる。

Emacs modeを探してチェックを入れておいた。以下の通り

  • Control+D to Forward Delete
  • Control+H to Delete
  • Control+V to PageDown
  • Option+V to PageUp
  • Control+Y to Command+V
  • Control+K to Command+Shift+Right,Command+x
  • Control+W to Command+X
  • Option+W to Command+C

管理者権限なしでEmacsをビルド

ダウンロード

GNU Emacs - GNU Project

公式からとってくる。

ビルド

ホームディレクトリ直下の~/localにインストールする。~/local/srcというディレクトリを作っておいて、そこに圧縮ファイルを移動、解凍・展開する

configureする

$ ./configure --prefix=/home/xxxxxx/local

libgif/libungifが見つからなくてエラーが出た。サーバーなどのEmacsではたぶんgifは必要ないのでオプションをつけて使わないようにするとうまくいく。

$ ./configure --prefix=/home/xxxxxx/local --with-gif=no
$ make
$ make install

これで~/local/binに実行ファイルがインストールされた。