一 概述
Numpy是一个最重要的一个基于多维数组对象,即ndarray对象,该对象具有矢量算数运算能力和复杂的广播能力,可以执行一些科学计算。它的常用属性如下表所示:
属性 | 说明 |
ndim | 数组的维度,如一维、二维、三维等 |
shape | 数组的形状,如一个5行4列的数组,它的shape属性为(5,4) |
size | 数组元素的总个数,等于shape属性中的数组元素乘积,如7行4列的数组元素总个数为28个。 |
dtype | 数组中元素的类型对象 |
itemsize | 数组中元素的字节大小,如元素类型为int64的数组有8个(64/8)字节 |
二:具体实例
import numpy as np
# 定义函数将读取到的日期由“日-月-年”转换为“年-月-日”
def dmy2ymd(dmy):
dmy = dmy.decode('utf-8')
ymd = '-'.join(dmy.split('-')[::-1])
return ymd
# 1.读取股票数据,包括日期、开盘价、最高价、最低价、收盘价、成交量
# dates, opening_prices, hightest_prices, lowest_prices, closing_prices, volume = np.loadtxt('appl.csv',delimiter=',',usecols=(1, 3, 4, 5, 6, 7),unpack=True,dtype = 'M8[D],f8,f8,f8,f8,f8',converters={1:dmy2ymd})
dates, opening_prices, hightest_prices, lowest_prices, closing_prices, volume = np.loadtxt(
'aapl.csv',delimiter=',', usecols=(1, 3, 4, 5, 6, 7), unpack=True,dtype='M8[D],f8,f8,f8,f8,f8',converters={1: dmy2ymd})
print("日期:",dates)
print("开盘价:",opening_prices)
print("最高价",hightest_prices)
print("最低价",lowest_prices)
print("收盘价",closing_prices)
print("成交量",volume)
# 2.计算收盘价的成交量加权平均价格
volume_avg_prices = np.average(closing_prices,weights=volume)
print("成交量加权平均价格为:",volume_avg_prices)
#3.计算时间的加权平均价格
print("成交量加权平均价格:",volume_avg_prices)
# 首先将时间转换为整型
days = dates.astype(int)
time_avg_prices = np.average(closing_prices, weights=days)
print("时间加权平均价格:",time_avg_prices)
# 4计算最高价的最大价格及最大价格的对应日期
hight_index =np.argmax(hightest_prices)
print("最高价的最高价格:%s"% hightest_prices[hight_index])
print("最大价格对应的日期:%s" % dates[hight_index])
# 5。计算最低价的最小价格以及最小价格对应的日期
lowest_index = np.argmin(lowest_prices)
print("最低价的最小价格:%s"%lowest_prices[lowest_index])
print("最低价格对应的日期:%s"%dates[lowest_index])
#6 计算最高价和最低价的波动情况(最大-最小)
hightest_ptp = np.ptp(hightest_prices)
lowest_ptp = np.ptp(lowest_prices)
print("最高价的极差:%s"%hightest_ptp)
print("最低价的极差:%s" %lowest_ptp)
# 计算收盘价的中位数
closing_median = np.median(closing_prices)
print("收盘价中位数:%s"%closing_median)
# 通过卷积计算收盘价的5日移动平均值和10日移动平均值
sma5_conv = np.ones(5) / 5
sma5 = np.convolve(closing_prices,sma5_conv,'valid')
print("收盘价5日移动平均值:%s"%sma5)
sma10_conv = np.ones(10) / 10
sma10 = np.convolve(closing_prices,sma10_conv,'valid')
print("收盘价10日移动平均值:%s"%sma10)