订阅博客
收藏博客
微博分享
QQ空间分享

电动三轮车,用Python剖析苹果公司股价数据,selected

频道:社会资讯 标签:应召女友小米mix 时间:2020年02月14日 浏览:107次 评论:0条

关键抢先看

1.csv数据的读取

2.运用常用函数获取均值、中位数、方差、规范差等统计量

3.运用常用函数剖析价格的加权均值、收益率、年化动摇率等常用目标 4.处理数据中的日期

咱们最终会介绍一下NumPy库中的一些十分有用和常用的函数办法。

要知道,NumPy的常用数学和统计剖析的函数十分多,假如咱们电动三轮车,用Python剖析苹果公司股价数据,selected一个一个的涣散来讲,一来十分单调,二来呢也记不住,就似乎又回到了昏昏欲睡的讲堂,今日咱们用一个布景比如来串联一下这些零星的知识点。

咱们通gangbang过剖析苹果公司的股票价格,来串讲NumPy的常用函数用法

咱们在咱们python文件的同级目录成毅下放置数据文件AAPL.csv,用excel文件能够翻开看看里边是什么样的:

顺次是日期,收盘价、成交量、开盘价、最高价和最低价 在CSV文件中,每一列数据数据是被“,”离隔的,为了突出重点简化程序,咱们把榜首行去掉,就像下面这样

首要,咱们读取“收盘价”和“成交量”这两列,即第1列和第2列(csv也是从第0列开端的)

import numpy as 陈绮贞为什么叫陈装装np 
c, v = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1, 2), unpack=True)
print(c)
print(v)
[ 178.02 178.65 178.44 179.97 181.72 179.98 176.94 175.03 176.67 176.82 176.21 175. 178.12 178.39 178.97 175.5 172.5 171.07 171.85 172.43 172.99 167.37 164.34 162.71 156.41 155.15 159.54 163.03 156.49 160.5 167.78 167.43 166.97 167.96 171.51 171.11 174.22 177.04 177. 178.46 179.26 179.1 176.19 177.09 175.28 174.29 174.33 174.35 175. 173.03 172.23 172.26 169.23 171.08 170电动三轮车,用Python剖析苹果公司股价数据,selected.6 170.57 175.01 175.01 174.35 174.54 176.42]
[ 38313330. 22676520. 29334630. 31464170. 32191070. 32130360. 24518850. 31686450

这样,咱们就完成了榜首个使命,将csv数据文件中存储的数据,读取到咱们两个ndarray数组c和v中了。

接下来,咱们全国有情人小试牛刀,对收盘价进行最简略的数据处理,求取他的均匀值。

榜首种,十分简略,便是咱们最常见到的管用均匀值

import numpy as np 
c, v = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1, 2), unpack=True)
mean_c = np.mean(c) print(mean_c)
172.614918033

第二种,是加权均匀值,咱们用成交量来加权均匀价格

即,用成交量的值来作为权重,某个价格的成交量越高,该价格所占的权重就越大。顺风妇产科美达

import numpy as np 
c, v = np.loadtxt('AAPL.csv', delimite电动三轮车,用Python剖析苹果公司股价数据,selectedr=',撸管用图', usecols=(1, 2), unpack=True)
vwap = np.average(c,赣榆天气预报 weights=v)
print(vwap)
170.950010035

再来说说取值规模,找找最大值和最小值

咱们找找收盘价的最大值和最小值,以及最大值和最小值之间的差异

import numpy as np 


c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)


print(np.max(c))


print(np.min(c))


print(np.ptp(c))





181.72


155.15


26.57

接下来咱们进行简略的统计剖析

咱们先来求取收盘价的中位数

import numpy as np 


c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)


print(np.max(c))


print(np.min(c))


print(np.median(c))





181.72


155.15 电动三轮车,用Python剖析苹果公司股价数据,selected


174.35

求取方差

别的一个咱们关怀的统计量便是方差,方差能够表现变量改变的程度。在咱们的比如中,方差还能够告知咱们出资危险的巨细。那些股价变化过于剧烈的股票必定会给持有者带来费事

import numpy as np 


c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)


print(np.va申万宏源r(c))





37.5985528621

咱们回忆一下方差的界说,方差指的是各个数据与一切数据管用均匀数的离差平方和的均值

