数据分析学习笔记(七)-- 股价分析

本例子,通过numpy分析股价

csv文件读写

CSV(Comma-Separated Value,逗号分隔值)是一种常见的文件格式,通常数据库的转存文件就是csv格式,文件中的各个字段对应于数据库表中的列。

这里有一份csv格式的文件,本文一该文件数据为例。
数据结构如下图

CSV

每一条数据对应,第一列为股票代码以标识股票(苹果公司股票代码为AAPL),第二列为dd-mm-yyyy格式的日期,第三列为空,随后各列依次是开盘价、最高价、最低价和收盘价,最后一列为当日的成交量。

我们可以通过numpy的 loadtext()和savetext()函数完成读写操作

# 从文件中读取数据
# 'data.csv':文件名
# delimiter:分隔符
# usecols:所取数据的列下标
# unpack:返回数组
c,v = np.loadtxt('data.csv', delimiter=',', usecols=(6,7), unpack=True)
# 读取了收盘价和成交量数据
x = y = z = np.arange(0.0,5.0,1.0)
np.savetxt('test.csv', x, delimiter=',')   # X 数组
np.savetxt('test.csv', (x,y,z))   # x,y,z 都是一维数组
np.savetxt('test.csv', x, fmt='%1.4e')   # 使用指数表示法

成交量加权平均价格

首先读取成交量数据和收盘价数据

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

# 计算成交量的平均价格
vwap = np.average(c, weights=v)
v_mean = np.average(c)
print('算术平均:{},加权平均:{}'.format(v_mean, vwap))
'''算术平均:351.0376666666667,加权平均:350.5895493532009'''

# 时间加权平均价格
t = np.arange(len(c))
twap = np.average(c, weights=t)
print('时间加权平均:{}'.format(twap))
'''时间加权平均:352.4283218390804'''

最大值和最小值

寻找最高价和最低价

# 读取最高价和最低价
h,l = np.loadtxt('data.csv', delimiter=',', usecols=(4,5), unpack=True)
# 最高价中的最大值
h.max()     # 364.9
# 最低价中的最小值
l.min()     # 333.53

# 区间差值:np.ptp()
h_ptp = np.ptp(h)
l_ptp = np.ptp(l)
print('最高价的差值为:{:.2f}'.format(h_ptp))
print('最低价的差值为:{:.2f}'.format(l_ptp))
'''最高价的差值为:24.86
最低价的差值为:26.97'''

简单统计分析

收盘价的统计分析

c = np.loadtxt('data.csv', delimiter=',', usecols=(6,), unpack=True)
print('原始数据:{}'.format(c))
'''
原始数据:[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] '''
# 中位数
print('中位数为:{}'.format(np.median(c)))
'''中位数为:352.055'''
# 验证
sorted = np.sort(c)
print('排序后的数据为:{}'.format(sorted))
'''
[336.1  338.61 339.32 342.62 342.88 343.44 344.32 345.03 346.5  346.67
 348.16 349.31 350.56 351.88 351.99 352.12 352.47 353.21 354.54 355.2
 355.36 355.76 356.85 358.16 358.3  359.18 359.56 359.9  360.   363.13]'''
# 可以看出中位数为[351.99 352.12]的平均值

# 方差
print('股价的方差为:{}'.format(np.var(c)))
'''股价的方差为:50.126517888888884'''

股票收益率

  • 股票收益率:收盘价的差值/收盘价
# diff()后一项减去前一项的差,数量会少一项,对应的只取到最后一项收盘价
returns = np.diff(c) / c[:-1]
print('收益率为:{}'.format(returns))    
'''
[ 0.00958048  0.01682777 -0.00205779 -0.00255576  0.00890985  0.0155267
  0.00943503  0.00833333 -0.01010721  0.00651548  0.00652935  0.00200457
  0.00897472 -0.01330102 -0.02160201 -0.03408832  0.01184253  0.00075886
  0.01539897  0.01450483 -0.01104159  0.00804443  0.02112916  0.00122372
 -0.01288889  0.00112562 -0.00924781 -0.0164553   0.01534601]
 '''
print('收益率的标准差:{}'.format(np.std(returns)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值