ラベル Linux の投稿を表示しています。 すべての投稿を表示
ラベル Linux の投稿を表示しています。 すべての投稿を表示

2022年7月26日火曜日

ベータ分布

   Pythonによるベイズ統計学入門に掲載されているコードを実行してみた際のメモです.

ベータ分布を描画するPythonのコード.

# -*- coding: utf-8 -*-
#%% NumPyの読み込み
import numpy as np
# SciPyのstatsモジュールの読み込み
import scipy.stats as st
# MatplotlibのPyplotモジュールの読み込み
import matplotlib.pyplot as plt
#%% ベータ分布の確率密度関数
q = np.linspace(0, 1, 250)
value_a = np.array([0.5, 1.0, 2.0, 4.0])
value_b = np.array([0.5, 1.0, 2.0, 4.0])
rows = value_a.shape[0]
cols = value_b.shape[0]
fig, ax = plt.subplots(rows, cols, sharex='all', sharey='all',
num=1, facecolor='w')
ax[0, 0].set_xlim(0.0, 1.0)
ax[0, 0].set_ylim(0.0, 4.5)
for row_index in range(rows):
a = value_a[row_index]
ax[row_index, 0].set_ylabel('$\\alpha$ = {0:3.1f}'.format(a),
fontsize=12)
for column_index in range(cols):
b = value_b[column_index]
ax[row_index, column_index].plot(q, st.beta.pdf(q, a, b), 'k-')
if row_index == 0:
ax[0, column_index].set_title('$\\beta$ = {0:3.1f}'.format(b),
fontsize=12)
plt.tight_layout()
plt.savefig('pybayes_fig_beta_distribution.png', dpi=300)
plt.show()


このコードを実行すると,以下の図が描画されます.この図はα,βを変えた時のベータ分布の形状です.

2022年7月25日月曜日

ベルヌーイ分布の成功確率の事前分布(一様分布,ベルヌーイ分布)

  Pythonによるベイズ統計学入門に掲載されているコードを実行してみた際のメモです.

ベルヌーイ分布の成功確率の事前分布(一様分布とベルヌーイ分布)を描画するPythonのコード.

# -*- coding: utf-8 -*-
#%% NumPyの読み込み
import numpy as np
# SciPyのstatsモジュールの読み込み
import scipy.stats as st
# MatplotlibのPyplotモジュールの読み込み
import matplotlib.pyplot as plt

# 日本語フォントの設定
from matplotlib.font_manager import FontProperties
import sys
if sys.platform.startswith('win'):
FontPath = 'C:\\Windows\\Fonts\\meiryo.ttc'
elif sys.platform.startswith('darwin'):
FontPath = '/System/Library/Fonts/ヒラギノ角ゴシック W4.ttc'
elif sys.platform.startswith('linux'):
FontPath = '/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf'
else:
print('このPythonコードが対応していないOSを使用しています.')
sys.exit()
jpfont = FontProperties(fname=FontPath)

#%% ベルヌーイ分布の成功確率qの事前分布
fig1 = plt.figure(num=1, facecolor='w')
q = np.linspace(0, 1, 250)
plt.plot(q, st.uniform.pdf(q), 'k-')
plt.plot(q, st.beta.pdf(q, 4, 6), 'k--')
plt.xlim(0, 1)
plt.ylim(0, 2.8)
plt.legend(['(A) 一様分布 ($\\alpha$ = 1, $\\beta$ = 1)',
'(B) ベータ分布 ($\\alpha$ = 4, $\\beta$ = 6)'],
loc='best', frameon=False, prop=jpfont)
plt.xlabel('成功確率 q', fontproperties=jpfont)
plt.ylabel('確率密度', fontproperties=jpfont)
plt.savefig('pybayes_fig_beta_prior.png', dpi=300)
plt.show()

これを実行すると,以下の図が表示されます.

コードの簡単な解説は以下の通りです.