import numpy as np 


c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)


print(np.mean((c - c.mean())**2))
37.5985528621

上下比照一下,看看,成果是如出一辙的。

现在咱们来看看每天的收益率,这个核算式子很简略:

即用今日的收盘价减去昨日的收盘价,再司屹川除以昨日的收盘价格。一起咱们发挥NumPy的优势,运用向量运算,能够一次性算出一切交易日的收益率

diff函数时用数组的第N项减第N-1项,得到一个n-1项的一维数组。本例中咱们注意到数组中日期越近的收盘价,数组索引越小,因而得取一个相反数,综上代码:

import numpy as np 


c = np.loadtxt('AAP邪手医仙L.csv', de火树银花不夜天limiter='读后感作文,', usecols=(1,), unpack=True)


returns = -np.diff(c)/c[1:]


print(returns)





[-0.00352645 0.00117687 -0.00850142 -0.0096302 0.00966774 0.01电动三轮车,用Python剖析苹果公司股价数据,selected718097 0.0109124

然后调查一下每日收益的规范差,就能够看看收益的动摇大不大了:

import numpy as np

c = np.loadtxt('AA联发科PL.csv', delimiter=',', usecols=(1,), unpack=True)

returns = -np.diff(c)/c[1:]

print(np.std(retur美尼尔归纳征ns))

0.0150780328454

假如咱们想看看哪些天的收益率是正的,很简略,还记得where句子吗,拿来运用吧

import numpy as np

c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpack=True)

returns = -np.diff(c)/c[1:]

print(np.where(returns>0))

(array([ 1, 4, 5, 6, 9, 10, 14, 15, 16, 20, 21, 22, 23, 24, 27, 30, 31, 34, 37, 40,

专业diaryone上咱们对价格变化能够用一个叫做“动摇率”的目标进行衡量。核算前史动摇率时需求用到对数收益率,对数收益率很简略,便是

按照对数的性质,他等于

在核算年化动摇率时,要用样本中一切的对数收益率的规范差除以其均值,再除以交易日倒数的平方根,一年交易日取252天。

咱们简略的看一下下面的代码

import numpy as np 
c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(1,), unpa电动三轮车,用Python剖析苹果公司股价数据,selectedck=True)
logreturns = -np.diff(np.log(c))
volatility = np.std(logreturns) / np.mean(logreturns)
annual_volatility = volatility / np.sqrt(1./252.)
print(volatility)
print(annual_volatility)
100.096757388
1588.98676256

这儿咱们再着重一点便是:sqrt办法中应用了除法核算,这儿有必要运用浮点数进行运算。月度动摇率也是同理用1./12.即可

咱们能够常常会发现,在数据剖析的过程中,关于日期的处理和剖析也是一个很重要的内容。

咱们先试图用老办法来从csv文件中把日期数据读出来

import numpy as np

dates,c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(0,1), unpack=True)

Traceback (most recent call last):

File "E:/12homework/12homework.py", line 2, in

dates,c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(0,1), unpack=True)

File "C:\Python34\lib\site-packages\numpy\lib\npyio.py", line 930, in loadtxt

items = [conv(val) for (conv, val) in电动三轮车,用Python剖析苹果公司股价数据,selected zip(converters, vals)]

File "C:\Python34\lib\site-packages\numpy\lib\npyio.py", line 930, in

items = [conv(val) for (conv, val) in zip(converters, vals)]

File "C:\Python34\lib\site-packages\numpy\lib\npyio.py", line 659, in floatconv

return float(x)

ValueError: could not convert string to float: b'2018/3/16'

咱们发现他报错了,错误信息是不能将一个字节类型的目标转化为浮点类型目标。原因是因为NumPy是面向浮点数运算的,那么咱们对症下药,对日期字符串进行一些转化处理。

咱们先假定日期是一个字符串类型(下载的网络数据中往往是将字符串经过utf-8编码成字节码,这个能够见榜首季中字符编码相关内容的介绍)

import numpy as np import datetime 
strdate = '2017/3/16'
d = datetime.datetime.strptime(strdate,'%Y/%m/%d')
print(type(d))
print(d)

2017-03-16 00:00:00

