2013-09-28 30 views
2

我試圖定義,計算平均日收益爲每一個安全的程序:用數組計算numpy.mean?

import csv 
import numpy as np 

def security_mean(com): 
    CSV = csv.reader(open("my_file.csv","rb")) 
    foo = False 
    old = 0 
    new = 0 
    mean = [] 
    for row in CSV: 
     try: 
      if foo == True: 
       old = float(row[-1]) 
       x = (new - old)/old 
       mean.append(x) 
       new = float(row[-1]) 
       foo = True 
      else: 
       new = float(row[-1]) 
       foo = True 
     except ValueError: 
      string = row[-1] 
      continue 
    value = np.mean(mean) 
    print string + ' mean: ' + str(value) 

這裏是my_file.csv

Date Open High Low Close   Volume Adj Close 
2013-09-27 874.82 877.52 871.31 876.39 1258800 876.39 
2013-09-26 878.3 882.75 875 878.17 1259900  878.17 
2013-09-25 886.55 886.55 875.6 877.23 1649000 877.23 
2013-09-24 886.5 890.1 881.4 886.84 1467000 886.84 
2013-09-23 896.15 901.59 885.2 886.5 1777400 886.5 
2013-09-20 898.39 904.13 895.62 903.11 4345300 903.11 
2013-09-19 905.99 905.99 895.4 898.39 1597900 898.39 
2013-09-18 886.35 903.97 883.07 903.32 1934700 903.32 
2013-09-17 887.41 888.39 881 886.11 1259400  886.11 
2013-09-16 896.2 897 884.87 887.76 1336500  887.76 

我可以讓我的小功能,使用數組?怎麼樣?

謝謝。

注:日收益公式:(X - Y)/ Y(X/Y) - 1;其中x =今天調近,且y =昨天ADJ接近

回答

3

如果你讀了密切的值轉換爲載體,說adj_close,你可以寫new - old was a vector,adj_close [1:] - adj_close [: - 1]。

import csv 
import numpy as np 

def security_mean(com): 
    CSV = csv.reader(open("my_file.csv","rb")) 
    CSV.next() # skip header row 
    adj_close = np.array([row[-1] for row in CSV], dtype=np.float32) 
    value = np.mean((adj_close[1:]/adj_close[:-1] - 1.) 
    print string + ' mean: ' + str(value) 
+0

的數字越大則返回我一個錯誤發生:類型錯誤:不支持的操作數類型爲 - :'list'和'list' –

+0

只做了一個編輯以將列表轉換爲數組。 –

+0

新錯誤:ValueError:無法將字符串轉換爲float:Adj關閉 –

4

看來你可以使用np.loadtxt()簡化功能:

np.loadtxt('my_file.csv', skiprows=1, usecols=(1,2,3,4,5,6)).mean(axis=0) 
+0

返回我一個錯誤:IndexError:列表索引超出範圍 –

+0

@MichaelVayvala這將如果'usecols'一些指標比'列,1' –