通过Python Pandas分析数据上涨下跌趋势的方法:求离散数据的差分、导数

news2025/7/18 14:09:10

在实际工作中,我们经常需要分析一组数据的历史走势/趋势情况,比如要从产品数据库中筛选出销量处于上升趋势的产品,或者从股票历史数据库中筛选出一直处于上涨的股票。 那么可以通过分析计算该组数据的差分来模拟求出该组数据走势线的导数,然后通过求导的差分/导数情况判断该组数据的走势情况。从高等数学的导数知识我们知道,如果一个函数的导数大于零,那么该函数在这个区间的趋势处于上升状态,反之,在导数小于0时,函数曲线处于下降状态,而在导数等于0时,函数曲线处于上涨和下降的转折点。通过计算函数有几个零点,可以知道曲线上涨和下降的变化情况,而通过判断导数是大于零还是小于零,我们就能知道曲线是上涨还是下降。

由于产品销售数据或者股价数据都是离散值,而且无法根据这些数据推导出曲线函数,所以直接通过函数求导的方法来判断数据是上涨还是下降是行不通的。但是我们可以求数据的差分并除以步长来近似模拟计算导数。为了演示好看,下面以一组离散正弦数据来进行示例,选正弦函数是因为数据有上下波动趋势,而且正弦函数的导数为余弦函数。

说明:我使用的是Jupyter Notebook环境,方便数据显示

Python里处理数据通常使用Pandas库和Numpy库,计算离散数据的方法就可以使用numpy的方法:

#计算数组a的差分,参数a是一个数组,n是代表几阶差分默认是1,axis是代表按行还是列计算
numpy.diff(a, n=1, axis=-1, prepend=<no value>, append=<no value>)

也可以直接使用Pandas库的方法:

#Pandas库计算差分的方法,periods参数是指定几阶差分,默认是1阶,axis是代表按行还是列计算,默认是按列。按行就改为1
DataFrame.diff(periods=1, axis=0)

先导入相关的库,并设定参数:

#coding utf-8
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #图中文字体设置为黑体

用numpy生成一组模拟正弦离散数值:

x_len=50  #x_len表示模拟生成多少组数据,这个值越大,生成的曲线越接近真实的正弦函数,可以通过修改这个值的大小来对比模拟效果
x = np.linspace(-np.pi*2, np.pi*2, x_len)

正弦函数模拟
计算数据x的步长:

#导数的公式为dy/dx,当dx接近无线小时,就是函数在x处的导数。因为我们要处理的数据是离散数值,这里仅做一个模拟计算,不要求精确度
#差分取dy=f(x2)-f(x1),即y2-y1, dx=x2-x1,模拟导数=dy/dx, 
#计算dx,也就是x的步长step,这里通过将数组x的最大值减去最小值再除以x数组长度的方法来计算,简单理解就是每个x坐标轴上的间隔
step=(np.max(x)-np.min(x))/len(x)  

使用Pandas生成包含x和y(np.sin(x))及y的一阶差分数据的数据表:

df=pd.DataFrame(data={'x':x,'y':np.sin(x)})  #通过numpy.sin函数计算出x对应的正弦值y,并生成一个pandas数据表
df["y的差分"]=df["y"].diff() #计算y列的差分

差分计算
使用matplotlib汇总图表:

#汇总对比图
plt.figure(figsize=(20,8))  #设定图画大小
plt.plot(x,df['y'],label='正弦函数sin(x)')
plt.plot(x,df.diff(periods=1)['y'],label="1阶差分dy")  #绘制1阶差分曲线
plt.plot(x,df.diff(periods=1)['y']/step,label="'1阶差分模拟导数y'")  #通过将1阶差分除以步长step得出模拟导数值
plt.plot(x,np.cos(x),label='cos(x)') #用余弦函数做对比
plt.title('离散数据差分和模拟导数',fontsize=16)
plt.xlabel('X')
plt.ylabel('Y')
plt.legend(loc='upper right')
plt.grid()
plt.legend(fontsize=14)

离散Sinx差分及模拟导数
说明:图片有点乱码,左下角坐标轴数字应为负数
图片上:
蓝线是根据x计算的正弦曲线sin(x)
黄线是y的1阶差分,围绕0值上下波动
绿线是根据1阶差分求出来的模拟导数,高等数学里有学过,正弦函数sin(x)的导数为余弦函数cos(x),从图片对比来看,这个模拟导数曲线跟实际的cos(x)函数非常相近,满足实际需要。实际上从我测试的情况来看,当我改变x的数据长度x_len=100时,2条曲线基本上重合在一起。
在这里插入图片描述
而如果将步长调大,及把x数据长度调小,2条曲线的偏差就会变大,曲线也变得不光滑:
在这里插入图片描述

