コレスポンデンス分析(1)下準備 行列の列和、行和を計算する
統計解析の手法の一つであるコレスポンデンス分析(対応分析、コレポン、CAとも呼ばれる)をpythonで実装する。
コレスポンデンス分析では、行和、列和、特異値分解(SVD)などを行うため、本題に入る前に、超簡単な行列演算で肩慣らしをする。
参考サイト
SciPyの使い方: 行列演算
http://handasse.blogspot.com/2007/07/scipy.html
リストオブジェクトの使い方
http://www.gesource.jp/programming/python/code/0017.html
コード
書いたというほどのものではないが...
from scipy import array matrix = array( [[15,45,27,23], [17,30,48,25], [20,10,26,44], [36,10,20,24], [40, 5, 8,27]] ); print "Original matrix:" print matrix print "行",matrix[0,:] # 1行目を表示 print "列",matrix[:,0] # 1列目を表示 print "行和",sum(matrix[0,:]) # 1行目の総和を計算 print "列和",sum(matrix[:,0]) # 1列目の総和を計算
表示結果
上記コードを実行した結果。
$ ./correspondense_an.py Original matrix: [[15 45 27 23] [17 30 48 25] [20 10 26 44] [36 10 20 24] [40 5 8 27]] 行 [15 45 27 23] 列 [15 17 20 36 40] 行和 110 <---1行目の和=15+45+27+23になっている 列和 128 <---1列目の和=15+17+20+36+40になっている
注意点
行列計算のモジュール"mat"で、以下のようにもできるが、行と列を対象に扱うことができない(みたい)。
なので、scipyのarrayのimportのほうが良さそうな気配。
(ちゃんとしたやり方あるのかもしれないが、少なくとも私は理解できなかったorz)
from scipy import linalg, mat, dot; matrix = mat( [[15,45,27,23], [17,30,48,25], [20,10,26,44], [36,10,20,24], [40,5,8,27]] ); #print "行和",sum(matrix[0,:]) #これだとだめ print "列和",sum(matrix[:,0]) # OK print "行和",sum(matrix[0,:].tolist()[0]) # 一回リストにしてsumすることは可能みたい。 #print "列和",sum(matrix[:,0].tolist()) # だめ。そもそも、列と行で形式が非対称になってるので。中見ればすぐ分かる。