在实际工作中,我们经常需要分析一组数据的历史走势/趋势情况,比如要从产品数据库中筛选出销量处于上升趋势的产品,或者从股票历史数据库中筛选出一直处于上涨的股票。 那么可以通过分析计算该组数据的差分来模拟求出该组数据走势线的导数,然后通过求导的差分/导数情况判断该组数据的走势情况。从高等数学的导数知识我们知道,如果一个函数的导数大于零,那么该函数在这个区间的趋势处于上升状态,反之,在导数小于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