# -*- coding: utf-8 -*-
全角文字である日本語を使用する場合には,様々な文字コードがある(JIS,EUC-JP,Shift JISなど)ので,どの文字コードを使用して作成したコードなのかを明記しておきます.

import numpy as np
# SciPyのstatsモジュールの読み込み
import scipy.stats as st
# MatplotlibのPyplotモジュールの読み込み
import matplotlib.pyplot as pot
NumPy, SciPy, MatPlotLibを読み込んでいます.

# 日本語フォントの設定
from matplotlib.font_manager import FontProperties
import sys
if sys.platform.startswith('win'):
FontPath = 'C:\\Windows\\Fonts\\meiryo.ttc'
elif sys.platform.startswith('darwin'):
FontPath = '/System/Library/Fonts/ヒラギノ角ゴシック W4.ttc'
elif sys.platform.startswith('linux'):
FontPath = '/usr/share/fonts/truetype/takao-gothic/TakaoPGothic.ttf'
else:
print('このPythonコードが対応していないOSを使用しています.')
sys.exit()
jpfont = FontProperties(fname=FontPath)
表示する日本語フォントを選択するために,
import sys
でパッケージ sys を読み込んで,使用しているシステムのOSを判定するための関数
sys.platform.startswith()
を使えるようにしています.この関数は,システムのOSの名前がある文字列(e.g. Windowsならばwin)で始まっていれば真(True),そうでなければ偽(False)を返します.
これを利用して,システムのOSを判定して,OSに標準で付属する日本語フォントをpyplotの作図関数が認識できるようにする命令です.

#%% ベルヌーイ分布の成功確率qの事前分布
fig1 = plt.figure(num=1, facecolor='w')
作図を行うための空白のキャンパスを用意しています.
plt.figure(num=1, facecolor='w)
のnum=1は図の番号を1にするという意味です.特に指定しない場合はpyplot関数です.
plt.figure()
を呼び出すために自動的に通し番号が振られます.
次の facecolor = 'w' というオプションは白地(w: white)のグラフを作成するためのものです.

q = np.linspace(0, 1, 250)
一様分布とベータ分布のグラフを描くための成功確率 q の値を0から1まで等間隔に変化させたグリッドを生成し,それを1次元のNumPy配列qに格納しています.

plt.plot(q, st.uniform.pdf(q), 'k-')
plt.plot(q, st.beta.pdf(q, 4, 6), 'k--')
関数 plt.plot()は,いくつかの点を2次元座標上に打ち,各点を線で結んでグラフにします.なので,各点の横軸と縦軸の座標データとしてplt.plot()に与えなければなりません.これは1次元のNumPy配列の形でplt.plot()に渡されます.
上の行では,一様分布のグラフ(uniform)を作成しています.
先に読み込んでいる
import scipy.stats as at
には,一様分布の確率密度関数 st.uniform.pdf() が含まれているので,これを利用して一様分布の確率密度を計算します.描画の際には'k-'で黒の線を指定しています.
次の行では,ベータ分布の確率密度を計算するため stats 関数 st.beta.pdf() を使用しています.描画の際には'k--'で黒の波線を指定しています.

plt.xlim(0, 1)
plt.ylim(0, 2.8)
関数plt.xlim()は,横軸(x軸)の範囲を指定する関数で,最初の数値が下限,次の数値が上限です.横軸はベルヌーイ分布の成功確率qなので,0を下限,1を上限としています.
plt.ylim() は縦軸(y軸)の範囲を指定する関数で,最初の数値が下限,次の数値が上限です.

plt.legend(['(A) 一様分布 ($\\alpha$ = 1, $\\beta$ = 1)',
'(B) ベータ分布 ($\\alpha$ = 4, $\\beta$ = 6)'],
loc='best', frameon=False, prop=jpfont)
関数plt.legend()は与えられた文字列を要素とするPythonのリスト(これはNumPy配列ではありません)を使って凡例を作成する関数です.
凡例をキレイに表示するために,3つのオプションがあり,'best'は最も見やすい場所に判例を自動的に配置する指示です.明示的に配置する場所を決める際には,'upper left',upper right',lower left' などとlocオプションを変えることで変更可能です.
frameon=False は凡例を囲む枠を省くというオプションです.デフォルトでは,凡例を囲む枠が表示されるので,Falseとして枠をなくしています.
prop=jpfontは,日本語フォントを凡例の表示に使用するためのオプションです.

plt.xlabel('成功確率 q', fontproperties=jpfont)
plt.ylabel('確率密度', fontproperties=jpfont)
関数 plt.xlabel() は横軸のラベルを指定する関数で,関数 plt.ylabel()は縦軸のラベルを指定する関数です.
ここでも,ラベルに使われる日本語フォントとして fontproperties = jpfont というオプションで指定しています.

plt.savefig('pybayes_fig_beta_prior.png', dpi=300)
plt.show()
作成した図を画像ファイルに保存したい際には,plt.savefig()の 'pybayes.fig.beta_prior.png' は保存する図の名前,形式(.png)です.

2017年2月6日月曜日

Happy Hacking Keyboardのキー配列

Happy Hacking Keyboardには,フルキーボードにあるファンクションキーやhome,insertなどのキーがありません.

しかし,これらのキー操作は可能です.
例)
 CapsLock:Fn+Tab
 insert:Fn + \
 Function key:Fn + 上段キー(1 〜 =)

