使用Numpy快速分析股票数据——计算移动平均线及日周均线之间的转换

Numpy所提供的数据结构是python数据分析的基础
本篇使用numpy库分析亚马逊股票近一年的历史数据

主要目标:(1)计算n日移动平均线;(2)将日均线转换为周均线。
解决处理的函数:卷积函数、date转换函数
使用工具:jupyter notebook,新建一个python3项目

原始数据:
在这里插入图片描述

一、简单的数据处理及计算n日移动平均线

  • 加载指定的文件
import numpy as np
stock_info = np.loadtxt('AMZN_STOCK.csv',skiprows=1,delimiter=',',usecols=[0,1,2,3,4],dtype='f8,S10,f8,f8,f8',unpack=True)

1、不需要的行shiprows掉(表头),默认没有分隔符,指定分隔符delimiter
2、不加载全部数据的情况下需要指定加载哪些usecols (指定加载列)
3、若希望把每一列加载到单独的数组中可以设置unpack=True,得到一个list,每一列数据作为一个array数组
4、数据默认为浮点格式,因为时间不能使用浮点格式,同时加载时间需要指定数据结构,可以将时间数组设为字符串格式

在这里插入图片描述

#指定对应数组
close_info = stock_info[0]
date_info = stock_info[1]
open_info=stock_info[4]
stock_close = close_info[::-1]
stock_open = open_info[::-1]
  • 基本的值计算:
#起始值
print('start:', stock_close[0], ' end:', stock_close[-1]) 
#最小值
print('mix:', stock_close.min())
#最大值
print('max:', stock_close.max())
#算数平均数
print('mean:', stock_close.mean())
#中位数
print('median:', np.median(stock_close))

在这里插入图片描述

  • 计算股价上涨下跌的天数
rise_count = len(close_info[close_info - open_info > 0])
#或rise_count = close_info[colse_info - open_info > 0].size
fail_count = len(close_info[close_info - open_info <= 0])
#上涨下跌天数占比
rise_count/stock_close.size
fail_count/stock_close.size

在这里插入图片描述

  • 使用卷积函数计算移动平均线
    卷积的过程可以看作是b以平滑移动的方式对a取乘积的和。如果设置合适的a,就可以计算移动平均
#定义n天的加权平均
n = 5
b = np.ones(n)/n
#即b = [0.2,0.2,0.2,0.2,0.2] 用于求出五天的加权平均
#前n-1,和后 n-1个数字,数据量不够,需要去除
man = np.convolve(b,stock_close)[n-1:-n+1]
#得到n日加权平均数

在这里插入图片描述
二、日均线转换为周线处理

  • 加载数据
加载数据前定义一个转换函数,将日均线转周线
from dateutil.parser import parse
def convert_date(d):
    return parse(d).weekday()
stock_info = np.loadtxt('AMZN_STOCK.csv',delimiter=',',skiprows=1,usecols=[0,1,2,3,4],dtype='S',converters={1:convert_date})
#同样的颠倒日期顺序,并将数字转为浮点格式
stock_info=stock_info[::-1,:].astype('f8')

在这里插入图片描述
- 按周重分组

#找到星期一的索引
week_split = np.where(stock_info[:,1] == 0)[0]
week_infos = np.split(stock_info,week_split)
#去掉一周非五天的数组
week_info = [x for x in week_info if len(x) == 5]
#将得到的列表转为array数组
w = np.array(week_info)

在这里插入图片描述

  • 重组数据,保存文件
#所有周一开盘价
md_open = w[:,0,-1]
#所有周五收盘价
fd_close = w[:,-1,0]
#一周中最高价
week_high = w[:,:,2].max(axis=1)
#一周中最低价
week_low = w[:,:,3].min(axis=1)
#组合数据
w_info = np.array([md_open,fd_close,week_high,week_low])
#使用转置,将一周的数据放在一个数组中
w_info.T
#结果保存到文件
np.savetxt('week_info.csv',result_info,header='open,close,high,low',delimiter=',',fmt='%.2f')

在这里插入图片描述

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值