dança
O objetivo deste script é fazer consultas utilizando as principais ferramentas da linguagem SQL. O banco de dados utilizado foi criado utilizando o PG Admin do PostgreSQL simulando uma escola de dança.
Os códigos com a criação do banco de dados estão disponíveis neste repositório para replicação.
As consultas foram realizadas na IDE do R Studio, mas os mesmos comandos podem ser executados utilizando a biblioteca PANDAS da linguagem Python.
O objetivo é responder perguntas de negócios por meio de consultas com a linguagem SQL com apoio da linguagem R. Serão respondidas as seguintes perguntas:
1. Quantas (os) alunas (os) avançados há na escola de dança?
2. Quantas (os) alunas (os) são do sexo feminino?
3. Quais as Unidades Federativas das (os) alunas (os)?
4. Quais os nomes das (os) professoras (es)?
5. Quais estilos de forró são ensinados na escola?
6. Quais os menores e maiores valores pagos por mês na escola?
7. Qual o valor médio que os alunos pagam por mês na escola?
8. Quais alunos pagam os maiores e menores valores por mês na escola?
9. Qual o valor médio gasto por aluno por nome?
10. Quem tem maior média de gastos na escola: homens ou mulheres?
Vamos responder essas perguntas a seguir 😁.
O primeiro passo é criar o banco de dados no PG Admin do PostgreSQL. Para criar o banco basta seguir o passo a passo das imagens abaixo:
dança
Basta clicar com o botão direito em PostgreSQL
14, depois selecionar a opção Create e depois
selecionar DataBase. Por fim basta colocar o nome
dancasAP e clicar em Save.
Caso você prefira criar via código, seguem abaixo os comandos:
dança
Neste projeto eu criei 5 tabelas: alunos (descrição dos alunos da escola de danças), dancas (para descrever as danças ensinadas na escola), instrutores (base com os instrutores das danças), itensvenda (os serviços e produtos vendidos na escola) e turno (os turnos em que ocorrem as aulas).
Como o objetivo deste script é fazer consultas, não serão detalhados os comandos para a criação das tabelas, se não ia ficar muito grande. Seguem abaixo os comandos para a criação das tabelas.
dança
dança
dança
dança
Agora que já criamos as tabelas no banco de dados então vamos colocar nosso tesouro nelas: os dados.
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(1,'Bruno Amante de Brasília', 'DF', 'M', 'Avançado');
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(2,'Rock Lee', 'DF', 'M', 'Avançado');
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(3,'Adriana Guedelha', 'RO', 'F', 'Intermediário');
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(4,'Aida Dorneles', 'RN', 'F', 'Iniciante');
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(5,'Márcio da Silva Força da Juventude', 'DF', 'M', 'Avançado');
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(6,'Alberto Cezimbra', 'AM', 'M', 'Iniciante');
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(7,'Alberto Monsanto', 'RN', 'M', 'Avançado');
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(8,'Albino Canela', 'AC', 'M', 'Iniciante');
INSERT INTO alunos(idaluno, cliente,estado, sexo, status) VALUES(9,'Alceste Varanda', 'RR', 'F', 'Iniciante');
INSERT INTO alunos(idaluno, cliente, estado, sexo, status) VALUES(10,'Alcides Carvalhais', 'RO', 'M', 'Iniciante');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(1,'Classico', 'Basico', 'Avançado');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(2,'Universitário', 'Intermediario', 'Basico');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(3,'Classico', 'Basico', 'Avançado');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(4,'Classico', 'Basico', 'Avançado');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(5,'Classico', 'Basico', 'Avançado');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(6,'Classico', 'Basico', 'Avançado');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(7,'Classico', 'Basico', 'Avançado');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(8,'Classico', 'Basico', 'Basico');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(9,'Classico', 'Avancado', 'Avançado');
INSERT INTO dancas(iddance, forro, zouk, ventre) VALUES(10,'Classico', 'Basico', 'Avançado');
INSERT INTO instrutores(idinstrutor, nome) VALUES(1,'Chuck Norris');
INSERT INTO instrutores(idinstrutor, nome) VALUES(2,'Bruce Lee');
INSERT INTO instrutores(idinstrutor, nome) VALUES(3,'Karin Abdul Jabar');
INSERT INTO instrutores(idinstrutor, nome) VALUES(4,'Mestre Miag');
INSERT INTO instrutores(idinstrutor, nome) VALUES(5,'Pai Mey');
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (1, 5, 1, 100, 100, 0.00);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (2, 6, 1, 97.75, 97.75, 0.98);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (1, 7, 1, 135.00, 135.00, 1.35);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (2, 4, 1, 150.40, 150.40, 1.50);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (3, 3, 2, 2966.00, 5932.00, 0.00);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (1, 2, 1, 155.00, 155.00, 0.00);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (2, 8, 1, 7820.85, 7820.85, 0.00);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (3, 6, 2, 2955.00, 5910.00, 59.10);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (1, 1, 1, 97.75, 97.75, 0.98);
INSERT INTO itensvenda(iddance, idaluno, quantidade, valorunitario, valortotal, desconto) VALUES (1, 10, 1, 8852.00, 8852.00, 0.00);
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario) VALUES (1, 4, 3, 'Manhã');
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario) VALUES (1, 2, 2, 'Noite');
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario)VALUES (2, 3, 4, 'Noite');
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario) VALUES (1, 2, 5, 'Noite');
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario) VALUES (1, 3, 6, 'Noite');
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario) VALUES (4, 2, 7, 'Noite');
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario) VALUES (2, 1, 8, 'Noite');
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario) VALUES (1, 5, 9, 'Manhã');
INSERT INTO public.turno(iddance, idinstrutor, idaluno, horario) VALUES (1, 5, 10, 'Manhã');
O banco de dados já está criado e alimentado. Agora podemos conduzir as consultas e responder as perguntas de negócios utilizando a linguagem SQL. Vamos lá!
Neste caso vamos instalar os pacotes necessários e nos conectar ao banco de dados. Seguem abaixo os códigos e o acesso ao PostgreSQL.
# Pacotes para a analise
# 1. Instalando pacotes necessarios
# install.packages("RPostgreSQL") # instala o pacote RPostgreSQL
# install.packages("RPostgres") # Instala o pacote RPostgres
# install.packages("DBI") # Instala o pacote DBI
# 2. Carregando os pacotes necessario
library(RPostgreSQL) # acessando o banco de dados
## Warning: package 'RPostgreSQL' was built under R version 4.1.3
## Carregando pacotes exigidos: DBI
## Warning: package 'DBI' was built under R version 4.1.3
library(DBI) # organizando o banco
library(RPostgres) # pacote mais antigo caso o RPostgreSQL nao funcione
## Warning: package 'RPostgres' was built under R version 4.1.3
library(tidyr) # pacote para organizacao dos dados
## Warning: package 'tidyr' was built under R version 4.1.1
library(dplyr) # pacote para acesso e organizacao e tratamento dos dados
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(tinytex) # pacote para construir o portfolio na WEB
## Warning: package 'tinytex' was built under R version 4.1.1
# 3. Conectando o banco de dados
conexao = dbConnect(RPostgres::Postgres(), dbname = "dancaAP",
host = "localhost", port = 5432, user = "postgres",
password = "Info@1234")
# 4. Acessando o banco de dados
dancas = "SELECT *
FROM dancas
"
alunos = "SELECT *
FROM alunos
"
instrutores = "SELECT *
FROM instrutores
"
itensvenda = "SELECT *
FROM itensvenda
"
turno = "SELECT *
FROM turno
"
dancas = dbGetQuery(conexao, dancas)
alunos = dbGetQuery(conexao, alunos)
instrutores = dbGetQuery(conexao, instrutores)
itensvenda = dbGetQuery(conexao, itensvenda)
turno = dbGetQuery(conexao, turno)
# 4.1. Visualizando partes do banco dancas
class(dancas) # clalsse dos dados
## [1] "data.frame"
dim(dancas) # dimensao do banco
## [1] 10 4
head(dancas) # primeiras linhas e colunas
tail(dancas) # ultimas linhas e colunas
Agora vamos responder as perguntas de negócio.
sql2 = "SELECT COUNT(alunos)
FROM alunos WHERE status = 'Avançado'"
nivel = dbGetQuery(conexao, sql2)
nivel
Como observado, existem 5 alunos no nível avançado na escolca.
sql3 = "SELECT cliente, sexo
FROM alunos WHERE sexo = 'F'
"
feminino = dbGetQuery(conexao, sql3)
feminino
Como observado, são 4 mulheres: a Adriana Gadelha, Aida Dorneles, Alceste Varanda e Nicolle.
sql4 = "SELECT cliente, estado
FROM alunos
"
uf = dbGetQuery(conexao, sql4)
uf
sql4_1 = "SELECT cliente, estado
FROM alunos WHERE estado = 'DF'
"
df = dbGetQuery(conexao, sql4_1)
df
Como observado, existem 3 alunos do DF e todos do sexo masculino: Bruno, Rock Lee e Márcio.
sql5 = "SELECT *
FROM instrutores
"
nomes = dbGetQuery(conexao, sql5)
nomes
Os nomes dos intrutores são Chuck Norris, Bruce Lee, Karin Abdul Jabar, Mestre Miag e Pai Mey. É uma homenagem aos mestres de artes marciais e ex jogador de basquete Karin Abdul Jabar.
sql6 = "SELECT DISTINCT forro
FROM dancas
"
estilos = dbGetQuery(conexao, sql6)
estilos
No caso a escola oferta 2 estilos de forró: o clássico e universitário.
sql7 = "SELECT MAX(valorunitario)
FROM itensvenda
"
maximo_pago = dbGetQuery(conexao, sql7)
maximo_pago
sql7_1 = "SELECT MIN(valorunitario)
FROM itensvenda
"
minimo_pago = dbGetQuery(conexao, sql7_1)
minimo_pago
O valor máximo pago por mês é R$ 8.852,00 e o mínimo de R$ 97,75. Vamos descobrir quem são as (os) alunos que pagam estes valores.
sql7_2 = "SELECT alunos.cliente, itensvenda.valorunitario
FROM alunos JOIN itensvenda on alunos.idaluno = itensvenda.idaluno
ORDER BY itensvenda.valorunitario DESC
"
maximo_aluno = dbGetQuery(conexao, sql7_2)
maximo_aluno
sql7_3 = "SELECT alunos.cliente, itensvenda.valorunitario
FROM alunos JOIN itensvenda on alunos.idaluno = itensvenda.idaluno
ORDER BY itensvenda.valorunitario
"
minimo_aluno = dbGetQuery(conexao, sql7_3)
minimo_aluno
Quem paga o maior valor mensal na academia é o Alcides Carvalhais e os menores são o Alberto Cezimbra e Bruno.
sql8 = "SELECT AVG(valorunitario)
from itensvenda
"
media = dbGetQuery(conexao, sql8)
media
A média gasta por aluno foi de R$ 2.332,98. Vamos analisar a mediana e comparar com a média
mediana = median(itensvenda$valorunitario)
mediana
## [1] 152.7
A mediana foi de R$ 152,70, bem distante da média. Neste caso, há uma certa dispersão de pagamentos entre os clientes.
10. Quem tem maior média de gastos na escola: homens ou mulheres?
sql9 = "SELECT alunos.sexo, AVG(itensvenda.valorunitario)
FROM alunos JOIN itensvenda on alunos.idaluno = itensvenda.idaluno
GROUP BY alunos.sexo
"
media_sexo = dbGetQuery(conexao, sql9)
media_sexo
Os homens gastam em média R$ 2526,67 e as mulheres R$ 1558,00. Neste caso, os homens tiveram um gasto maior na escola.