博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NumPy的常用函数
阅读量:5334 次
发布时间:2019-06-15

本文共 3870 字,大约阅读时间需要 12 分钟。

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 npfrom datetime import datetimedef 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=",datesaverages =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]=avgtop= np.max(averages)print "Highest average",topprint "topp day of the week ", np.argmax(averages)bottom =np.min(averages)print "lowest average",bottomprint "bottom day of the week ",np.argmin(averages)

 

 

 

 

 

转载于:https://www.cnblogs.com/vincentqliu/p/6623861.html

你可能感兴趣的文章
关于nodejs的npm命令无反应的解决方案
查看>>
Linux远程登录
查看>>
ES6 异步编程解决方案 之 Promise 对象
查看>>
Alpha阶段第九次Scrum Meeting
查看>>
Linux自己安装redis扩展
查看>>
HDU 1016 Prime Ring Problem(dfs)
查看>>
苹果官方例子
查看>>
C#中结构体与字节流互相转换
查看>>
【矩阵快速幂】bzoj1297 [SCOI2009]迷路
查看>>
双线性插值
查看>>
TCP连接
查看>>
HTML-meta
查看>>
使用ubifs作为根文件系统的openwrt如何在进行sysupgrade时保存旧的配置
查看>>
Android 异步加载解决方案
查看>>
app 后端技术
查看>>
协程的原理及其在高并发服务中的应用
查看>>
Android的一个自定义的动态添加Dialog类
查看>>
js中对时间的操作
查看>>
WIN10配置MongoDB
查看>>
iOS resign code with App Store profile and post to AppStore
查看>>