文章目录

  • 一、卷积运算
  • 二、移动均线的绘制
  • 三、布林带绘制

本篇依然是数据分析里数据可视化方面的内容,主要内容有一维卷积、完全卷积、有效卷积、移动均线的绘制、布林带的绘制。

一、卷积运算

1、关于卷积
这里说到的卷积计算,是指我们对图像进行某种滤波处理或者是边缘检测、锐化等应用要用到的运算。通常,要进行卷积的话就必须要有一个模板(掩模),这些模板的实际就是在卷积计算是所用到的点乘系数。

2、卷积的运算

a = [1 2 3 4 5] # 被卷积数组
b = [6 7 8] # 卷积核数组
卷积运算:c = a (x) b

得到的卷积
完全卷积(full):[6 19 40 61 82 67 40]
同尾卷积(same):[19 40 61 82 67]
有效卷积(valid):[40 61 82]

3、在numpy中求卷积

  • numpy.convolve(a, b, ‘full’/‘same’/‘valid’)

4、练习代码

import numpy as npa = np.arange(1, 6)
b = np.arange(6, 9)
print('a:', a)
print('b:', b)# 计算a与b的全full卷积
c_full = np.convolve(a, b, 'full')
print('c_full:', c_full)
# 计算a与b的同尾卷积
c_same = np.convolve(a, b, 'same')
print('c_same:', c_same)
# 计算a与b的有效卷积
c_valid = np.convolve(a, b, 'valid')
print('c_valid:', c_valid)

二、移动均线的绘制

1、何为移动均线

数据数组:[a b c d e]
权重数组:[A B C D E]

  • 加权平均值:(aA+bB+cC+dD+eE)/(A+B+C+D+E)
    记:S=(A+B+C+D+E)
  • 移动均线:[A/S B/S C/S D/S E/S]

2、绘制移动均线的步骤

1、获取数据并转换数据类型
2、设置窗口期
3、计算均线各点数据组成的数组
4、图像的基本设置
5、绘制移动均线

3、移动均线案例

