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

在实际工作中,我们经常需要分析一组数据的历史走势/趋势情况,比如要从产品数据库中筛选出销量处于上升趋势的产品,或者从股票历史数据库中筛选出一直处于上涨的股票。 那么可以通过分析计算该组数据的差分来模拟求出该组数据走势线的导数,然后通过求导的差分/导数情况判断该组数据的走势情况。从高等数学的导数知识我们知道,如果一个函数的导数大于零,那么该函数在这个区间的趋势处于上升状态,反之,在导数小于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
### 使用Python进行趋势分析 #### 导入必要的库 为了执行趋势分析,首先需要导入一些常用的Python库。这些库提供了强大的功能来处理和可视化数据。 ```python import pandas as pd import numpy as np from scipy.stats import kendalltau, pearsonr from statsmodels.tsa.seasonal import seasonal_decompose import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] ``` #### 数据准备 假设有一个CSV文件`data.csv`包含了时间序列数据,可以使用Pandas读取该文件并查看前几行以了解其结构[^4]。 ```python df = pd.read_csv('data.csv') print(df.head()) ``` #### 计算差异与导数 对于离散的时间序列数据,可以通过计算相邻数值之间的差分识别上升下降趋势。这有助于检测短期波动以及长期变化方向。 ```python # 对某一列一阶差分 df['diff'] = df['value'].diff() # 绘制原始值及其差分图 fig, ax = plt.subplots(2, figsize=(10, 8)) ax[0].plot(df.index, df['value'], label='Original Data', color='blue') ax[1].plot(df.index, df['diff'], label='Difference', color='red') for a in ax: a.legend(loc="best") a.grid(True) plt.show() ``` #### 应用统计测试-MK趋势检验 Mann-Kendall (MK) 趋势检验是一种非参数性的方法,用来评估给定时间段内是否存在单调增加减少的趋势而不考虑分布特性。此部分展示了如何利用`py Mann-Kendall`包来进行这样的检验[^3]。 ```python from pymannkendall import original_test result = original_test(df['value']) if result.h == True and result.p < 0.05: trend_type = "increasing" if result.Tau > 0 else "decreasing" else: trend_type = "no significant" print(f"The series has {trend_type} trend.") ``` #### 季节分解 当面对具有季节成分的时间序列时,可采用seasonal decomposition技术将其分为三个主要组成部分:趋势项(T),季节效应(S),随机误差(E)[^2]。 ```python decomposition = seasonal_decompose(df.set_index('date')['value'], model='additive', period=12) fig = decomposition.plot() plt.tight_layout() plt.show() ``` 以上就是几种常见的基于Python实现趋势分析的方式,每种方法适用于不同类型的数据集及应用场景。通过组合运用上述工具和技术,能够更全面深入地探索隐藏于复杂数据背后的潜在规律和发展动向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

跨境IT全栈工程师

觉得有帮助,赏点鼓励下呀

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值