NumPy常用函数(8)-- 根据日期分析股票涨幅

    首先,我们要读入收盘价数据。随后,根据星期几来切分收盘价数据,并分别计算平均价格。最后,我们将找出一周中哪一天的平均收盘价最高,哪一天的最低。

 

    NumPy是面向浮点数运算的,因此读取日期时要做一些专门的处理。如果就按如下代码读取数据会出现异常:

dates,close = loadtxt('data.csv',delimiter=',',usecols=(1,6),unpack=True)

    执行以上代码后会得到一个错误提示:

ValueError: could not convert string to float: b'28-01-2016'

    显然,NumPy尝试把日期转换为浮点数。我们需要做的就是显示地告诉NumPy怎样来转换日期,而这需要用到loadtxt函数中一个特定的参数。这个参数就是converters,它是一本数据列和转换函数直接进行映射的字典。

    因此,我们必须写出转换函数:

'''
星期一:0
星期二:1
星期三:2
星期四:3
星期五:4
星期六:5
星期日:6
'''

def datestr2num(s):
    return datetime.strptime(s.decode('utf-8'),'%d-%m-%Y').date().weekday()

    我们将日期作为字符串传给datestr2num函数,如“24-06-2018”。这个字符串首先会按照指定的形式“%d-%m-%Y”转换成一个datetime对象。随后,datetime对象被转换为date对象。最后,调用weekday方法返回一个数字。

    接下来,我们将日期转换函数挂接上去,这样就可以读入数据了。

dates,close = loadtxt('data.csv',delimiter=',',usecols=(1,6),unpack=True,converters={1:datestr2num})

输出结果:

[ 4.  0.  1.  2.  3.  4.  0.  1.  2.  3.  4.  0.  1.  2.  3.  4.  1.  2.  3.  4.  0.  1.  2.  3.  4.  0.  1.  2.  3.  4.]

如你所见,没有出现星期六和星期天。股票交易是在周末是休市的。

 

take:返回索引对应的值组成的数组
argmax:取数组中最大值对应的索引
argmin:取数组中最小值对应的索引

根据日期分析股票涨幅实例如下:

#NumPy常用函数:根据日期分析股票涨幅
from numpy import *
from datetime import *


'''
星期一:0
星期二:1
星期三:2
星期四:3
星期五:4
星期六:5
星期日:6
'''

def datestr2num(s):
    return datetime.strptime(s.decode('utf-8'),'%d-%m-%Y').date().weekday()
#print(datestr2num(b'10-6-2018')) #2018年6月10号

dates,close = loadtxt('data.csv',delimiter=',',usecols=(1,6),unpack=True,converters={1:datestr2num})
#print(dates)
dates = dates.astype(int)#将浮点型数据转换为整形数据
print("Dates","=",dates)

averages = zeros(5)
for i in range(5):
    idx = where(dates == i)
    prices = take(close, idx)
    avg = mean(prices)
    print("Day",i,"    prices",prices,"    平均值",avg)
    averages[i] = avg

top = max(averages)
print("最高收盘价:",top)
print("那天收盘价最高:",argmax(averages))

bottom = min(averages)
print("最低收盘价:",bottom)
print("那天收盘价最低:",argmin(averages))

输出结果是:

Dates = [4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 1 2 3 4 0 1 2 3 4 0 1 2 3 4]
Day 0     prices [[ 339.32  351.88  359.18  353.21  355.36]]     平均值 351.79
Day 1     prices [[ 345.03  355.2   359.9   338.61  349.31  355.76]]     平均值 350.635
Day 2     prices [[ 344.32  358.16  363.13  342.62  352.12  352.47]]     平均值 352.136666667
Day 3     prices [[ 343.44  354.54  358.3   342.88  359.56  346.67]]     平均值 350.898333333
Day 4     prices [[ 336.1   346.5   356.85  350.56  348.16  360.    351.99]]     平均值 350.022857143
最高收盘价: 352.136666667
那天收盘价最高: 2
最低收盘价: 350.022857143
那天收盘价最低: 4

 

 

data.csv文件内容如下:

