matplotlib之绘制数据分析的常用图像(均值,方差,极值等)

本文所用文件的百度云链接:

链接:https://pan.baidu.com/s/15-qbrbtRs4frup24Y1i5og 
提取码:pm2c 
算数平均值

算数平均值表示对真值的无偏估计.

S = [s1, s2, s3 .... sn]
m = (s1+s2+s3+ .... +sn) / n
# 求array数组的均值
np.mean(array)

案例: 绘制30日收盘价的均线.

# 绘制均线
mean = np.mean(closing_prices)
mp.hlines(mean, dates[0], dates[-1], 
	color='orangered', label='Mean(ClosingP)')
加权平均值
S = [s1, s2, s3 ... sn]  # 样本
W = [w1, w2, w3 ... wn]  # 权重
A = (s1w1 + s2w2 + ... snwn)/(w1+w2+..wn)
# 计算加权平均值
# closing_prices: 样本数组
# weights: 权重数组
np.average(closing_prices, weights=array)

成交量加权平均值 (VWAP)

以每天的交易量作为权重, 计算加权平均值. (VWAP体现了市场对当前交易价格的认可度)

# 成交量加权均线
vwap = np.average(closing_prices, weights=volumns)
mp.hlines(vwap, dates[0], dates[-1], 
	color='limegreen', label='VWAP')

时间加权平均值 (TWAP)

# 时间加权均线
times = np.arange(1, closing_prices.size+1)
twap = np.average(closing_prices, weights=times)
mp.hlines(twap, dates[0], dates[-1], 
	color='violet', label='TWAP')
最值
np.max(array)  # 求array数组的最大值
np.min(array)  # 求array数组的最小值
np.pip(array)  # 求array数组的极差(max-min)
np.argmax(array)	# 获取array数组最大值的下标
np.argmin(array)	# 获取array数组最小值的下标
# a与b是同维数组
# 留下两数组中相比的最大值组成新数组
np.maximum(a, b)	
# 留下两数组中相比的最小值组成新数组
np.minimum(a, b)
中位数

将多个样本按照大小排序, 取中间位置的元素.

# 对有序数组array 求中位数
m = np.median(ary)
# 中位数算法
m = (ary[(size-1)/2] + ary[size/2]) / 2

案例演示:

"""
绘制均线
"""
import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md

# 当numpy解析文本时,将会把第一列中的每个字符串
# 都传给函数进行处理, 将处理完毕后的返回值
# 转成需要的M8[D]类型
def dmy2ymd(dmy):
	dmy = str(dmy, encoding='utf-8')
	# 把dmy转成日期对象
	d = dt.datetime.strptime(dmy, '%d-%m-%Y')
	t = d.date()
	s = t.strftime('%Y-%m-%d')
	return s

# 加载文件
dates, closing_prices, volumns = np.loadtxt(
	'../da_data/aapl.csv', delimiter=',', 
	usecols=(1,6,7), unpack=True, 
	dtype='M8[D], f8, f8' , 
	converters={1:dmy2ymd})

# 绘制收盘价
mp.figure('AAPL', facecolor='lightgray')
mp.title('AAPL', fontsize=18)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 设置主刻度定位器为每周一
ax = mp.gca()
ax.xaxis.set_major_locator(
	md.WeekdayLocator(byweekday=md.MO))
ax.xaxis.set_major_formatter(
	md.DateFormatter('%Y/%m/%d'))

# 把M8[D]转为matplotlib识别的date类型
dates = dates.astype(md.datetime.datetime)
mp.plot(dates, closing_prices, alpha=0.6,
	color='dodgerblue', linewidth=2,
	linestyle='--', label='closing_prices')

# 绘制均线
mean = np.mean(closing_prices)
mp.hlines(mean, dates[0], dates[-1], 
	color='orangered', label='Mean(ClosingP)')

# 成交量加权均线
vwap = np.average(closing_prices, weights=volumns)
mp.hlines(vwap, dates[0], dates[-1], 
	color='limegreen', label='VWAP')

# 时间加权均线
times = np.arange(1, closing_prices.size+1)
twap = np.average(closing_prices, weights=times)
mp.hlines(twap, dates[0], dates[-1], 
	color='violet', label='TWAP')
# 绘制中位数水平线
sorted_prices = np.msort(closing_prices)
median = np.median(sorted_prices)
# 自己计算
size = sorted_prices.size
median = (sorted_prices[int((size-1)/2)] + \
		sorted_prices[int(size/2)]) / 2
print(median)
mp.hlines(median, dates[0], dates[-1], 
	color='gold', label='Median')

mp.legend()
# 自动格式化x轴的日期输出
mp.gcf().autofmt_xdate()
mp.show()

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值