Análisis de Datos de Partidos de Fútbol con Expresiones Regulares

Clase 24 de 29Curso de Expresiones Regulares

Resumen

¿Cómo trabajar con datos de partidos de fútbol usando PHP?

En el mundo de la programación, a veces lo pequeño hace una gran diferencia. Analizar datos de partidos de fútbol es un desafío en términos de precisión y eficiencia. Aquí exploraremos cómo manipular información de partidos de selecciones nacionales utilizando PHP. Enfocarse en la limpieza de datos, comprensión de expresiones regulares y controlando intricados detalles de los datos como nombres de países con caracteres especiales o resultados de partidos.

¿Cuáles son los primeros pasos para extraer información específica?

Para comenzar, determinamos qué datos deseamos analizar. Por ejemplo, queremos obtener todos los partidos empatados en la historia de selecciones nacionales. Empezamos escribiendo un script básico en PHP:

<?php
// Limpiamos pantalla y cargamos el archivo de datos
echo "\033[2J\033[;H"; // Código para limpiar la pantalla en terminal

// Cargamos datos del archivo
$filename = "Results.txt";
$file = fopen($filename, "r");

// Inicializamos la bandera para que el match sea insensitive al case
$flags = "i";

// Establecemos el patrón de expresión regular (Regex)
$pattern = '/(\d{4})-(\d{2})-(\d{2}),([\w\s\-]+),(.*?)-([\w\s\-]+),(.*?)-(\d+),(\d+),.*?(Friendly|Eliminatorio|Competencia)/';

while (($line = fgets($file)) !== false) {
    if (preg_match($pattern, $line, $match)) {
        $localTeam = $match[4];
        $visitorTeam = $match[6];
        $localScore = $match[8];
        $visitorScore = $match[9];

        // Evaluamos el resultado del partido
        if ($localScore == $visitorScore) {
            echo "Empate: $localTeam vs $visitorTeam $localScore-$visitorScore\n";
        }
    }
}
fclose($file);
?>

¿Cómo solucionar problemas comunes en los datos?

Uno de los retos comunes en este tipo de datos es lidiar con caracteres no estándar, como acentos o cedillas, en los nombres de los equipos. En casos como estos, podemos ajustar nuestras Regex para aceptar caracteres adicionales, lo que es vital para asegurar que toda la información sea considerada.

A continuación, refinamos nuestra expresión regular para incluir espacios y guiones en los nombres de países:

$pattern = '/(\d{4})-(\d{2})-(\d{2}),([\w\s\-\']+),(.*?)-([\w\s\-\']+),(.*?)-(\d+),(\d+),.*?(Friendly|Eliminatorio|Competencia)/';

¿Cómo generar información más útil?

La idea es no solo extraer datos, sino también procesarlos para crear información comprensible de un vistazo. Por ejemplo, podemos modificar la impresión para añadir etiquetas que determinen claramente si el resultado del partido fue un empate o si ganó un equipo en particular.

if ($localScore == $visitorScore) {
    printf("%s, %s vs %s: Empate (%d-%d)\n", $match[1], $localTeam, $visitorTeam, $localScore, $visitorScore);
} elseif ($localScore > $visitorScore) {
    printf("%s, %s vs %s: Local (%d-%d)\n", $match[1], $localTeam, $visitorTeam, $localScore, $visitorScore);
} else {
    printf("%s, %s vs %s: Visitante (%d-%d)\n", $match[1], $localTeam, $visitorTeam, $localScore, $visitorScore);
}

¿Por qué es importante la eficiencia al procesar datos?

Debemos tener en cuenta la eficiencia al manipular grandes volúmenes de datos. Usar expresiones regulares adecuadamente configuradas permite procesar grandes conjuntos de datos en poco tiempo. Aquí calculamos el tiempo que tarda nuestro script en ejecutarse:

$startTime = microtime(true);

// ... procesamiento de datos ...

$endTime = microtime(true);
$executionTime = $endTime - $startTime;
echo "Tiempo de ejecución: " . round($executionTime, 2) . " segundos\n";

Al medir el tiempo, podemos hacer comparaciones y mejorar los algoritmos de procesamiento, logrando scripts más efectivos.

¿Cómo gestionar errores comunes durante la ejecución?

Durante la ejecución es común enfrentar errores como líneas no coincidentes con la expresión regular. Estos pueden deberse a caracteres inesperados o a faltantes en los datos. Un truco útil es imprimir solo las líneas que no coinciden para así identificar rápidamente la fuente del problema:

while (($line = fgets($file)) !== false) {
    if (!preg_match($pattern, $line, $match)) {
        echo "Línea sin match: $line\n";
    } else {
        // Procesar la línea si hace match
    }
}

Este enfoque nos permite ajustar rápidamente las expresiones regulares o los datos pendientes de revisar. En situaciones donde el resultado no es el esperado, depurar de esta forma abrevia el ciclo de desarrollo.

¿Cómo continúa uno su aprendizaje en la programación?

La programación exige un constante aprendizaje y ajuste. Practicar extraer, procesar y generar datos con diversos lenguajes como PHP es solo el inicio. En cada sesión de código hay una nueva lección que aprender, siempre buscando optimizar los métodos y dar el próximo paso hacia otros lenguajes como Python. ¡Sigue adelante, el conocimiento no tiene límites!