Baixe o app para aproveitar ainda mais
Prévia do material em texto
QUESTÕES DISCURSIVAS Questão 1 (1,0 ponto) Seja a BNF abaixo: <list> ::= <element><list> | <element> <element> ::= <letter><digit> <letter> ::= A | B <digit> ::= 1|2 Implemente um programa em Python com a utilização da biblioteca re (Regex), ou nltk que represente a BNF. Além do programa, mostre a saída do programa para as seguintes entradas: a) A1 b) A2B1 Desenvolvimento: import nltk from nltk import CFG grammar = CFG.fromstring(""" list -> element list| element element -> letter digit letter -> "A" | "B" digit -> "1" | "2" """) tokens = str(input()) tokens = list(tokens) cp = nltk.ChartParser(grammar) try: for tree in cp.parse(tokens): print(tree) except: print('Não reconhecido pela BNF!') Letra a) Entrada A1: (list (element (letter A) (digit 1))) Letra b) Entrada A2B1: (list (element (letter A) (digit 2)) (list (element (letter B) (digit 1)))) Questão 2 (2,0 pontos) Implemente um programa em Python que receba uma lista de nomes (use lista = [‘casa’, ‘DIA’, ‘liVRO’, ‘dado’])e utilizando as funções lambda, map e filter faça: a. Listar todas as palavras que iniciem com uma determinada letra. Por exemplo, com ‘d’, não distinguir entre maiúsculas e minúsculas, no caso vai exibir: [‘DIA’, ‘dado’] Resposta: lista = [‘casa’, ‘DIA’, ‘liVRO’, ‘dado’] list(filter((lambda x: re.match(r'^[Dd]', x)),lista)) b. Transformar as palavras de tal modo que apenas a primeira letra seja maiúscula. No caso do exemplo, vai exibir: [‘Casa’, ‘Dia’, ‘Livro’, ‘Dado’] Resposta: lista = [‘casa’, ‘DIA’, ‘liVRO’, ‘dado’] list(map(lambda x: x.capitalize(),lista)) Questão 3 (2,0 pontos) Sejam os conjuntos de dados, fornecidos pelo Ministério da Saúde do Brasil (https://covid.saude.gov.br/), que se referem aos casos acumulados de coronavírus no estado do Rio de Janeiro do período de 01/março/2020 a 26/abril/2020: casos_acumulados= [1,1,2,3,3,8,13,16,16,22,24,31,33,45,65,109,119,186,233,305,370,42 1,493,558,600,657,708,832,99,1074,1246,1394,1461,1688,1938,2216,2464,2607,2855,3231,3 410,3743,3944,4349,4543,4765,4899,5306,5552,6172,6282,6828,7111] Usando a Regressão Polinomial, desenvolva um programa em Python para estimar: a. A quantidade de casos acumulados no dia 27/abril/2020. Justifique sua resposta. (1,0 Ponto) b. Supondo que quantidade de casos acumulados do dia 25/abril/2020 tenha se perdido, faça a estimativa da mesma. Justifique sua resposta. (1,0 Ponto) Desenvolvimento: Primeiramente para gerar o modelo foi preciso corrigir os dados informados no enunciado, já que na 29° posição da lista há um valor inconsistente (99) e os dados informados começam no dia 05/03/2020 e não no dia 01/03/2020. Para corrigir a lista acessei o site do Ministério da Saúde e baixei o arquivo CSV para realizar as correções. O valor correto no dia 02/04/2020 é 992. Código: import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_absolute_error, mean_squared_error https://covid.saude.gov.br/ y=[1,1,2,3,3,8,13,16,16,22,24,31,33,45,65,109,119,186,233,305,370,421,493,558,600,657,708, 832,992,1074,1246,1394,1461,1688,1938,2216,2464,2607,2855,3231,3410,3743,3944,4349,4 543,4765,4899,5306,5552,6172,6282,6828,7111] y = np.array(y).reshape(-1,1) X = np.arange(len(y)).reshape(-1,1) forecast = np.arange(len(y) + 10).reshape(-1,1) X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.95, shuffle = False) poly = PolynomialFeatures(degree=3) X_train_poly = poly.fit_transform(X_train) X_test_poly = poly.transform(X_test) regressor = LinearRegression() regressor.fit(X_train_poly, y_train) poly_test_pred = regressor.predict(X_test_poly) poly_pred_all = regressor.predict(X_train_all) plt.figure(figsize=(12,6)) plt.plot(forecast[:-10], y, color='red') plt.plot(forecast, poly_pred_all, linestyle='dashed') plt.title('Casos de COVID-19 - Rio de Janeiro') plt.xlabel('Dias desde 01/03/2020') plt.ylabel('N° de Casos') plt.legend(['Casos Reais', 'Predições']); a) No dia 27 de abril, o número de casos acumulados previstos é de 7794, segundo o modelo. O número real para o dia 27 foi de 7944 casos, o que dá um erro de ~1,88%. Resultados do modelo: MAE (Mean Absolute Error): 204.87 RMSE (Root Mean Square Error): 14.31 b) Retirando o dia 25 de abril e tentando prever os dias 25, 26 e 27, o modelo previu 7057 casos acumulados no dia 25, 7492 no dia 26 e 7943 no dia 27, o que dá um erro ~1%, sendo uma previsão quase exata do dia 27. Resultados do modelo: MAE: 241.89 RMSE: 15.55 Outro teste realizado foi utilizar o valor previsto para o dia 25 (7057) e o valor real do dia 26 (7111) para prever o dia 27. O resultado foi de 7793, muito parecido com o primeiro exemplo na letra a), dando um erro próximo de 1,9%. Resultados do modelo: MAE: 206.55 RMSE: 14.37 Questão 4 (1,0 ponto) Seja a Backus-Naur Form (BNF): <exp> ::= <exp> + <exp> | <term> <term> ::= <term> * <term> | <factor> <factor> ::= ( <exp> ) | <digit> <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Implemente um programa em Python com a utilização da biblioteca re (Regex), ou nltk que represente a BNF. Além do programa, mostre a saída do programa para as seguintes entradas: a. 1+3*5 b. (1+3)*5 from nltk import CFG import nltk grammar2 = CFG.fromstring(""" exp -> exp "+" exp | term term -> term "*" term | factor factor -> "("exp")" | digit digit -> "0" | "1" | "2" |"3" |"4" |"5" |"6" |"7" |"8" |"9" """) tokens2 = str(input()) tokens2 = list(tokens2) cp = nltk.ChartParser(grammar2) try: for tree in cp.parse(tokens2): print(tree) except: print('Não reconhecido pela BNF!') Letra a) 1+3*5 (exp (exp (term (factor (digit 1)))) + (exp (term (term (factor (digit 3))) * (term (factor (digit 5)))))) Letra b) (1+3)*5 (exp (term (term (factor ( (exp (exp (term (factor (digit 1)))) + (exp (term (factor (digit 3))))) ))) * (term (factor (digit 5))))) Questão 5 (2,0 pontos) Uma forma de representar números é através do cálculo Lambda, como abaixo: 0 ≡ λs.(λz.z) 1 ≡ λsz.s(z) 2 ≡ λsz.s(s(z)) 3 ≡ λsz.s(s(s(z))) A função “sucessor” de um número é obtida por: S ≡ λwyx.y(wyx) Nesse sentido, aplique, DETALHADAMENTE, a função “sucessor” para obter S1. S1 ≡ ?? (λwyx.y(wyx)) (λsz.s(z)) ---- Função sucessor e função de 1; λyx.y((λsz.s(z))yx) ---- Substituindo w pela função de 1; λyx.y((λz.y(z))x) ---- Substituindo s por y; λyx.y(y(x)) ---- Substituindo z por x; Substituindo y por s e x por z: λsz.s(s(z)) ≡ 2
Compartilhar