Skip to content
Open
Show file tree
Hide file tree
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
4 changes: 4 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"python-envs.defaultEnvManager": "ms-python.python:conda",
"python-envs.defaultPackageManager": "ms-python.python:conda"
}
99 changes: 99 additions & 0 deletions code/case1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# %%
import pandas as pd
import mysql.connector
from mysql.connector import Error
from datetime import datetime
# %%
#função para receber a entrada via teclado do codigo do produto e fazer com que ele seja inteiro
def insert_prod_cod():
try:
prod_code = int(input("Digite o codigo do produto que voce irá procurar (apenas numero sem virgulas ou caracteres):"))
except ValueError as err:
print("Você precisa inserir um numero inteiro ")
else:
if(prod_code > 0):
return(prod_code)
print("Não Existe codigo de produto negativo")
return(insert_prod_cod())


# %%

#função para receber codigo da loja via teclado e garantir que seja inteiro
def insert_store_cod():
try:
store_code = int(input("Digite o codigo do Loja que voce irá procurar (apenas numero sem virgulas ou caracteres):"))
except ValueError as err:
print("Você precisa inserir um numero inteiro ")
else:
if(store_code > 0):
return(store_code)
print("Não Existe codigo de produto negativo")
return(insert_store_cod())

# %%

#função para receber as datas e garantir que estejam no padrao, estejam dentro do range e tambem que
#os valores de inicio seja menor que a de fim
def insert_date():
try:
date_init = datetime.strptime(input("Digite a data Inicial de pesquisa (YYYY-MM-DD) a data precisa ser entre '2019-01-01', '2019-01-31':"), "%Y-%m-%d")
date_end = datetime.strptime(input("Digite a data Final de pesquisa (YYYY-MM-DD) a data precisa ser entre '2019-01-01', '2019-01-31':"), "%Y-%m-%d")
date_range_init = datetime.strptime("2019-01-01","%Y-%m-%d")
date_range_end = datetime.strptime("2019-12-31","%Y-%m-%d")

except ValueError as err:
print("A data esta em formato errado ")
else:
if(date_init >= date_end):
print("Data inicial maior que data final!")
else:
if(date_range_init <= date_init <= date_range_end and date_range_init <= date_end <= date_range_end ):
return([date_init, date_end])
print(" A data nao esta entre os periodos de '2019-01-01', '2019-12-31'")
return(insert_date())
# %%
def connect():
try:
connection = mysql.connector.connect(
host="35.199.115.174",
user="looqbox-challenge",
password="looq-challenge",
database="looqbox-challenge"
)
return connection

except Error as e:
return print(f"Erro ao conectar com o banco: {e}")

# %%

def sql_table(prod_code, store_code, date):
connection = connect()
if connection.is_connected():
print("Conectado ao banco")
cursor = connection.cursor()
cursor.execute("SELECT * " \
"FROM data_product_sales ;")
colunas = [coluna[0] for coluna in cursor.description]
dados = cursor.fetchall()
data_products_sale = pd.DataFrame(dados, columns=colunas)

#Conversão do tipo das colunas para fazer os filtros
data_products_sale['DATE'] = pd.to_datetime(data_products_sale['DATE'])
data_products_sale['STORE_CODE'] = data_products_sale['STORE_CODE'].astype(int)
data_products_sale['PRODUCT_CODE'] = data_products_sale['PRODUCT_CODE'].astype(int)

#aplicação de filtros nos DFs baseados na entrada
data_products_sale = data_products_sale[data_products_sale['DATE'].between(*date)]
data_products_sale = data_products_sale[data_products_sale['STORE_CODE'] == store_code]
data_products_sale = data_products_sale[data_products_sale['PRODUCT_CODE'] == prod_code]
cursor.close()
return(data_products_sale)
# %%
df1 = sql_table(insert_prod_cod(), insert_store_cod(), insert_date())
# %%
print(df1)


# %%
52 changes: 52 additions & 0 deletions code/case2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# %%
import pandas as pd
import mysql.connector
from mysql.connector import Error
from datetime import datetime
# %%

def connect():
try:
connection = mysql.connector.connect(
host="35.199.115.174",
user="looqbox-challenge",
password="looq-challenge",
database="looqbox-challenge"
)
return connection

except Error as e:
return print(f"Erro ao conectar com o banco: {e}")
# %%
def sales_bytime():
connection = connect()
if connection.is_connected():
print("Conectado ao banco")
cursor = connection.cursor()
cursor.execute("SELECT STORE_CODE, STORE_NAME, START_DATE, END_DATE, BUSINESS_NAME, BUSINESS_CODE " \
"FROM data_store_cad;")
colunas = [coluna[0] for coluna in cursor.description]
dados = cursor.fetchall()
df_data_store = pd.DataFrame(dados, columns=colunas)

cursor.execute("SELECT STORE_CODE, DATE, SALES_VALUE, SALES_QTY " \
"FROM data_store_sales WHERE DATE BETWEEN '2019-01-01' AND '2019-12-31';")
colunas = [coluna[0] for coluna in cursor.description]
dados = cursor.fetchall()
data_store_sales = pd.DataFrame(dados, columns=colunas)
cursor.close()

#junção das tabelas com informações de vendas por loja e nome da loja para criar a tabela agrupada
df_sales = df_data_store.merge(data_store_sales, on='STORE_CODE')
#conversão de tipo das colunas
df_sales['DATE'] = pd.to_datetime(df_sales['DATE'])
#Filtros
df_sales = df_sales[df_sales['DATE'].between('2019-10-01','2019-12-31')]
#Agrupamento e soma dos valores baseados no nome da loja e no nome do negocio
df_sales = df_sales[['STORE_NAME','BUSINESS_NAME','SALES_VALUE']].groupby(["STORE_NAME","BUSINESS_NAME"]).sum().sort_values('STORE_NAME')
return(df_sales)