import datetime as dt
import numpy as np
import matplotlib.pylab as mp
import matplotlib.dates as md'''
1、获取数据并转换数据类型
'''
def dmy2ymd(dmy):dmy = str(dmy, encoding='utf-8')  # 转码dmy日期date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()  # 获取时间对象ymd = date.strftime('%Y-%m-%d')return ymddates, closing_prices = np.loadtxt('0=数据源/beer_price.csv', delimiter=',',usecols=(0, 4), unpack=True,dtype=np.dtype('M8[D], f8'),converters={0: dmy2ymd}
)'''
2、设置窗口期
'''
# 均线数据,5个窗口期
ma5_1 = np.zeros(closing_prices.size - 4)
for i in range(ma5_1.size):# ma5_1[0] = closing_prices[0:5].mean()  # 前五天的平均值ma5_1[i] = closing_prices[i:i+5].mean()'''
3、计算均线个点数据组成的数组
'''
# 用卷积的方法做均线
ma5_2 = np.convolve(closing_prices, np.ones(5) / 5, 'valid')# 时间窗口为10的均线
ma10 = np.convolve(closing_prices, np.ones(10) / 10, 'valid')# 加上权重的卷积移动均线(加权平均值):
weight = np.exp(np.linspace(-1, 0, 5))  # -1到0分成5份作为指数
weight /= weight.sum()  # 除以权重,就加权平均值
ma5_3 = np.convolve(closing_prices, weight[::-1], 'valid')
# weight[::-1]表示取weight的逆序,因为计算卷积时b数组应该是逆序的
# 而对于之前的np.ones(5) / 5 和 np.ones(10) / 10表示的是等权重的,因此逆序与否都是相同的,就不需要逆序了'''
4、图像的基本设置
'''
# 曲线图基础设置
mp.figure('Moving Average', facecolor='lightgray')
mp.title('Moving Average', fontsize=20)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)# 主刻度设置为以周一为起始的星期格式
ax = mp.gca()  # 获取刻度线(坐标轴)
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO)
)
# 次刻度设置为以天为单位
ax.xaxis.set_minor_locator(md.DayLocator()
)
# 主刻度的格式化
ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y')
)mp.tick_params(labelsize=10)  # 字体
mp.grid(linestyle=':')  # 网格线# 绘制曲线
dates = dates.astype(md.datetime.datetime)  # 将日期标准化成numpy的日期
mp.plot(dates, closing_prices, c='lightgray', label="Closing Price")  # 绘制曲线'''
5、绘制移动均线
'''
# 绘制移动均线:前5个日期是窗口期,不需要计入均线的点
mp.plot(dates[4:], ma5_1, c='orangered', linewidth=1, label="MA-5-1")# 绘制移动均线:卷积方法,线更粗,透明度更低
mp.plot(dates[4:], ma5_2, c='orangered', alpha=0.25, linewidth=5, label='MA-5-2')
# 最终结果的两根移动均线完全重合# 时间窗口为10的移动均线
mp.plot(dates[9:], ma10, c='dodgerblue', linewidth=3, label='MA-10')# 加权平均值移动均线
mp.plot(dates[4:], ma5_3, c='green', linewidth=3, label='MA-5-3')mp.legend()  # 显示图例
mp.gcf().autofmt_xdate()  # 设置格式展示的自动化调整
mp.show()  # 显示图像

4、测试效果

三、布林带绘制

1、何为布林带
简单来说就是,可以同时显示价格变化的范围(波动范围)和走势的区域,和移动均线有些类似,具体如下…

2、布林带

  • 中轨:移动均线,用来判断趋势
  • 上轨:中轨 + 2*标准差,判断上升的最大幅度
  • 下轨:中轨 - 2*标准差,判断下降的最大幅度

所谓中轨是就是上文的移动均线,因此这里的布林带只需要多做一步运算就能够求出来各点了,然后就如法炮制,用会绘制移动均线的方法绘制布上轨和下轨,就完成布林带的绘制了。

3、布林带案例

import datetime as dt
import numpy as np
import matplotlib.pylab as mp
import matplotlib.dates as mddef dmy2ymd(dmy):dmy = str(dmy, encoding='utf-8')  # 转码dmy日期date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()  # 获取时间对象ymd = date.strftime('%Y-%m-%d')return ymddates, closing_prices = np.loadtxt('0=数据源/beer_price.csv', delimiter=',',usecols=(0, 4), unpack=True,dtype=np.dtype('M8[D], f8'),converters={0: dmy2ymd}
)# 中轨:用卷积的方法做均线
N = 5  # 窗口数
medios = np.convolve(closing_prices, np.ones(N) / N, 'valid')  # 均线# 标准差
stds = np.zeros(medios.size)
for i in range(stds.size):stds[i] = np.std(closing_prices[i:i+N])# 上轨
uppers = medios + 2*stds# 下轨
lowers = medios - 2*stds# 曲线图基础设置
mp.figure('Bollinger Bands', facecolor='lightgray')
mp.title('Bollinger Bands', fontsize=20)
mp.xlabel('Date', fontsize=14)
mp.ylabel('Price', fontsize=14)# 主刻度设置为以周一为起始的星期格式
ax = mp.gca()  # 获取刻度线(坐标轴)
ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO)
)
# 次刻度设置为以天为单位
ax.xaxis.set_minor_locator(md.DayLocator()
)
# 主刻度的格式化
ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y')
)mp.tick_params(labelsize=10)  # 字体
mp.grid(linestyle=':')  # 网格线# 绘制曲线
dates = dates.astype(md.datetime.datetime)  # 将日期标准化成numpy的日期
mp.plot(dates, closing_prices, c='lightgray', label="Closing Price")  # 绘制曲线# 绘制中轨线
mp.plot(dates[N-1:], medios, c='dodgerblue', linewidth=3, label='Medios')
# 最终结果的两根移动均线完全重合# 绘制上轨线
mp.plot(dates[N-1:], uppers, c='green', linewidth=1, label='Upper')# 绘制下轨线
mp.plot(dates[N-1:], lowers, c='darkred', linewidth=1, label='Lower')mp.legend()  # 显示图例
mp.gcf().autofmt_xdate()  # 设置格式展示的自动化调整
mp.show()  # 显示图像

4、测试效果

Python之数据分析(卷积运算、移动均线、布林带)相关推荐

  1. python 图像卷积_[卷积神经网络(CNN)中的卷积核到底是如何提取图像特征的(python实现图像卷积运算)]...

    1.前言 我们知道,卷积核(也叫滤波器矩阵)在卷积神经网络中具有非常重要的作用.说白了,CNN主要作用在于提取图像的各种特征图(feature maps). CNN主要是通过卷积运算来完成特征提取的. ...

  2. python数据分析及可视化(十七)聚宽(双均线分析、因子选股策略、多因子选股策略、均值回归理论、布林带策略、PEG策略、权重收益策略)

    聚宽 聚宽是一个做金融量化的网站,https://www.joinquant.com,登录注册,如果你写的文章.策略被别人采纳,增加积分,积分用于免费的回测时长.在我的策略,进入策略列表,里面有做好的 ...

  3. python二维图颜色函数_Python scipy的二维图像卷积运算与图像模糊处理操作示例

    本文实例讲述了Python scipy的二维图像卷积运算与图像模糊处理操作.分享给大家供大家参考,具体如下: 二维图像卷积运算 一 代码 import numpy as np from scipy i ...

  4. 利用Python进行数据分析--数据聚合与分组运算

    转载自:http://blog.csdn.net/ssw_1990/article/details/22422971 1.quantile计算Series或DataFrame列的样本分位数: [pyt ...

  5. Python数据分析之股票双均线策略制定

    Python数据分析之股票双均线策略制定 需求:双均线策略制定 库 tushare包 预处理数据 df = pd.read_csv('./maotai.csv').drop(labels='Unnam ...

  6. python卷积计算_python scipy卷积运算的实现方法

    scipy的signal模块经常用于信号处理,卷积.傅里叶变换.各种滤波.差值算法等. *两个一维信号卷积 >>> import numpy as np >>> x ...

  7. python符号运算卷积_Python使用scipy模块实现一维卷积运算示例

    本文实例讲述了Python使用scipy模块实现一维卷积运算.分享给大家供大家参考,具体如下: 一 介绍 signal模块包含大量滤波函数.B样条插值算法等等.下面的代码演示了一维信号的卷积运算. 二 ...

  8. Python遥感图像处理应用篇(五):python如何使用numpy对遥感图像做卷积运算

    本篇接着上一篇(Python遥感图像处理应用篇(四):python如何使用numpy读取遥感图像光谱值)继续深入,对遥感图像做卷积运算处理 1.基本思路 1.1 设置卷积核 这里就用3*3大小的卷积核 ...

  9. python实现卷积运算

     一.卷积定义与朴素计算方法: 图1 卷积定义与计算方法 二. Python代码实现 结合伪代码实现python代码如下(因为我是先写的代码,后才发现上面的伪代码,所以循环次序略有不同): impor ...

最新文章

  1. css代码应该放html哪里,css代码放到哪里?
  2. 知乎专栏应用客户端源码项目
  3. 使用numpy遇到ValueError: The truth value of an array with more than one element is ambiguous
  4. OpenCV用thrust使用cv :: cuda :: GpuMat
  5. JQuery Ajax传递整个表单数据方法
  6. Java如何解决乱码问题
  7. 绘制三维散点图_使用Origin,轻松绘制三维散点图
  8. MongoDB 教程 | 菜鸟教程
  9. 智慧城市是如何用大数据建成的?
  10. PFC2D学习笔记——柔性簇(cluster)生成
  11. Hikaricp连接池问题
  12. 学生用计算机方着怎么计,科学计算器使用
  13. python使用win32com复制word的某一页然后粘贴到新的word页面中
  14. [汇编]怎样让猫吃辣椒
  15. 杭州电子科技大学计算机考研复试分数线,2021年杭州电子科技大学考研分数线及复试名单公布...
  16. 嵌入式linux华清远见考试,嵌入式Linux小测及答案
  17. WinDbg+WMware+OS_Win7 配置
  18. android studio CreateProcess error=2, 系统找不到指定的文件。
  19. 华为认证——HCIA-IoT(V2.0)——物联网工程师-模拟试卷(答案)
  20. 复数运算(对数,指数,正弦)

热门文章

  1. python对文件每行数据计算_如何在python中对pandas数据帧的每一行进行计算?
  2. azw3转换为pdf_怎么合并几个PDF为一个?快用这个PDF转换器!
  3. mysql效率索引_mysql下普通索引和唯一索引的效率对比
  4. android编译终止,android - Android NDK-没有此类文件或目录编译终止-头文件导出问题 - 堆栈内存溢出...
  5. 多通路fpga 通信_基于USB通信的FPGA高速数据采集系统研究
  6. mysql中 视图的优缺点_SQL中使用视图的优点和缺点是什么
  7. Java游戏用户登录注册_Java实现多用户注册登录的幸运抽奖
  8. php 删除相对应的id,PHP 在下面这个留言板代码中加入删除按钮,每一个删除按钮删除相对应一行数据,这怎么弄...
  9. java 手动加载数据库驱动_JAVA加载数据库驱动(JDBC)
  10. python中exit 的作用_Python退出命令-为什么要使用这么多?何时使用每个命令?