Una guía práctica de Pandera: un conjunto de herramientas de prueba de DataFrame estadístico

Estás leyendo la publicación: Una guía práctica de Pandera: un conjunto de herramientas de prueba de DataFrame estadístico

La disputa de datos es un proceso importante en el ciclo de un proyecto de ciencia de datos en el que los datos se validan en función de los requisitos del proyecto. La validación de datos es un proceso de falsificación de los datos recopilados para análisis o predicciones. La validación de datos se realiza utilizando diversas técnicas estadísticas y lógicas. Usar técnicas estadísticas y lógicas para cada tipo particular de información recopilada puede ser una tarea tediosa, aquí Pandera podría usarse para validar los datos. Pandera es una interfaz de programación de aplicaciones (API) de código abierto en python. Es una API flexible y expresiva para la falsificación, de modo que se pueda construir una canalización de datos coherente y sólida. En este artículo, discutiremos los siguientes temas.

Tabla de contenido

  1. Necesidad de validación de datos
  2. La API de Pandera
  3. Implementaciones prácticas con Pandera

Imagine que está realizando una encuesta relacionada con las zapatillas de deporte en todo el mundo y, después de recibir los datos, descubre que el 25 % del número de contacto y las ID de correo electrónico son falsos o no están formateados correctamente, lo que es un gran inconveniente para el equipo de ventas. Entonces, esta es la razón por la que uno no puede confiar ciegamente en los datos recopilados. Empecemos echando un vistazo a la validación de datos y su importancia.

Necesidad de validación de datos

La validación de datos es parte de un flujo de trabajo más amplio que implica el procesamiento de datos sin procesar para generar productos estadísticos como un modelo, una visualización o un informe. La validación de datos es crucial para evitar el paso silencioso de clases insidiosas de errores de integridad de datos, que de otro modo serían difíciles de detectar sin aserciones explícitas en tiempo de ejecución. Estos errores dan como resultado visualizaciones engañosas, inferencias estadísticas incorrectas y resultados inesperados en los modelos de aprendizaje automático.

La necesidad de una validación de datos explícita aumenta cuando los productos finales sirven como base para decisiones comerciales, respaldan hallazgos científicos o generan predicciones sobre personas o cosas reales. La validación de datos podría ser un trabajo tedioso para grandes conjuntos de datos, ya que escribir códigos sin errores para cada tipo de función presente en el conjunto de datos es un trabajo desafiante. Entonces, para hacer este trabajo desafiante un poco suave, se podría usar Pandera. Intentemos aprender a validar datos con la ayuda de Pandera.

🔥 Recomendado:  ¿Cómo realizar el reconocimiento de entidad nombrada (NER) usando un transformador?

¿Está buscando un repositorio completo de bibliotecas de Python utilizadas en ciencia de datos? echa un vistazo aquí.

La API de Pandera

Pandera es una API basada en Python para la ingeniería de datos. Los objetos centrales en pandera son DataFrameSchema, Column y Check. Usando estos objetos juntos, los usuarios pueden construir contratos de esquema configurando conjuntos de reglas de validación agrupados lógicamente que se ejecutan en pandas DataFrames por adelantado. Las siguientes son las operaciones realizadas en la API:

  • Definir esquemas y validarlos en diferentes tipos de marcos de datos, incluidos pandas, dask, modin y koalas.
  • Verifique los tipos de datos y las propiedades de las columnas/características en un pd.DataFrame o valores en un pd.Series.
  • Realice una validación estadística compleja como la prueba de hipótesis.
  • Uso del decorador de funciones para integrar las validaciones con canalizaciones de análisis/procesamiento de datos existentes
  • Defina modelos de esquema con la API basada en clases con sintaxis de estilo pydantic y valide marcos de datos utilizando la sintaxis de escritura.
  • Sintetice datos de objetos de esquema para pruebas basadas en propiedades con estructuras de datos pandas.
  • Valide perezosamente los marcos de datos para que todas las reglas de validación se ejecuten antes de generar un error.

