如何计算旧值为零时的百分比

时间:2013-11-11 14:12:07

标签: math

我需要以下情况的逻辑。我无能为力。

  

考虑 1月我有 10 $ 收入,而 2月 20 $ 收入。

我的 成长 将是((20-10)/10)*100% = 100%

  

如果我 3月 0 $ 收入。

然后我的 成长 将是((0-10)/10)*100 % =-100 %。我应该将其称为负百分比吗? (我知道它的通货紧缩)

更进一步,

  

如果现在我 4月的收入 20 $

如何立即计算 增长 ?确保以下公式错误,((20-0)/0)*100 %= ?????

我的基本问题是

  1. 除上述情况外,还有更好的解决方案可以找到增长率吗?

  2. 如果我使用上述公式,我应该采用一些值作为参考吗?或者这也错了?

9 个答案:

答案 0 :(得分:10)

绝对 编程问题。问题在于它本身无法编程。当P实际上为零时,百分比变化的概念没有意义。零到任何东西都不能表示为速率,因为它超出速率的定义边界。从“不存在”变为“存在”不是存在的变化,而是存在的创造

答案 1 :(得分:9)

如果您需要以百分比显示增长,则习惯在这些情况下显示[NaN]或类似内容。另一方面,在这种情况下,增长率将报告为$ /月。因此,在April的示例中,增长率将计算为((20-0)/1

无论如何,确定报告此特殊情况的正确方法是用户决策。它是否包含在您的用户要求中?

答案 2 :(得分:7)

从0到任何其他数字都没有增长率。也就是说,没有从零增加到大于零的百分比,并且没有从零到小于零的减少百分比(负数)。你需要决定的是在这种情况发生时输出的内容。以下是我感到满意的两种可能性:

  1. 任何时候你必须显示从零开始的增长率,输出无穷大符号(∞)。如果您想知道,那就是你的数字键盘上的Alt + 236。您也可以使用负无穷大(-∞)从零开始负增长率。
  2. 输出诸如“[从......增加/减少]”之类的陈述或其他内容。
  3. 不幸的是,如果您需要进一步计算的增长率,上述选项将不起作用,但另一方面,任何数字都会使您的以下计算不正确的数据,所以这一点没有实际意义。您需要更新以下计算以解决此可能性。

    另外,当新旧值均为零时,((New-Old)/ Old)函数将不起作用。您应该创建一个初始检查以查看两个值是否为零,如果是,则输出零百分比作为增长率。

答案 3 :(得分:6)

如何在计算百分比变化时处理零是研究人员的电话,需要一些领域专业知识。如果研究人员认为它不会扭曲数据,那么他/她可以简单地为所有值添加一个非常小的常数来消除所有零。例如,在金融系列中,当处理交易量时,我们可能不想这样做,因为交易量= 0只意味着:资产根本没有交易。 volume = 0的含义可能与volume = 0.00000000001非常不同。 这是我的首选策略,在这种情况下,我无法在逻辑上为所有值添加一个小常量。考虑百分比变化公式((New-Old)/ Old)* 100。如果New = 0,则百分比变化为-100%。这个数字确实具有经济意义,只要它是系列中的最小百分比变化(这确实是系列中最小的百分比变化)。为什么?因为它表明交易量经历了最大可能的减少,从任何数字变为0,-100%。所以,我的百分比变化系列中的这个值我会没事的。如果我对该系列进行标准化,那么甚至更好,因为这个(可能)相对较大的绝对值数将​​按照与其他变量相同的比例进行分析。现在,如果旧值= 0怎么办呢。这是一个棘手的案例。从0到1的百分比变化将等于从0到100万的变化:无穷大。事实上,我们称之为"无穷大"百分比变化是有问题的。在这种情况下,我会将无穷大设置为等于np.nan并插入它们。

下图显示了我上面讨论过的内容。从系列1开始,我们得到系列4,可以进行分析,没有Inf或NaN。

enter image description here

还有一件事:很多时候,计算百分比变化的原因是对数据进行固定。因此,如果您的原始系列包含零并且您希望将其转换为百分比变化以实现平稳性,请首先确保它尚未静止。因为如果是,您不必计算百分比变化。重点是,大量取值为0的系列(问题OP具有)很可能已经是静止的,例如我上面考虑的音量系列。想象一下在零上下摆动的系列,有时会达到0。这样的剧集很可能已经不稳定了。

答案 4 :(得分:1)

有几件事情要考虑。

如果您当月的增长率为0,则从0变为零。因此从这个意义上讲,这是有意义的。您可以通过添加一个较小的数字来进行调整,因此可以将其从0.1更改为0.1。然后,变化和百分比变化将是0和0%。

然后考虑从0变为20的情况。这种做法会导致大量的报告问题。根据您选择添加的小数字,例如,如果使用0.1或0.001,则百分比变化将相差100倍。因此,这种做法存在问题。

但是,如果您从1更改为20,则百分比更改可能是19/1 = 1900%。当您从这么低的百分比开始时,%变化没有太大意义,它对任何变化都非常敏感,如果其他数据点的比例不同,则可能会使结果偏斜。

因此,重要的是要了解您的数据,在这种情况下,了解数据中遇到0和极端数的频率。

答案 5 :(得分:0)

使用下面的代码,因为这是0到任意数字的100%增长率:

04/01/2017 12:30:05 PM 

答案 6 :(得分:0)

应该是(新的减去旧的)/旧的和新的平均值 在特殊情况下,两个val均为零

答案 7 :(得分:0)

您可以为每个加1 例 新= 5; 旧= 0;

(1+新)-(旧+1)/(旧+1) 5/1 * 100 ==> 500%

答案 8 :(得分:0)

当两个值都为零时,则变化为零。

如果其中一个值为零,则它是无限的(模棱两可),但我会将其设置为 100%。

这是一个 C++ 代码(其中 v1 是以前的值(旧值),而 v2 是新值):

double result = 0;
if (v1 != 0 && v2 != 0) {
  // If values are non-zero, use the standard formula.
  result = (v2 / v1) - 1;
} else if (v1 == 0 || v2 == 0) {
  // Change is zero when both values are zeros, otherwise it's 100%.
  result = v1 == 0 && v2 == 0 ? 0 : 1;
}
result = v2 > v1 ? abs(result) : -abs(result);
// Note: To have format in hundreds, multiply the result by 100.