このように Fn キーを使うことで,フルキーボードにあるキー入力が可能になります.

これらのキー操作を覚えると,指をホームポジションから移動させずに済むので,実際の操作は速くなります(そうなると,私のようにHHKBのデュアルキーボードは意味がなくなりますが...),

私の使用しているHappy Hacking Keiboard Lite2では,キートップの側面に記載されており,覚えなくても済むのですが,その度にキーボードを見て探していては意味がないので,やはり覚えてしまうのがベストです.

キー配列を覚えたら,デュアルキーボードは止めるかもしれません....

Happy Hacking Keiboard Lite2の場合のキー配列

2016年11月29日火曜日

UNIX配列とUS配列のキーバインド設定

前回, HHKB Lite2 for Mac とHHKB Lite 2 のデュアルキーボード化 + キートップの付け替えに関する記事を投稿しました.

これらは,HHKB Lite2 for MacはmacOSで, HHKB Lite 2はLinux, Windowsで使用しています.使用するOSによってキーバインドが異なるので,OSを切り替えた際に混乱してしまい,誤動作を誘発することが多いので,OSが変わっても同じ動作で,同じキーバインドが使えるようにしています.

とは言うものの,HHKBは"A"キーの隣に"Control"のあるUNIX配列なので,英語配列モデルでも,US配列のキーボードとは"Control"の位置が異なります.
なので,macOSでは,元々の"Control"キーの位置に"Command ⌘"を割り当てて,Linux, Windowsでは元々の"Control"キーに"Control"を割り当てたまま(特に変更しない)としています.こうすることで,コピー,カット,ペーストや,日本語入力と英語入力の切り替え(macOSaにおける切り替えは "⌘ + Space"としている)などの動作がどのOSでも同じになり,混乱が生じなくなりました.

設定は,HHKBのサイトからダウンロードできる専用ドライバー"HHKB Lite2 for Mac"を使って行いました(以下の画像は,設定画面).
また,US 配列のラップトップ(Mac Book Air)も使っているのですが,US配列では,以下の図のように.UNIX配列における"Control"キーの位置に,"Caps Lock"キーがあります.

私は,"Caps Lock"キーは使用しないので,"Caps Lock"キーの位置に"Control"を割り当てました.

以上のようにすることで,OS,デスクトップ,ラップトップの3種類においてキーバインドの際の動作が同じとなり,誤動作を起こすことがなくなりました.

