그래픽으로 표현된 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
그러나 작업에는 좋은 도구인 것 같습니다.