{ "cells": [ { "cell_type": "markdown", "id": "b60dcea3", "metadata": {}, "source": [ "# UD00 · Notebook 1 — Bienvenida al entorno Python para IA\n", "\n", "Este notebook comprueba que tu entorno de trabajo funciona y hace un primer contacto con las bibliotecas que usaremos durante todo el curso: **numpy**, **pandas**, **matplotlib**, **scikit-learn**, **scikit-fuzzy**, **nltk**, **spaCy**, **torch** y **experta**.\n", "\n", "> Puedes ejecutarlo en el contenedor de prácticas de la UD00 (taller 4) o en Google Colab.\n", "\n", "## Objetivos\n", "\n", "1. Comprobar que el entorno (local o Docker) tiene las bibliotecas del curso.\n", "2. Hacer un primer ejemplo con **arrays** (numpy), **tablas** (pandas) y **gráficas** (matplotlib).\n", "3. Entrenar un clasificador simple con **scikit-learn**.\n", "4. Guardar el notebook resuelto y entregarlo en Moodle." ] }, { "cell_type": "code", "execution_count": null, "id": "42f28978", "metadata": {}, "outputs": [], "source": [ "import sys\n", "print(\"Python\", sys.version.split()[0])\n", "\n", "import numpy\n", "import pandas\n", "import matplotlib\n", "import sklearn\n", "import skfuzzy\n", "import nltk\n", "import spacy\n", "import torch\n", "\n", "print(\"numpy\", numpy.__version__)\n", "print(\"pandas\", pandas.__version__)\n", "print(\"matplotlib\", matplotlib.__version__)\n", "print(\"scikit-learn\", sklearn.__version__)\n", "print(\"scikit-fuzzy\", skfuzzy.__version__)\n", "print(\"nltk\", nltk.__version__)\n", "print(\"spacy\", spacy.__version__)\n", "print(\"torch\", torch.__version__)" ] }, { "cell_type": "markdown", "id": "8a6096f3", "metadata": {}, "source": [ "## 1. Arrays con numpy\n", "\n", "Un **array** es una estructura eficiente para trabajar con datos numéricos. Es la base de casi todas las librerías de IA." ] }, { "cell_type": "code", "execution_count": null, "id": "b3521251", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "\n", "temperaturas = np.array([21.0, 22.5, 19.0, 24.0, 23.0])\n", "print(\"Temperaturas:\", temperaturas)\n", "print(\"Media:\", temperaturas.mean())\n", "print(\"Máximo:\", temperaturas.max())\n", "\n", "cuadrados = np.arange(1, 6) ** 2\n", "print(\"Cuadrados:\", cuadrados)" ] }, { "cell_type": "markdown", "id": "370aaaec", "metadata": {}, "source": [ "## 2. Tablas con pandas\n", "\n", "Un **DataFrame** es una tabla con filas y columnas. Es la forma estándar de manejar datos en IA (veremos la *DataFrame* en todas las unidades)." ] }, { "cell_type": "code", "execution_count": null, "id": "1ceaaa55", "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "datos = pd.DataFrame({\n", " \"día\": [\"lun\", \"mar\", \"mié\", \"jue\", \"vie\"],\n", " \"temperatura\": [21.0, 22.5, 19.0, 24.0, 23.0],\n", " \"ventas\": [120, 135, 98, 152, 141],\n", "})\n", "datos" ] }, { "cell_type": "code", "execution_count": null, "id": "6368dd76", "metadata": {}, "outputs": [], "source": [ "print(datos.describe())\n", "print()\n", "print(\"Ventas medias por día par/impar:\")\n", "print(datos.groupby(datos[\"día\"].str.len()).ventas.mean())" ] }, { "cell_type": "markdown", "id": "0029fb4a", "metadata": {}, "source": [ "## 3. Gráfica con matplotlib\n", "\n", "Visualizar los datos es el primer paso de cualquier análisis. La gráfica debe llevar **título y etiquetas**." ] }, { "cell_type": "code", "execution_count": null, "id": "acaf44fc", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "plt.figure(figsize=(6, 3))\n", "plt.plot(datos[\"día\"], datos[\"temperatura\"], marker=\"o\")\n", "plt.title(\"Temperatura de la semana\")\n", "plt.xlabel(\"Día\")\n", "plt.ylabel(\"Temperatura (°C)\")\n", "plt.grid(True)\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "926a5ce3", "metadata": {}, "source": [ "## 4. Primer modelo con scikit-learn\n", "\n", "Entrenamos un **clasificador** sencillo: dado un punto (x, y), predecir si está por encima o por debajo de la línea y = x. Es un ejemplo de **aprendizaje supervisado**, que veremos con detalle en la UD02." ] }, { "cell_type": "code", "execution_count": null, "id": "dc83aa3a", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from sklearn.tree import DecisionTreeClassifier\n", "\n", "rng = np.random.default_rng(42)\n", "X = rng.uniform(-2, 2, size=(200, 2))\n", "y = (X[:, 1] > X[:, 0]).astype(int)\n", "\n", "# Sin limitar la profundidad: el árbol crece hasta memorizar los datos de entrenamiento\n", "modelo = DecisionTreeClassifier(random_state=42)\n", "modelo.fit(X, y)\n", "print(\"Precisión:\", modelo.score(X, y))\n", "print(\"Predicción para (0.5, 1.0):\", modelo.predict([[0.5, 1.0]]))" ] }, { "cell_type": "markdown", "id": "43a6a4b8", "metadata": {}, "source": [ "## 5. Actividad\n", "\n", "Responde en celdas Markdown del propio notebook:\n", "\n", "1. ¿Qué bibliotecas faltaban en tu entorno (si alguna)? ¿Cómo las instalarías?\n", "2. Añade a la tabla `datos` una columna `humedad` con valores inventados y pinta la temperatura y la humedad en la misma gráfica con dos ejes.\n", "3. ¿Qué significa que el modelo anterior tiene precisión 1.0 sobre los mismos datos con los que se entrenó? ¿Es una buena medida del rendimiento? (Pista: en la UD02 hablaremos de *sobreajuste*.)\n", "\n", "**Entrega**: guarda este notebook con tus respuestas y súbelo a Moodle. Se marca como\n", "**hecho / no hecho**: no lleva nota, pero es la prueba de que tu entorno funciona, y es\n", "**requisito** para las prácticas de las unidades siguientes.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "0474b4e0", "metadata": {}, "outputs": [], "source": [ "print(\"¡Entorno de IA listo!\")" ] }, { "cell_type": "markdown", "id": "44975c3e", "metadata": {}, "source": [ "---\n", "\n", "**Volver al material de la unidad**\n", "\n", "- [Teoría de la UD00 — presentación y curso rápido de Docker](https://martinezpenya.es/ModelosIA/UD00/UD00_ES.html)\n", "- [Ejercicios de la unidad](https://martinezpenya.es/ModelosIA/UD00/UD00_Ejercicios.html)\n", "- [Taller 3 — Verificación del entorno y primer contenedor](https://martinezpenya.es/ModelosIA/UD00/UD00_T03_Verificacion_entorno_ES.html)\n", "- [Taller 4 — Contenedor de prácticas de IA](https://martinezpenya.es/ModelosIA/UD00/UD00_T04_Contenedor_practicas_ES.html)\n", "\n", "*Los enlaces son absolutos a propósito: este notebook también se abre en Colab y se descarga, donde\n", "las rutas relativas no funcionarían.*\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.12" } }, "nbformat": 4, "nbformat_minor": 5 }