{
"cells": [
{
"metadata": {
"collapsed": true
},
"cell_type": "markdown",
"source": [
"# Combinando Notebooks y Scripts para Pandas\n",
"\n",
"## 1. ¿Por qué combinar notebooks y scripts?\n",
"\n",
"Los notebooks son excelentes para:\n",
"\n",
"* Exploración interactiva.\n",
"* Visualización inmediata.\n",
"* Explicaciones paso a paso.\n",
"\n",
"Los scripts son mejores para:\n",
"\n",
"* Reutilizar código en múltiples proyectos.\n",
"* Automatizar tareas.\n",
"* Mantener versiones limpias sin celdas de prueba.\n",
"\n",
"**Combinarlos** nos permite obtener lo mejor de ambos mundos.\n",
"\n",
"## 2. Importar código de scripts en un notebook\n",
"\n",
"Dentro del notebook puedes importar el contenido de tus scripts:\n",
"\n",
"```python\n",
"from procesamiento import limpiar_datos\n",
"from visualizacion import graficar\n",
"```\n",
"\n",
"## 3. Mover código del notebook a un script\n",
"\n",
"Si tu notebook comienza a llenarse de funciones, pásalas a un script:\n",
"\n",
"1. Copia las funciones a un archivo `.py`.\n",
"2. Déjalas limpias, sin variables globales no necesarias.\n",
"3. Importa esas funciones en el notebook.\n",
"\n",
"Esto mejora la organización y te permite ejecutar el código fuera del entorno interactivo.\n",
"\n",
"## 4. Buenas prácticas\n",
"\n",
"* Mantén los notebooks para comunicar y los scripts para programar.\n",
"* Usa nombres claros para módulos y funciones.\n",
"* Añade documentación mínima en tus scripts.\n",
"* Versiona los notebooks exportándolos a `.py` o limpiando las celdas.\n",
"\n",
"---\n",
"\n",
"## 5. Ejercicios Propuestos\n",
"\n",
"1) Crea un fichero `limpieza.py` con la función `reemplazar_por_media(df, columna)`. Usa la función en el dataframe propuesto y cambia el `AvgBill` de cada muestra por el valor medio de la columna.\n"
],
"id": "21aea93ef948ce5"
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": [
"import pandas as pd\n",
"\n",
"df = pd.DataFrame([('Foreign Cinema', 'Restaurant', 289.0),\n",
" ('Liho Liho', 'Restaurant', 224.0),\n",
" ('500 Club', 'bar', 80.5),\n",
" ('The Square', 'bar', 25.30)],\n",
" columns=('name', 'type', 'AvgBill')\n",
" )\n",
"\n",
"#TODO"
],
"id": "3af70cde1e26ce9f"
},
{
"metadata": {},
"cell_type": "markdown",
"source": [
"2) En `transformaciones.py`, implementa funciones como:\n",
"- `crear_columna_ratio(df, num, den)`\n",
"- `filtrar_por_rango(df, columna, minimo, maximo)`\n",
"\n",
"Una vez implementadas añade un columna en el `DataFrame` del ejemplo anterior (con los valores originales) llamada `comensal` que contenga la información del número de personas por mesa, sus valores serán: `[2,3,5,4]`. Aplica las dos funciones anteriores con estas columnas."
],
"id": "846ae8a0b7515483"
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": "#TODO",
"id": "91df4c389918a67f"
},
{
"metadata": {},
"cell_type": "markdown",
"source": [
"[](https://creativecommons.org/licenses/by/4.0/)
\n",
"Isaac Lera and Miquel Miró Nicolau
\n",
"Universitat de les Illes Balears
\n",
"isaac.lera@uib.edu, miquel.miro@uib.edu"
],
"id": "4fcde0b3da87717c"
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}