diff --git a/01_gd_sql-LooqboxDataChallenge.sql b/01_gd_sql-LooqboxDataChallenge.sql new file mode 100644 index 0000000..e25a281 --- /dev/null +++ b/01_gd_sql-LooqboxDataChallenge.sql @@ -0,0 +1,22 @@ +#1. What are the 10 most expensive products in the company? +SELECT PRODUCT_NAME, PRODUCT_VAL +FROM `looqbox-challenge`.data_product +ORDER BY PRODUCT_VAL DESC +LIMIT 10; + +#2. What sections do the 'BEBIDAS' and 'PADARIA' departments have? +SELECT DISTINCT DEP_NAME , SECTION_NAME +FROM `looqbox-challenge`.data_product +WHERE DEP_NAME IN ('BEBIDAS','PADARIA') +ORDER BY DEP_NAME, SECTION_NAME; + +#3. What was the total sale of products (in $) of each Business Area in the first quarter of 2019? +SELECT CAD.BUSINESS_NAME , SUM(SALES.SALES_VALUE) AS SALES_VALUE +FROM `looqbox-challenge`.data_store_sales AS SALES +LEFT JOIN `looqbox-challenge`.data_store_cad as CAD +ON SALES.STORE_CODE = CAD.STORE_CODE +WHERE SALES.DATE BETWEEN '2019-01-01' AND '2019-03-31' +GROUP BY CAD.BUSINESS_NAME +ORDER BY SUM(SALES.SALES_VALUE) DESC; + + diff --git a/02-gd-Case1-datachallenge.ipynb b/02-gd-Case1-datachallenge.ipynb new file mode 100644 index 0000000..1753c19 --- /dev/null +++ b/02-gd-Case1-datachallenge.ipynb @@ -0,0 +1,340 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5ade6e06", + "metadata": {}, + "source": [ + "### Case 1\n", + "#### 1) The Dev Team was tired of developing the same old queries just varying the filters accordingly to their boss demands.\n", + "As a new member of the crew, your mission now is to create a dynamic function in Python, on the most flexible of ways, to produce queries and retrieve a dataframe based on three parameters:\n", + "\n", + "- product_code: integer\n", + "\n", + "- store_code: integer\n", + "\n", + "- date: list of ISO-like strings\n", + "\n", + "- Date e.g.\n", + " - ['2019-01-01', '2019-01-31']\n", + "\n", + "It should look like this\n", + "my_data = retrieve_data(product_code, store_code, date)\n", + "\n", + "Make your team proud!\n", + "\n", + "Extra instructions:\n", + "- Retrieve all columns from table data_product_sales;\n", + "- Imagine people from other teams will also utilize this function!" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3e772ed3", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from sqlalchemy import create_engine" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6959a8b8", + "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", + "
STORE_CODEPRODUCT_CODEDATESALES_VALUESALES_QTY
01182019-01-01708.565.0
11182019-01-021297.1119.0
21182019-01-031144.5105.0
31182019-01-041090.0100.0
41182019-01-05893.882.0
\n", + "
" + ], + "text/plain": [ + " STORE_CODE PRODUCT_CODE DATE SALES_VALUE SALES_QTY\n", + "0 1 18 2019-01-01 708.5 65.0\n", + "1 1 18 2019-01-02 1297.1 119.0\n", + "2 1 18 2019-01-03 1144.5 105.0\n", + "3 1 18 2019-01-04 1090.0 100.0\n", + "4 1 18 2019-01-05 893.8 82.0" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def retrieve_data(product_code, store_code, date):\n", + " # 1. Credenciais de acesso\n", + " usuario = 'looqbox-challenge'\n", + " senha = 'looq-challenge'\n", + " host = '35.199.115.174'\n", + " porta = '3306' # porta padrão do MySQL\n", + " nome_do_banco = 'looqbox-challenge'\n", + "\n", + " # 2. String de conexão (URL de conexão)\n", + " # Formato: mysql+pymysql://usuario:senha@host:porta/nome_do_banco\n", + " string_conexao = f'mysql+pymysql://{usuario}:{senha}@{host}:{porta}/{nome_do_banco}'\n", + "\n", + " # 3. Motor de conexão (engine)\n", + " engine = create_engine(string_conexao)\n", + "\n", + " # 4. Consulta SQL\n", + " query = \"\"\"SELECT * FROM `looqbox-challenge`.`data_product_sales`\n", + " WHERE PRODUCT_CODE = %s\n", + " AND DATE BETWEEN %s AND %s\n", + " AND STORE_CODE = %s\"\"\"\n", + "\n", + " df = pd.read_sql(query, con=engine, params=(product_code, date[0], date[1], store_code))\n", + "\n", + " # 6. retorna o DataFrame\n", + " return df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "361ee7b7", + "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", + "
STORE_CODEPRODUCT_CODEDATESALES_VALUESALES_QTY
01182019-01-01708.565.0
11182019-01-021297.1119.0
21182019-01-031144.5105.0
31182019-01-041090.0100.0
41182019-01-05893.882.0
..................
851182019-03-271308.0120.0
861182019-03-281079.199.0
871182019-03-291002.892.0
881182019-03-30741.268.0
891182019-03-31741.268.0
\n", + "

