如何标准化不规则数据值

如何标准化不规则数据值

我从 PHP 表中获取以图形方式表示的值。然而,一些接收到的数据被“损坏”或不正确,从而产生不合理的图形表示。

小时(y轴)是累计小时数,就像汽车的里程表一样,只不过小时数和x轴是对应的日期。从逻辑上讲,明天的时间将大于或等于今天的时间,这应该是一条平坦的线或不断增加的线。但可惜这是输出:

在此输入图像描述

我想标准化这些数据,以便它有一个更“正确”的表示,看起来像:

在此输入图像描述

我一直在阅读一些有关标准化数据的信息(数据库规范化过程,在Python中标准化具有不规则间隔的数据集,数据标准化)但我似乎无法开始如何真正标准化数据。我要么真的有一个金发时刻,要么我只是不明白。

问:我如何使用 Bash 规范化这个数据集 - 涉及的步骤是什么 - 如果有伪代码或有关所涉及步骤的描述,我将不胜感激。

答案1

你的插图似乎与你的文字不太相符。如果你的意思是你(如果我正确理解你的话),假设你有一个你想要标准化的“Y”值列表(即小时数,范围在 0 到 2400 之间),你可以做你想做的事情这段awk代码:

awk '
    NR==1 { prev_good = $1 }
    {
        data = $1
        if (data < prev_good) {
                count++
                next
        }
        if (count > 0) {
                count++
                for (i = 1; i < count; i++) {
                        print prev_good + (data-prev_good) * i / count
                }
                count = 0
        }
        print data
        prev_good = data
}'

它假设第一个数据点有效 ( NR==1 { prev_good = $1 })。此后,如果数据点小于先前的有效值(prev_good,这是迄今为止看到的最大值),则将其视为无效:跳过它(next)并计算已跳过的点。当您获得一个好的值时,进行测试count- 如果它是正值,则意味着我们跳过了一些数据,因此生成许多数据值,在最后一个好的值和当前值之间进行线性插值。然后打印新的有效值。

如果您的输入包含“X”和“Y”(日期和小时),这会变得有点复杂 - 特别是如果“X”间隔不统一。

您可以将其作为纯 shell 脚本来执行,但这会很愚蠢。  awk然而,似乎是完成这项工作的一个很好的工具。

相关内容