
Proyecto Katy Payne — Sesión 1: presentación y carga de datos
Después de Laennec, que era un problema difícil de verdad (tres clases, una de ellas con muy pocos ejemplos), vamos a hacer justo lo contrario: un problema de solo dos clases, bien equilibrado, con sonidos muy distintos entre sí. Mismo tipo de herramientas — MFCC, un Random Forest —, pero con un problema mucho más agradecido. La pregunta de hoy es tan sencilla como suena: ¿puede un modelo distinguir un maullido de un ladrido?
Por qué se llama Proyecto Katy Payne
La zoóloga estadounidense Katy Payne (Cornell, n. 1937) descubrió en 1984, junto a Joyce Poole, que los elefantes se comunican mediante infrasonidos: frecuencias tan graves que el oído humano no las percibe directamente. Antes había hecho algo parecido con el canto de las ballenas jorobadas, usando espectrogramas para revelar patrones —rimas, estructuras que se repiten— que a simple oído pasaban desapercibidos. En los dos casos, la idea de fondo es la misma que vamos a aplicar hoy: con la herramienta adecuada, un sonido revela mucho más de lo que parece a primera escucha. Nosotros usaremos MFCC en vez de espectrogramas e infrasonidos, pero el principio es el mismo.
De dónde vienen los datos
Vamos a usar “Audio Cats and Dogs”, un dataset publicado en Kaggle por Marc Moreaux, con licencia CC BY-SA 3.0. Contiene grabaciones reales extraídas del AE-Dataset (a su vez construido con sonidos de FreeSound):
- gato: 164 archivos .wav (unos 22 minutos de audio en total)
- perro: 113 archivos .wav (unos 10 minutos de audio en total)
Todo a 16 kHz, con duración variable. Fijaos en la proporción: 164 frente a 113 es un desequilibrio mucho más suave que el 320 frente a 46 de Laennec — otro motivo por el que hoy deberíamos obtener mejores resultados.
Una ventaja extra: el propio dataset trae ya un reparto de entrenamiento y prueba hecho (train_test_split.csv), como nos pasó con Taussig — hoy tampoco tendremos que repartir los datos nosotros mismos.
Cómo preparar todo
- Entra en
kaggle.com/datasets/mmoreaux/audio-cats-and-dogscon tu cuenta de Kaggle y descarga el dataset. - Descomprime el contenido en una carpeta (por ejemplo
audio-cats-and-dogs, al mismo nivel que vuestro cuaderno), manteniendo la estructura: una carpeta con todos los .wav (gatos y perros mezclados, distinguidos por el nombre del archivo) y el archivotrain_test_split.csv. Comprobad con el explorador de archivos de vuestro ordenador cómo han quedado exactamente las carpetas después de descomprimir, por si el nombre no coincide con el que uséis en el código. librosaya lo tenéis instalado desde Laennec — no hace falta nada nuevo.
Cargando el reparto
A diferencia de Laennec, hoy sí podemos fiarnos de la tabla de metadatos sin trucos:
import pandas as pd
carpeta_datos = "audio-cats-and-dogs/" # cambiadla si descomprimisteis con otro nombre
carpeta_audios = carpeta_datos + "cats_dogs/"
reparto = pd.read_csv(carpeta_datos + "train_test_split.csv")
reparto.head()
print("Gatos en entrenamiento:", reparto["train_cat"].notna().sum())
print("Perros en entrenamiento:", reparto["train_dog"].notna().sum())
print("Gatos en prueba:", reparto["test_cat"].notna().sum())
print("Perros en prueba:", reparto["test_dog"].notna().sum())
[COMPLETAR CON VUESTROS DATOS REALES: cuántos gatos y perros hay en entrenamiento y en prueba]


Escuchando el primer gato y el primer perro
from IPython.display import Audio
primer_gato = reparto["train_cat"].dropna().iloc[0]
Audio(carpeta_audios + primer_gato)
primer_perro = reparto["train_dog"].dropna().iloc[0]
Audio(carpeta_audios + primer_perro)
[COMPLETAR EN CLASE: ¿os parecen sonidos más fáciles o más difíciles de distinguir que el murmullo y la extrasístole de Laennec?]

Próximo paso
Con los datos cargados, en la próxima sesión convertimos cada sonido en números (MFCC, igual que en Laennec) y echamos un primer vistazo para ver si gatos y perros ya se distinguen a simple vista antes de entrenar nada.



