python-数据分析 numpy应用(一)

来源:互联网 发布:python 决策树 编辑:程序博客网 时间:2024/05/22 17:38

待在舒适区久了,如同吸了大麻,无意识的麻痹,是会上瘾的

本周继续学习numpy,为了有点实际效果,感觉真的在分析数据,拿某公司的股价数据进行分析练手
数据这个样子(为了方便,进行数据分析时,删除了表头,只保留value)
存储为
test_shareprice.csv 下载地址

这里写图片描述

数据分析常用函数及简单应用

1.读写文件,在上一篇numpy库介绍的博客中已经介绍过,不多说

2.简单统计分析:

主要学习了以下常用函数

  • 最大值
  • 最小值
  • 取值范围
  • 排序
  • 中位数
  • 方差
  • 加权平均值
  • 算术平均值

加权平均数:将各数值乘以相应的 权数,然后加总求和得到总体值,再除以总的单位数。

import numpy as npclose,volume,highest,lowest=np.loadtxt('test_shareprice.csv',delimiter=',',usecols=(2,7,5,6),unpack=True)vwap = np.average(close,weights=volume)#成交量加权平均价格mean = np.mean(close)#算术平均值t = np.arange(len(close))twap = np.average(close,weights=t)#时间加权平均价格variance = np.var(close)#方差,各个数据与所有数据算术平均数的离差平方和除以数据个数所得的值h = np.max(highest)#最大值l = np.min(lowest)range_h = np.ptp(highest)range_l = np.ptp(lowest)#取值范围close_m = np.median(close)#中位数close_sorted = np.msort(close)#升序排列print(len(close))print("highest=",h)print("lowest=",l)print("close_median=",close_m)print("The range of high price ",range_h)print("The range of low price ",range_l)print("vwap={:.6f},mean={:.6f},twap={:6f}".format(vwap,mean,twap))print("vaiance=",variance)print("sorted=",close_sorted)

output:

1282highest= 21.3lowest= 4.95close_median= 10.88The range of high price  16.47The range of low price  16.72vwap=10.541415,mean=10.749680,twap=11.685586vaiance= 8.05088375107sorted= [  4.86   4.86   4.89 ...,  20.87  21.33  21.44]

3.分析日期:本来想要处理一下时间,可是在尝试将日期转换成浮点数时一直有错,不了了之

4.应用

4、1 简单移动平均线

简单移动平均线(Simple Moving Average,SMA),又称“算术移动平均线”,是指对特定期间的收盘价进行简单平均化的意思。一般所提及之移动平均线即指简单移动平均线(SMA)

#简单移动平均线smaimport numpy as np#import sysfrom matplotlib.pyplot import plotfrom matplotlib.pyplot import show#创建长度为N的数组,得到权重N = 5#int(sys.argv[1])weights = np.ones(N)/Nprint(weights)#使用权重值,调用convolve函数close=np.loadtxt('shareprice.csv',delimiter=',',usecols=(2),unpack=True)sma = np.convolve(weights,close)[N-1:-N+1]#创建存储时间值的数组t = np.arange(N-1,len(close))plot(t,close[N-1:],lw=1.0)plot(t,sma,lw=2.0)show()

蓝线为:每天的收盘价
橙线为:5日移动平均线

这里写图片描述

数据太多,效果不太明显,于是我截取了部分数据,结果如下

这里写图片描述

4.2 线性模式

numpy中linalg包专门用于线性代数计算

#线性模式预测价格import numpy as npclose=np.loadtxt('test_shareprice.csv',delimiter=',',usecols=(2),unpack=True)#获取包含N个股价的向量bb = close[-N:]b = b[::-1]print(b)#初始化N*N二维数组A = np.zeros((N,N),float)print(A)#将向量b中的股价值填充数组Afor i in range(N):    A[i, ] = close[-N-1-i:-1-i]print(A)#linalg包专门用于线性代数计算,参数分别代表:系数向量x,残差数组,A的秩,A的奇异值(x,residuals,rank,s) = np.linalg.lstsq(A,b)print(x,residuals,rank,s)#根据线性模型中的系数,预测下一次的股价#dot函数计算系数向量与最近N个价格构成的向量的点积print("I guess, the next close price is ",np.dot(b,x))
[ 19.66  19.18  19.12  19.43  20.28][[ 0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.] [ 0.  0.  0.  0.  0.]][[ 19.91  20.28  19.43  19.12  19.18] [ 19.77  19.91  20.28  19.43  19.12] [ 19.45  19.77  19.91  20.28  19.43] [ 19.62  19.45  19.77  19.91  20.28] [ 19.88  19.62  19.45  19.77  19.91]][ 2.64019309 -0.99261359 -0.79825184  0.56630539 -0.42198993] [] 5 [ 98.58743372   1.27788584   0.87082999   0.51468954   0.18431167]I guess, the next close price is  20.0506504997

查看真实数据,为20.02,预测结果可以说是相当准

4.3 趋势线

因为用到经济学知识,阻力位和支撑位等等,不太理解具体的,理解了大体思路,然后结果,惨不忍睹…

#绘制趋势线import numpy as npfrom matplotlib.pyplot import plotfrom matplotlib.pyplot import showclose,highest,lowest=np.loadtxt('test_shareprice.csv',delimiter=',',usecols=(2,5,6),unpack=True)mid = (highest+lowest+close)/3 #枢轴点print(mid)#定义函数y=a*t+b进行拟合数据def fit_line(t,y):    A = np.vstack([t,np.ones_like(t)]).T    return np.linalg.lstsq(A,y)[0]#从枢轴点推导出阻力位和支撑位t = np.arange(len(close))sa,sb = fit_line(t,mid-(highest-1))ra,rb = fit_line(t,mid+(highest-1))support = sa*t+sbresistance = ra*t+rbplot(t,close)plot(t,support)plot(t,resistance)show()

如图:走势图作用不明显,估计是数据跨度大的原因

这里写图片描述

原创粉丝点击