1、读写文件

# coding=utf-8
import numpy as np

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

# 使用 savetxt 函数将数据存储到文件中,当然我们需要指定文件名以及要保存的数组。
np.savetxt('eye.txt',i)

2、CSV文件

CSV(Comma-Separated Value,逗号分隔值)格式是一种常见的文件格式。

通常,数据库的转存文件就是CSV格式的,文件中的各个字段对应于数据库表中的列。

众所周知,电子表格软件(如Microsoft Excel)可以处理CSV文件。

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

 数据准备:

我们以载入苹果公司的历史股价数据为例展开叙述。

股价数据存储在CSV文件中

第一列为股票代码以标识股票(苹果公司股票代码为AAPL )

第二列为dd-mm-yyyy格式的日期

第三列为空

随后各列依次是开盘价、最高价、最低价和收盘价

最后一列为当日的成交量。

下面为一行数据:
AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800

数据读入:

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

# coding=utf-8
import numpy as np

'''
delimiter:指定了文件中的分隔符为英文逗号,因为是csv文件,所以用逗号分割
usecols:指定了我们感兴趣的数据列
unpack:设置为 True 使得不同列的数据分开存储,以便随后使用
'''
# loadtxt 函数读取了一个包含股价数据的CSV文件
c,v = np.loadtxt("E://data//data.csv",delimiter=',',usecols=(6,7),unpack=True)
print(c)
print(v)

输出:

336.1
21144800.0

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

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

计算成交量加权平均价格

'''
delimiter:指定了文件中的分隔符为英文逗号,因为是csv文件,所以用逗号分割
usecols:指定了我们感兴趣的数据列
unpack:设置为 True 使得不同列的数据分开存储,以便随后使用
'''
# loadtxt 函数读取了一个包含股价数据的CSV文件
c,v = np.loadtxt("E://biyesheji//data//data.csv",delimiter=',',usecols=(6,7),unpack=True)
print(c)
print(v)

#计算VWAP成交量加权平均价格
#调用了 average 函数,并将 v 作为权重参数使用,就完成了VWAP的计算
vwap = np.average(c,weights = v)
print("VWAP = :",vwap)

输出:

336.1
21144800.0
VWAP = : 336.1

计算平均值:mean函数

#算术平均值函数
a = np.arange(9)
print("mean = :",np.mean(a))

 输出:

mean = : 4.0

取值范围(最大值和最小值以及之间的差值)

#计算最大值和最小值
print("highest = :",np.max(a))
print("lowest = :",np.min(a))

# ptp 函数可以计算数组的取值范围,该函数返回的是数组元素的最大值和最小值之间的差值
print("最大值和最小值的差值: ",np.ptp(a))

输出:

highest = : 8
lowest = : 0
最大值和最小值的差值:  8

 统计分析:股票交易者对于收盘价的预测很感兴趣。

识告诉我们,这个价格应该接近于某种均值。算数平均值和加权平均值都是在数值分布中寻找中心点的方法。

然而,它们对于异常值(outlier)既不鲁棒也不敏感。

我们可以用一些阈值来除去异常值,但其实有更好的方法,那就是中位数。

b = np.array([1,5,2,3,7,8,6])
#获得中位数
print("中位数为: ",np.median(b))
#对数组进行排序
sorted_close = np.msort(b)
print("sorted = ",sorted_close)
#获得方差,方差能够体现变量变化的程度,方差还可以告诉我们投资风险的大小。那些股价变动过于剧烈的股票一定会给持有者制造麻烦
print("方差为: ",np.var(b))

结果为:

中位数为:  5.0
sorted =  [1 2 3 5 6 7 8]
方差为:  5.95918367347