2015年11月22日日曜日

nkf, trコマンドによる改行コード変換

MacのExcelでデータシートを作成し,CSVファイル,テキストファイル等で保存すると,改行コードが"CR"となり,gnuplotでは読み込めません.


改行コードの確認・変換にはvim,miや,Mac OS XのTextEditのような,改行コードを指定できるテキストエディタでも変更を行うことが可能です.
また,LibreOfficeでデータシート作成を行えば,改行コードが”CR”にはならず,このような問題は生じないようです.

以下に,"nfk"を用いてUnixで用いられる"LF"という文字コード(\n)に変換する方法をメモしておきます.
"nfk"がインストールされていない場合は,MacPortsを用いて nkf をインストールします(MacPortsのインストールはこちら).
そのうえで,ターミナルからMacPortsのアップデートを行った後,nkf をインストールします.
$ sudo port -v selfupdate
...(インストール状況が表示されます)...
$ sudo port install nkf
...(インストール状況が表示されます)...
$

改行コードを変換するには,ターミナルから以下のようにします.
$ nkf -Lu xxx.txt > yyy.txt
ここで,"xxx"は変換前のファイル名で,"yyy"は変換後のファイル名です.

"nfk"を用いずに"tr"コマンドを使っても改行コードを変換できます.

改行コード"CR"(Mac OS 9以前)から"LF"(Unix)に変換する場合
$ tr \\r \\n <xxx.txt >yyy.txt

改行コード"CR+LF"(Windows)から"LF"(Unix)に変換する場合
$ tr -d \\r <xxx.txt >yyy.txt

"nfk"を用いて文字コードを変換するには
$ nkf -w overwrite xxx.txt
とすると,nfkは自動的に使われている文字コードを判定して,出力の文字コードをUTF-8(-w で指定)して,入力したファイルを書き換え(-overwrite)てくれます.

2015年10月17日土曜日

[Atom] 空白などの可視化設定

テキストエディタ Atom における,不可視文字の可視化をする際には,
  Preference > Setteings > Editor Settings > Show Invisibles をON
とします.

また,全角空白を可視化するには,
  Preference > Settings > Install > Show-ideographic-space をインストール
とします.

2015年10月16日金曜日

[Atom] パッケージインストールメモ

テキストエディタとして"Atom"を使ってみることにしました.
以下は,インストールしたCommunity Packagesです.
  • autocomplete-paths 予測変換が合わなかったので Disable 中
  • docblockr
  • file-type-icons
  • highlight-selected
  • japanese-wrap
  • language-fortran
  • minimap
  • show-ideographic-space
  • term2      ターミナルは別に立ち上げておけば良いので Disable 中
正直なところ,テキストエディタに拘りがあるわけではないので,とりあえずといった感じです.

2015年8月1日土曜日

[macOS] MacPorts経由でインストールしたパッケージのアップデート

まずは,MacPortsのアップデートを行います.
$ sudo port selfupdate
Password:
--->  Updating MacPorts base sources using rsync
MacPorts base version 2.3.4 installed,
MacPorts base version 2.3.4 downloaded.
--->  Updating the ports tree
--->  MacPorts base is already the latest version

The ports tree has been updated. To upgrade your installed ports, you should run

上記の例は,アップデートの必要がない場合ですが, sync が実行され,Portsのツリーが更新されます.

続いて,アップデートできるパッケージの有無を確認します.
$ port outdated
The following installed ports are outdated:
arpack                         3.3.0_2 < 3.3.0_3         
...
...
xrender                        0.9.9_0 < 0.9.10_0        
アップデート可能なパッケージが返ってきます.

通常のアップデートでは,以下のように,一つもしくは複数のパッケージを選択して行います.
$ sudo port upgrade automake arpack

古いパッケージをまとめてアップデートする際には以下のように入力します.
$ sudo port upgrade outdated