经过python规范库中的datetime函数包,咱们经过指定匹配的格局%Y/%m/%d

将日期字符串转化为了datetime类型目标,Y大写匹配完好的四位数记年,y小写便是两位数,例如17。

datetime目标有一个date办法,把datetime目标中的time部分去掉,变成一个纯的日期,再调用weekday能够转化为一周中的第几天,这儿是从周日开端算起的。

import numpy as np import datetime 
strdate = '2018/3/16'
d = datetime.datetime.strptime(strdate,'%Y/%m/%d')
print(d.date())
print(d.date().weekday())
2018-03-16 4

最终,咱们回到这份苹果公司股价的csv文件,来做一个归纳剖析,来看看周几的均匀收盘价最高,周几的最低:

import numpy as np import datetime 
def datestr2num(bytedate):
return datetime.datetime.strptime(
bytedate.decode('utf-8'),'%Y/%m/%d').date().weekday()
dates,c = np.loadtxt('AAPL.csv', delimiter=',', usecols=(0,1),
converters={0: datestr2num}, unpack=True)
averages = guardnp.zeros(5)
for i in range(5):
index = np.where(dates == i)
prices = np.take(c, index)
avg = np.mean(prices)
averages[i] = avg print("Day {} prices: {},avg={}".format(i,prices,avg))
top = np.max(averages)
top_index = np.argmax(averages)
bot = np.min(averages)
bot_index = np.argmin(averages)
print('highest:{}, top day is {}'.format(top,top_index))
print('lowest:{},bottom day is {}'.format(bot,bot_index))
Day 0 prices: [[ 181.72 176.82 178.97 162.71 156.49 167.96 177. 174.35 176.42]],avg=172.49333333333334
Day 1 prices: [[ 179.97 176.67 178.39 171.85 164.34 163.03 166.97 177.04 176.19 174.33 172.26 170.57 174.54]],avg=172.78076923076924
Day 2 prices: [[ 178.44 175.03 178.12 171.07 167.37 159.54 167.43 174.22 179.1 174.29 172.23 170.6通天教主 174.35]],avg=172.44538461538463
Day 3 prices: [[ 178.65 176.94 175. 172.5 172.99 155.15 167.78 171.11 179.26 175.28 173.03 171.08 175.01]],avg=172.59846153846152
Day 4 prices: [[ 178.02 179.98 176.21 175.5 172.43 156.41 160.5 171.51 178.46 177.09 175. 169.23 175.01]],avg=172.71923076923073
highest:172.78076923076924, top day is 1
lowest:172.44538461538463,bottom day is 照相机2

扼要的再剖析一下:因为从csv中读取的数据类型为bytes,所以咱们写了一个转化函数,先将bytes类型的日期数据进行解码(字符串编解码详见榜首季),然后再用上一段程序介绍的办法转化为一个表明周几的数字

而np.loadtxt函数中的参数converters={0: datestr2num},便是说针对榜首列的数据,咱们运用这个转化函数将其转化为一个数字,并将这个整形元素构成的数组赋值给dates变量。

后边的处理就很简略了,用循环顺次取出每个工作日的收盘价构成的数组,对其求均匀值。然后得到周一到周五,五个均匀值的最大值、最小值。

最终咱们再介绍两个有用函数,一个是数组的裁剪函数,即把比给定值还小的值设置为给定值,比给定值大的值设置为给定上限

import numpy as np 
a = np.arange(5)
print(a.clip(1,3))
[1 1 2 3 3]

第二个是一个挑选函数,回来一个依据给定条件挑选后得到的成果数组

import numpy as np 


a = np.arange(5)


print(a.compress(a > 2))





[3 4]



这一末节中,咱们运用NumPy的一些有用函数,对苹果公司的股价进行了一些十分十分简略的剖析,意图是经过这个实例来串讲一下这些有用的数据处理函数。

其实NumPy的功用十分十分多,远不止这些,可是没有必要去一个一个学。而且另一方面,NumPy的办法都过于原始和底层,尽管功用尚胜法很丰厚,可是运用起来也很冗杂。这儿咱们为我们打一个根底,后边的章节就不会再一一介绍里边的各种函数了。后边我要介绍根据NumPy之上的一些更高层的办法库,功用更强壮,运用也更简略。