1、统计分析应用
文件见附件:data.csv
链接:https://pan.baidu.com/s/191kp22ylN7zimfiy-6UQ9w 密码:z1x4
import numpy as np
# 加载收盘价和成交量
close, amount = np.loadtxt('data/data.csv', delimiter=',', usecols=(6, 7), unpack=True)
print("收盘价:\n", close)
print("成交量:\n", amount)
# 1、成交量加权平均价,np.average(ndarray,weights)
average = np.average(close, weights=amount)
print("成交量加权平均价:", average)
# 2、计算算术平均值:np.mean(ndarray) np.average(args):不加weights就是求算术平均值
# 收盘价的算术平均值
mean = np.mean(close)
average1 = np.average(close)
print("收盘价的算术平均价格:", mean)
print("收盘价的算术平均价格:", average1)
# 3、求最大值和最小值 np.max(ndarray) np.min(ndarray)
max = np.max(amount)
print("最大成交量:", max)
min = np.min(amount)
print("最小成交量:", min)
# 编写一个函数,实现查找任意维度数组的最大值和最小值
example = np.arange(24).reshape(2,3,4)
def getMaxandMin(ndarray1):
d1 = ndarray1.ravel()
d1.sort()
max = d1[len(d1)-1]
min = d1[0]
return max,min
result = getMaxandMin(example)
print(result)
#4、计算数组的极差(最大值-最小值之差) np.ptp
hith =np.loadtxt('data/data.csv',delimiter=',',usecols=(4))
print(hith)
#计算股票最高价的极差
ptp = np.ptp(hith)
print(ptp)
# 利用股票的最大值和最小值求得极差
print(np.max(hith)-np.min(hith))
# 5、求数组中位数 np.median()
close =np.loadtxt('data/data.csv',delimiter=',',usecols=(6))
median = np.median(close)
print("中位数:",median)
# 验证
close.sort()
chang = len(close)
if chang%2==0:
a = close[int(chang/2)]
b =close[int(chang/2-1)]
total = (a +b)/2
print(total)
else:
print(close[int(chang//2)])
# 6、计算数据样本的方差 np.var()
close =np.loadtxt('data/data.csv',delimiter=',',usecols=(6))
open =np.loadtxt('data/data.csv',delimiter=',',usecols=(3))
close_var = np.var(close)
open_var = np.var(open)
print("收盘价的方差:",close_var)
print("开盘价的方差:",open_var)
2、求股票的波动率
# 年波动率等于对数收益率的标准差除以其均值,再除以交易日
# 倒数的平方根,通常交易日取252天,求年波动率
close = np.loadtxt('data/data.csv', delimiter=',', usecols=(6))
# 计算简单的收益率:相邻两天的差除以前一天的价格
result = np.diff(close) / close[:-1]
# print(result)
# 对数收益率:将每天的价格取对数,底数为e
# 先对所有的收盘价取对数
logReturns = np.diff(np.log(close))
print("对数收益率:\n", logReturns)
# 对数收益率的标准差
std = np.std(logReturns)
print("对数收益率的标准差:", std)
3、数组数据的筛选应用
close = np.loadtxt('data/data.csv', delimiter=',', usecols=(6))
# 对数收益率:将每天的价格取对数,底数为e
logReturns = np.diff(np.log(close))
print("对数收益率:\n", logReturns)
# 筛选出对数收益率大于0的所有元素的索引
indices = np.where(logReturns>0)
print("对数收益率大于0的索引为:\n",indices)
# 根据索引值,获取相应的数组元素
result = np.take(logReturns,indices)
print("收益率大于0的值有:\n",result)
4、常用统计方法应用
# 1、求阶乘 np.prod,即累乘
arr = np.array([5, 2, 7, 4])
prod = np.prod(arr)
print("阶乘", prod)
# 2、累积乘积 np.cumprod()
# 原来 [2,3,4,5]
# 结果 [2 6 24 120]
cumArr = np.array([2, 3, 4, 5])
cumProd = np.cumprod(cumArr)
print(cumProd)
# 3、将数组中所有比num1小的元素设为num1
# 所有比num2大的元素设为num2
# 介于最大值和最小值的数保持不变 np.clip(num1,num2)
clip1 = np.array([3, 56, 7, 44, 22, 18, 66])
result = clip1.clip(20, 48)
print(result)
# 4、np.compress()返回根据一定条件筛选后的数组
close = np.loadtxt('data/data.csv', delimiter=',', usecols=(6))
# 计算对数收益率
logReturns = np.diff(np.log(close))
print(logReturns)
# 筛选出对数收益率中大于0的元素
mask = logReturns>0
print("mask索引:",mask)
result = logReturns.compress(mask)
print("对数收益率中大于0的元素为:",result)
5、日期的格式转化应用
# import datetime
from datetime import datetime
dateStr = '2018-5-28'
newDate = datetime.strptime(dateStr,'%Y-%m-%d')
print(newDate)
# 获取dateStr日期对应的星期
weekday = newDate.date().weekday()
print("{}是星期{}".format(dateStr,weekday+1))
6、练习
# 文件中的数据为给定时间范围内某股票的数据,现要求:获取该时间范围
# 内交易日周一、周二、周三、周四、周五分别对应的平均收盘价及哪天的
# 平均收盘价最高,哪天的平均收盘价最低。
import numpy as np
from datetime import datetime
# 将日期格式字符串转化得到星期
def datestr(s):
return datetime.strptime(s.decode('utf8'),'%d-%m-%Y').date().weekday()
# 把第2列以datestr函数的方法取出
dates,close = np.loadtxt('data/data.csv',delimiter=',',usecols=(1,6),converters={1:datestr},unpack=True)
print("交易日期:\n",dates+1)
print("收盘价:\n",close)
average = []
for i in range(5):
# 根据星期数条件得到一个mask数组
mask = dates == i
# 根据mask数组筛选出星期数为i的所有的收盘价
weekday = close.compress(mask)
# 把求到的各个数组,求出平均值,并放到average列表中
average.append(np.mean(weekday))
#获取数组中最大值最小值的索引
max_vlaue = np.argmax(average)
min_vlaue = np.argmin(average)
print("星期 {} 的平均收盘价最高".format(max_vlaue+1))
print("星期 {} 的平均收盘价最低".format(min_vlaue+1))
打印结果如下:
交易日期:
[5. 1. 2. 3. 4. 5. 1. 2. 3. 4. 5. 1. 2. 3. 4. 5. 2. 3. 4. 5. 1. 2. 3. 4.
5. 1. 2. 3. 4. 5.]
收盘价:
[336.1 339.32 345.03 344.32 343.44 346.5 351.88 355.2 358.16 354.54
356.85 359.18 359.9 363.13 358.3 350.56 338.61 342.62 342.88 348.16
353.21 349.31 352.12 359.56 360. 355.36 355.76 352.47 346.67 351.99]
星期 3 的平均收盘价最高
星期 5 的平均收盘价最低