# Python数据分析–Numpy常用函数介绍(4)–Numpy中的线性关系和数据修剪压缩

[En]

In the previous article, when calculating moving averages and exponential averages, different weights were calculated, such as

[En]

The relevant weights are calculated according to different calculation methods, and a stock price can be expressed by a linear combination of the previous stock price, that is, the stock price is equal to the result of multiplying the previous stock price by their respective coefficients, but, these coefficients need us to determine, that is, a linearly related weight.

1）先获取一个包含N个收盘价的向量（数组）：

N=10
#N=len(close)
new_close = close[-N:]
new_closes= new_close[::-1]
print (new_closes)

运行结果：[39.96 38.03 38.5  38.6  36.89 37.15 36.61 37.21 36.98 36.47]2)初始化一个N×N的二维数组 A ，元素全部为 0

A = np.zeros((N, N), float)
print ("Zeros N by N", A)


undefined

3）用数组new_closes的股价填充数组A

for i in range(N):
A[i,] = close[-N-i-1: -1-i]
print( "A", A)


4）选取合适的权重

Weights [0.11405072 0.14644403 0.18803785 0.24144538 0.31002201]和The weights : [0.2 0.2 0.2 0.2 0.2]哪一种权重更合理？用线性代数的术语来说，就是解一个最小二乘法的问题。

(x, residuals, rank, s) = np.linalg.lstsq(A,new_closes)


5)预测股价，用NumPy中的 dot()函数计算系数向量与最近N个价格构成的向量的点积（dot product）,这个点积就是向量new_closes中价格的线性组合，系数由向量 x 提供

print( np.dot(new_closes, x))


import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt

def datestr2num(s): #定义一个函数
return datetime.strptime(s.decode('ascii'),"%Y-%m-%d").date().weekday()

dates, opens, high, low, close,vol=np.loadtxt('data.csv',delimiter=',', usecols=(1,2,3,4,5,6),
converters={1:datestr2num},unpack=True)

N=10
#N=len(close)
new_close = close[-N:]
new_closes= new_close[::-1]

A = np.zeros((N, N), float)

for i in range(N):
A[i,] = close[-N-i-1: -1-i]

print( "A", A)

(x, residuals, rank, s) = np.linalg.lstsq(A,new_closes)
print(x) #权重系数向量

print('\n')
print(residuals)  #残差数组
print('\n')
print(rank) #A的秩
print(s)
print('\n')#奇异值
print( np.dot(new_closes, x))


二、趋势线


[En]

The trend line is a curve drawn according to many so-called pivot points on the stock price chart. Describe the trend of price changes. You can let the computer draw the trend line in a very easy way.

(1) 确定枢轴点的位置。假定枢轴点位置 为最高价、最低价和收盘价的算术平均值。pivots = (high + low + close ) / 3

[En]

Starting from the pivot point, the so-called resistance level and support level of stock price can be deduced. The resistance level refers to the resistance encountered when the stock price rises and the highest price before the fall; the support level refers to the lowest price when the stock price falls and the lowest price before the rebound (resistance level and support level are not objective, they are just an estimator). Based on these estimators, the trend lines of resistance level and support level can be drawn. We define the price range of the day as the difference between the highest price and the lowest price.

(2) 定义一个函数用直线 y= at + b 来拟合数据，该函数应返回系数 a 和 b，再次用到 linalg 包中的 lstsq 函数。将直线方程重写为 y = Ax 的形式，其中 A = [t 1] ， x = [a b] 。使用 ones_like 和 vstack 函数来构造数组 A

numpy.ones_like(a, dtype=None, order=’K’, subok=True) 返回与指定数组具有相同形状和数据类型的数组，并且数组中的值都为1。

numpy.vstack(tup) [source] 垂直(行)按顺序堆叠数组。 这等效于形状(N,)的1-D数组已重塑为(1,N)后沿第一轴进行concatenation。 重建除以vsplit的数组。如下两小例：

>>> a = np.array([1, 2, 3]) >>> b = np.array([2, 3, 4]) >>> np.vstack((a,b)) array([[1, 2, 3],               [2, 3, 4]])

