NumPy的常用函数

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)

 

 

 

 

 
posted @ 2017-05-22 17:00  琦在江湖飘  阅读(998)  评论(0编辑  收藏  举报