From 9d978d6b2a070977be4b9c0c23b1049cbff7c86f Mon Sep 17 00:00:00 2001 From: Giuliana Miranda Date: Sat, 25 Nov 2023 15:31:45 +0000 Subject: [PATCH] Lab done --- [lab-sql-9]Giuliana.ipynb | 1003 +++++++++++++++++++++++++++++++++++++ [lab-sql-9]Giuliana.sql | 39 ++ 2 files changed, 1042 insertions(+) create mode 100644 [lab-sql-9]Giuliana.ipynb create mode 100644 [lab-sql-9]Giuliana.sql diff --git a/[lab-sql-9]Giuliana.ipynb b/[lab-sql-9]Giuliana.ipynb new file mode 100644 index 0000000..8a9f8bf --- /dev/null +++ b/[lab-sql-9]Giuliana.ipynb @@ -0,0 +1,1003 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "27d3244b", + "metadata": {}, + "outputs": [], + "source": [ + "# instal and restart kernel\n", + "\n", + "import pymysql\n", + "from sqlalchemy import create_engine\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "7d069dd1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "········\n" + ] + } + ], + "source": [ + "import getpass\n", + "password =getpass.getpass()" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "id": "8f582ffd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
rental_idrental_dateinventory_idcustomer_idreturn_datestaff_idlast_updatefirst_namelast_nameemailaddress_id
0762005-05-25 11:30:37302112005-06-03 12:00:3722006-02-15 21:30:53MARYSMITHMARY.SMITH@sakilacustomer.org5
15732005-05-28 10:35:23402012005-06-03 06:32:2312006-02-15 21:30:53MARYSMITHMARY.SMITH@sakilacustomer.org5
23202005-05-27 00:09:24109022005-05-28 04:30:2422006-02-15 21:30:53PATRICIAJOHNSONPATRICIA.JOHNSON@sakilacustomer.org6
34352005-05-27 17:17:09332832005-06-02 11:20:0922006-02-15 21:30:53LINDAWILLIAMSLINDA.WILLIAMS@sakilacustomer.org7
48302005-05-29 22:43:55346432005-06-01 17:43:5512006-02-15 21:30:53LINDAWILLIAMSLINDA.WILLIAMS@sakilacustomer.org7
....................................
11519142005-05-30 11:06:0013935962005-06-04 06:07:0022006-02-15 21:30:53ENRIQUEFORSYTHEENRIQUE.FORSYTHE@sakilacustomer.org602
11529742005-05-30 20:28:4226175962005-06-08 23:45:4222006-02-15 21:30:53ENRIQUEFORSYTHEENRIQUE.FORSYTHE@sakilacustomer.org602
1153342005-05-25 04:19:2826135972005-05-29 00:10:2822006-02-15 21:30:53FREDDIEDUGGANFREDDIE.DUGGAN@sakilacustomer.org603
11545142005-05-28 03:09:2816975972005-06-05 00:49:2822006-02-15 21:30:53FREDDIEDUGGANFREDDIE.DUGGAN@sakilacustomer.org603
115510082005-05-31 01:18:569145992005-06-01 01:24:5622006-02-15 21:30:53AUSTINCINTRONAUSTIN.CINTRON@sakilacustomer.org605
\n", + "

1156 rows × 11 columns

\n", + "
" + ], + "text/plain": [ + " rental_id rental_date inventory_id customer_id \\\n", + "0 76 2005-05-25 11:30:37 3021 1 \n", + "1 573 2005-05-28 10:35:23 4020 1 \n", + "2 320 2005-05-27 00:09:24 1090 2 \n", + "3 435 2005-05-27 17:17:09 3328 3 \n", + "4 830 2005-05-29 22:43:55 3464 3 \n", + "... ... ... ... ... \n", + "1151 914 2005-05-30 11:06:00 1393 596 \n", + "1152 974 2005-05-30 20:28:42 2617 596 \n", + "1153 34 2005-05-25 04:19:28 2613 597 \n", + "1154 514 2005-05-28 03:09:28 1697 597 \n", + "1155 1008 2005-05-31 01:18:56 914 599 \n", + "\n", + " return_date staff_id last_update first_name last_name \\\n", + "0 2005-06-03 12:00:37 2 2006-02-15 21:30:53 MARY SMITH \n", + "1 2005-06-03 06:32:23 1 2006-02-15 21:30:53 MARY SMITH \n", + "2 2005-05-28 04:30:24 2 2006-02-15 21:30:53 PATRICIA JOHNSON \n", + "3 2005-06-02 11:20:09 2 2006-02-15 21:30:53 LINDA WILLIAMS \n", + "4 2005-06-01 17:43:55 1 2006-02-15 21:30:53 LINDA WILLIAMS \n", + "... ... ... ... ... ... \n", + "1151 2005-06-04 06:07:00 2 2006-02-15 21:30:53 ENRIQUE FORSYTHE \n", + "1152 2005-06-08 23:45:42 2 2006-02-15 21:30:53 ENRIQUE FORSYTHE \n", + "1153 2005-05-29 00:10:28 2 2006-02-15 21:30:53 FREDDIE DUGGAN \n", + "1154 2005-06-05 00:49:28 2 2006-02-15 21:30:53 FREDDIE DUGGAN \n", + "1155 2005-06-01 01:24:56 2 2006-02-15 21:30:53 AUSTIN CINTRON \n", + "\n", + " email address_id \n", + "0 MARY.SMITH@sakilacustomer.org 5 \n", + "1 MARY.SMITH@sakilacustomer.org 5 \n", + "2 PATRICIA.JOHNSON@sakilacustomer.org 6 \n", + "3 LINDA.WILLIAMS@sakilacustomer.org 7 \n", + "4 LINDA.WILLIAMS@sakilacustomer.org 7 \n", + "... ... ... \n", + "1151 ENRIQUE.FORSYTHE@sakilacustomer.org 602 \n", + "1152 ENRIQUE.FORSYTHE@sakilacustomer.org 602 \n", + "1153 FREDDIE.DUGGAN@sakilacustomer.org 603 \n", + "1154 FREDDIE.DUGGAN@sakilacustomer.org 603 \n", + "1155 AUSTIN.CINTRON@sakilacustomer.org 605 \n", + "\n", + "[1156 rows x 11 columns]" + ] + }, + "execution_count": 54, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Create a Python connection with SQL database and retrieve the results of the last two queries \n", + "# as dataframes:\n", + "\n", + "connection_string = 'mysql+pymysql://root:' + password + '@localhost/bank'\n", + "engine = create_engine(connection_string)\n", + "rentals_may = pd.read_sql_query('select * from sakila.rentals_may', engine)\n", + "rentals_may" + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "id": "fb02195b", + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "connection_string = 'mysql+pymysql://root:' + password + '@localhost/bank'\n", + "engine = create_engine(connection_string)\n", + "rentals_june = pd.read_sql_query('select * from sakila.rentals_june', engine)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "66eec81c", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idfirst_namelast_namenum_rentals_may
0197SUEPETERS8
1109EDNAWEST7
2506LESLIESEWARD7
353HEATHERMORRIS6
4269CASSANDRAWALTERS6
...............
515352ALBERTCROUSE1
516353JONATHANSCARBOROUGH1
517355TERRYGRISSOM1
518356GERALDFULTZ1
519599AUSTINCINTRON1
\n", + "

520 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " customer_id first_name last_name num_rentals_may\n", + "0 197 SUE PETERS 8\n", + "1 109 EDNA WEST 7\n", + "2 506 LESLIE SEWARD 7\n", + "3 53 HEATHER MORRIS 6\n", + "4 269 CASSANDRA WALTERS 6\n", + ".. ... ... ... ...\n", + "515 352 ALBERT CROUSE 1\n", + "516 353 JONATHAN SCARBOROUGH 1\n", + "517 355 TERRY GRISSOM 1\n", + "518 356 GERALD FULTZ 1\n", + "519 599 AUSTIN CINTRON 1\n", + "\n", + "[520 rows x 4 columns]" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check the number of rentals for each customer for May\n", + "\n", + "num_rentals_may = rentals_may[['customer_id', 'first_name', 'last_name']].value_counts().reset_index()\n", + "num_rentals_may.columns = ['customer_id', 'first_name', 'last_name', 'num_rentals_may']\n", + "num_rentals_may\n" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "79d44568", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idfirst_namelast_namenum_rentals_june
031BRENDAWRIGHT11
1454ALEXGRESHAM10
2329FRANKWAGGONER9
3295DAISYBATES9
4561IANSTILL9
...............
585496TYLERWREN1
586370WAYNETRUONG1
587315KENNETHGOODEN1
588198ELSIEKELLEY1
589250JOFOWLER1
\n", + "

590 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " customer_id first_name last_name num_rentals_june\n", + "0 31 BRENDA WRIGHT 11\n", + "1 454 ALEX GRESHAM 10\n", + "2 329 FRANK WAGGONER 9\n", + "3 295 DAISY BATES 9\n", + "4 561 IAN STILL 9\n", + ".. ... ... ... ...\n", + "585 496 TYLER WREN 1\n", + "586 370 WAYNE TRUONG 1\n", + "587 315 KENNETH GOODEN 1\n", + "588 198 ELSIE KELLEY 1\n", + "589 250 JO FOWLER 1\n", + "\n", + "[590 rows x 4 columns]" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Check the number of rentals for each customer for June\n", + "\n", + "num_rentals_june = rentals_june[['customer_id', 'first_name', 'last_name']].value_counts().reset_index()\n", + "num_rentals_june.columns = ['customer_id', 'first_name', 'last_name', 'num_rentals_june']\n", + "num_rentals_june" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "90a1b712", + "metadata": {}, + "outputs": [], + "source": [ + "# Write a function that checks if customer borrowed more or less films in the month of June as compared to May.\n", + "\n", + "# Hint: For this part, you can create a join between the two dataframes created before, using the merge function \n", + "# available for pandas dataframes. Here is a link to the documentation for the merge function.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "a860a07d", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idfirst_namelast_namenum_rentals_maynum_rentals_june
0197SUEPETERS88
1109EDNAWEST75
2506LESLIESEWARD75
353HEATHERMORRIS65
4269CASSANDRAWALTERS63
..................
507352ALBERTCROUSE15
508353JONATHANSCARBOROUGH13
509355TERRYGRISSOM12
510356GERALDFULTZ13
511599AUSTINCINTRON14
\n", + "

512 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " customer_id first_name last_name num_rentals_may num_rentals_june\n", + "0 197 SUE PETERS 8 8\n", + "1 109 EDNA WEST 7 5\n", + "2 506 LESLIE SEWARD 7 5\n", + "3 53 HEATHER MORRIS 6 5\n", + "4 269 CASSANDRA WALTERS 6 3\n", + ".. ... ... ... ... ...\n", + "507 352 ALBERT CROUSE 1 5\n", + "508 353 JONATHAN SCARBOROUGH 1 3\n", + "509 355 TERRY GRISSOM 1 2\n", + "510 356 GERALD FULTZ 1 3\n", + "511 599 AUSTIN CINTRON 1 4\n", + "\n", + "[512 rows x 5 columns]" + ] + }, + "execution_count": 58, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rentals_merged = pd.merge(num_rentals_may, num_rentals_june)\n", + "rentals_merged" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "cc4e32c8", + "metadata": {}, + "outputs": [], + "source": [ + "def more_or_less(df):\n", + " df['rental_diff'] = df['num_rentals_june'] - df['num_rentals_may']\n", + " return df" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "id": "a034c03e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
customer_idfirst_namelast_namenum_rentals_maynum_rentals_junerental_diff
0197SUEPETERS880
1109EDNAWEST75-2
2506LESLIESEWARD75-2
353HEATHERMORRIS65-1
4269CASSANDRAWALTERS63-3
.....................
507352ALBERTCROUSE154
508353JONATHANSCARBOROUGH132
509355TERRYGRISSOM121
510356GERALDFULTZ132
511599AUSTINCINTRON143
\n", + "

