Data-day06-markdown

数据分析DAY06

数据平滑处理

在做数据分析时, 由于数据的噪声太多, 需要对数据进行数据平滑处理. 通常包含有降噪/拟合等操作. 降噪的功能在于去除额外的影响因素. 拟合的目的在于数学模型化,可以通过更多的数学方法识别曲线特征.

降噪手段: 卷积运算

# 通常卷积核的选取API
con_core = np.hanning(8)
con_core /= con_core.sum()
# 卷积API
np.convolve(samples, con_core, 'valid')

数学模型化: 多项式拟合

# 通过原函数曲线(x,y)/最高次数 得到 拟合多项式系数
P = np.polyfit(x, y, n)
# 通过多项式系数与x的值,求对应的多项式函数值.
y = np.polyval(P, x)
# 通过原函数求导函数
Q = np.polyder(P)
# 求多项式的根
X = np.roots(Q)
# 求两个多项式函数的差函数. 可以通过该方法求取两个多项式
# 函数的交点
Q = np.polysub(P1, P2)

符号数组

sign函数可以把样本数组变成对应的符号数组, 所有正数变为1, 负数变为-1, 0还是0.

ary = np.sign(源数组)

绘制 净额成交量(OBV)

若相比上一天的收盘价上涨,则为正成交量; 若比上一天的收盘价下跌,则为负成交量.

成交量可以反映市场对某支股票的人气, 成交量是一支股票上涨的能量. 一般情况下股票上涨往往需要较大的成交量,而下跌时则不然.

案例: 绘制OBV柱状图

import numpy as np
import matplotlib.pyplot as mp
import datetime as dt
import matplotlib.dates as md


def dmy2ymd(dmy):
    dmy = str(dmy, encoding='utf-8')
    date = dt.datetime.strptime(
        dmy, '%d-%m-%Y').date()
    s = date.strftime("%Y-%m-%d")
    return s

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

# 获取相比上一天股价是否上涨
diff_closing_prices = np.diff(closing_prices)
# 获取相对应的符号数组
sign_closing_prices = np.sign(diff_closing_prices)
# 绘制每天的成交量
obvs = volumes[1:] * sign_closing_prices

# 绘制净额成交量柱状图
mp.figure('OBV', facecolor='lightgray')
mp.title('OBV', fontsize=18)
mp.xlabel('Dates', fontsize=14)
mp.ylabel('Volumes', fontsize=14)
# 整理x轴刻度定位器
ax = mp.gca()
ax.xaxis.set_major_locator(
    md.WeekdayLocator(byweekday=md.MO))
ax.xaxis.set_major_formatter(
    md.DateFormatter('%d %b %Y'))
ax.xaxis.set_minor_locator(md.DayLocator())

mp.tick_params(labelsize=10)
mp.grid(linestyle=':', axis='y')
dates = dates[1:].astype(md.datetime.datetime)

mp.bar(dates, obvs, 1.0, color='dodgerblue',
       edgecolor='white', label='OBV')

mp.gcf().autofmt_xdate()
mp.legend()
mp.show()

数组预处理函数

# array 源数组
# 条件序列:  [a<60, a==60, a>60]
# 取值序列:  [-1,   0,     1   ]
np.piecewise(array, 条件序列, 取值序列)

测试:

a = np.array([
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值