Você está na página 1de 24

Sobre os Professores

Prof. Rafael Bittencourt

Rafael de Oliveira Bittencourt, natural de Salvador-BA, torcedor do Esporte Clube Vitória,


residente em Brasília desde 2015, é Auditor Federal de Controle Externo no Tribunal de
Contas da União desde dezembro de 2015.

Sou entusiasta, defensor e praticante do uso de Ciência de Dados no


âmbito do Controle Externo e no Direito, desde que respeitados os
limites éticos e legais aplicáveis.

Meu mini currículo:

Graduado em Ciência da Computação pela Universidade Federal da Bahia (2012);


MBA em Gestão de Projetos pela Unijorge (2016);
Certificado Cobit 5 Foundation;
Especialista em Ciência de Dados (Udacity e outros cursos);
Bacharelando em Direito pela UnB (previsão de término em 2024)

Histórico no mundo dos concursos antes de ingressar no TCU:

Aprovado em 1º lugar no concurso para Técnico de Tecnologia Militar - Programador


do Exército Brasileiro, onde trabalhei entre 2012 e 2014.
Aprovado em 24º lugar no concurso para Analista Judiciário - Tecnologia da
Informação no Tribunal Regional do Trabalho da 1ª Região, onde trabalhei no ano de
2015.

Minhas redes sociais:

Linkedin
Instagram

Prof. Washington Almeida


Washington Almeida, atualmente é Analista Judiciário na Justiça Federal (TRF1). Certificado
ISF ISO/IEC 27002.

Aprovado em diversos concursos para cargos de T.I entre eles: Agência Espacial Brasileira –
Analista em Ciência e Tecnologia / Ministério do Planejamento, Orçamento e Gestão –
Analista em Tecnologia da Informação / TRF 1ª Região – Analista Judiciário Especialidade
(Informática) / Dataprev – Analista de Tecnologia da Informação / Codevasf – Analista em
Desenvolvimento Regional – Informática / Ministério das Cidades – Analista de Sistemas /
TRT 3ª Região – Técnico Judiciário – T.I.

Meu mini currículo:

Doutorando e Mestre em Engenharia de Software no Centro de Estudos e Sistemas


Avançados do Recife - C.E.S.A.R.

Minhas redes sociais:

Instagram

Prof. Sergio Sierro

Sergio Sierro Leal, sou natural de Belém-PA e moro em Brasília desde 2017, onde assumi
como Técnico Judiciário no Tribunal Regional Federal da 1ª Região.

Meu mini currículo:

Graduado em Engenharia de Computação pelo IESAM (2014).


Pós-Graduado em Banco de Dados e Business Inteligence pela FACNET (2021).
Pós-Graduado em Governança e Gestão de Sistemas eTecnologias da Informação pela
UFG (2022).

Minhas redes sociais:

Linkedin
Instagram

Gabarito Extraoficial - Fluência em Dados


- Analista (Receita Federal) - Prova Tipo
Azul
Questão 56

Considere a seguinte série temporal:

{130, 140, 135, 145, 141, 148, 144, X}

Aplicando o método de previsão de médias móveis de dois pontos de dados, o valor para o
projeção do oitavo item (X) será**

(A) 148.

(B) 146.

(C) 122.

(D) 138.

(E) 141.

Gabarito extraoficial: B

Comentários:

A média móvel envolve calcular a média de um conjunto de pontos adjacentes em um


intervalo fixo e pode ser usado com uma técnica de Data Smoothing (Suavização de
Dados) e, por exemplo, para projetar dados ausentes em uma série temporal.

Para calcular a média móvel com a janela (window size) de dois pontos de dados, basta
calcular a média dos dois últimos valores na série e usar isso como previsão para o
próximo valor.

Neste caso, queremos projetar o oitavo valor X na série, logo:

(148 + 144) / 2 = 292 / 2 = 146

Questão 57

A Análise de Componentes Principais (PCA) é uma técnica de transformação de dados que


tem como objetivo encontrar as direções de maior variação nos dados, geralmente
representadas pelos chamandos componentes principais, e gerar novas representações dos
dados.

Assinale o objetivo principal dessa técnica.

(A) Discretização dos dados.

(B) Redução da dimensionalidade dos dados.

(C) Normalização dos dados.

(D) Padronização dos dados.

(E) Cálculo de distâncias entre os dados.

Gabarito extraoficial: B

Comentários:

A redução de dimensionalidade é usada para reduzir a complexidade do conjunto de


dados, mantendo a maior quantidade possível de informações. Os algoritmos comuns
incluem PCA (Principal Component Analysis), t-SNE (t-Distributed StochasticNeighbor
Embedding) e Autoencoders

Questão 58

Analise o código R a seguir:

In [ ]: lista <- function (param) {


if (param > -3) {
temp <- param + lista(param - 3)
print(temp)
} else {
return(0)
}
}

lista(15)

Analise os valores exibidos pela execução desse código, na ordem.

(A) 45, 30, 18, 9, 3, 0

(B) 63, 45, 30, 18, 9, 3

(C) 0, 0, 0, 0, 0, 0

(D) 0, 3, 9, 18, 30, 45

(E) 3, 9, 18, 30, 45, 63

Gabarito extraoficial: D

Comentários:

Questão interessante em R que cobrou o entendimento de funções recursivas


In [ ]: # activate R magic, para usar código R no notebook Python
!pip install rpy2==3.5.1 #Instalar pacote caso necessário

%load_ext rpy2.ipython
import rpy2

In [ ]: #O código abaixo define uma função em R chamada "lista", que recebe um único parâme
#A partir do valor de param passado inicialmente à função, essa função utiliza a re
#Ou seja, a condição de parada da recursividade é quando param for menor ou igual a
%%R