# %%

print(sales_bytime())
# %%
69 changes: 69 additions & 0 deletions code/case3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# %%
import pandas as pd
import mysql.connector
from mysql.connector import Error
from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np
# %%

def connect():
try:
connection = mysql.connector.connect(
host="35.199.115.174",
user="looqbox-challenge",
password="looq-challenge",
database="looqbox-challenge"
)
return connection

except Error as e:
return print(f"Erro ao conectar com o banco: {e}")
# %%

connection = connect()
if connection.is_connected():
print("Conectado ao banco")
cursor = connection.cursor()
cursor.execute("SELECT * FROM IMDB_movies;")
colunas = [coluna[0] for coluna in cursor.description]
dados = cursor.fetchall()
df1 = pd.DataFrame(dados, columns=colunas)
cursor.close()

# %%

#Fazendo Grafico de quantidade de filmes por ano
df_movies_year = df1.groupby("Year").size().sort_index()
plt.bar(df_movies_year.index, df_movies_year.values )
plt.title ("Número de Filmes por ano")
plt.xlabel("Ano")
plt.ylabel("Num de Filmes")
plt.show()
# %%

#Fazendo grafico de quantidade de filmes por rating com range

#criação de uma coluna separando os ranges por grupos de 0 ate 4, 5 a 8 e 9 a 10
intervalos = [0, 4.9, 8.9, 10.1]
nomes_faixas = ["0 a 4", "5 a 8", "9 e 10 (Ótimo)"]
df1["faixa_rating"] = pd.cut(df1["Rating"], bins=intervalos, labels=nomes_faixas, right=False)

movies_rating = df1.groupby("faixa_rating").size().sort_index()

plt.bar(movies_rating.index, movies_rating.values )
plt.title ("Número de Filmes por faixa de Rating")
plt.xlabel("Faixa de Rating")
plt.ylabel("Num de Filmes")
plt.show()
# %%

##Fazendo grafico de dispersão para verificar o retorno do filme baseado no rating
valores_y = np.arange(0, int(df1['RevenueMillions'].max()) + 100, 100)
plt.yticks(valores_y)
plt.grid(axis="y", linestyle="--", alpha=0.7, color="gray")
plt.scatter(df1['Rating'], df1['RevenueMillions'])
plt.title ("Relação de Rating e Bilheteria")
plt.xlabel("Rating")
plt.ylabel("Retorno Bilheteria")
plt.show()
93 changes: 93 additions & 0 deletions code/sql_queries.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
# %%

import pandas as pd
import mysql.connector
from mysql.connector import Error
from datetime import datetime

# %%
#Conexão com banco de dados
def connect():
try:
connection = mysql.connector.connect(
host="35.199.115.174",
user="looqbox-challenge",
password="looq-challenge",
database="looqbox-challenge"
)
return connection

except Error as e:
return print(f"Erro ao conectar com o banco: {e}")

# %%

# Desafio 1
def top_10_expensive():
connection = connect()
if connection.is_connected():
print("Conectado ao banco")
cursor = connection.cursor()
#Query para pegar os 10 produtos mais caros
cursor.execute("SELECT PRODUCT_NAME, PRODUCT_VAL " \
"FROM data_product ORDER BY PRODUCT_VAL DESC LIMIT 10;")
colunas = [coluna[0] for coluna in cursor.description]
dados = cursor.fetchall()
df_produtos_mais_caros = pd.DataFrame(dados, columns=colunas)
print(df_produtos_mais_caros)
cursor.close()

if 'connection' in locals() and connection.is_connected():
connection.close()
print("\nConexão encerrada!")
# %%
top_10_expensive()

# %%
# Desafio 2
def sections_departaments():
connection = connect()
if connection.is_connected():
print("Conectado ao banco")
cursor = connection.cursor()
#Query para mostrar quais seções tem nos departamentos de BEBIDAS E PADARIA
cursor.execute("SELECT DISTINCT SECTION_NAME,DEP_NAME FROM data_product " \
"WHERE DEP_NAME IN ('BEBIDAS','PADARIA') ORDER BY DEP_NAME;")
colunas = [coluna[0] for coluna in cursor.description]
dados = cursor.fetchall()
df_section_name = pd.DataFrame(dados, columns=colunas)
print(df_section_name)
cursor.close()

if 'connection' in locals() and connection.is_connected():
connection.close()
print("\nConexão encerrada!")


# %%
sections_departaments()
#%%
#Desafio 3
def total_sales_BA_quarter():
connection = connect()
if connection.is_connected():
print("Conectado ao banco")
cursor = connection.cursor()
#Query para mostrar o total de vendas por area de negocio no primeiro quarter de 2019
cursor.execute("SELECT a.BUSINESS_NAME, SUM(b.SALES_VALUE) AS total_sales, SUM(b.SALES_QTY) AS total_qtd " \
"FROM data_store_cad AS a " \
"JOIN data_store_sales AS b " \
"ON a.STORE_CODE = b.STORE_CODE " \
"WHERE b.DATE BETWEEN '2019-01-31' AND '2019-04-30' " \
"GROUP BY a.BUSINESS_NAME " \
"ORDER BY total_sales DESC;")
colunas = [coluna[0] for coluna in cursor.description]
dados = cursor.fetchall()
df_total_vendas = pd.DataFrame(dados, columns=colunas)
print(df_total_vendas)
cursor.close()

if 'connection' in locals() and connection.is_connected():
connection.close()
print("\nConexão encerrada!")
total_sales_BA_quarter()