diff --git a/connection.ipynb b/connection.ipynb
new file mode 100644
index 0000000..41538e8
--- /dev/null
+++ b/connection.ipynb
@@ -0,0 +1,695 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "38c66f7e",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "from sqlalchemy import create_engine\n",
+ "import pandas as pd"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "a09dd9cc",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "engine = create_engine(\n",
+ " \"mysql+pymysql://JulioBP:6j7u9l3io@localhost:3306/sakila\"\n",
+ ")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "0c5f0249",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def rentals_month(engine, month, year):\n",
+ " query = f\"\"\"\n",
+ " SELECT customer_id, rental_date\n",
+ " FROM rental\n",
+ " WHERE MONTH(rental_date) = {month}\n",
+ " AND YEAR(rental_date) = {year};\n",
+ " \"\"\"\n",
+ " \n",
+ " df = pd.read_sql(query, engine)\n",
+ " return df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "845c3f90",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "may_df = rentals_month(engine, 5, 2005)\n",
+ "june_df = rentals_month(engine, 6, 2005)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "8e83f1f6",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " customer_id | \n",
+ " rental_date | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 130 | \n",
+ " 2005-05-24 22:53:30 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 459 | \n",
+ " 2005-05-24 22:54:33 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 408 | \n",
+ " 2005-05-24 23:03:39 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 333 | \n",
+ " 2005-05-24 23:04:41 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 222 | \n",
+ " 2005-05-24 23:05:21 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 1151 | \n",
+ " 506 | \n",
+ " 2005-05-31 21:36:44 | \n",
+ "
\n",
+ " \n",
+ " | 1152 | \n",
+ " 59 | \n",
+ " 2005-05-31 21:42:09 | \n",
+ "
\n",
+ " \n",
+ " | 1153 | \n",
+ " 251 | \n",
+ " 2005-05-31 22:17:11 | \n",
+ "
\n",
+ " \n",
+ " | 1154 | \n",
+ " 106 | \n",
+ " 2005-05-31 22:37:34 | \n",
+ "
\n",
+ " \n",
+ " | 1155 | \n",
+ " 61 | \n",
+ " 2005-05-31 22:47:45 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
1156 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " customer_id rental_date\n",
+ "0 130 2005-05-24 22:53:30\n",
+ "1 459 2005-05-24 22:54:33\n",
+ "2 408 2005-05-24 23:03:39\n",
+ "3 333 2005-05-24 23:04:41\n",
+ "4 222 2005-05-24 23:05:21\n",
+ "... ... ...\n",
+ "1151 506 2005-05-31 21:36:44\n",
+ "1152 59 2005-05-31 21:42:09\n",
+ "1153 251 2005-05-31 22:17:11\n",
+ "1154 106 2005-05-31 22:37:34\n",
+ "1155 61 2005-05-31 22:47:45\n",
+ "\n",
+ "[1156 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "may_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "06a0e560",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " customer_id | \n",
+ " rental_date | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 416 | \n",
+ " 2005-06-14 22:53:33 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 516 | \n",
+ " 2005-06-14 22:55:13 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 239 | \n",
+ " 2005-06-14 23:00:34 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 285 | \n",
+ " 2005-06-14 23:07:08 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 310 | \n",
+ " 2005-06-14 23:09:38 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 2306 | \n",
+ " 510 | \n",
+ " 2005-06-21 22:10:01 | \n",
+ "
\n",
+ " \n",
+ " | 2307 | \n",
+ " 226 | \n",
+ " 2005-06-21 22:13:33 | \n",
+ "
\n",
+ " \n",
+ " | 2308 | \n",
+ " 543 | \n",
+ " 2005-06-21 22:19:25 | \n",
+ "
\n",
+ " \n",
+ " | 2309 | \n",
+ " 100 | \n",
+ " 2005-06-21 22:43:45 | \n",
+ "
\n",
+ " \n",
+ " | 2310 | \n",
+ " 181 | \n",
+ " 2005-06-21 22:48:59 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
2311 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " customer_id rental_date\n",
+ "0 416 2005-06-14 22:53:33\n",
+ "1 516 2005-06-14 22:55:13\n",
+ "2 239 2005-06-14 23:00:34\n",
+ "3 285 2005-06-14 23:07:08\n",
+ "4 310 2005-06-14 23:09:38\n",
+ "... ... ...\n",
+ "2306 510 2005-06-21 22:10:01\n",
+ "2307 226 2005-06-21 22:13:33\n",
+ "2308 543 2005-06-21 22:19:25\n",
+ "2309 100 2005-06-21 22:43:45\n",
+ "2310 181 2005-06-21 22:48:59\n",
+ "\n",
+ "[2311 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "june_df"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "1e0446f9",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def rental_count_month(df, month, year):\n",
+ " column_name = f\"rentals_{month}_{year}\"\n",
+ " \n",
+ " result = (\n",
+ " df\n",
+ " .groupby(\"customer_id\")\n",
+ " .size()\n",
+ " .reset_index(name=column_name))\n",
+ " \n",
+ " return result"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "3cde8da8",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "may_count = rental_count_month(may_df, 5, 2005)\n",
+ "june_count = rental_count_month(june_df, 6, 2005)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "0c00d2b2",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " customer_id | \n",
+ " rentals_05_2005 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 5 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 6 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 515 | \n",
+ " 594 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " | 516 | \n",
+ " 595 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 517 | \n",
+ " 596 | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " | 518 | \n",
+ " 597 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 519 | \n",
+ " 599 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
520 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " customer_id rentals_05_2005\n",
+ "0 1 2\n",
+ "1 2 1\n",
+ "2 3 2\n",
+ "3 5 3\n",
+ "4 6 3\n",
+ ".. ... ...\n",
+ "515 594 4\n",
+ "516 595 1\n",
+ "517 596 6\n",
+ "518 597 2\n",
+ "519 599 1\n",
+ "\n",
+ "[520 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "may_count"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "4aa502fc",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " customer_id | \n",
+ " rentals_06_2005 | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 7 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 4 | \n",
+ " 6 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " | ... | \n",
+ " ... | \n",
+ " ... | \n",
+ "
\n",
+ " \n",
+ " | 585 | \n",
+ " 595 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 586 | \n",
+ " 596 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 587 | \n",
+ " 597 | \n",
+ " 3 | \n",
+ "
\n",
+ " \n",
+ " | 588 | \n",
+ " 598 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ " | 589 | \n",
+ " 599 | \n",
+ " 4 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
590 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " customer_id rentals_06_2005\n",
+ "0 1 7\n",
+ "1 2 1\n",
+ "2 3 4\n",
+ "3 4 6\n",
+ "4 5 5\n",
+ ".. ... ...\n",
+ "585 595 2\n",
+ "586 596 2\n",
+ "587 597 3\n",
+ "588 598 1\n",
+ "589 599 4\n",
+ "\n",
+ "[590 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "june_count"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "3a306ba4",
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "def compare_rentals(df1, df2):\n",
+ " merged = pd.merge(\n",
+ " df1,\n",
+ " df2,\n",
+ " on=\"customer_id\",\n",
+ " how=\"inner\")\n",
+ " \n",
+ " col1 = df1.columns[1]\n",
+ " col2 = df2.columns[1]\n",
+ " \n",
+ " merged[\"difference\"] = merged[col2] - merged[col1]\n",
+ " \n",
+ " return merged"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "becdd4d9",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " customer_id | \n",
+ " rentals_05_2005 | \n",
+ " rentals_06_2005 | \n",
+ " difference | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1 | \n",
+ " 2 | \n",
+ " 7 | \n",
+ " 5 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 2 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 3 | \n",
+ " 2 | \n",
+ " 4 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 5 | \n",
+ " 3 | \n",
+ " 5 | \n",
+ " 2 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 6 | \n",
+ " 3 | \n",
+ " 4 | \n",
+ " 1 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " customer_id rentals_05_2005 rentals_06_2005 difference\n",
+ "0 1 2 7 5\n",
+ "1 2 1 1 0\n",
+ "2 3 2 4 2\n",
+ "3 5 3 5 2\n",
+ "4 6 3 4 1"
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "comparacion = compare_rentals(may_count, june_count)\n",
+ "\n",
+ "comparacion.head()"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "base",
+ "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.13.9"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}