从前面图片我们可以看到,当数据y(通常是我们要分析趋势的数据)处于上升趋势时,它的一阶差分和模拟一阶导数大于0,在y下降趋势时小于0,在拐点时等于0或接近于0,通过pandas 我们可以很容易的计算出有多少这样的差分值和导数值,就可以知道了数据的走势情况。比如说一个股票或产品销售数据一直是处于连续上涨,那么它的一阶差分值和导数值均大于0.

如果进一步分析,我们还可以计算二阶差分和二阶模拟导数,并根据结果的正负情况来判断曲线是加上上涨还是加速下跌。

在分析股票或者产品销售数据的趋势时,我们可能得到的数据长度比较小,模拟偏差比较大,我们可以通过滚动平均等方法来做平滑处理。

不过我们通常的目的只是需要知道数据的趋势,比如上涨或下跌,加速上涨还是加速下跌,并不需要像科学实验一样计算出非常准确的值,所以这种粗略的模拟方法就已经满足我们的实际工作需要了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes CKA 模拟题解析【2022最新版】(连载001)

练习准备 这是 Kubernetes CKA 认证的模拟考试&#xff0c;大家不要错过哦。 在模拟考试开始之前建议您先设置一下以下命令&#xff1a; $ alias kkubectl $ export do"--dry-runclient -o yaml" # like short for dry output. use whatever you like 设置代码补…

Lumion和Enscape渲染器有什么区别?哪个适合你

提到“傻瓜式渲染器”&#xff0c;你的脑子里最先闪过哪个软件名&#xff1f;当一溜子软件名在脑袋里飞快跳转的时候&#xff0c;有没有发现现在很多软件都被打上“傻瓜式渲染器”的标签&#xff1f;那今天咱们就先聊一聊Lumion和Enscape这两个知名软件。 01、软件介绍 Lumio…

DOTA-PEG-麦芽糖 maltose-DOTA 麦芽糖-四氮杂环十二烷四乙酸

DOTA-PEG-麦芽糖 maltose-DOTA 麦芽糖-四氮杂环十二烷四乙酸 PEG接枝修饰麦芽糖&#xff0c;麦芽糖-聚乙二醇-四氮杂环十二烷四乙酸&#xff0c;DOTA-PEG-麦芽糖 中文名称&#xff1a;麦芽糖-四氮杂环十二烷四乙酸 英文名称&#xff1a;maltose-DOTA 别称&#xff1a;DOTA修…

浏览器渲染原理-通俗易懂版本

文章目录浏览器渲染原理前言1. 网页的解析过程2. 浏览器的功能与组成2.1 浏览器内核2.2 进程与线程3. 浏览器渲染流程3.1 渲染引擎解析过程3.2 渲染引擎主要模块4. 渲染页面的详细流程4.1 HTML 解析过程4.2 生成 CSS 规则4.3 构建 Render Tree4.4 布局 (layout) 和绘制 (Paint)…

外观专利怎么申请?

问题一&#xff1a;什么是外观专利&#xff1f; 外观专利跟实用新型专利和发明专利有所不同。实用新型和发明主要保护的技术方案或者方法&#xff0c;配方。而外观专利保护的产品的形状、图案或其结合以及色彩富有美感&#xff0c;并且适用于工业应用的新设计。比如某企业推出…

华为“仓颉”不是中文编程,中文编程早有所属,势如破竹

“中国自己的编程语言究竟在哪里&#xff1f;”关心IT生态的我们&#xff0c;经常深思与担忧。 语言是文化精髓所在&#xff0c;一方水土养一方人&#xff0c;不管是中文&#xff0c;还是英语&#xff0c;作为交流工具&#xff0c;语言烙印着不同地方的生活场景&#xff0c;一方…

[附源码]计算机毕业设计JAVA企业公开招聘系统

[附源码]计算机毕业设计JAVA企业公开招聘系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

Mybatis-plus通过exists判断记录是否存在

