numpy学习指南3rd3:常用函数

代码地址

文件读写

单位矩阵,即主对角线上的元素均为1,其余元素均为0的正方形矩阵。在NumPy中可以用 eye 函数创建一个这样的二维数组,我们只需要给定一个参数,用于指定矩阵中1的元素个数。

例如,创建2×2的数组

genfromtxt.py

1
2
3
4
5
6
import numpy as np

data = np.eye(2)
print(data)
np.savetxt("eye.txt", data)
print(np.genfromtxt("eye.txt"))

执行结果:

1
2
3
4
5
$ python3 genfromtxt.py
[[1. 0.]
 [0. 1.]]
[[1. 0.]
 [0. 1.]]

CSV文件

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

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

从现在开始,我们只关注股票的收盘价和成交量。在上面的示例数据中,收盘价为 336.1 ,成交量为 21144800 。我们将收盘价和成交量分别载入到两个数组中,如下所示:

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

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

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

vwap.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author:    china-testing#126.com 技术支持qq群:630011153
# CreateDate: 2018-3-30

import numpy as np

#  unpack 参数设置为 True ,意思是分拆存储不同列的数据,即分别将收
# 盘价和成交量的数组赋值给变量 c 和 v 。
c,v=np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)
vwap = np.average(c, weights=v)
print("VWAP =", vwap)

print("mean =", np.mean(c))

# 计算TWAP
t = np.arange(len(c))
print("twap =", np.average(c, weights=t))

执行结果:

1
2
3
4
$ python3 vwap.py 
VWAP = 350.5895493532009
mean = 351.0376666666667
twap = 352.4283218390804

最大值和最小值

range.py

vwap.py

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author:    china-testing#126.com 技术支持qq群:630011153
# CreateDate: 2018-04-17
import numpy as np

h,l=np.loadtxt('data.csv', delimiter=',', usecols=(4,5), unpack=True)
print("highest =", np.max(h))
print("lowest =", np.min(l))
print((np.max(h) + np.min(l)) /2)

print("Spread high price", np.ptp(h))
print("Spread low price", np.ptp(l))

执行结果:

1
2
3
4
5
6
$ python3 range.py 
highest = 364.9
lowest = 333.53
349.215
Spread high price 24.859999999999957
Spread low price 26.970000000000027

统计分析

links