1.1 读写文件 


eye函数创建了一个单位矩阵 


使用savetxt函数将数据存储到文件中,当然我们需要指定文件名以及要保存的数组。 


>>> import numpy as np

>>> i2=np.eye(2)

>>> print i2

[[ 1.  0.]

 [ 0.  1.]]

>>> np.savetxt("eye.txt",i2)

1.2 CSV 文件



CSV(Comma-Separated Value,逗号分隔值)格式是一种常见的文件格式。通常,数据库的 转存文件就是CSV格式的,文件中的各个字段对应于数据库表中的列。 



读入 CSV 文件 



NumPy中的loadtxt函数可以方便地读取CSV 文件,自动切分字段,并将数据载入NumPy数组。 



下面,我们以载入苹果公司的历史股价数据为 例展开叙述。股价数据存储在CSV文件中,第一列为股票代码以标识股票(苹果公司股票代码为 AAPL),第二列为dd-mm-yyyy格式的日期,第三列为空,随后各列依次是开盘价、最高价、最低 9 价和收盘价,最后一列为当日的成交量。 



下面为一行数据:

AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800 



c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)

可以看到,数据存储在data.csv文件中,我们设置分隔符为,(英文标点逗号),因为我们要处理一个CSV文件。usecols的参数为一个元组,以获取第7字段至第8字段的数据,也就是股票 的收盘价和成交量数据。unpack参数设置为True,意思是分拆存储不同列的数据,即分别将收 盘价和成交量的数组赋值给变量c和v。 

>>> import numpy as np

>>> c,v =np.loadtxt('data.csv',delimiter=',',usecols=(6,7),unpack=True)

>>> c

336.10000000000002

>>> v

21144800.0

 



1.3成交量加权平均价格(VWAP) 



VWAP(Volume-Weighted Average Price,成交量加权平均价格)是一个非常重要的经济学量, 它代表着金融资产的“平均”价格。某个价格的成交量越高,该价格所占的权重就越大。VWAP 就是以成交量为权重计算出来的加权平均值,常用于算法交易。 



>>> c,v =np.loadtxt('data.csv',delimiter=',',usecols=(6,7),unpack=True)
>>> vwap=np.average(c,weights=v)
>>> vwap
338.09998959549171

 

1.4 算术平均值函数 

>>> d=np.mean(c)
>>> d
338.10000000000002


时间加权平均价格 



在经济学中,TWAP(Time-Weighted Average Price,时间加权平均价格)是另一种“平均” 价格的指标。既然我们已经计算了VWAP,那也来计算一下TWAP吧。其实TWAP只是一个变种 而已,基本的思想就是最近的价格重要性大一些,所以我们应该对近期的价格给以较高的权重。 最简单的方法就是用arange函数创建一个从0开始依次增长的自然数序列,自然数的个数即为收 盘价的个数。当然,这并不一定是正确的计算TWAP的方式。 

>>> t=np.arange(len(c))
>>> f=np.average(c,weights=t)
>>> f
339.10000000000002

1.5 取值范围 



通常,我们不仅仅想知道一组数据的平均值,还希望知道数据的极值以及完整的取值范 围——最大值和最小值。我们的股价示例数据中已经包含了每天的股价范围——最高价和最低 价。但是,我们还需要知道最高价的最大值以及最低价的最小值。 


min函数和max函数能够满足需求。我们按如下步骤来找最大值和最小值。 
>>> h,l=np.loadtxt('data.csv',delimiter=',',usecols=(4,5),unpack=True)
>>> m=np.max(h)
>>> n=np.min(l)
>>> m
348.39999999999998
>>> n
333.52999999999997



NumPy中有一个ptp函数可以计算数组的取值范围。该函数返回的是数组元素的最大值和最小值之间的差值。也就是说,返回值等于max(array) - min(array)。调用ptp函数: 


>>> r=np.ptp(h)
>>> q=np.ptp(l)
>>> r
4.0
>>> q
0.0
 
1.6 统计分析 
 
 
median的函数将帮助我们找到中位数
msort函数可以帮我们获得排序后的数组,并输出 结果 
>>> a=np.loadtxt("data.csv",delimiter=',',usecols=(6,),unpack=True)
>>> b=np.median(a)
>>> b
338.10000000000002
>>> c=np.msort(a)
>>> c
array([ 336.1,  337.1,  338.1,  339.1,  340.1])


方差能够体现变量变化的程度。在我们的例子中, 方差还可以告诉我们投资风险的大小。那些股价变动过于剧烈的股票一定会给持有者制造麻烦。 

>>> a=np.loadtxt("data.csv",delimiter=',',usecols=(6,),unpack=True)
>>> d=np.var(a)
>>> d
2.0



1.7 股票收益率



在学术文献中,收盘价的分析常常是基于股票收益率和对数收益率的。简单收益率是指相邻 两个价格之间的变化率,而对数收益率是指所有价格取对数后两两之间的差值。我们在高中学习 过对数的知识,“a”的对数减去“b”的对数就等于“a除以b”的对数。因此,对数收益率也可 以用来衡量价格的变化率。注意,由于收益率是一个比值,例如我们用美元除以美元(也可以是 8 其他货币单位),因此它是无量纲的。总之,投资者最感兴趣的是收益率的方差或标准差,因为 这代表着投资风险的大小。 


分析股票收益率



NumPy中的diff函数可以返回一个由相邻数组元素的差 值构成的数组。这有点类似于微积分中的微分。为了计算收益率,我们还需要用差值除以前一天 的价格。 

>>> c=np.loadtxt('data.csv',delimiter=',',usecols=(6,),unpack=True)
>>> c
array([ 336.1,  337.1,  338.1,  339.1,  340.1])
>>> d=c[:-1]
>>> d
array([ 336.1,  337.1,  338.1,  339.1])
>>> e=np.diff(c)
>>> e
array([ 1.,  1.,  1.,  1.])
>>> returns = e/d
>>> returns
array([ 0.0029753 ,  0.00296648,  0.0029577 ,  0.00294898])



我们没有用收盘价数组中的最后一个值做除数。接下来,用std函数计算标准差: 

>>> f=np.std(returns)
>>> f
9.8097844864301728e-06

 

1.8 日期分析 



分析日期数据 处理日期总是很烦琐,NumPy是面向浮点数运算的,因此需要对日 期做一些专门的处理。 



import numpy as np
from datetime import datetime

def datestr2num(s):
        return datetime.strptime(s,"%d-%m-%Y").date().weekday()

dates,close=np.loadtxt('data.csv',delimiter=',',usecols=(1,6),converters={1:datestr2num},unpack=True)

print "Dates=",dates

averages =np.zeros(5)

for i in range(5):
    indices=np.where(dates==i)
    prices=np.take(close,indices)
    avg=np.mean(prices)
    print "Day",i,"prices",prices,"Average",avg
    averages[i]=avg

top= np.max(averages)

print "Highest average",top

print "topp day of the week ", np.argmax(averages)

bottom =np.min(averages)
print "lowest average",bottom
print "bottom day of the week ",np.argmin(averages)