>>> a = np.array([[1], [2], [3]])
>>> b = np.array([[2], [3], [4]])
>>> np.vstack((a,b))
array([[1],
[2],
[3],
[2],
[3],
[4]])


import numpy as np
from datetime import datetime
import matplotlib.pyplot as plt

def datestr2num(s): #定义一个函数
return datetime.strptime(s.decode('ascii'),"%Y-%m-%d").date().weekday()

dates, opens, high, low, close,vol=np.loadtxt('data.csv',delimiter=',', usecols=(1,2,3,4,5,6),
converters={1:datestr2num},unpack=True)
"""
N=10
#N=len(close)
new_close = close[-N:]
new_closes= new_close[::-1]

A = np.zeros((N, N), float)

for i in range(N):
A[i,] = close[-N-i-1: -1-i]

print( "A", A)
(x, residuals, rank, s) = np.linalg.lstsq(A,new_closes)
print(x) #权重系数向量
print(residuals)  #残差数组
print(rank) #A的秩
print(s)
print( np.dot(new_closes, x))
"""
pivots = (high + low + close ) / 3

def fit_line(t, y):
A = np.vstack([t, np.ones_like(t)]).T
np.ones_like(t) 即定义一个像t一样，有相同形状和数据类型的数组，并且数组中的值都为1
return np.linalg.lstsq(A, y)[0]

t = np.arange(len( close)) #按close数列创建一个数列t

sa, sb = fit_line(t, pivots - (high - low)) #用直线y=at+b来拟合数据，该函数应返回系数a(sa) 和 b(sb)
ra, rb = fit_line(t, pivots + (high - low))
support = sa * t + sb     #计算支撑线数列
resistance = ra * t + rb  #计算阻力线数列

condition = (close > support) & (close < resistance)#设置一个判断数据点是否位于趋势线之间的条件，作为 where 函数的参数
between_bands = np.where(condition)

plt.plot(t, close,color='r')
plt.plot(t, support,color='g')
plt.plot(t, resistance,color='y')
plt.show()


NumPy中的 ndarray 类定义了许多方法，可以对象上直接调用。通常情况下，这些方法会返回一个数组。

ndarray 对象的方法相当多，像前面遇到的 var 、 sum 、 std 、 argmax 、argmin 以及 mean 函数也均为 ndarray 方法。下面介绍一下数组的修前与压缩。

1、 clip 方法返回一个修剪过的数组：将所有比给定最大值还大的元素全部设为给定的最大值，而所有比给定最小值还小的元素全部设为给定的最小值

a = np.arange(10)
print("a =", a)
print("Clipped", a.clip(3, 7))


a = [0 1 2 3 4 5 6 7 8 9]
Clipped [3 3 3 3 4 5 6 7 7 7]

2、 compress 方法返回一个根据给定条件筛选后的数组

b = np.arange(10)
print (a)
print ("Compressed", a.compress(a >3))


[0 1 2 3 4 5 6 7 8 9]
Compressed [4 5 6 7 8 9]


prod() 方法，可以计算数组中所有元素的乘积.

c = np.arange(1,5)
print("b =", c)
print("Factorial", c.prod())


b = [1 2 3 4]
Factorial 24


print( "Factorials", c.cumprod())


Factorials [  1   2   6  24 120]


Original: https://www.cnblogs.com/codingchen/p/16304038.html
Author: PursuitingPeak
Title: Python数据分析–Numpy常用函数介绍(4)–Numpy中的线性关系和数据修剪压缩

(0)

### 大家都在看

• #### Scrapy爬虫框架, 基本使用

个人学习笔记 文章目录 * – + 1. 安装Scrapy + 2. Scrapy五大组件 + 3. 初步使用 + 4. 选择器 + 5. 项目(Items) + 6….

Python 2023年10月5日
076
• #### MySQL连接断开报错MySQLdb._exceptions.OperationalError 4031, The client was disconnected by the server

