グラフィックで表現された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」の間隔が均一でない場合、さらにそうである。
純粋なシェルスクリプトとして実行することもできますが、これは愚かです。
awk
しかし、仕事には良いツールのようです。