PowerShell Advanced Series

16. Generar un reporte rápido de 'Data Profiling'

16. Generate a Quick Data Profiling Report

Leer un CSV y agrupar los datos para evaluar el volumen de información y ver cuántos registros hay por categoría.

Read a CSV and group the data to evaluate information volume and see how many records exist by category.

⚠️ Advertencia de ciberseguridad y producción ⚠️ Cybersecurity and production warning

Este ejercicio es solo para aprendizaje y pruebas. No ejecutes scripts contra datos reales, ambientes de producción, carpetas compartidas, sistemas críticos o repositorios empresariales sin autorización, respaldos, pruebas previas, permisos mínimos, control de cambios y cumplimiento de los protocolos de ciberseguridad de tu organización.

This exercise is for learning and testing only. Do not run scripts against real data, production environments, shared folders, critical systems, or enterprise repositories without authorization, backups, prior testing, least-privilege permissions, change control, and compliance with your organization's cybersecurity protocols.

Objetivo del ejercicio

Exercise objective

Crear un diagnóstico inicial de un archivo CSV para entender rápidamente cómo se distribuyen los registros por una columna clave, como Departamento, Estado, Ciudad, Categoría o cualquier otro campo de clasificación.

Create an initial diagnosis of a CSV file to quickly understand how records are distributed by a key column such as Department, Status, City, Category, or any other classification field.

Datos sintéticos

Synthetic data

EmployeeIDNombreDepartamentoStatus
1001Ana PerezFinanceActive
1002John SmithITActive
1003Maria LopezHRInactive
1004Robert DiazFinanceActive
1005Linda TorresITActive

Ejemplo base

Base example

Import-Csv "C:\Data\Maestro.csv" |
Group-Object Departamento -NoElement |
Sort-Object Count -Descending

Resultado esperado

Expected result

DepartamentoCount
Finance2
IT2
HR1

Script completo

Complete script

# ==========================================================
# PowerShell Advanced Topic 16
# Generate a Quick Data Profiling Report
# ==========================================================

$inputFile  = "C:\Data\Maestro.csv"
$outputFile = "C:\Data\Data_Profiling_Report.csv"

# Column to analyze
$profileColumn = "Departamento"

# Import data
$datos = Import-Csv $inputFile

# Validate that the selected column exists
$columns = $datos[0].PSObject.Properties.Name

if ($columns -notcontains $profileColumn) {
    Write-Host "Column not found: $profileColumn"
    Write-Host "Available columns:"
    $columns
    exit
}

# Generate profiling summary
$profile = $datos |
Group-Object $profileColumn -NoElement |
Sort-Object Count -Descending |
Select-Object `
    @{Name="CampoAnalizado"; Expression={$profileColumn}},
    @{Name="Valor"; Expression={$_.Name}},
    @{Name="CantidadRegistros"; Expression={$_.Count}},
    @{Name="Porcentaje"; Expression={
        "{0:N2}%" -f (($_.Count / $datos.Count) * 100)
    }}

# Export profiling report
$profile | Export-Csv $outputFile -NoTypeInformation -Encoding UTF8

# Show result in console
$profile | Format-Table -AutoSize

Write-Host "Data profiling completed."
Write-Host "Output file: $outputFile"

Versión para analizar varias columnas

Version to analyze multiple columns

Esta versión permite crear un reporte de perfilamiento para varias columnas categóricas en una sola ejecución.

This version creates a profiling report for multiple categorical columns in one execution.

# ==========================================================
# Multi-column Data Profiling Report
# ==========================================================

$inputFile  = "C:\Data\Maestro.csv"
$outputFile = "C:\Data\Data_Profiling_MultiColumn_Report.csv"

$columnsToProfile = @("Departamento", "Status")

$datos = Import-Csv $inputFile

$resultado = foreach ($col in $columnsToProfile) {

    if ($datos[0].PSObject.Properties.Name -contains $col) {

        $datos |
        Group-Object $col -NoElement |
        Sort-Object Count -Descending |
        Select-Object `
            @{Name="CampoAnalizado"; Expression={$col}},
            @{Name="Valor"; Expression={$_.Name}},
            @{Name="CantidadRegistros"; Expression={$_.Count}},
            @{Name="Porcentaje"; Expression={
                "{0:N2}%" -f (($_.Count / $datos.Count) * 100)
            }}
    }
    else {
        Write-Host "Column not found: $col"
    }
}

$resultado | Export-Csv $outputFile -NoTypeInformation -Encoding UTF8

$resultado | Format-Table -AutoSize

Write-Host "Multi-column profiling completed."
Write-Host "Output file: $outputFile"

Aplicaciones reales

Real-world applications

  • Revisar distribución de empleados por departamento.
  • Identificar categorías con bajo o alto volumen.
  • Detectar valores inesperados en columnas maestras.
  • Crear diagnósticos rápidos antes de limpiar datos.
  • Review employee distribution by department.
  • Identify low-volume or high-volume categories.
  • Detect unexpected values in master columns.
  • Create quick diagnostics before cleaning data.

Recomendaciones

Recommendations

  • Usar este reporte antes de iniciar procesos de limpieza.
  • Revisar categorías con nombres parecidos o inconsistentes.
  • Combinar este análisis con conteos de valores vacíos.
  • Guardar el reporte como evidencia del diagnóstico inicial.
  • Use this report before starting data cleaning processes.
  • Review categories with similar or inconsistent names.
  • Combine this analysis with blank-value counts.
  • Save the report as evidence of the initial diagnosis.

Valor del tópico

Topic value

Este patrón permite entender rápidamente la estructura básica de un archivo. Antes de limpiar, transformar o automatizar datos, un reporte de profiling ayuda a detectar concentraciones, categorías raras, valores inconsistentes y posibles problemas de calidad.

This pattern helps quickly understand the basic structure of a file. Before cleaning, transforming, or automating data, a profiling report helps detect concentrations, rare categories, inconsistent values, and potential quality issues.