512 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " customer_id first_name last_name num_rentals_may num_rentals_june \\\n", + "0 197 SUE PETERS 8 8 \n", + "1 109 EDNA WEST 7 5 \n", + "2 506 LESLIE SEWARD 7 5 \n", + "3 53 HEATHER MORRIS 6 5 \n", + "4 269 CASSANDRA WALTERS 6 3 \n", + ".. ... ... ... ... ... \n", + "507 352 ALBERT CROUSE 1 5 \n", + "508 353 JONATHAN SCARBOROUGH 1 3 \n", + "509 355 TERRY GRISSOM 1 2 \n", + "510 356 GERALD FULTZ 1 3 \n", + "511 599 AUSTIN CINTRON 1 4 \n", + "\n", + " rental_diff \n", + "0 0 \n", + "1 -2 \n", + "2 -2 \n", + "3 -1 \n", + "4 -3 \n", + ".. ... \n", + "507 4 \n", + "508 2 \n", + "509 1 \n", + "510 2 \n", + "511 3 \n", + "\n", + "[512 rows x 6 columns]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "more_or_less(rentals_merged)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7b729be1", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "09ea450d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.11.3" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/[lab-sql-9]Giuliana.sql b/[lab-sql-9]Giuliana.sql new file mode 100644 index 0000000..3f8b419 --- /dev/null +++ b/[lab-sql-9]Giuliana.sql @@ -0,0 +1,39 @@ +-- Create a Python connection with SQL database and retrieve the results of the last two queries (also mentioned below) as dataframes: +-- Check the number of rentals for each customer for May +-- Check the number of rentals for each customer for June +-- Hint: You can store the results from the two queries in two separate dataframes. +-- Write a function that checks if customer borrowed more or less films in the month of June as compared to May. +-- Hint: For this part, you can create a join between the two dataframes created before, using the merge function available for pandas dataframes. Here is a link to the documentation for the merge function. + + +-- Creating the table for May rentals and filtering the rents that happend in that month + +create table sakila.rentals_may +select ren.*, cus.first_name, cus.last_name, cus.email, cus.address_id +from sakila.rental ren +inner join sakila.customer cus +on ren.customer_id = cus.customer_id +where date_format(convert(rental_date, date), '%M') = 'May'; + +select * from sakila.rentals_may; + + +-- Doing the same for the month of June +create table sakila.rentals_june +select ren.*, cus.first_name, cus.last_name, cus.email, cus.address_id +from sakila.rental ren +inner join sakila.customer cus +on ren.customer_id = cus.customer_id +where date_format(convert(rental_date, date), '%M') = 'June'; + +-- Checking the number of rentakls for each customer in May +select count(rental_id) as num_rents, customer_id, first_name, last_name +from sakila.rentals_may +group by 2,3,4 +order by num_rents desc; + +-- Checking the number of rentals for each customer in June +select count(rental_id) as num_rents, customer_id, first_name, last_name +from sakila.rentals_june +group by 2,3,4 +order by num_rents desc; \ No newline at end of file