Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions solved_lab_python_sql.ipynb
Original file line number Diff line number Diff line change
@@ -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
}