文章目录 问题描述 解决方案 参考文献 问题描述 Flask + SQLAlchemy 的接口服务上线后报错 (MySQLdb._exceptions.OperationalErr…

Python 2023年8月9日
091
• #### Python代理IP异常：requests.exceptions.ProxyError: HTTPSConnectionPool(host=‘xxxx‘, port=443)

背景 这是我在使用Python爬取网页信息的时候出现的异常。 由于很多要爬取的网站会把”IP限制”作为反爬虫手段，所以我偶尔会使用”代理IP服务…

Python 2023年9月26日
0157
• #### scrapy抓取贝壳找房租房数据

Python 2023年10月2日
0144
• #### pandas的简单使用（查询）

pandas的简单使用（查询） head() 和 tail() 函数 loc 函数 * 双索引的loc使用 使用演示 iloc 函数 条件查询 * 简单逻辑查询 模糊查询 &#82…

Python 2023年8月16日
092
• #### Python基础——第004课：python中库、模块、方法、参数

1. 代码程序 1.1 上次课的代码 import pygame,sys pygame.init() screen = pygame.display.set_mode((600,4…

Python 2023年9月19日
086
• #### Python中[-1]、[:-1]、[::-1]、[n::-1]、[:,:,0]、[…,0]、[…,::-1] 的理解

在python中会出现[-1]、[:-1]、[::-1]、[n::-1]、[:,:,0]、[…,0]、[…,::-1]，他们分别是什么意思呢，这里就来详尽的…

Python 2023年10月27日
0108
• #### 第三讲 Numpy理解各种梯度下降等优化算法

; Numpy理解各种梯度下降等优化算法 一 本节课程介绍 1.1 知识点1、优化算法的基本介绍；2、梯度下降算法的实现；3、随机梯度下降的实现；4、其他优化算法的对比； 二 课程…

Python 2023年8月26日
079
• #### 使用Wagtail一段时间后的感受

系列文章目录 例如： 文章目录 系列文章目录 前言 一、超快的部署 * 构建项目 配置pycharm运行和调试django项目 最需要做的事 二、炫一个博客网站 * 页面模型 页面…

Python 2023年8月5日
073
• #### python学习笔记——取矩阵的上三角或下三角元素

取矩阵上三角 1、numpy.triu(x,k)： x：输入数组 k：默认0，对角偏移项，用于指定置0值的位置；k=0表示主对角线的位置，此时保留主对角线上的值，下三角的元素全为0…

Python 2023年8月23日
0316
• #### QQ机器人go-cqhttp保姆级配置与编程

啊哦~你想找的内容离你而去了哦 内容不存在，可能为如下原因导致： ① 内容还在审核中 ② 内容以前存在，但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

Python 2023年8月2日
096
• #### 大数据下一代变革之必研究数据湖技术Hudi原理实战双管齐下-下

@ 集成Spark开发 Spark编程读写示例 DeltaStreamer 集成Flink 环境准备 sql-clent使用 启动 插入数据 流式读取 Bucket索引 Hudi …

Python 2023年10月14日
092
• #### pyechart数据可视化丨制作桑基图(sankey)的最简单方法

前言最近在分析超期库存数据, 每天4万条左右, 数据的特点是有很多 分类变量, 为了展现这些变量的关系, 想到了桑吉图。 Pyechart官网上有关于桑基图的案例, 但是如何用日常…

Python 2023年8月7日
0115
• #### Django & Vue 项目踩坑记：The field admin.LogEntry.user was declared with a lazy reference to ‘xxx‘

功能期望 基于Django提供的AbstractUser类重写User模型，在其中根据业务需求增加信息，并将新的用户模型设为系统默认用户模型。 问题描述 完成自定义User模型的编…

Python 2023年8月5日
0105
• #### 头歌平台-机器学习-11.神经网络

EduCoder：机器学习—神经网络 第1关：什么是神经网络 ; 第2关：神经元与感知机 编程要求： 根据提示，在右侧编辑器补充 python 代码，构建一个感知机模型，底层代码会…

Python 2023年8月3日
0231
• #### [day5]python网络爬虫实战：爬取豆瓣电影Top250(Scrapy版)

l> 我的新书 《Android App开发入门与实战》 已于2020年8月由人民邮电出版社出版，欢迎购买。点击进入详情 文章目录 1.开发环境 2.第三方库 3.Scrap…

Python 2023年10月1日
093