Mybatis-plus通过exists判断记录是否存在一、Controller二、Service三、效果一、Controller GetMapping("/queryNewProductExists")public Boolean queryNewProductExists(RequestParam("name") String name) {return opProductService.queryNewProductExi…

开源游戏服务器框架NoahGameFrame(NF)客户端的Log日志系统(五)

一、调用输出日志方法所在的脚本介绍 需要打印日志到文件或者Unity的Console控制台中&#xff0c;就可以调用NFLogModule.cs这个脚本中的方法。由于这个脚本中的方法数量太多&#xff0c;我就不一一介绍了&#xff0c;有需要的可以自己看下具体的实现过程。下面篇幅介绍中作者…

电机与拖动(1)直流电机

磁路中的常用定律 电磁力定律是电动机的理论基础&#xff0c;用左手定则。 电磁感应定律是我们发电机的理论基础&#xff0c;用右手定则 。 与电路的比较&#xff1a; 直流电机 右手定则&#xff1a;伸开右手&#xff0c;使大拇指跟其余四个手指垂直并且都跟手掌在一个平面…

关于WEB端实现电子海图之Openlayers加载切片

记笔记&#xff0c;免忘记&#xff01; 关于WEB端实现电子海图研究之思路 关于WEB端实现电子海图研究二GeoServer GeoServer完成shp文件切矢量图后&#xff0c;我们需要加载GeoServer切片在web上展示。 vector-tiles-tutorial官方示例 以下示例使用openLayers来加载 D:\s…

status_breakpoint谷歌浏览器如何解决?

众所周知&#xff0c;谷歌浏览器是一款非常好用的浏览器软件&#xff0c;但是在使用过程中难免会遇到一些问题&#xff0c;比如status_breakpoint错误代码该怎么办&#xff1f;下面就来看看小编整理的status_breakpoint谷歌浏览器相关内容。 一些可能导致谷歌浏览器status_brea…

【数据结构】堆及堆排序的实现(C语言)

目录 前言 初始化 增删 由一个数组构建堆 堆排序 TOPK问题 前言 我们都知道二叉树是度为 2 的树&#xff0c;如果在一个完全二叉树里&#xff0c;所有的子结点都小于他的父结点&#xff0c;那么它就是堆。这样的堆被称之为大堆&#xff0c;反之则称为小堆。 虽然我们画出…

光学测量精度极限—光谱共焦位移传感器的六大行业应用

科技的不断发展&#xff0c;在半导体&#xff0c;高精密制造领域中都是采用微米及以上的加工工艺&#xff0c;并与之匹配高精度测量技术进行品质控制。光谱共焦的测量原理是一束白光经过镜头将不同的波长聚焦到光轴上&#xff0c;色散地形成一条彩虹状分布带&#xff0c;照射到…

第五章:LockSupport与线程中断

阿里蚂蚁金服面试题什么是线程中断机制&#xff1f;中断相关的 API 方法面试题1、如果停止正在运行的一个线程&#xff1f;2 当前线程的中断标识为true&#xff0c;是不是线程就立刻停止&#xff1f;案例一案例二3、静态方法Thread.interrupted()&#xff0c;谈谈你的理解总结L…

国外服务器采取数据备份和灾难恢复的重要性

在国外服务器的使用中&#xff0c;数据的安全性和完整性是任何组织都不能忽视的问题。丢失数据可能会对业务造成毁灭性的影响&#xff0c;因此必须有一个完善的数据备份和灾难恢复计划。 什么是备份? 备份将数据复制到辅助形式&#xff0c;如存档文件&#xff0c;在灾难发生时…

网络安全:SQL盲注概述

目录 盲SQL注入 什么是盲SQL注入&#xff1f; 通过触发条件响应来利用盲SQL注入 通过触发 SQL 错误来诱导条件响应 通过触发时间延迟来利用盲 SQL 注入 使用带外 &#xff08;OAST&#xff09; 技术利用盲 SQL 注入 如何防止SQL注入 二阶 SQL 注入 特定于数据库的因素…

4.每天不同时间段通过微信发消息提醒女友

目录 sentence_good_dinner.txt README.MD say_to_lady.py sentence_good_dream.txt sentence_good_lunch.txt sentence_good_dinner.txt 公主&#xff01;记得吃晚饭。 下班了&#xff0c;记得吃晚饭哦。 记得多吃点饭 你吃晚饭吧&#xff1f; 宝宝吃晚饭了吗&#xff0…

《从零开始:机器学习的数学原理和算法实践》chap1

《从零开始&#xff1a;机器学习的数学原理和算法实践》chap1 学习笔记 文章目录《从零开始&#xff1a;机器学习的数学原理和算法实践》chap1 学习笔记chap1 补基础&#xff1a;不怕学不懂微积分1.1 深入理解导数的本质直观理解复合函数求导1.2 理解多元函数偏导1.3 理解微积分…

超纯水系统中硼离子去除技术原理

硼在元素周期表里面是五号元素&#xff0c;是IIIA族中唯一 一个非金属元素。它是制造P型半导体的主要 掺杂剂&#xff0c;基材中硼的含量直接影响半导体的极限电压&#xff0c;因此要严格控制基材中硼的含量。在半导体 制造的过程中&#xff0c;水、气、化直接跟产品接触&…