90 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " STORE_CODE PRODUCT_CODE DATE SALES_VALUE SALES_QTY\n", + "0 1 18 2019-01-01 708.5 65.0\n", + "1 1 18 2019-01-02 1297.1 119.0\n", + "2 1 18 2019-01-03 1144.5 105.0\n", + "3 1 18 2019-01-04 1090.0 100.0\n", + "4 1 18 2019-01-05 893.8 82.0\n", + ".. ... ... ... ... ...\n", + "85 1 18 2019-03-27 1308.0 120.0\n", + "86 1 18 2019-03-28 1079.1 99.0\n", + "87 1 18 2019-03-29 1002.8 92.0\n", + "88 1 18 2019-03-30 741.2 68.0\n", + "89 1 18 2019-03-31 741.2 68.0\n", + "\n", + "[90 rows x 5 columns]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "my_data = retrieve_data(product_code=18, store_code=1, date=['2019-01-01', '2019-03-31'])\n", + "my_data" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/03-gd-Case2-datachallenge.ipynb b/03-gd-Case2-datachallenge.ipynb new file mode 100644 index 0000000..4a506e2 --- /dev/null +++ b/03-gd-Case2-datachallenge.ipynb @@ -0,0 +1,555 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5ade6e06", + "metadata": {}, + "source": [ + "### Case 2\n", + "\n", + "#### 2) A brand new client sent you two ready-to-go queries. Those are listed below:\n", + "\n", + "Query 1:\n", + "\n", + "```\n", + "SELECT\n", + " STORE_CODE,\n", + " STORE_NAME,\n", + " START_DATE,\n", + " END_DATE,\n", + " BUSINESS_NAME,\n", + " BUSINESS_CODE\n", + "FROM data_store_cad\n", + "```\n", + "Query 2:\n", + "\n", + "```\n", + "SELECT\n", + " STORE_CODE,\n", + " DATE,\n", + " SALES_VALUE,\n", + " SALES_QTY\n", + "FROM data_store_sales\n", + "WHERE DATE BETWEEN '2019-01-01' AND '2019-12-31'\n", + "```\n", + "In addition, he gave you this set of instructions:\n", + "\n", + "- Use the queries as they are (do not modify them or create a new one);\n", + "\n", + "- Please filter the period between this given range: \n", + " - ['2019-10-01','2019-12-31']\n", + "\n", + "\n", + "
\n", + " We are in need of this visualization (click here to see it)! Please, create it with Python\n", + " \n", + "| Loja | Categoria | TM | \n", + "|----------------|-------------|-------| \n", + "| Bahia | Atacado | 15.39 | \n", + "| Bangkok | Posto | 13.67 | \n", + "| Belem | Proximidade | 15.37 | \n", + "| Berlin | Proximidade | 15.39 | \n", + "| Buenos Aires | Atacado | 15.39 | \n", + "| Chicago | Varejo | 15.53 | \n", + "| Dubai | Atacado | 15.39 | \n", + "| Hong Kong | Farma | 26.35 | \n", + "| London | Farma | 28.99 | \n", + "| Madri | Farma | 29.03 | \n", + "| Miami | Posto | 13.67 | \n", + "| New York | Proximidade | 15.39 | \n", + "| Paris | Proximidade | 15.39 | \n", + "| Rio de Janeiro | Farma | 29.59 | \n", + "| Roma | Varejo | 15.39 | \n", + "| Salvador | Atacado | 15.39 | \n", + "| Sao Paulo | Varejo | 15.39 | \n", + "| Sidney | Posto | 13.67 | \n", + "| Tokio | Varejo | 15.39 | \n", + "| Vancouver | Posto | 13.67 | \n", + " \n", + "
" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3e772ed3", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from sqlalchemy import create_engine" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "6959a8b8", + "metadata": {}, + "outputs": [], + "source": [ + "def retrieve_data():\n", + " # 1. Credenciais de acesso\n", + " usuario = 'looqbox-challenge'\n", + " senha = 'looq-challenge'\n", + " host = '35.199.115.174'\n", + " porta = '3306' # porta padrão do MySQL\n", + " nome_do_banco = 'looqbox-challenge'\n", + "\n", + " # 2. String de conexão (URL de conexão)\n", + " # Formato: mysql+pymysql://usuario:senha@host:porta/nome_do_banco\n", + " string_conexao = f'mysql+pymysql://{usuario}:{senha}@{host}:{porta}/{nome_do_banco}'\n", + "\n", + " # 3. Motor de conexão (engine)\n", + " engine = create_engine(string_conexao)\n", + "\n", + " # 4. Consulta SQL\n", + " query1 = \"\"\"SELECT\n", + " STORE_CODE,\n", + " STORE_NAME,\n", + " START_DATE,\n", + " END_DATE,\n", + " BUSINESS_NAME,\n", + " BUSINESS_CODE\n", + " FROM `looqbox-challenge`.`data_store_cad`;\n", + " \"\"\"\n", + " \n", + " query2 = \"\"\"SELECT\n", + " STORE_CODE,\n", + " DATE,\n", + " SALES_VALUE,\n", + " SALES_QTY\n", + " FROM `looqbox-challenge`.`data_store_sales`\n", + " WHERE DATE BETWEEN '2019-01-01' AND '2019-12-31'\n", + " \"\"\"\n", + "\n", + " df1 = pd.read_sql(query1, con=engine)\n", + " df2 = pd.read_sql(query2, con=engine)\n", + "\n", + " # 6. retorna o DataFrame\n", + " return df1, df2\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "361ee7b7", + "metadata": {}, + "outputs": [], + "source": [ + "df1, df2 = retrieve_data()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "387b82c1", + "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", + "
STORE_CODESTORE_NAMESTART_DATEEND_DATEBUSINESS_NAMEBUSINESS_CODE
01Sao Paulo2006-10-01Varejo1
12Chicago2007-10-01Varejo1
23Roma2008-10-01Varejo1
34Tokio2009-10-01Varejo1
45Paris2019-01-01Proximidade2
\n", + "
" + ], + "text/plain": [ + " STORE_CODE STORE_NAME START_DATE END_DATE BUSINESS_NAME BUSINESS_CODE\n", + "0 1 Sao Paulo 2006-10-01 Varejo 1\n", + "1 2 Chicago 2007-10-01 Varejo 1\n", + "2 3 Roma 2008-10-01 Varejo 1\n", + "3 4 Tokio 2009-10-01 Varejo 1\n", + "4 5 Paris 2019-01-01 Proximidade 2" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df1.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "7ffc99f2", + "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", + "
STORE_CODEDATESALES_VALUESALES_QTY
012019-01-01196623.2212838
1102019-01-01126795.444933
2112019-01-01223937.007724
3122019-01-01200251.807043
4132019-01-01196623.2212838
\n", + "
" + ], + "text/plain": [ + " STORE_CODE DATE SALES_VALUE SALES_QTY\n", + "0 1 2019-01-01 196623.22 12838\n", + "1 10 2019-01-01 126795.44 4933\n", + "2 11 2019-01-01 223937.00 7724\n", + "3 12 2019-01-01 200251.80 7043\n", + "4 13 2019-01-01 196623.22 12838" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df2.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "90ffb22b", + "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", + "
LojaCategoriaTM
0BahiaAtacado15.39
1BangkokPosto13.67
2BelemProximidade15.37
3BerlinProximidade15.39
4Buenos AiresAtacado15.39
5ChicagoVarejo15.53
6DubaiAtacado15.39
7Hong KongFarma26.33
8LondonFarma28.96
9MadriFarma29.00
10MiamiPosto13.67
11New YorkProximidade15.39
12ParisProximidade15.39
13Rio de JaneiroFarma29.56
14RomaVarejo15.39
15SalvadorAtacado15.39
16Sao PauloVarejo15.39
17SidneyPosto13.67
18TokioVarejo15.39
19VancouverPosto13.67
\n", + "
" + ], + "text/plain": [ + " Loja Categoria TM\n", + "0 Bahia Atacado 15.39\n", + "1 Bangkok Posto 13.67\n", + "2 Belem Proximidade 15.37\n", + "3 Berlin Proximidade 15.39\n", + "4 Buenos Aires Atacado 15.39\n", + "5 Chicago Varejo 15.53\n", + "6 Dubai Atacado 15.39\n", + "7 Hong Kong Farma 26.33\n", + "8 London Farma 28.96\n", + "9 Madri Farma 29.00\n", + "10 Miami Posto 13.67\n", + "11 New York Proximidade 15.39\n", + "12 Paris Proximidade 15.39\n", + "13 Rio de Janeiro Farma 29.56\n", + "14 Roma Varejo 15.39\n", + "15 Salvador Atacado 15.39\n", + "16 Sao Paulo Varejo 15.39\n", + "17 Sidney Posto 13.67\n", + "18 Tokio Varejo 15.39\n", + "19 Vancouver Posto 13.67" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.merge(df2, df1, on='STORE_CODE', how='left')\n", + "df = df[['STORE_NAME','BUSINESS_NAME','SALES_VALUE','SALES_QTY']]\n", + "df = df.groupby(['STORE_NAME','BUSINESS_NAME']).agg({'SALES_VALUE':'sum','SALES_QTY':'sum'}).reset_index()\n", + "df['TM'] = df['SALES_VALUE'] / df['SALES_QTY']\n", + "df =df.drop(columns=['SALES_VALUE','SALES_QTY'])\n", + "df.rename(columns={'STORE_NAME':'Loja','BUSINESS_NAME':'Categoria'}, inplace=True)\n", + "df['TM'] = df['TM'].round(2)\n", + "df" + ] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/04-gd-Case3-datachallenge.ipynb b/04-gd-Case3-datachallenge.ipynb new file mode 100644 index 0000000..e32912f --- /dev/null +++ b/04-gd-Case3-datachallenge.ipynb @@ -0,0 +1,629 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "5ade6e06", + "metadata": {}, + "source": [ + "### Case 3\n", + "\n", + "#### 3) Building your own visualization\n", + "\n", + "Create at least one chart using the table **IMDB_movies**. The code must be in Python, and you are free to use any libraries, data in the table and graphic format. Explain why you chose the visualization (or visualizations) you are submitting." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "3e772ed3", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from sqlalchemy import create_engine\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6959a8b8", + "metadata": {}, + "outputs": [], + "source": [ + "def retrieve_data():\n", + " # 1. Credenciais de acesso\n", + " usuario = 'looqbox-challenge'\n", + " senha = 'looq-challenge'\n", + " host = '35.199.115.174'\n", + " porta = '3306' # porta padrão do MySQL\n", + " nome_do_banco = 'looqbox-challenge'\n", + "\n", + " # 2. String de conexão (URL de conexão)\n", + " # Formato: mysql+pymysql://usuario:senha@host:porta/nome_do_banco\n", + " string_conexao = f'mysql+pymysql://{usuario}:{senha}@{host}:{porta}/{nome_do_banco}'\n", + "\n", + " # 3. Motor de conexão (engine)\n", + " engine = create_engine(string_conexao)\n", + "\n", + " # 4. Consulta SQL\n", + " query = \"SELECT * FROM `looqbox-challenge`.`IMDB_movies`\"\n", + " df = pd.read_sql(query, con=engine)\n", + "\n", + " # 6. retorna o DataFrame\n", + " return df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "361ee7b7", + "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", + "
IdTitleGenreDirectorActorsYearRuntimeRatingVotesRevenueMillionsMetascore
01Guardians of the GalaxyAction,Adventure,Sci-FiJames GunnChris Pratt, Vin Diesel, Bradley Cooper, Zoe S...20141218.0757074333.076.0
12PrometheusAdventure,Mystery,Sci-FiRidley ScottNoomi Rapace, Logan Marshall-Green, Michael Fa...20121247.0485820126.065.0
23SplitHorror,ThrillerM. Night ShyamalanJames McAvoy, Anya Taylor-Joy, Haley Lu Richar...20161177.0157606138.062.0
34SingAnimation,Comedy,FamilyChristophe LourdeletMatthew McConaughey,Reese Witherspoon, Seth Ma...20161087.060545270.059.0
45Suicide SquadAction,Adventure,FantasyDavid AyerWill Smith, Jared Leto, Margot Robbie, Viola D...20161236.0393727325.040.0
\n", + "
" + ], + "text/plain": [ + " Id Title Genre \\\n", + "0 1 Guardians of the Galaxy Action,Adventure,Sci-Fi \n", + "1 2 Prometheus Adventure,Mystery,Sci-Fi \n", + "2 3 Split Horror,Thriller \n", + "3 4 Sing Animation,Comedy,Family \n", + "4 5 Suicide Squad Action,Adventure,Fantasy \n", + "\n", + " Director Actors \\\n", + "0 James Gunn Chris Pratt, Vin Diesel, Bradley Cooper, Zoe S... \n", + "1 Ridley Scott Noomi Rapace, Logan Marshall-Green, Michael Fa... \n", + "2 M. Night Shyamalan James McAvoy, Anya Taylor-Joy, Haley Lu Richar... \n", + "3 Christophe Lourdelet Matthew McConaughey,Reese Witherspoon, Seth Ma... \n", + "4 David Ayer Will Smith, Jared Leto, Margot Robbie, Viola D... \n", + "\n", + " Year Runtime Rating Votes RevenueMillions Metascore \n", + "0 2014 121 8.0 757074 333.0 76.0 \n", + "1 2012 124 7.0 485820 126.0 65.0 \n", + "2 2016 117 7.0 157606 138.0 62.0 \n", + "3 2016 108 7.0 60545 270.0 59.0 \n", + "4 2016 123 6.0 393727 325.0 40.0 " + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = retrieve_data()\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "cf756318", + "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", + "
IdTitleGenreDirectorActorsYearRuntimeRatingVotesRevenueMillionsMetascore
995996Secret in Their EyesCrime,Drama,MysteryBilly RayChiwetel Ejiofor, Nicole Kidman, Julia Roberts...20151116.027585NaN45.0
996997Hostel: Part IIHorrorEli RothLauren German, Heather Matarazzo, Bijou Philli...2007946.07315218.046.0
997998Step Up 2: The StreetsDrama,Music,RomanceJon M. ChuRobert Hoffman, Briana Evigan, Cassie Ventura,...2008986.07069958.050.0
998999Search PartyAdventure,ComedyScot ArmstrongAdam Pally, T.J. Miller, Thomas Middleditch,Sh...2014936.04881NaN22.0
9991000Nine LivesComedy,Family,FantasyBarry SonnenfeldKevin Spacey, Jennifer Garner, Robbie Amell,Ch...2016875.01243520.011.0
\n", + "
" + ], + "text/plain": [ + " Id Title Genre Director \\\n", + "995 996 Secret in Their Eyes Crime,Drama,Mystery Billy Ray \n", + "996 997 Hostel: Part II Horror Eli Roth \n", + "997 998 Step Up 2: The Streets Drama,Music,Romance Jon M. Chu \n", + "998 999 Search Party Adventure,Comedy Scot Armstrong \n", + "999 1000 Nine Lives Comedy,Family,Fantasy Barry Sonnenfeld \n", + "\n", + " Actors Year Runtime Rating \\\n", + "995 Chiwetel Ejiofor, Nicole Kidman, Julia Roberts... 2015 111 6.0 \n", + "996 Lauren German, Heather Matarazzo, Bijou Philli... 2007 94 6.0 \n", + "997 Robert Hoffman, Briana Evigan, Cassie Ventura,... 2008 98 6.0 \n", + "998 Adam Pally, T.J. Miller, Thomas Middleditch,Sh... 2014 93 6.0 \n", + "999 Kevin Spacey, Jennifer Garner, Robbie Amell,Ch... 2016 87 5.0 \n", + "\n", + " Votes RevenueMillions Metascore \n", + "995 27585 NaN 45.0 \n", + "996 73152 18.0 46.0 \n", + "997 70699 58.0 50.0 \n", + "998 4881 NaN 22.0 \n", + "999 12435 20.0 11.0 " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.tail()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "13776ca6", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "RangeIndex: 1000 entries, 0 to 999\n", + "Data columns (total 11 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Id 1000 non-null int64 \n", + " 1 Title 1000 non-null object \n", + " 2 Genre 1000 non-null object \n", + " 3 Director 1000 non-null object \n", + " 4 Actors 1000 non-null object \n", + " 5 Year 1000 non-null int64 \n", + " 6 Runtime 1000 non-null int64 \n", + " 7 Rating 1000 non-null float64\n", + " 8 Votes 1000 non-null int64 \n", + " 9 RevenueMillions 872 non-null float64\n", + " 10 Metascore 936 non-null float64\n", + "dtypes: float64(3), int64(4), object(4)\n", + "memory usage: 86.1+ KB\n" + ] + } + ], + "source": [ + "df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "f7bd369c", + "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", + "
YearRatingId
020067.27272744
120077.20754753
220086.84615452
320097.05882451
420106.88333360
520116.88888963
620126.93750064
720136.85714391
820146.88775598
920156.629921127
1020166.474747297
\n", + "
" + ], + "text/plain": [ + " Year Rating Id\n", + "0 2006 7.272727 44\n", + "1 2007 7.207547 53\n", + "2 2008 6.846154 52\n", + "3 2009 7.058824 51\n", + "4 2010 6.883333 60\n", + "5 2011 6.888889 63\n", + "6 2012 6.937500 64\n", + "7 2013 6.857143 91\n", + "8 2014 6.887755 98\n", + "9 2015 6.629921 127\n", + "10 2016 6.474747 297" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Média de Avaliação dos filmes por ano de lançamento\n", + "df = df.dropna(subset=['Rating', 'Year']) # Remove linhas com valores nulos em 'Rating' ou 'Year'\n", + "df_years = df.groupby('Year').agg({'Rating': 'mean','Id': 'count' }).reset_index()\n", + "df_years" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "ace0f01b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "\n", + "\n", + "# tema do seaborn\n", + "sns.set_theme(style=\"white\")\n", + "fig, ax1 = plt.subplots(figsize=(12, 6))\n", + "\n", + "# Certifique-se de que os dados estão ordenados por ano\n", + "df_years = df_years.sort_values('Year')\n", + "\n", + "# --- GRÁFICO 1: Quantidade de Filmes (Barras) ---\n", + "ax1.bar(df_years['Year'], df_years['Id'], color='royalblue', alpha=0.6, width=0.6, label='Quantidade de Filmes')\n", + "ax1.set_xlabel('Year', fontsize=12)\n", + "ax1.set_ylabel('Quantidade de Filmes', color='b', fontsize=12)\n", + "ax1.tick_params(axis='y', labelcolor='b')\n", + "\n", + "plt.xticks(df_years['Year'], rotation=45)\n", + "\n", + "# --- GRÁFICO 2: Média de Avaliação (Linha no Eixo secundário) ---\n", + "ax2 = ax1.twinx() # Cria o segundo eixo Y compartilhando o mesmo eixo X numérico\n", + "sns.lineplot(data=df_years, x='Year', y='Rating', ax=ax2, color='red', marker='o', linewidth=2)\n", + "ax2.set_ylabel('Média de Avaliação', color='r', fontsize=12)\n", + "ax2.tick_params(axis='y', labelcolor='r')\n", + "\n", + "# Remove as linhas de grade de ambos para não sobrepor o visual\n", + "ax1.grid(False)\n", + "ax2.grid(False)\n", + "\n", + "#ajusta o eixo da avaliação de 0 a 10\n", + "ax2.set_ylim(6.4, 7.5)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "43da8f75", + "metadata": {}, + "source": [ + "Nesse gráifico podemos verificar a evolução da quantidade de filmes lançados anualmente, porém tempos um piora na qualidade dos filmes que pode ser verificada pela linha vermelha no gráfico. A queda nas avaliações entre 2006 e 2016 foi de 7.3 para 6.5, o que representa uma queda percentual de 12%." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "397e10fc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.12324492979719182" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(df_years.Rating.max()-df_years.Rating.min())/df_years.Rating.min()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f7474aae", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "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.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/datachallenge.pdf b/datachallenge.pdf new file mode 100644 index 0000000..5b0a899 Binary files /dev/null and b/datachallenge.pdf differ