Pythonで相関係数を計算する

Pythonは豊富な科学技術計算ライブラリが含まれています。その中の一つに相関係数を計算するものがあったので使ってみました。驚いたのは、処理が早いこと早いこと。10000組2変数の相関係数を一瞬で出してくれました。

numpyモジュールの中のcorrcoefという関数を使います。

最初の数行はコマンドライン引数を取得するためのもの。

#!/usr/bin/python
# coding: utf-8

from numpy import corrcoef
import sys
import os

if len(sys.argv) >= 2:
  # arguments setup
  i = 1
  infile="" # input file
  bout=1 # boolean type flag to normal output
  while i <= (len(sys.argv)-1):
    if sys.argv[i] == '-in':
      infile=sys.argv[i+1]
      i += 1
    elif sys.argv[i] == '-noprint':
      bout=0
    i += 1

  if infile != "":
    if not(os.path.exists(infile)):
      print "NOT FOUND: " + infile
      exit()
    else: # file exists
      if bout:
        print "Start: "+infile

      # file handler
      f = open(infile, 'r')

      # array initialize
      v1 = []
      v2 = []

      line = f.readline()
      while line: # read line one by one
        col = line.split() # split blank
        if len(col) != 2:
          print "line: " + line + "was error"
          exit()
        v1.append(col[0])
        v2.append(col[1])

        line = f.readline() # next while

      corr = corrcoef(v1, v2) # correlation module
      print corr[0][1]
      exit()

# if arguments was failed
print "-in:  input file"

こんな風に2列になっているのを想定。

121.697 19.660
120.964 27.325
109.400 38.971
113.572 16.536
113.968 29.440
128.167 31.111
117.185 37.318
115.050 13.589
110.175 24.190

こんな風に使います。

python corr.py -in [filename] -noprint


無駄にこだわって書きすぎて、冗長な部分もありますが。もう少し統計の勉強をしなくては。