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格式的日期
第三列为空
第四列为开盘价
第五列为最高价
第六列为最低价
第七列为收盘价
第八列为成交量

猜你喜欢

转载自blog.csdn.net/zhubao124/article/details/80790779
今日推荐