Neste quickstart guide "Introdução ao Snowpark para ciência de dados", você vai ajudar a empresa fictícia de food trucks Tasty Bytes a aumentar as vendas treinando um modelo para oferecer recomendações de locais aos motoristas. Você vai usar o Snowpark para Python para preparar dados e treinar e implementar um modelo. Após a implementação, você vai criar um protótipo de aplicação usando o Streamlit para demonstrar como os motoristas podem usar o modelo para encontrar o melhor local para estacionar pensando no próximo turno.
O Snowpark permite que desenvolvedores consultem e criem aplicações de dados em Python, Java e Scala por meio de interfaces de programação de aplicativos (application programming interface, APIs) e conceitos de programação estilo DataFrame executados no mecanismo flexível do Snowflake. Saiba mais sobre o Snowpark.
O Streamlit (adquirido pela Snowflake em março de 2022) é uma biblioteca Python que facilita a criação e o compartilhamento de aplicações web personalizadas. Saiba mais sobre o Streamlit.
Você vai usar o Snowsight, a interface da web do Snowflake, para:
A Tasty Bytes opera food trucks em várias cidades pelo mundo, e cada veículo pode escolher dois locais de venda por dia. Os locais estão mapeados como pontos de interesse da SafeGraph. O objetivo é unir dados de latitude e longitude disponíveis no SafeGraph Marketplace aos dados de vendas por turno e usá-los como recursos no treinamento de modelos.
USE ROLE accountadmin;
-- create a development database for data science work
CREATE OR REPLACE DATABASE frostbyte_tasty_bytes_dev;
-- create raw, harmonized, and analytics schemas
-- raw zone for data ingestion
CREATE OR REPLACE SCHEMA frostbyte_tasty_bytes_dev.raw;
-- harmonized zone for data processing
CREATE OR REPLACE SCHEMA frostbyte_tasty_bytes_dev.harmonized;
-- analytics zone for development
CREATE OR REPLACE SCHEMA frostbyte_tasty_bytes_dev.analytics;
-- create csv file format
CREATE OR REPLACE FILE FORMAT frostbyte_tasty_bytes_dev.raw.csv_ff type = 'csv';
-- create an external stage pointing to S3
CREATE OR REPLACE STAGE frostbyte_tasty_bytes_dev.raw.s3load
COMMENT = 'Quickstarts S3 Stage Connection'
url = 's3://sfquickstarts/frostbyte_tastybytes/'
file_format = frostbyte_tasty_bytes_dev.raw.csv_ff;
-- define shift sales table
CREATE OR REPLACE TABLE frostbyte_tasty_bytes_dev.raw.shift_sales(
location_id NUMBER(19,0),
city VARCHAR(16777216),
date DATE,
shift_sales FLOAT,
shift VARCHAR(2),
month NUMBER(2,0),
day_of_week NUMBER(2,0),
city_population NUMBER(38,0)
);
-- create and use a compute warehouse
CREATE OR REPLACE WAREHOUSE tasty_dsci_wh AUTO_SUSPEND = 60;
USE WAREHOUSE tasty_dsci_wh;
-- ingest from S3 into the shift sales table
COPY INTO frostbyte_tasty_bytes_dev.raw.shift_sales
FROM @frostbyte_tasty_bytes_dev.raw.s3load/analytics/shift_sales/;
-- join in SafeGraph data
CREATE OR REPLACE TABLE frostbyte_tasty_bytes_dev.harmonized.shift_sales
AS
SELECT
a.location_id,
a.city,
a.date,
a.shift_sales,
a.shift,
a.month,
a.day_of_week,
a.city_population,
b.latitude,
b.longitude
FROM frostbyte_tasty_bytes_dev.raw.shift_sales a
JOIN frostbyte_safegraph.public.frostbyte_tb_safegraph_s b
ON a.location_id = b.location_id;
-- promote the harmonized table to the analytics layer for data science development
CREATE OR REPLACE VIEW frostbyte_tasty_bytes_dev.analytics.shift_sales_v
AS
SELECT * FROM frostbyte_tasty_bytes_dev.harmonized.shift_sales;
-- view shift sales data
SELECT * FROM frostbyte_tasty_bytes_dev.analytics.shift_sales_v;
A Tasty Bytes busca um crescimento de 25% das vendas anuais nos próximos cinco anos. Para apoiar esse objetivo e maximizar a receita diária da frota de caminhões, a equipe de ciência de dados precisa construir um modelo de aprendizado de máquina (machine learning, ML) para direcionar os caminhões aos locais onde maiores vendas são esperadas em determinados turnos.
Clone o repositório do GitHub. Esse repositório contém todo o código necessário para completar este quickstart guide com sucesso.
$ git clone https://github.com/Snowflake-Labs/sfguide-tasty-bytes-snowpark-101-for-data-science.git
No terminal, execute o seguinte código para criar o ambiente Python e iniciar o notebook Jupyter:
i. Crie um ambiente Python 3.8 chamado "py38_env_tb1" (tb1 = Tasty Bytes 1) usando pacotes (e versões) do canal Snowflake Anaconda.
conda create --name py38_env_tb1 --override-channels -c https://repo.anaconda.com/pkgs/snowflake python=3.8
ii. Ative o ambiente py38_env_tb1.
conda activate py38_env_tb1
iii. Instale o pacote Snowpark Python e demais pacotes que serão usados nas funções implementadas no Snowflake a partir do canal Anaconda do Snowflake.
conda install -c https://repo.anaconda.com/pkgs/snowflake snowflake-snowpark-python numpy pandas scikit-learn joblib cachetools
v. Instale os pacotes que serão usados apenas no ambiente Python (interface de usuário (UI), visualização...).
pip install streamlit matplotlib plotly notebook
vi. Navegue para o repositório do GitHub clonado e inicie o notebook Jupyter.
jupyter notebook
pyarrow
antes de instalar o Snowpark.conda env create -f environment.yml
ii . Ative o ambiente.conda activate py38_env_tb1
iii. Inicie o Notebook Jupyter.jupyter notebook
Após implementar um modelo que prevê as vendas por turno de cada local para o turno seguinte, você gostaria de encontrar um jeito para que os motoristas usem essas previsões para escolherem onde estacionar. É preciso criar um protótipo de aplicação para mostrar à equipe de engenharia como um motorista poderia interagir com o modelo de previsão de vendas por turno. A aplicação vai permitir que um usuário escolha uma cidade e um horário (manhã ou tarde) e mostrar a previsão de vendas por local em um mapa.
conda activate py38_env_tb1
streamlit run streamlit_app.py
Snowflake:
Anaconda:
GitHub:
USE ROLE accountadmin;
DROP PROCEDURE IF EXISTS frostbyte_tasty_bytes.analytics.sproc_train_linreg(varchar, array, varchar, varchar);
DROP FUNCTION IF EXISTS frostbyte_tasty_bytes.analytics.udf_linreg_predict_location_sales(float, float, float, float, float, float, float, float);
DROP DATABASE IF EXISTS frostbyte_tasty_bytes_dev;
DROP DATABASE IF EXISTS frostbyte_safegraph;
DROP WAREHOUSE IF EXISTS tasty_dsci_wh;
conda remove --name py38_env_tb1 --all
rm -rf sfguide-tasty-bytes-snowpark-101-for-data-science
Você conseguiu! Você acaba de completar com sucesso o quickstart "Tasty Bytes: introdução ao Snowpark para ciência de dados".
Neste módulo, você:
Para continuar sua jornada no Snowflake Data Cloud, clique no link abaixo para ver os outros quickstarts Tasty Bytes disponíveis para você.