diff --git a/solved_lab_python_sql.ipynb b/solved_lab_python_sql.ipynb new file mode 100644 index 0000000..d7cd0d8 --- /dev/null +++ b/solved_lab_python_sql.ipynb @@ -0,0 +1,110 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "id": "933a3adf", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from sqlalchemy import create_engine\n", + "\n", + "# 1. Establecer conexión (Ajusta el usuario y contraseña según tu configuración)\n", + "# Formato: 'mysql+pymysql://usuario:contraseña@host:puerto/sakila'\n", + "engine = create_engine('mysql+pymysql://root:password@localhost:3306/sakila')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "a66db92b", + "metadata": {}, + "outputs": [], + "source": [ + "# 2. Función rentals_month\n", + "def rentals_month(engine, month, year):\n", + " \"\"\"\n", + " Recupera datos de alquiler de la tabla 'rental' para un mes y año específicos.\n", + " \"\"\"\n", + " query = f\"\"\"\n", + " SELECT * \n", + " FROM rental\n", + " WHERE MONTH(rental_date) = {month} AND YEAR(rental_date) = {year}\n", + " \"\"\"\n", + " df = pd.read_sql(query, engine)\n", + " return df\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "a8d8dc41", + "metadata": {}, + "outputs": [], + "source": [ + "# 3. Función rental_count_month\n", + "def rental_count_month(df, month, year):\n", + " \"\"\"\n", + " Cuenta los alquileres por cliente y renombra la columna según el mes y año.\n", + " \"\"\"\n", + " # Agrupamos por customer_id y contamos las filas\n", + " df_count = df.groupby('customer_id')[['rental_id']].count()\n", + " \n", + " # Formateamos el nombre de la columna (ej: rentals_05_2005)\n", + " col_name = f\"rentals_{month:02d}_{year}\"\n", + " df_count.columns = [col_name]\n", + " \n", + " return df_count.reset_index()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "e3809726", + "metadata": {}, + "outputs": [], + "source": [ + "# 4. Función compare_rentals\n", + "def compare_rentals(df1, df2):\n", + " \"\"\"\n", + " Combina dos DataFrames de conteo y calcula la diferencia de actividad.\n", + " Utiliza un 'inner join' para identificar clientes activos en AMBOS meses.\n", + " \"\"\"\n", + " # Combinamos los DataFrames usando customer_id como clave\n", + " df_combined = pd.merge(df1, df2, on='customer_id', how='inner')\n", + " \n", + " # Identificamos los nombres de las columnas de rentals dinámicamente\n", + " cols = [col for col in df_combined.columns if col.startswith('rentals_')]\n", + " \n", + " # Calculamos la diferencia (Mes 2 - Mes 1)\n", + " df_combined['difference'] = df_combined[cols[1]] - df_combined[cols[0]]\n", + " \n", + " return df_combined" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.14.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}