Neste documento, descrevemos como usar o Dataplex Explore para detectar anomalias em um conjunto de dados de transações de varejo.
O workbench de exploração de dados, ou Explore, permite que os analistas de dados consultem e explorem grandes conjuntos de dados de maneira interativa e em tempo real. Com a ferramenta Analisar, você recebe insights dos seus dados e pode consultar dados armazenados no Cloud Storage e no BigQuery. O Explore usa uma plataforma Spark sem servidor para que você não precise gerenciar e escalonar a infraestrutura subjacente.
Objetivos
Nesta seção, mostramos como concluir as seguintes tarefas:
- Use o workbench SQL do Spark do Explore para criar e executar consultas Spark SQL.
- Use um notebook do JupyterLab para conferir os resultados.
- Programe seu notebook para execução recorrente, permitindo que você monitore seus dados em busca de anomalias.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.
Antes de começar
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
- Instale a CLI do Google Cloud.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init
-
Crie ou selecione um projeto do Google Cloud.
-
Crie um projeto do Google Cloud:
gcloud projects create PROJECT_ID
Substitua
PROJECT_ID
por um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_ID
pelo nome do projeto do Google Cloud.
-
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
Preparar os dados para exploração
Faça o download do arquivo Parquet,
retail_offline_sales_march
.Crie um bucket do Cloud Storage chamado
offlinesales_curated
da seguinte maneira:- No console do Cloud, acesse a página Buckets do Cloud Storage.
- Clique em Criar bucket.
- Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima
etapa, clique em Continuar.
- Em Nomear o bucket, insira um nome que atenda aos requisitos de nomenclatura de bucket.
-
Em Escolha um local para armazenar seus dados, faça o seguinte:
- Selecione uma opção de Tipo de local.
- Escolha uma opção de Local.
- Em Escolher uma classe de armazenamento padrão para seus dados, selecione uma classe de armazenamento.
- Em Escolha como controlar o acesso a objetos, selecione uma opção de Controle de acesso.
- Em Configurações avançadas (opcional), especifique um método de criptografia, uma política de retenção ou rótulos de bucket.
- Clique em Criar.
Faça upload do arquivo
offlinesales_march_parquet
que você salvou no bucketofflinesales_curated
do Cloud Storage criado seguindo as etapas em Fazer upload de objeto de um sistema de arquivos.Crie um lake do Dataplex e nomeie-o como
operations
seguindo as etapas em Criar um lake.No lake
operations
, adicione uma zona e dê a ela o nomeprocurement
, seguindo as etapas em Adicionar uma zona.Na zona
procurement
, adicione o bucketofflinesales_curated
do Cloud Storage criado como um recurso, seguindo as etapas em Adicionar um recurso.
Selecione a tabela para explorar
No console do Google Cloud, acesse a página Explorar do Dataplex.
No campo Lake, selecione o lake
operations
.Clique no lake
operations
.Navegue até a zona
procurement
e clique na tabela para explorar os metadados dela.Na imagem a seguir, a zona de aquisição selecionada tem uma tabela chamada
Offline
, que tem os metadados:orderid
,product
,quantityordered
,unitprice
,orderdate
epurchaseaddress
.No Spark SQL Editor, clique em
Add. Um script Spark SQL aparece.Opcional: abra o script na visualização com guia dividida para conferir os metadados e o novo script lado a lado. Clique em
Mais na nova guia do script e selecione Dividir guia à direita ou Dividir guia à esquerda.
analisar os dados
Um ambiente fornece recursos de computação sem servidor para que as consultas e os notebooks do Spark SQL sejam executados em um lake. Antes de escrever consultas do Spark SQL, crie um ambiente para executar suas consultas.
Explore seus dados usando as consultas SparkSQL a seguir. No Editor do SparkSQL, insira a consulta no painel Novo Script.
Amostra de 10 linhas da tabela
Digite a seguinte consulta:
select * from procurement.offlinesales where orderid != 'orderid' limit 10;
Clique em Executar.
Consiga o número total de transações no conjunto de dados
Digite a seguinte consulta:
select count(*) from procurement.offlinesales where orderid!='orderid';
Clique em Executar.
Encontrar o número de tipos de produto diferentes no conjunto de dados
Digite a seguinte consulta:
select count(distinct product) from procurement.offlinesales where orderid!='orderid';
Clique em Executar.
Encontre os produtos que têm um grande valor de transação
Tenha uma noção de quais produtos têm um grande valor de transação detalhando as vendas por tipo de produto e preço médio de venda.
Digite a seguinte consulta:
select product,avg(quantityordered * unitprice) as avg_sales_amount from procurement.offlinesales where orderid!='orderid' group by product order by avg_sales_amount desc;
Clique em Executar.
A imagem a seguir exibe um painel Results
que usa uma coluna chamada product
para identificar os itens de vendas com grandes valores de transação, mostrados na coluna chamada avg_sales_amount
.
Detectar anomalias usando o coeficiente de variação
A última consulta mostrou que os laptops têm um valor médio de transação alto. A consulta a seguir mostra como detectar transações de laptop que não são anômalas no conjunto de dados.
A consulta a seguir usa a métrica "coeficiente de variação", rsd_value
, para encontrar transações não incomuns, em que a distribuição dos valores é baixa em comparação com o valor médio. Um coeficiente de variação menor
indica menos anomalias.
Digite a seguinte consulta:
WITH stats AS ( SELECT product, AVG(quantityordered * unitprice) AS avg_value, STDDEV(quantityordered * unitprice) / AVG(quantityordered * unitprice) AS rsd_value FROM procurement.offlinesales GROUP BY product) SELECT orderid, orderdate, product, (quantityordered * unitprice) as sales_amount, ABS(1 - (quantityordered * unitprice)/ avg_value) AS distance_from_avg FROM procurement.offlinesales INNER JOIN stats USING (product) WHERE rsd_value <= 0.2 ORDER BY distance_from_avg DESC LIMIT 10
Clique em Executar.
Veja os resultados do script.
Na imagem a seguir, o painel Resultados usa uma coluna chamada product para identificar os itens de vendas com valores de transação que estão dentro do coeficiente de variação de 0,2.
Visualizar anomalias usando um notebook do JupyterLab
Criar um modelo de ML para detectar e visualizar anomalias em escala.
Abra o notebook em uma guia separada e aguarde o carregamento. A sessão em que você executou as consultas Spark SQL continua.
Importe os pacotes necessários e conecte-se à tabela externa do BigQuery que contém os dados das transações. Execute o seguinte código:
from google.cloud import bigquery from google.api_core.client_options import ClientOptions import os import warnings warnings.filterwarnings('ignore') import pandas as pd project = os.environ['GOOGLE_CLOUD_PROJECT'] options = ClientOptions(quota_project_id=project) client = bigquery.Client(client_options=options) client = bigquery.Client() #Load data into DataFrame sql = '''select * from procurement.offlinesales limit 100;''' df = client.query(sql).to_dataframe()
Execute o algoritmo da floresta de isolamento para descobrir as anomalias no conjunto de dados:
to_model_columns = df.columns[2:4] from sklearn.ensemble import IsolationForest clf=IsolationForest(n_estimators=100, max_samples='auto', contamination=float(.12), \ max_features=1.0, bootstrap=False, n_jobs=-1, random_state=42, verbose=0) clf.fit(df[to_model_columns]) pred = clf.predict(df[to_model_columns]) df['anomaly']=pred outliers=df.loc[df['anomaly']==-1] outlier_index=list(outliers.index) #print(outlier_index) #Find the number of anomalies and normal points here points classified -1 are anomalous print(df['anomaly'].value_counts())
Trace as anomalias previstas usando uma visualização de Matplotlib:
import numpy as np from sklearn.decomposition import PCA pca = PCA(2) pca.fit(df[to_model_columns]) res=pd.DataFrame(pca.transform(df[to_model_columns])) Z = np.array(res) plt.title("IsolationForest") plt.contourf( Z, cmap=plt.cm.Blues_r) b1 = plt.scatter(res[0], res[1], c='green', s=20,label="normal points") b1 =plt.scatter(res.iloc[outlier_index,0],res.iloc[outlier_index,1], c='green',s=20, edgecolor="red",label="predicted outliers") plt.legend(loc="upper right") plt.show()
Esta imagem mostra os dados da transação com as anomalias destacadas em vermelho.
Programar o notebook
O Explore permite programar um notebook para ser executado periodicamente. Siga as etapas para programar o notebook do Jupyter que você criou.
O Dataplex cria uma tarefa de programação para executar o notebook periodicamente. Para monitorar o progresso da tarefa, clique em Visualizar programações.
Compartilhar ou exportar o notebook
Com o recurso Explorar, é possível compartilhar um notebook com outras pessoas na organização usando permissões do IAM.
Revise os papéis. Conceda ou revogue os papéis Leitor do Dataplex
(roles/dataplex.viewer
), Editor do Dataplex
(roles/dataplex.editor
) e Administrador do Dataplex
(roles/dataplex.admin
) aos usuários deste notebook. Depois que você compartilhar um notebook, os usuários com os papéis de leitor ou editor no nível do lake poderão navegar para o lake e trabalhar no notebook compartilhado.
Para compartilhar ou exportar um notebook, consulte Compartilhar um notebook ou Exportar um notebook.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Exclua o projeto
Exclua um projeto do Google Cloud:
gcloud projects delete PROJECT_ID
Excluir recursos individuais
-
Excluir o bucket:
gcloud storage buckets delete BUCKET_NAME
-
Exclua a instância:
gcloud compute instances delete INSTANCE_NAME
A seguir
- Saiba mais sobre o Dataplex Explore.
- Programar scripts e notebooks.