AAPL,28-01-2011, ,344.17,344.4,333.53,336.1,21144800
AAPL,31-01-2011, ,335.8,340.04,334.3,339.32,13473000
AAPL,01-02-2011, ,341.3,345.65,340.98,345.03,15236800
AAPL,02-02-2011, ,344.45,345.25,343.55,344.32,9242600
AAPL,03-02-2011, ,343.8,344.24,338.55,343.44,14064100
AAPL,04-02-2011, ,343.61,346.7,343.51,346.5,11494200
AAPL,07-02-2011, ,347.89,353.25,347.64,351.88,17322100
AAPL,08-02-2011, ,353.68,355.52,352.15,355.2,13608500
AAPL,09-03-2011, ,355.19,359,354.87,358.16,17240800
AAPL,10-02-2011, ,357.39,360,348,354.54,33162400
AAPL,11-02-2011, ,354.75,357.8,353.54,356.85,13127500
AAPL,14-02-2011, ,356.79,359.48,356.71,359.18,11086200
AAPL,15-02-2011, ,359.19,359.97,357.55,359.9,10149000
AAPL,16-02-2011, ,360.8,364.9,360.5,363.13,17184100
AAPL,17-02-2011, ,357.1,360.27,356.52,358.3,18949000
AAPL,18-02-2011, ,358.21,359.5,349.52,350.56,29144500
AAPL,22-02-2011, ,342.05,345.4,337.72,338.61,31162200
AAPL,23-02-2011, ,338.77,344.64,338.61,342.62,23994700
AAPL,24-02-2011, ,344.02,345.15,338.37,342.88,17853500
AAPL,25-02-2011, ,345.29,348.43,344.8,348.16,13572000
AAPL,28-02-2011, ,351.21,355.05,351.12,353.21,14395400
AAPL,01-03-2011, ,355.47,355.72,347.68,349.31,16290300
AAPL,02-03-2011, ,349.96,354.35,348.4,352.12,21521000
AAPL,03-03-2011, ,357.2,359.79,355.92,359.56,17885200
AAPL,04-03-2011, ,360.07,360.29,357.75,360,16188000
AAPL,07-03-2011, ,361.11,361.67,351.31,355.36,19504300
AAPL,08-03-2011, ,354.91,357.4,352.25,355.76,12718000
AAPL,09-03-2011, ,354.69,354.76,350.6,352.47,16192700
AAPL,10-03-2011, ,349.69,349.77,344.9,346.67,18138800
AAPL,11-03-2011, ,345.4,352.32,345,351.99,16824200

注:

第一列为股票代码以表示股票(苹果公司股票代码为AAPL)
第二列为dd-mm-yyyy格式的日期

第三列为空
第四列为开盘价
第五列为最高价
第六列为最低价
第七列为收盘价
第八列为成交量

 

Python中的NumPy库是一个非常有用的科学计算库,它提供了许多常用函数用于处理数组和矩阵。以下是一些Python中NumPy常用函数的介绍: 1. numpy.array():创建一个NumPy数组。可以传入一个列表或者元组作为参数,返回一个NumPy数组对象。 2. numpy.arange():创建一个具有指定范围和步长的数组。可以设置起始值、结束值和步长,返回一个包含这个范围内所有值的NumPy数组。 3. numpy.zeros():创建一个指定大小的全0数组。可以传入一个表示数组形状的元组或者整数作为参数,返回一个全0的NumPy数组。 4. numpy.ones():创建一个指定大小的全1数组。与numpy.zeros()类似,可以传入一个表示数组形状的元组或者整数作为参数,返回一个全1的NumPy数组。 5. numpy.linspace():在指定的范围内创建均匀间隔的数组。可以设置起始值、结束值和数组长度,返回一个包含指定范围内均匀间隔的元素的NumPy数组。 6. numpy.random.rand():生成指定形状的随机数数组。可以传入一个表示数组形状的元组或者整数作为参数,返回一个包含指定形状的随机数的NumPy数组。 7. numpy.max():返回数组中的最大值。可以传入一个NumPy数组作为参数,返回数组中的最大值。 8. numpy.min():返回数组中的最小值。可以传入一个NumPy数组作为参数,返回数组中的最小值。 9. numpy.mean():计算数组的平均值。可以传入一个NumPy数组作为参数,返回数组的平均值。 10. numpy.sum():计算数组中所有元素的和。可以传入一个NumPy数组作为参数,返回数组中所有元素的和。 11. numpy.reshape():改变数组的形状。可以传入一个表示新形状的元组作为参数,返回一个具有新形状的NumPy数组。 这些只是Python中NumPy库中常用函数的一部分,还有许多其他有用的函数可以用于数组和矩阵的操作。希望这些函数能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值