Trabalho desenvolvido durante a disciplina de BD1
Integrantes do grupo
Gustavo Gomes Dias:01gustavodias@gmail.com
Ricardo Rocha Ribeiro:r3ifes@gmail.com
...
Este documento contém a especificação do projeto do banco de dados YourDelivery
e motivação da escolha realizada.
A empresa YourDelivery, que trabalha com entrega de encomendas, tem como meta neste projeto conseguir analizar a atual situação dela no mercado, pois com a chegada do novo Corona vírus e o lockdown imposto para suprimir seus avanços, a empresa teve um "boom" de contratações que superou e muito analizes anteriomente feitas. Por isso, o sistema desenvolvido neste projeto chegou com a missão de garantir uma analize das entregas feitas por todo o país e para que isso seja possível, a empresa necessitará das informações relativas as entregas em si, tanto dos clientes que enviam, como dos clientes que recebem e, por fim, necessitará também das informações referentes aos entregadores que trabalham para ela.
Descrever o mini-mundo! (Não deve ser maior do que 30 linhas, se necessário resumir para justar)
Entrevista com o usuário e identificação dos requisitos.(quando for o caso de sistemas com cliente real)
Descrição textual das regras de negócio definidas como um subconjunto do mundo real
cujos elementos são propriedades que desejamos incluir, processar, armazenar,
gerenciar, atualizar, e que descrevem a proposta/solução a ser desenvolvida.
Detalhando as informações necessárias para o que se desenvolva o projeto, a empresa YourDelivery necessita que sejam coletados o peso, quantidade, altura, largura, profundidade, o tipo da entrega (que no nosso caso srão datados como eletrônicos, cargas secas, cargas a granel - líquido ou sólido - e cargas frigoríficas - perecíveis ou congelados), data em que a entrega foi enviada e data em que a entrega foi recebida pelo destinatário. Dos clientes, serão armazenados CPF ou CNPJ (pois a empresa tabalha tanto com pessoas físicas, quanto com pessoas jurídicas), nome, telefone e endereço completo (estado pela sua UF, cidade, bairro, rua e número de residência). Para os entregadores serão armazenados as mesmas informações que para clientes, mas não será armazenado o CPF e sim a sua CNH. Sobre suas relações, temos que cada entrega sempre terá um e cliente remetente e um cliente destinatário, sendo que qualquer um dos dois pode ser um pessoa física ou juridica, além de ter um único entregador responsável pela carga. Agora, cada cliente pode enviar ou receber várias entregas e, por isso, pode ter várias entregas ligadas a ele mesmo. O mesmo acontece com os entregadores, que podem ser responsáveis por várias entregas.
Arquivo PDF do Protótipo Balsamiq feito para Empresa YourDelivery
a) O sistema proposto poderá fornecer quais tipos de relatórios e informaçes?
b) Crie uma lista com os 5 principais relatórios que poderão ser obtidos por meio do sistema proposto!
- Relatórios dos tipos de entregas que empresa mais trabalhou. O relatório deve conter principalmente os tipos de cada carga, o perído em que o relatório foi gerado (obtido a partir da data de envio da entrega) e também a quantidade de cada entrega.
- Relatório das regiões em que a empresa esteve mais prensente, como também os estados em que a empresa mais trabalho. Para isso o relatório deve conter o estado onde a entrega foi enviada e o estado onde a entrega foi programada para ser recebida.
- Relatório dos empregados que mais concluiram entregas e o tempo de relativo de cada entrega realizada por eles. Aqui, será necessário guardar a CNH e o nome de cada empregado, número de entregas realizadas pelos mesmos e o tempo médio gasto para que cada um concluisse as entregas (pode ser obtido pelo cálculo enovolvebdo tanto a data de envio da entrega como a data em que ela foi recebida pelo remetente, o calculo seria a data em que a entrega foi recebida menos a data em que a entrega foi enviada).
- Relatório dos tipos de clientes que mais utilizaram os serviços da empresa. Esse cálculo pode ser obtido pela contagem do número de CPF e CNPJ registrado nas entregas, sendo que para complementar os dados serão necessários os nomes, CPF/CNPJ e endereço dos clientes remetentes e destinatários.
- Relatório das região com maior e menor facilidade de entrega. Para isso devemos levar em conta a média de tempo de entrega de cada região (no caso, o tempo de entrega é dado ao subtrari a data em que a entrega foi recebida pela data em que a entrega foi enviada), sendo que devemos contar as regiões usando os estados do cliente que enviou e do cliente que recebeu. Ou seja, esse tempo médio seria o tempo de navegar de uma região até outra (ex.: tempo médio de entrega ao sair do sudeste e ir até o nordeste).
- Link da tabela no google docs
- Link arquivo csv (tá neste repo e é possível ver a tabela formatada)
- Download do arquivo xlsx
- Principais entidades
- Entrega;
- Pessoa;
- Entregador;
[Grupo01]: [Nomes dos que participaram na avaliação]
[Grupo02]: [Nomes dos que participaram na avaliação]
PESSOA: Tabela que armazena as informações das pessoas envolvidas com a entrega.
CODIGO: Campo que refere-se a identificação de cada cliente na tabela CLIENTE.
TELEFONE: Campo que guarda o número de telefone de cada um dos clientes da empresa.
NOME: Campo que guarda o nome completo dos clientes.
ENDERECO: Campo que guarda o endereço de cada um dos clientes.
PESSOA_FISICA: Tabela que armazena informações específicas de clientes que são pessoas físicas.
CPF: Campo que armazena o Cadastro de Pessoa Física de cada pessoa física que é cliente da empresa.
PESSOA_JURIDICA: Tabela que armazena informações específicas de clientes que são pessoas jurídicas.
CNPJ: Campo que armazena o Cadastro Nacional de Pessoa Jurídica de cada pessoa jurídica que é cliente da empresa.
ENTREGADOR: Tabela que guarda as informações de todos os entregadores que trabalham na empresa.
CNH: Campo que armazena a Carteira Nacional de Habilitação.
ENTREGA: Tabela que guarda informações referentes as entregas feitas pela empresa.
CODIGO: Campo que refere-se a identificação da entrega dentro da tabela ENTREGA.
TiPO_ENTREGA: Campo que guarda de que tipo é a encomenda (exp.: Eletrônico, Granel Líquido).
PESO_ENTREGA: Campo que guarda o peso (em quilograma - km) da entrega.
QTD_ENTREGA: Campo que guarda a quantidade de itens pertecente a entrega.
ALT_ENTREGA: Campo que guarda a altura da entrega (contando a embalagem e medido em centímetros - cm).
LARG_ENTREGA: Campo que guarda a largura da entrega (contando a embalagem e medido em centímetros - cm).
PROFUN_ENTREGA: Campo que guarda a profundidade da entrega (contando a embalagem e medido em centímetros - cm).
DATA_ENVIO: Campo que guarda a data em que o remetente enviou ou programou para que a entrega fosse enviada até seu destino.
DATA_RECEBIMENTO: Campo que guarda a data em que a entrega chegou no seu destinatário.
CREATE TABLE pessoa(
codigo integer NOT NULL,
nome varchar(100),
telefone varchar(16),
estado varchar(2),
cidade varchar(100),
bairro varchar(100),
rua varchar(100),
numero_end integer,
PRIMARY KEY (codigo)
);
CREATE TABLE PESSOA_FISICA(
codigo integer NOT NULL,
cpf varchar(11),
FOREIGN KEY(codigo) REFERENCES cliente(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE PESSOA_JURIDICA(
codigo integer NOT NULL,
cnpj varchar(14),
FOREIGN KEY(codigo) REFERENCES cliente(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE ENTREGADOR(
codigo integer NOT NULL,
cnh varchar(14),
FOREIGN KEY(codigo) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE ENTREGA(
codigo integer NOT NULL,
cliente_envio integer NOT NULL,
cliente_recebe integer NOT NULL,
entregador integer NOT NULL,
tipo_entrega varchar(30),
peso_entrega float,
alt_entrega float,
larg_entrega float,
profun_entrega float,
qtd_entrega integer,
data_envio date,
data_recebimento date,
PRIMARY KEY (codigo),
FOREIGN KEY (cliente_envio) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (cliente_recebe) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (entregador) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
DROP TABLE IF EXISTS pessoa CASCADE;
DROP TABLE IF EXISTS pessoa_fisica;
DROP TABLE IF EXISTS pessoa_juridica;
DROP TABLE IF EXISTS entregador;
DROP TABLE IF EXISTS entrega;
CREATE TABLE pessoa(
codigo integer NOT NULL,
nome varchar(100),
telefone varchar(16),
estado varchar(2),
cidade varchar(100),
bairro varchar(100),
rua varchar(100),
numero_end integer,
PRIMARY KEY (codigo)
);
CREATE TABLE PESSOA_FISICA(
codigo integer NOT NULL,
cpf varchar(11),
FOREIGN KEY(codigo) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE PESSOA_JURIDICA(
codigo integer NOT NULL,
cnpj varchar(14),
FOREIGN KEY(codigo) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE ENTREGADOR(
codigo integer NOT NULL,
cnh varchar(14),
FOREIGN KEY(codigo) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
CREATE TABLE ENTREGA(
codigo integer NOT NULL,
cliente_envio integer NOT NULL,
cliente_recebe integer NOT NULL,
entregador integer NOT NULL,
tipo_entrega varchar(30),
peso_entrega float,
alt_entrega float,
larg_entrega float,
profun_entrega float,
qtd_entrega integer,
data_envio date,
data_recebimento date,
PRIMARY KEY (codigo),
FOREIGN KEY (cliente_envio) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (cliente_recebe) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (entregador) REFERENCES pessoa(codigo) MATCH FULL ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO PESSOA
VALUES
(1, 'João Martins', '11911111111', 'ES', 'Serra', 'Bairro das Rosas', 'Caramelo', 11),
(2, 'Danilo Castro Ferreira', '19933355914', 'SP', 'Sumaré', 'Sensatez', 'Rua Grécia', 570),
(3, 'Martim Castro Pinto', '21950609917', 'RJ', 'Rio de Janeiro', 'Carvalho', 'Rua do Trabalho', 1367),
(4, 'Laura Melo Santos', '21986236017', 'RJ', 'São Gonçalo', 'Bairro da Paz', 'Rua Mário Viana', 1099),
(5, 'Matilde Melo Santos', '11926222140', 'SP', 'São Paulo', 'Carlos Luz', 'Praça Alfredo Issa', 1231),
(6, 'Kauê Cardoso Goncalves', '61947413132', 'DF', 'Gama', 'Cajares', 'Rua P 4', 1478),
(7, 'Bruno Dias Pereira', '11974744573', 'SP', 'Osasco', 'Lagoas', 'Rua Domingos Bastazini', 1486),
(8, 'Pastelaria Teixeira', '27967056547', 'ES', 'São Mateus', 'Bela Vista', 'Pará', 495),
(9, 'Padaria União', '98937586073', 'MA', 'São Luís', 'Industrial', 'Paraná', 7663),
(10, 'Pietra e Nina Publicidade e Propaganda ME', '11999855952', 'SP', 'Itatiba', 'Jardim América', 'Rua Augusto Eduardo Berti', 898),
(11, 'Carolina e Sônia Lavanderia ME', '64998505506', 'GO', 'Rio Verde', 'Vila Amália', 'Rua 5', 211),
(12, 'Ian e Ester Vidros ME', '61987759223', 'GO', 'Luziânia', 'Parque Estrela Dalva V', 'Rua 67', 816),
(13, 'Martin e Daniel Ferragens ME', '68985116420', 'AC', 'Rio Branco', 'Bahia Velha', 'Beco Cecília Freitas', 266),
(14, 'Apollo Artigos Gerais', '63989572172', 'TO', 'Gurupi', 'Shangri-Lá', 'Rua B 2', 989),
(18, 'Joaquim e Stefany Comercio de Bebidas Ltda', '11994625578', 'SP', 'São Paulo', 'Jabaquara', 'Rua Monsenhor Basílio Pereira', 521),
(19, 'Anthony e Alexandre Pães e Doces Ltda', '15994767868', 'SP', 'Sorocaba', 'Vila Zacarias', 'Rua Doutor Sydneu Antônio Urban', 286),
(20, 'Sua Pizza Delivery ME', '18991644147', 'GO', 'Rio Verde', 'Catelandia', 'Rua Major Rocha', 1517),
(100, 'Mateus Sousa Costa', '61998679042', 'MG', 'Betim', 'Bairro das Cruzes', 'Rua José da Conceição', 460),
(101, 'Rafael Cardoso Correia', '11947705880', 'SP', 'São Paulo', 'Bairro da Tijuca', 'Rua Pedra Lavrada', 1065),
(102, 'Gustavo Alves Rocha', '21942156639', 'RS', 'Porto Alegre', 'Bairro do Crescimento', 'Acesso E', 164),
(103, 'Thaís Ribeiro Barros', '19954754928', 'PE', 'Petrolina', 'Bairro das Palmeiras', 'Rua Deputada Ana Oliveira', 1528),
(104, 'Anna Oliveira Pinto', '19954754928', 'PR', 'Curitiba', 'Bairro da Catedral', 'Rua Astor Toniolo', 1115),
(105, 'Livia Castro Rodrigues', '8191202990', 'MG', 'Montes Claros', 'Bairro Serra City', 'Rua C', 1703),
(106, 'Sarah Correia Barros', '31985966293', 'SP', 'Jacareí', 'Bairro Joaninha', 'Rua Olímpio Catão', 507);
INSERT INTO pessoa_fisica
VALUES
(1, '75198965014'),
(2, '48972624020'),
(3, '67941668289'),
(4, '44585241787'),
(5, '43388477000'),
(6, '22244606007'),
(7, '31370743041');
INSERT INTO pessoa_juridica
VALUES
(8, '19215089000131'),
(9, '86567879000173'),
(10, '31750078000157'),
(11, '04046901000175'),
(12, '67332463000121'),
(13, '92712036000116'),
(14, '03436907000196'),
(18, '62319531000107'),
(19, '57740003000189'),
(20, '32545024000112');
INSERT INTO entregador
VALUES
(100, '03993638185'),
(101, '37376176159'),
(102, '56845638820'),
(103, '64984431466'),
(104, '82192867698'),
(105, '07055649667'),
(106, '17699458222');
INSERT INTO entrega
VALUES
(1, 2, 3, 100, 'Eletrônico', 5.7, 55.9, 89.5, 8.2, 1, '2012-06-01', '2012-07-05'),
(2, 2, 3, 100, 'Eletrônico', 0.205, 16.4, 7.58, 0.89, 1, '2013-02-01', '2013-03-06'),
(3, 1, 5, 101, 'Granel Líquido', 10.8, 24.5, 18, 27, 2,'2018-04-01', '2018-04-12'),
(4, 14, 6, 102, 'Carga Frágil', 2.4, 22.5, 9, 22.5, 3,'2020-03-14', '2020-03-30'),
(5, 8, 4, 103, 'Congelados', 3, 5, 16, 5, 10,'2020-09-25', '2020-10-10'),
(6, 8, 5, 102, 'Congelados', 3, 5, 16, 5, 30, '2020-12-01', '2020-12-14'),
(7, 14, 6, 102, 'Carga Frágil', 1, 12.9, 13.6, 23.9, 3, '2021-04-30', '2021-05-11'),
(8, 14, 20, 104, 'Carga Seca', 2.36, 90, 35, 44, 1, '2021-05-02', '2021-05-10'),
(9, 18, 11, 105, 'Granel Líquido', 2, 10, 10, 10, 5, '2021-05-13', '2021-05-19'),
(10, 19, 1, 106, 'Perecível', 0.05, 4, 9.3, 9.3, 5, '2021-06-01', '2021-07-01');
OBS: Incluir para cada tópico as instruções SQL + imagens (print da tela) mostrando os resultados.<br>
SELECT * FROM pessoa;
SELECT * FROM pessoa_fisica;
SELECT * FROM pessoa_juridca;
SELECT * FROM entregador;
SELECT * FROM entrega;
res = pd.read_sql_query("""
SELECT tipo_entrega AS "Tipo da Entrega", extract(year from data_envio)::int AS "Ano de envio", count(*) AS "Quantidade" FROM ENTREGA
GROUP BY extract(year from data_envio), tipo_entrega
ORDER BY extract(year from data_envio) DESC, count(*) DESC
""", conn)
g = sns.catplot(x="Ano de envio", y="Quantidade", hue="Tipo da Entrega", data=res, kind="point")
plt.title("Quantidade de entrega separadas por tipo realizada em cada ano", fontsize=15)
plt.show()
def views():
try:
elephante_cursor.execute("""
CREATE OR REPLACE VIEW select_so AS
SELECT p.estado AS "remetente", p1.estado AS "destinatario"
FROM ENTREGA e
INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
WHERE p.estado = 'SP' OR p.estado = 'ES' OR p.estado = 'RJ' OR p.estado = 'MG'
AND p1.estado = 'SP' OR p1.estado = 'ES' OR p1.estado = 'RJ' OR p1.estado = 'MG'
""")
elephante_cursor.execute("""
CREATE OR REPLACE VIEW select_co AS
SELECT p.estado AS "remetente", p1.estado AS "destinatario"
FROM ENTREGA e
INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
WHERE p.estado = 'GO' OR p.estado = 'MT' OR p.estado = 'MS' OR p.estado = 'DF'
AND p1.estado = 'GO' OR p1.estado = 'MT' OR p1.estado = 'MS' OR p1.estado = 'DF'
""")
elephante_cursor.execute("""
CREATE OR REPLACE VIEW select_no AS
SELECT p.estado AS "remetente", p1.estado AS "destinatario"
FROM ENTREGA e
INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
WHERE p.estado = 'AL' OR p.estado = 'BA' OR p.estado = 'CE' OR p.estado = 'MA' OR p.estado = 'PB' OR p.estado = 'PE' or p.estado = 'PI' OR p.estado = 'RN' or p.estado = 'SE'
AND p1.estado = 'AL' OR p1.estado = 'BA' OR p1.estado = 'CE' OR p1.estado = 'MA' OR p1.estado = 'PB' OR p1.estado = 'PE' or p1.estado = 'PI' OR p1.estado = 'RN' or p1.estado = 'SE'
""")
elephante_cursor.execute("""
CREATE OR REPLACE VIEW select_n AS
SELECT p.estado AS "remetente", p1.estado AS "destinatario"
FROM ENTREGA e
INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
WHERE p.estado = 'AC' OR p.estado = 'AP' OR p.estado = 'AM' OR p.estado = 'PA' OR p.estado = 'RO' OR p.estado = 'RR' or p.estado = 'TO'
AND p1.estado = 'AC' OR p1.estado = 'AP' OR p1.estado = 'AM' OR p1.estado = 'PA' OR p1.estado = 'RO' OR p1.estado = 'RR' or p1.estado = 'TO'
""")
elephante_cursor.execute("""
CREATE OR REPLACE VIEW select_s AS
SELECT p.estado AS "remetente", p1.estado AS "destinatario"
FROM ENTREGA e
INNER JOIN PESSOA p ON (p.codigo = e.cliente_envio)
INNER JOIN PESSOA p1 ON (p1.codigo = e.cliente_recebe)
WHERE p.estado = 'PR' OR p.estado = 'SC' OR p.estado = 'RS'
AND p1.estado = 'PR' OR p1.estado = 'SC' OR p1.estado = 'RS'
""")
except (Exception, psycopg2.DatabaseError) as error:
print(error)
conn.rollback()
else:
conn.commit()
views()
result = pd.read_sql_query("""
SELECT
COUNT(*) AS "Sudeste",
(SELECT COUNT(*) FROM select_no) AS "Nordeste",
(SELECT COUNT(*) FROM select_co) AS "Centro-Oeste",
(SELECT COUNT(*) FROM select_n) AS "Norte",
(SELECT COUNT(*) FROM select_s) AS "Sul"
FROM select_so
""", conn)
plt.ylabel("Qtd. de serviços prestados")
plt.xlabel("Regiões do Brasil")
total = sum([result.get("Sudeste")[0], result.get("Nordeste")[0], result.get("Centro-Oeste")[0], result.get("Norte")[0], result.get("Sul")[0]])
percentage = [
((result.get("Sudeste")[0] * 100) / total),
((result.get("Nordeste")[0] * 100) / total),
((result.get("Centro-Oeste")[0] * 100) / total),
((result.get("Norte")[0] * 100) / total),
((result.get("Sul")[0] * 100) / total)
]
ax = sns.barplot(data=result);
patches = ax.patches
for i in range(len(patches)):
x = patches[i].get_x() + patches[i].get_width()/2
y = patches[i].get_height()+.05
ax.annotate('{:.1f}%'.format(percentage[i]), (x, y), ha='center')
plt.title("Entregas realizadas por região do Brasil", fontsize=15)
# fig = g.get_figure()
# # Salvar o gráfico como imagem
# fig.savefig("./report/report2.png")
plt.show()
relatorio_3 = pd.read_sql_query("""
SELECT p.nome AS "Nome", ent.cnh AS "CNH", COUNT(*) AS "Número de entregas", AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int AS "Tempo médio de entrega (em Dias)"
FROM entrega e
INNER JOIN pessoa p ON (p.codigo = e.entregador)
INNER JOIN entregador ent ON (ent.codigo = e.entregador)
GROUP BY p.nome, ent.cnh
ORDER BY COUNT(*) DESC, AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int
""", conn)
sns.set(rc={'figure.figsize':(30,8.27)})
f, ax1=plt.subplots()
ax2 = ax1.twinx()
sns.lineplot(data=relatorio_3.get("Tempo médio de entrega (em Dias)"), marker='o', ax=ax2)
sns.barplot(x="CNH", y="Número de entregas", data=relatorio_3, ax=ax1)
plt.title("Qtd. de entregas realizadas por cada entregador e a média do tempo de entrega de cada um", fontsize=15)
relatorio_4 = pd.read_sql_query("""
SELECT COUNT(pf.*) AS "Pessoa física", COUNT(pj.*) AS "Pessoa jurídica"
FROM entrega e
LEFT OUTER JOIN pessoa_fisica pf ON (pf.codigo = e.cliente_envio)
LEFT OUTER JOIN pessoa_juridica pj ON (pj.codigo = e.cliente_envio)
""", conn)
sns.set(rc={'figure.figsize':(11,8.27)})
label = relatorio_4.keys()
ax = plt.pie(x=relatorio_4, autopct="%.f%%", pctdistance=0.5, labels=label)
plt.title("Contratações por tipo de clientes", fontsize=15)
plt.show()
relatorio_5 = pd.read_sql_query("""
SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int AS "Sudeste",
(SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int FROM select_no) AS "Nordeste",
(SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int FROM select_co) AS "Centro-Oeste",
(SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int FROM select_s) AS "Sul",
(SELECT AVG(EXTRACT(EPOCH FROM (age(data_recebimento, data_envio)))/(60*60*24))::int FROM select_n) AS "Norte"
FROM select_so
""", conn)
sns.set(rc={'figure.figsize':(12,8.27)})
plt.ylabel("Regiões do Brasil")
plt.xlabel("Média do tempo de entrega (em dias)")
sns.barplot(data=relatorio_5, orient="h")
plt.title("Tempo médio de entrega de cada região", fontsize=15)
plt.show()
https://help.github.com/articles/basic-writing-and-formatting-syntax/
https://help.github.com/articles/about-writing-and-formatting-on-github/
https://help.github.com/articles/basic-writing-and-formatting-syntax/#referencing-issues-and-pull-requests
https://help.github.com/articles/working-with-advanced-formatting/
https://guides.github.com/features/mastering-markdown/
Todos os arquivos que fazem parte do projeto (Imagens, pdfs, arquivos fonte, etc..), devem estar presentes no GIT. Os arquivos do projeto vigente não devem ser armazenados em quaisquer outras plataformas.
- Caso existam arquivos com conteúdos sigilosos, comunicar o professor que definirá em conjunto com o grupo a melhor forma de armazenamento do arquivo.
Todos os grupos deverão fazer Fork deste repositório e dar permissões administrativas ao usuário do git "profmoisesomena", para acompanhamento do trabalho.
Os usuários criados no GIT devem possuir o nome de identificação do aluno (não serão aceitos nomes como Eu123, meuprojeto, pro456, etc). Em caso de dúvida comunicar o professor.
Link para BrModelo:
http://www.sis4.com/brModelo/download.html