es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validación de datos con la mayoría de características en List utilizando .NET Core C#

He obtenido los datos como una lista < T > leyendo en diferentes formatos como CSV, Parquet, Avro, JSON.

Quiero validar los datos principalmente con características,
por ejemplo, la temperatura debe permanecer dentro del rango del 95% del tiempo, y el resto del tiempo el valor de la columna puede ser nulo o estar fuera de rango.

Expectativa de caso de uso de muestra:

Expect_Column_Values_To_Be_Between(
    columnName = "temperatura",
    minValue   =  60,
    maxValue   =  75,
    mostly     = .95
)

La anotación de datos parece resolver parcialmente esto (falta principalmente la característica) ya que funciona a nivel de fila, no a nivel de tabla completa, es decir, a nivel de objeto.

[Range(60, 75, ErrorMessage = "El valor del termostato {0} debe estar entre {1} y { 2}.")]
public int Temperatura;

La referencia del paquete de Python: https://github.com/great-expectations/.great_expectations contiene validaciones similares a nivel de datos.

Ahora estoy tratando de buscar orientación sobre cómo validar los datos (ya sea mediante alguna biblioteca equivalente existente en .NET o mediante la creación de una nueva clase de ayuda/métodos de extensión).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en C#, .NET, paquete, NuGet y ETL, existen varias opciones para validar los datos a nivel de objeto con una función principalmente:

    Una opción es crear una clase auxiliar o un método de extensión que utilice LINQ para consultar la lista y verificar si el valor de la columna de temperatura se encuentra dentro del rango definido para al menos el 95% de los datos. Aquí tienes un ejemplo de implementación:

    using System.Collections.Generic;
    using System.Linq;
    
    public static class DataValidator
    {
        public static bool Expect_Column_Values_To_Be_Between<t>(this List<t> data, string columnName, double minValue, double maxValue, double mostly)
        {
            var columnValues = data.Select(d => (double)d.GetType().GetProperty(columnName).GetValue(d)).ToList();
            var countInRange = columnValues.Count(v => v >= minValue && v <= maxValue);
    
            return (double)countInRange / columnValues.Count >= mostly;
        }
    }
    

    Esta clase auxiliar o método de extensión se puede utilizar de la siguiente manera:

    List<dataobject> data = ...; // leer datos de un archivo CSV, Parquet, Avro o JSON
    bool isTemperatureValid = data.Expect_Column_Values_To_Be_Between("temperature", 60, 75, 0.95);
    

    Otra opción es utilizar una biblioteca de terceros como FluentValidation o DataAnnotationsExtensions. Estas bibliotecas proporcionan anotaciones de datos que se pueden utilizar para definir reglas de validación para las propiedades del objeto. Sin embargo, como se menciona en la pregunta, no admiten la función “mostly”. Por lo tanto, se debería crear una clase de validación personalizada para verificar el porcentaje de datos que se encuentra dentro del rango definido.

Comments are closed.