lista <- function (param) { #definição da função lista que recebe o parâmetro "para
cat(sprintf('Chamando a função lista, valor atual de param %d\n', param))
if (param > -3) { #testa se param é maior que -3, caso afirmativo, entra no bl
cat(sprintf('O valor atual de param %d é maior que - 3, entrei no bloco con
temp <- param + lista(param - 3) #a variável temp recebe a soma da variável
cat(sprintf('resultado da chamada recursiva à função lista(%s) retornada, v
print(temp) #o valor de param é printado
} else { #condição de parada da recursividade, quando "param" for menor ou igua
cat(sprintf('O valor atual de param %d é menor ou igual que - 3, condição
return(0)
}
}
lista(15)
Chamando a função lista, valor atual de param 15
O valor atual de param 15 é maior que - 3, entrei no bloco condicional e irei cham
ar recursivamente a lista(12)
Chamando a função lista, valor atual de param 12
O valor atual de param 12 é maior que - 3, entrei no bloco condicional e irei cham
ar recursivamente a lista(9)
Chamando a função lista, valor atual de param 9
O valor atual de param 9 é maior que - 3, entrei no bloco condicional e irei chama
r recursivamente a lista(6)
Chamando a função lista, valor atual de param 6
O valor atual de param 6 é maior que - 3, entrei no bloco condicional e irei chama
r recursivamente a lista(3)
Chamando a função lista, valor atual de param 3
O valor atual de param 3 é maior que - 3, entrei no bloco condicional e irei chama
r recursivamente a lista(0)
Chamando a função lista, valor atual de param 0
O valor atual de param 0 é maior que - 3, entrei no bloco condicional e irei chama
r recursivamente a lista(-3)
Chamando a função lista, valor atual de param -3
O valor atual de param -3 é menor ou igual que - 3, condição de paradada da recurs
ividade
resultado da chamada recursiva à função lista(-3) retornada, vou somar esse result
ado com param 0 e printar abaixo
:[1] 0
resultado da chamada recursiva à função lista(0) retornada, vou somar esse resulta
do com param 3 e printar abaixo
:[1] 3
resultado da chamada recursiva à função lista(3) retornada, vou somar esse resulta
do com param 6 e printar abaixo
:[1] 9
resultado da chamada recursiva à função lista(6) retornada, vou somar esse resulta
do com param 9 e printar abaixo
:[1] 18
resultado da chamada recursiva à função lista(9) retornada, vou somar esse resulta
do com param 12 e printar abaixo
:[1] 30
resultado da chamada recursiva à função lista(12) retornada, vou somar esse result
ado com param 15 e printar abaixo
:[1] 45

Teste de Mesa:

Chamada da função lista, passando 15 como argumento.

1. lista(15): como 15 > -3, entra no bloco if, temp = 15 + lista(12)

2. lista(12): como 12 > -3, entra no bloco if, temp = 12 + lista(9)

3. lista(9): como 9 > -3, entra no bloco if, temp = 9 + lista(6)

4. lista(6): como 6 > -3, entra no bloco if, temp = 6 + lista(3)

5. lista(3): como 3 > -3, entra no bloco if, temp = 3 + lista(0)

6. lista(0): como 0 > -3, entra no bloco if, temp = 0 + lista(-3)

7. lista(-3): como -3 <= -3, condição de parada, entra no bloco else e retorna 0

6.1 retorna ao passo 6 e faz a soma, temp = 0 + 0, print(0)


5.1 retorna ao passo 5 e faz a soma, temp = 3 + 0, print(3)

4.1 retorna ao passo 4 e faz a soma, temp = 6 + 3, print(9)

3.1 retorna ao passo 3 e faz a soma, temp = 9 + 9, print(18)

2.1 retorna ao passo 2 e faz a soma, temp = 12 + 18, print(30)

1.1 retorna ao passo 1 e faz a soma, temp = 15 + 30, print (45)

Questão 59

Suponha que um modelo de classificação binária foi treinado para distinguir e-mails de
spam de e-mails legítimos. O modelo foi testado em um conjunto de dados de teste com
200 e-mails, sendo 100 e-mails de spam e 100 e-mails legítimos.

A matriz de confusão é dada por 80 verdadeiros positivos, 85 verdadeiros negativos, 15


falsos positivos (erro tipo 1) e 20 falsos negativos (erro tipo 2).

Nessas condições, o F1-Socre do modelo deve ser aproximadamente igual a

(A) 0,74.

(B) 0,78.

(C) 0,82.

(D) 0,86.

(E) 0,90.

Gabarito extraoficial: C

Comentários:

Para o modelo de classificação binária dada pelo problema, podemos construir a matriz de
confusão abaixo, a qual mostra distribuição das classes previstas de em comparação com a
classes reais.

Classes Reais

Spam Legítimo

Previsão do Modelo 80 (VP) 15 (FP)

20 (FN) 85 (VN)

ou

Previsto Legítimo Previsto Spam

Real Legítimo 85 (TN) 15 (FP)

Real Spam 20 (FN) 80 (TP)

A matriz de confusão está organizada da seguinte forma:


Verdadeiros Positivos (VP):

O modelo previu corretamente que o e-mail é spam (80).

Falsos Positivos (FP):

O modelo previu incorretamente que o e-mail é spam, quando ele era


legítimo (15 e-mails).

Falsos Negativos (FN):

O modelo previu incorretamente que o e-mail é legítimo, quando ele era


spam (20 ).

Verdadeiros Negativos (VN):

O modelo previu corretamente que o e-mail é legítimo (85).

Vamos às métricas de avaliação de modelo de ML

Precisão: Proporção entre o número de Verdadeiros Positivos em relação à soma de


Falsos Positivos com Verdadeiros Positivos).
Refere-se à capacidade do classificador de não rotular como positiva uma
amostra da classe que é negativa,
Fórmula: Precisão = VP/(FP+VP)
No exemplo acima, nos diz qual proporção de e-mails classificados com spam
realmente são spam.
Precisão = TP / (TP + FP) = 80 / (80 + 15) = 80/95 ≈ 0,842

Revocação: Proporção entre o número de Verdadeiros Positivos em relação à soma de


Verdadeiros Positivos com Falsos Negativos. Denominado de uma métrica para
mensurar sensibilidade(sensitivity)
Refere-se à capacidade do classificador para encontrar todas as amostras
positivas para classe.
Fórmula: Revocação = VP/(VP + FN)
No exemplo acima, nos diz qual proporção de e-mails de spam foram
corretamente identificados como spam.
Revocação = TP / (TP + FN) = 80 / (80 + 20) = 80/100 = 0,8

F1-score: É a média harmônica entre a precisão e a revocação.


Usado quando queremos equilibrar a precisão e a revocação, especialmente
quando as classes estão desbalanceadas.
Fórmula: F-Measure = 2 [(Precisão Revocação) / (Precisão + Revocação)]

Logo, no exemplo acima, F1-Score será:

2 [(0,842 0,8) / (0,842 + 0,8)] ≈ 0,820

Questão 60

Analise o código Python a seguir:


In [ ]: def xxx(a, b):
while b != 0:
a, b = b, a % b
return a
print(xxx(90,15))

15

Assinale o resultado exibido na execução desse código:

(A) 1

(B) 3

(C) 6

(D) 15

(E) 75

Gabarito extraoficial: D

Comentários:

In [ ]: def xxx(a, b): #função xxx recebe dois argumentos a e b


print('A função xxx foi chamada com os argumentos a = %d e b = %d'%(a,b))
while b != 0: #laço de repetição while, com a condição de parada b ser 0
print('O valor de b é %d, é diferente de 0, entramos/continuamos no laço'%(b))
print('O valor de a é %d, o valor de do resto da divisão de a (%d) por é b(%d)
a, b = b, a % b #antes de realizar as atribuições, resolvemos as expressões à d
print("Após a operação a, b = b, a %% b, o novo valor de a é %d e o novo valor

print('O valor de b é %d, é diferente de 0, saímos do laço e vamos retornar o val


return a
print(xxx(90,15)) #chama a função xxx passando 90 e 15 como argumentos

A função xxx foi chamada com os argumentos a = 90 e b = 15


O valor de b é 15, é diferente de 0, entramos/continuamos no laço
O valor de a é 90, o valor de do resto da divisão de a (90) por é b(15) é 0
Após a operação a, b = b, a % b, o novo valor de a é 15 e o novo valor de b é 0
O valor de b é 0, é diferente de 0, saímos do laço e vamos retornar o valor de a
15

Questão 61

Os principais Sistemas Gerenciadores de Banco de Dados oferecem total suporte à


linguagem SQL. Um aspecto importante da implementação do SQL é o tratamento para
valores nulos quando esses são considerados como unknown values.

Nesse contexto, considere uma tabela T com colunas A e B, que podem conter valores
nulos. T possui 100 registros e, em 50% das linhas, há pelo menos uma coluna preenchida
com o valor NULL.

Considere a consulta a seguir:

In [ ]: SELECT * FROM T t1


WHERE t1.A = NULL or ti.B = NULL
O número máximo de linhas de resultados que seriam retornadas pela consulta é igual a:

(A) 0.

(B) 25.

(C) 50.

(D) 75.

(E) 100.

Gabarito extraoficial: A

Comentários:

A consulta tenta comparar os valores das colunas A e B usando o operador de igualdade (=)
com NULL, que sempre retornará desconhecido (unknown) em vez de verdadeiro (true) ou
falso (false). Portanto, essa consulta não retornará nenhuma linha, mesmo que haja valores
nulos nas colunas. A consulta correta seria:

In [ ]: SELECT * FROM T t1


WHERE t1.A IS NULL OR t1.B IS NULL

Questão 62

Bancos de dados NoSQL são usualmente divididos em categorias de store.

Assinale a opção que apresenta o tipo de store que privilegia velocidade, capacidade de
leitura e escrita e estruturas de dados flaxíveis, sem a necessidade de esquemas
estabelecidos previamente.

(A) Document.

(B) Key Value.

(C) Wide-Column.

(D) Graph.

(E) Full Text.

Gabarito extraoficial: B

Comentários:

Os bancos de dados Key-Value (chave-valor) são projetados para oferecer velocidade, alta
capacidade de leitura e escrita, e estruturas de dados flexíveis sem a necessidade de
esquemas pré-definidos. Armazenam os dados como pares de chave-valor, onde cada
valor é associado a uma chave exclusiva. É livre de schema (esquema), permite a inserção
de dados em tempo de execução, sem conflitar o banco e não influenciando na
disponibilidade, pois seus valores são isolados e independentes entre si. Permite uma
rápida recuperação de dados quando a chave é conhecida. Alguns exemplos de bancos de
dados Key-Value são Redis, Amazon DynamoDB e Riak.

Questão 63

Com base nos princípios de Responsible AI (IA Responsável), a seguinte características NÃO
é considerada importante para o desenvolvimento de soluções de inteligência artificial:

(A) transparência.

(B) privacidade.

(C) explicabilidade.

(D) segurança.

(E) performance.

Gabarito extraoficial: E

Comentários:

A Microsoft descreveu os seis princípios da IA responsável:

responsabilidade;
inclusão;
confiabilidade e segurança
imparcialidade;
transparência;
privacidade;
segurança.

Esses princípios seriam essenciais para a criação de IA confiável e responsável e são


guiados por duas perspectivas: ética e explicabilidade

Ética:

De uma perspectiva ética, a IA deve ser imparcial e inclusiva nas próprias


asserções, ser responsável pelas próprias decisões e não discriminar nem
atrapalhar pessoas devido a raça, deficiência ou criação.

Explicabilidade

A explicabilidade ajuda os cientistas de dados, auditores e tomadores de


decisões de negócios a garantir que os sistemas de IA possam justificar
razoavelmente as próprias decisões e como chegam às próprias
conclusões.

Isso também garante a conformidade com as políticas da empresa, os


padrões do setor e os regulamentos governamentais.

Ou seja, embora performance seja uma preocupação relevante no âmbito de


desenvolvimento de soluções de IA, ela NÃO é uma característica importante no
contexto de IA responsável, cujos princípios são guiados por duas perspectivas: Ética e
Explicabilidade.

Questão 64

Assinale a opção que melhor descreve a diferença entre os frameworks Apache Spark e
Apache Hadoop, no contexto do processamento de Big Data.

(A) O processamento de dados no Spark é mais rápido do que no Hadoop, pois ele é
baseado em memória e utiliza RDDs, enquanto o Hadoop é baseado em disco e utiliza
MapReduce.

(B) O processamento de dados no Hadoop é mais rápido do que no Spark, pois o Hadoop é
mais escalável e utiliza clusters maiores, enquanto o Spark é limitado pelo tamanho do
cluster.

(C) O Spark é mais adequado para cargas de trabalho mais pesadas, enquanto o Hadoop é
melhor para cargas de trabalho mais leve e interativas.

(D) O Spark e o Hadoop utilizam as mesmas técnicas de processamento de dados, mas o


Spark é mais adequado para casos de uso em que a latência é um fator crítico, enquanto o
Hadoop é mais adequado para casos de uso em que a capacidade de processamento em
lote é mais importante.

(E) O Hadoop é uma tecnologia mais recente que oferece melhorias, em relação ao Spark,
em termos de desempenho e velocidade de processamento.

Gabarito extraoficial: A

Comentários:

O Apache Spark é um framework de processamento de dados paralelo e tolerante a falhas,


que pode ser executado na memória, proporcionando um desempenho mais rápido em
comparação ao Apache Hadoop, que é baseado em disco. O Spark utiliza Resilient
Distributed Datasets (RDDs) como sua principal abstração de dados, que podem ser
armazenados em memória ou em disco, permitindo processamento mais eficiente e
otimizado.

RDD, ou Resilient Distributed Dataset, é uma abstração central do Apache Spark para
trabalhar com dados. É uma coleção imutável de objetos distribuídos em um cluster de
computadores, projetada para ser tolerante a falhas e fácil de processar em paralelo. Os
RDDs são a principal estrutura de dados usada no Spark para processar e transformar
informações.

Por outro lado, o Apache Hadoop é um framework que utiliza o paradigma MapReduce
para processar grandes volumes de dados em clusters distribuídos. O Hadoop armazena e
gerencia dados em seu sistema de arquivos distribuídos, o Hadoop Distributed FileSystem
(HDFS). O Hadoop pode ser mais lento em comparação ao Spark, especialmente para
cargas de trabalho iterativas ou que exigem baixa latência.

Questão 65
No contexto do desenvolvimento de chatbots baseados em prompt textuais, uma
habilidade importante é a resolução de ambiguidades, visando à compreensão completa do
texto.

Assinale a técnica de NLP adequada nesse tipo de desenvolvimento.

(A) Processamento de Voz.

(B) Reconhecimento de Imagem.

(C) Aprendizado de Máquina.

(D) Análise Semântica.

(E) Tokenização.

Gabarito extraoficial: D

Comentarios:

Análise Semântica é uma técnica em Processamento de Linguagem Natural (NLP) que se


preocupa com a compreensão do significado de palavras e frases em um texto. Ela é
aplicada em chatbots, ajudando a resolver essas ambiguidades, determinando o
significado de palavras, frases e sentenças em um determinado contexto

A análise semântica é geralmente realizada analisando o contexto de


palavras e frases em um texto, bem como suas relações com outras
palavras e frases. Essa análise pode ser feita usando várias técnicas de NLP,
como extração de relacionamentos (relationship extraction) e
reconhecimento de entidade nomeada (named entity recognition)

A utilização de análise semântica pelos chatbots ajuda a melhorar a


experiência geral do usuário, dado que possibilita uma melhor
compreensão do texto de entrada, permitindo, por conseguinte, que o
chatbot participe de conversas mais naturais e semelhantes às humanas.

Questão 66

Analise o código Python a seguir:

In [ ]: L=[]
for x in range(10,1,-2):
L.append(x)
print(L[2:4])

[6, 4]

Analise a opção que indica os valores exibidos na execução desse código.

(A) [4, 6]

(B) [6, 2]
(C) [6, 4]

(D) [8, 4]

(E) [8, 6, 4, 2]

Gabarito extraoficial: C

Comentários:

In [ ]: #Teste de mesa


L=[] #L recebe uma lista vazia
print('A variável L é inicializada como uma lista vazia')
print('Iniciando o range(10,1,-2)')
for x in range(10,1,-2): #start 10, stop 1 e step -2, ou seja, o range vai ser 10,8
print('O valor x no laço é %d, ele vai ser adicionado no final da lista L'%(x))
L.append(x) #adicionamos x na lista
print('Após adicionar %d, nossa lista é L é %s'%(x,L))
print('A sublista de L %s dada pelo slice L[2:4] é %s'%(L,L[2:4]))
print(L[2:4])#iremos printar a sublista que começa do índice 2 e vai até o 3 (stop

A variável L é inicializada como uma lista vazia


Iniciando o range(10,1,-2)
O valor x no laço é 10, ele vai ser adicionado no final da lista L
Após adicionar 10, nossa lista é L é [10]
O valor x no laço é 8, ele vai ser adicionado no final da lista L
Após adicionar 8, nossa lista é L é [10, 8]
O valor x no laço é 6, ele vai ser adicionado no final da lista L
Após adicionar 6, nossa lista é L é [10, 8, 6]
O valor x no laço é 4, ele vai ser adicionado no final da lista L
Após adicionar 4, nossa lista é L é [10, 8, 6, 4]
O valor x no laço é 2, ele vai ser adicionado no final da lista L
Após adicionar 2, nossa lista é L é [10, 8, 6, 4, 2]
A sublista de L [10, 8, 6, 4, 2] dada pelo slice L[2:4] é [6, 4]
[6, 4]

Questão 67

O objetivo principal do uso de técnicas de Agrupamento (Clustering) em Análise de Dados é


dividir um grande conjunto de dados em subconjuntos, agrupando elementos similares em
categorias distintas.

Assinale a opção que indica o tipo de algoritmo que não se enquadra nessa descrição.

(A) K-Means.

(B) Gaussian Mixture Models (GMM).

(C) DBSCAN.

(D) K-Medoids.

(E) Regressão Linear.

Gabarito extraoficial: E

Comentários:
Todos os algoritmos, com exceção de Regressão Linear, são de
clusterização/agrupamento, que é um abordagem de aprendizagem não supervisionada

A Regressão Linear é um dos algoritmos mais populares de aprendizado


supervisionado, utilizado para prever um valor numérico (contínuo) a partir de um
conjunto de variáveis explicativas (também chamadas de variáveis independentes ou
features).

O objetivo é encontrar a relação linear entre as variáveis explicativas e a variável


dependente (também chamada de variável alvo ou target) que permita fazer previsões
precisas para novos dados.

Existem vários tipos de regressão linear, incluindo a regressão linear simples e a regressão
linear múltipla. A seguir, descrevemos cada uma delas em mais detalhes, bem como suas
características, aplicações, vantagens e desvantagens.

Questão 68

Considere um banco de dados relacional em que as operações de insert e update efetuadas


numa certa tabela devem ser monitoradas e anotadas, como subsídio aos procedimentos de
auditoria da emrpesa. Essa tabela é utiulizada por uma série de aplicações, em diferentes
tipos de transações, e iniciadas por um número considerável de usuários.

Nesse cenário, assinale o mecanismo mais adequado para a implementação desse


monitoramento.

(A) Cursores.

(B) Stored procedures.

(C) Triggers.

(D) Utilitário de exportação de dados.

(E) Views.

Gabarito extraoficial: C

Comentários:

Triggers são procedimentos armazenados que são executados automaticamente quando


ocorre um evento específico, como uma operação de insert, update ou delete em uma
tabela. Eles são úteis para manter a integridade dos dados, rastrear mudanças e automatizar
ações com base em eventos no banco de dados. Nesse caso, o uso de triggers permite
monitorar e registrar as operações de insert e update realizadas na tabela, fornecendo
informações valiosas para os procedimentos de auditoria da empresa.

Questão 69

Num banco de dados relacional, considere uma tabela R, com duas colunas A e B, ambas do
tipo string de caracteres, cuja instância é exibida a seguir:
A B

Pedro João

Maria Ida

Maria Ida

Pedro João

Edson Wilson

Edson Maria

Nesse cenário analise os comandos a seguir:

I. DELETE FROM R WHERE EXITS (SELECT * FROM R r1 WHERE R.A = r1.A AND R.B = r1.B)

II. DELETE FROM R WHERE EXITS (SELECT * FROM R r1 WHERE R.A + R.B > r1.A + r1.B)

III. DELETE FROM R WHERE R.A + R.B IN (SELECT A + B FROM R)

Assinale a lista que contém o número de registros deletados em cada um dos comandos I, II
e III, respectivamente, quando executados separadamente e usando a mesma instância
inicial descrita.

(A) 2, 2 e 0.

(B) 2, 4 e 0.

(C) 4, 4 e 4.

(D) 6, 5 e 6.

(E) 6, 6 e 6.

Gabarito extraoficial: ANULAÇÃO

Comentários:

Para resolver essa questão, vamos criar a nossa tabela R:

In [ ]: CREATE TABLE R (


A VARCHAR (255),
B VARCHAR (255)
);

Agora vamos inserir os dados da questão:

In [ ]: INSERT INTO R


VALUES ('Pedro', 'João'),
('Maria', 'Ida'),
('Maria', 'Ida'),
('Pedro', 'João'),
('Edson', 'Wilson'),
('Edson', 'Maria');

Agora, vamos analisar o comando I.


Primeiro, vamos executar a subconsulta:

Perceba que aqui, todas as linhas da tabela R serão retornadas.

A cláusula WHERE especifica que queremos apenas as linhas onde os valores nas colunas A
e B são iguais entre R e r1. Essa subconsulta irá retornar todas as linhas da tabela R,
duplicadas, porque cada linha sempre será comparada consigo mesma e, obviamente, terá
os mesmos valores nas colunas A e B. Dessa forma, a subconsulta irá retornar a tabela R.

Observando o restante do comando, temos a instrução EXISTS. A instrução EXISTS é um


operador lógico usado para verificar a existência de linhas retornadas por uma subconsulta.
A função retorna TRUE se a subconsulta retornar pelo menos uma linha e FALSE se a
subconsulta não retornar nenhuma linha.

No caso da questão, toda linha da tabela R irá existir (EXISTS) no resultado da subconsulta.

Assim, todas as linhas serão deletadas, afetando 6 linhas.


Partindo para o comando II.

Primeiro, vamos analisar a subconsulta:

Seguindo uma lógica simples, podemos afirmar que um valor nunca poderá ser maior que
ele mesmo. Perceba que a consulta está verificando se A + B é maior que A + B, logo
nenhum valor será retornado.

Portanto, nenhuma linha será deletada nesse comando, afetando 0 linhas.


Por fim, o comando III.

Primeiro, vamos analisar a subconsulta:


Aqui, o SQL pode tentar converter uma string em um valor numérico para realizar a
operação de soma. Nesses casos, se a conversão não for possível, o resultado será 0. Como
dentro da subconsulta está sendo feito uma soma entre strings (A e B), o resultado sempre
será 0, o mesmo acontece para a soma fora da subconsulta, o resultado também sempre
será 0.

Observando o restante do comando, temos a instrução IN. A instrução IN é utilizada em


SQL para verificar se um valor está presente em uma lista de valores. Ela permite a seleção
de um conjunto de dados que corresponda a um valor especificado em uma lista de valores.

Dessa forma, o resultado da soma R.A + R.B, que sempre será 0, estará contido no resultado
da soma A + B, que também sempre será 0.

Assim, todas as linhas serão deletadas, afetando 6 linhas.


Questão 70

A análise de dados prescritiva é uma técnica de análise de dados que:

(A) se concentra na descrição de dados passados e presentes, com o objetivo de encontrar


tendências e padrões que possam ser usados para prever eventos futuros.

(B) usa modelos matemáticos e estatísticos para identificar a melhor solução possível
para um determinado problema.

(C) se concentra em identificar as causas subjacentes de um problema e em encontrar


maneiras de corrigi-las.

(D) usa algoritmos de aprendizado de máquina para identificar padrões e tendências em


grandes conjuntos de dados.

(E) usa modelos de aprendizado profundo para identificar padrões em dados não
estruturados.

Gabarito extraoficial: B

Comentários:

Existem quatro tipos principais de análise de dados:

Análise Descritiva:

A análise descritiva é o tipo mais básico de análise de dados. Ela é usada


para descrever e resumir as características de um conjunto de dados.

A análise descritiva fornece informações como média, mediana, moda, desvio


padrão e outras medidas estatísticas para resumir e visualizar os dados.
Análise Diagnóstica:

A análise diagnóstica é usada para identificar a causa raiz de um problema


ou para identificar os fatores que influenciam uma determianda variável
ou fenôneno.

Ela é usada para responder a perguntas como "Por que o problema ocorreu?"
ou "Qual é a causa raiz do problema?".

A análise diagnóstica envolve a exploração de dados em busca de padrões,


tendências e anomalias que possam explicar a causa do problema.

Análise Preditiva:

Essa análise envolve a aplicação de técnicas estatísticas e de machine


learning para fazer previsões sobre eventos futuros, com base em dados
históricos.

A análise preditiva é útil para identificar tendências e padrões e para tomar


decisões informadas com base em informações antecipadas.

Análise Prescritiva:

A análise prescritiva é usada para recomendar a melhor ação a ser tomada


com base nos resultados da análise preditiva. O que pode enolver a
análise das consequências de serem tomadas determinadas ações

Ela é usada para responder a perguntas como "Qual é a melhor decisão a


tomar com base nos resultados da análise preditiva?".

A análise prescritiva envolve a aplicação de técnicas de otimização e


simulação para encontrar a melhor ação a ser tomada com base nos
resultados da análise preditiva.

Em síntese:

Análise descritiva é usada para descrever os dados

Análise diagnóstica é usada para entender a causa de um problema

A análise preditiva é usada para prever o que pode acontecer no futuro

A análise prescritiva é usada para recomendar a melhor ação a ser


tomada com base nos resultados da análise preditiva.

Logo, nosso gabarito é letra B:

A análise de dados prescritiva é uma técnica de análise de dados que usa


modelos matemáticos e estatísticos para identificar a melhor solução
possível para um determinado problema
Tecnologia da Informação para
SEFAZ/MT

Prezado(a) aluno(a),

O curso de Tecnologia da Informação foi criado especialmente para aqueles que desejam
se preparar para o concurso público da SEFAZ/MT. Este curso aborda os principais tópicos
relacionados à Tecnologia da Informação exigidos pelo edital, proporcionando uma
formação completa e direcionada para quem busca a aprovação.

As aulas em PDF oferecem uma forma flexível e acessível de aprendizado, permitindo que
você estude em qualquer lugar e a qualquer hora. Além disso, serão realizados encontros
ao vivo com os professores para esclarecer dúvidas e discutir os principais temas
abordados no curso.

Para auxiliar no aprendizado, o curso contará com muitas questões FGV resolvidas e
comentadas pelos professores, proporcionando uma oportunidade única de treinar e
aprimorar seus conhecimentos em questões similares às que serão cobradas no concurso.

Os tópicos abordados no curso incluem:

Gestão de Projetos de TI
Engenharia de Software
Fundamentos de Banco de Dados
Ciência de Dados
Segurança da Informação

Esses são temas fundamentais exigidos no edital do concurso, garantindo que você esteja
preparado(a) para enfrentar todas as etapas da prova.

Para uma experiência de aprendizado completa e eficiente, disponibilizaremos um grupo


no Telegram para acompanhamento do curso e esclarecimento de dúvidas que possam
surgir durante o processo.
O curso também contará com um diferencial importante, o uso de flashcards. Esses
recursos são uma excelente maneira de reforçar o aprendizado e memorizar conceitos
importantes, ajudando a fixar de maneira mais eficaz os principais pontos abordados no
curso. Com essa ferramenta, você poderá revisar os conceitos fundamentais em qualquer
lugar e a qualquer hora, aproveitando ao máximo seu tempo de estudo.

Não perca essa oportunidade de se preparar de forma completa e eficiente para o concurso
público da SEFAZ/MT e garantir sua aprovação!

Inscreva-se já no curso de Tecnologia da Informação para SEFAZ/MT através do link:


https://sun.eduzz.com/1839942?cupom=CONSUMIDOR30

As aulas começarão a ser disponibilizadas a partir do dia 27/03

Você também pode gostar