Я работаю с данными о расходе топлива, полученными от датчика, но иногда данные содержат шум (резкие скачки или падения), что делает их несогласованными. Моя цель — выявить и удалить эти выбросы, чтобы обеспечить точность и надежность данных для дальнейшего анализа.
Вот ключевые детали:
Данные датчиков содержат записи с отметкой времени в формате unix, значением расхода топлива, скоростью и другими данными.
Объем данных варьируется от 40 до 80 записей каждые 10 минут.< /li>
Мне нужен последовательный и надежный метод фильтрации убрать шум и сгладить данные.
Ниже приведен код, который я реализовал на данный момент:
// value == Fuel Consumption
var data = FileReader.ReadCsv(path).Where(d => d.Value > 0).ToList();
var cleanedData = RemoveOutliers(data.Select(d => new DataPoint(d.Timestamp, d.Value, d.Speed)).ToList(), 1.5);
cleanedData = ApplyMovingAverage(cleanedData, 8);
List anomalyDetectionResults = [];
foreach (var dataPoint in cleanedData)
{
// todo
}
static List RemoveOutliers(List data, double iqrFactor)
{
var values = data.Select(d => d.Value).ToList();
values.Sort();
double q1 = GetPercentile(values, 25);
double q3 = GetPercentile(values, 75);
double iqr = q3 - q1;
double lowerBound = q1 - iqrFactor * iqr;
double upperBound = q3 + iqrFactor * iqr;
return data.Where(d => d.Value >= lowerBound && d.Value d.Value);
smoothedData.Add(new DataPoint(data[i].Timestamp, avg, data[i].Speed));
}
return smoothedData;
}
static double GetPercentile(List sortedValues, double percentile)
{
if (!sortedValues.Any()) return 0;
double rank = percentile / 100.0 * (sortedValues.Count - 1);
int lowerIndex = (int)Math.Floor(rank);
int upperIndex = (int)Math.Ceiling(rank);
if (lowerIndex == upperIndex) return sortedValues[lowerIndex];
return sortedValues[lowerIndex] + (rank - lowerIndex) * (sortedValues[upperIndex] - sortedValues[lowerIndex]);
}
public class DataPoint(DateTime timestamp, double value, int speed)
{
public DateTime Timestamp { get; set; } = timestamp;
public double Value { get; set; } = value;
public int Speed { get; set; } = speed;
}
< img alt="Расход топлива" src="https://i.sstatic.net/YFvKEqgx.png" /> Буду признателен за любые рекомендации, предложения или альтернативы подходы к решению этой проблемы проблема.
Я работаю с данными о расходе топлива, полученными от датчика, но иногда данные содержат шум (резкие скачки или падения), что делает их несогласованными. Моя цель — выявить и удалить эти выбросы, чтобы обеспечить точность и надежность данных для дальнейшего анализа. Вот ключевые детали: [list][*]Данные датчиков содержат записи с отметкой времени в формате unix, значением расхода топлива, скоростью и другими данными. [*]Объем данных варьируется от 40 до 80 записей каждые 10 минут.< /li> Мне нужен последовательный и надежный метод фильтрации убрать шум и сгладить данные. [/list] [b]Ниже приведен код, который я реализовал на данный момент:[/b] [code] // value == Fuel Consumption var data = FileReader.ReadCsv(path).Where(d => d.Value > 0).ToList();
var cleanedData = RemoveOutliers(data.Select(d => new DataPoint(d.Timestamp, d.Value, d.Speed)).ToList(), 1.5); cleanedData = ApplyMovingAverage(cleanedData, 8);
List anomalyDetectionResults = []; foreach (var dataPoint in cleanedData) { // todo }
static List RemoveOutliers(List data, double iqrFactor) { var values = data.Select(d => d.Value).ToList(); values.Sort();
public class DataPoint(DateTime timestamp, double value, int speed) { public DateTime Timestamp { get; set; } = timestamp; public double Value { get; set; } = value; public int Speed { get; set; } = speed; } [/code] [img]https://i.sstatic.net/KnxDHmlG.png[/img] < img alt="Расход топлива" src="https://i.sstatic.net/YFvKEqgx.png" /> [b]Буду признателен за любые рекомендации, предложения или альтернативы подходы к решению этой проблемы проблема.[/b]
Я работаю с данными о расходе топлива, полученными от датчика, но иногда данные содержат шум (резкие скачки или падения), что делает их несогласованными. Моя цель — выявить и удалить эти выбросы, чтобы обеспечить точность и надежность данных для...
Я работаю с данными о расходе топлива, полученными от датчика, но иногда данные содержат шум (резкие скачки или падения), что делает их несогласованными. Моя цель — выявить и удалить эти выбросы, чтобы обеспечить точность и надежность данных для...
Я создаю бюджетное приложение с одной функцией — возможность сохранять информацию о поездке для расчета миль на галлон. У меня есть базовый расход топлива на галлон для «ПОЛНОЙ» заправки, но я хочу также рассчитать расход топлива на галлон для...
Я работаю над проектом по обнаружению событий кражи и заправки топлива на основе зашумленных данных датчиков с использованием ML.NET. Данные датчика включают в себя показания уровня топлива и скорости с отметкой времени, но они часто содержат шум,...
Я работаю над проектом по обнаружению событий кражи и заправки топлива на основе зашумленных данных датчиков с использованием ML.NET. Данные датчика включают в себя показания уровня топлива и скорости с отметкой времени, но они часто содержат шум,...