A continuación, se representa una arquitectura de alto nivel de pandera como flujo de datos. En el caso más simple, los datos sin procesar pasan por un procesador de datos que realiza operaciones en los datos para recuperar, transformar o clasificar información. Luego, los datos son verificados por un validador de esquema y fluyen a la siguiente etapa de la canalización de análisis si pasan las verificaciones de validación; de lo contrario, se genera un error.

Implementaciones prácticas con Pandera

Comencemos a implementar la validación de datos con la API de Pandera en un marco de datos.

Instalación de Pandera:

!pip instalar pandera

Creación de un marco de datos:

df = pd.DataFrame({ “id_producto”: [114, 256, 385, 407,150,285,364,319]”marca”: [“Nike”, “Puma”, “Adidas”, “Converse”,”Nike”,”Converse”,”Nike”,”Adidas”]”fecha_de_lanzamiento”: pd.to_datetime([“1982”, “2021”, “2017-08-17”, “2020”,”2020-06-09″,”2015-07-28″,”2022-03-03″,”2022-03-05″]), “nombre del producto”: [“Airforce 1 Low”, “Ralph Sampson 70”, “Yeezy 700 “, “Chuck 70″,”Nike ISPA Flow”,”Chuck Talyor all star”,”Supreme x Nike SB Dunk High”,”adidas Yeezy Boost 700 V2 “]”precio”:[10000,8387.17,18299.28,9149.64,15249.40,4574.82,38123.50,22874.10]
}) d.f.

🔥 Recomendado:  Una investigación más reciente de inteligencia artificial creó líneas de base más sólidas y rápidas basadas en un conjunto de técnicas para impulsar la eficiencia del modelo

Este es un dato de zapatillas con nombre, id de producto, la marca que las fabrica y sus precios en INR.

Crear múltiples validaciones para DataFrame y columnas usando el controlar función.

import pandera as pa from pandera import Column, Check from pandera.errors import SchemaError schema = pa.DataFrameSchema( { “brand”: Column(str, Check.isin(brand_name)), “product_name”: Column(str, Check.isin (product_name)), “price”: Column(int, Check.greater_than(10000.00)), } ) try: schema(df) excepto SchemaError as e: print(“Failed check:”, e.check) print(“\ n dataframe:\n”, e.data) print(“\nFailure cases:\n”, e.failure_cases)

Aquí,

  • pa.DataFrameSchema() se utiliza para aplicar múltiples validaciones en todo el DataFrame,
  • Nombre de la columna”: Columna (tipo de datos, Check.isin (lista)) se utiliza para implementar la validación en una columna en particular, y
  • esquema.validar (marco de datos) se utiliza para pasar el conjunto de datos.

La prueba falla ya que Puma y Adidas no están incluidos en la lista que se utiliza para validar los datos. Esta es una validación simple, pero supongamos que se necesita una validación complicada, ya que usar este tipo de formato de validación puede ser complicado. Entonces, para lidiar con este tipo de situaciones, Pandera tiene un modelo de esquema en el que las clases se pueden construir y se pueden llamar en múltiples niveles. Veamos la creación del modelo de esquema.

from pandera.typing import Series class Schema(pa.SchemaModel): marca: Serie[str] = pa.Field(isin=brand_name) product_name: Serie[str] = pa.Field(isin=product_name) precio: Serie[int] = pa.Field(le=5) @pa.check(“precio”) def precio_sum_lt_20(cls, precio: Serie[int]) -> Serie[bool]: return sum(price) < 10000.00 try: schema(df) excepto SchemaError as e: print("Failed check:", e.check) print("\n dataframe:\n", e.data) print("\ nCasos de falla:\n", e.failure_cases)

El resultado sería el mismo porque es lo mismo pero sin crear una función DataFrameSchema. Entonces, aprendí a crear controles para la columna y el marco de datos. Veamos cómo usar esto para validar entradas.

Entrada de validación:

Aplicar el esquema a los datos sin procesar para garantizar que el sin procesar cumpla con todas las condiciones requeridas por el usuario.

desde pandera import check_input name=[‘Nike’, ‘Puma’, ‘Adidas’, ‘Converse’]
input_schema = pa.DataFrameSchema( { “marca”: Columna(str, Check.isin(nombre)), “price”: Column(float, Check.greater_than(4000.00)), } ) @check_input(input_schema) def get_total_price(df : pd.DataFrame): devuelve df[[‘price’]]obtener_precio_total(df)

En esto, se crea un nuevo esquema que se utiliza para verificar la marca y el precio mayor a 4000.00.

Se devuelven todas las filas porque todos los valores son mayores que 4000,00 y todas las marcas coinciden con el esquema.

🔥 Recomendado:  ¿Es A* mejor que los algoritmos de búsqueda de rutas anteriores?

Validando salida:

Validación de los datos recibidos de la función creada mediante la aplicación del esquema.

de pandera import check_output name=[‘Nike’, ‘Puma’, ‘Adidas’, ‘Converse’]
output_schema = pa.DataFrameSchema( { “marca”: Columna(cadena, Verificar.isin(nombre)), “precio”: Columna(flotante, Verificar.mayor_que(5000.00)), } ) @check_output(output_schema) def get_total_price(df : pd.DataFrame): devuelve df[[‘brand’,’product_name’,’price’]]intente: get_total_price(df) excepto SchemaError como e: print(“Failed check:”, e.check) print(“\n dataframe:\n”, e.data) print(“\nFailure cases:\n”, e.fallo_casos)

La aplicación del esquema en la salida obtenida de la función get_total_price y la validación del precio es superior a 5000,00.

Hay un caso de falla donde el valor en la columna de precio es 4574.82 ya que es inferior a 5000.00.

Compruebe tanto las entradas como las salidas:

Tanto la entrada como la salida se pueden aplicar a la vez usando el decorador/módulo check_io

from pandera import check_io input_schema = pa.DataFrameSchema( { “brand”: Column(str, Check.isin(name)), “price”: Column(float, Check.greater_than(4000.00)), } ) output_schema = pa.DataFrameSchema ( { “marca”: Columna(str, Check.isin(nombre)), “price”: Column(float, Check.greater_than(5000.00)), } ) @check_io(df=input_schema,out=output_schema) def get_total_price( df: pd.DataFrame): devuelve df[[‘brand’,’product_name’,’price’]]intente: get_total_price(df) excepto SchemaError como e: print(“Failed check:”, e.check) print(“\n dataframe:\n”, e.data) print(“\nFailure cases:\n”, e.fallo_casos)

Usando el decorador check_io, tanto los esquemas de entrada como los de salida se asignan para la validación.

Como era de esperar, su caso de falla se muestra arriba porque un valor es menor que 5000.00

En pandera, por defecto, pandera mostrará un error si faltan valores en el marco de datos, pero si es necesario aceptar valores nulos, entonces use el anulable parámetro en el decorador de cheques.

input_schema = pa.DataFrameSchema( { “marca”: Columna(str, Check.isin(nombre),nullable=False), } )

De manera similar, si es necesario verificar duplicados en los datos, use el permitir_duplicados atributo del decorador de cheques.

input_schema = pa.DataFrameSchema( { “marca”: Columna(str, Check.isin(nombre),allow_duplicates=False), } )

Si es necesario convertir el tipo de datos de cualquier función, use:

esquema = pa.DataFrameSchema({“price”: Column(int, coerce=True)}) validado = esquema.validate(df) validado.dtypes

El tipo de datos de la columna de precios cambió de float64 a int64.

Ultimas palabras

El paquete pandera es una forma de expresar suposiciones sobre datos y falsificar esas suposiciones en tiempo de ejecución. Esta herramienta ha facilitado el trabajo para el proceso de disputa de datos y puede confiar ciegamente en los datos para obtener más artefactos estadísticos.

Referencias