Ingenieria de Datos con Snowpark y visualización con Streamlit
Contexto
INEGI es un organismo público autónomo responsable de normar y coordinar el Sistema Nacional de Información Estadística y Geográfica, así como de captar y difundir información de México en cuanto al territorio, los recursos, la población y economía, que permita dar a conocer las características del país y ayudar a la toma de decisiones, publican el Sistema de consulta del cual se puden tomar set de datos públicos.
Problema
- El Instituto genera estadística básica, la cual obtiene de tres tipos de fuentes: censos, encuestas y registros administrativos, así como estadística derivada, mediante la cual produce indicadores demográficos, sociales y económicos, además de contabilidad nacional.Estos datos son una fuente muy utilizada para realizar analisis en todo tipo de industrias, sin embargo puede tener retos interesantes como el aceso ya que se encuentran en un almacenamiento en formatos de archivos,los datos pueden rrequerir procesamiento para ser utilizados por ejemplo no estan con formato no correcto para ciencia o visualización de datos así como algunos temas de calidad de datos como contener datos nulos (NULL) (*) en algunas columnas.
Qué construirás
- En esta guía aprenderás como construir una aplicación Web utilizando Streamlit, un marco de desarrollo de aplicación de código abierto en lenguaje Python, realizará un proceso de ingeniería de datos carga, transformación de tipos de datos( latitud/longitud) en Pythonen Snowflake Data Cloud.
Qué necesitas
- Acceso a GitHub
- VSCode con Jupyter Notebook
- SnowSQL
- Python (Python 3.8)
- Anaconda
- Snowpark Python
- Streamlit
Arquitectura de Solución
Instalación
Decargar el repositorio que contiene el código en [Github repo]( Código fuentehttps://github.com/sfc-gh-csuarez/snowpark_inegi.git):
git clone https://github.com/sfc-gh-csuarez/snowpark_inegi.git
Después de descargar el proyecto debes ingresar a la carpeta snowpark_inegi-main y abrir con Visual Studio Code o el editor de preferencia que soporte archivos Jupyter Notebook
Crear un ambiente local de desarrollo para la instalación de algunas librerias así como de Snowpark con la versión Python 3.8. Teniendo Anaconda instalado con la aplicación terminal o línea de comando, dentro de la carpeta donde de descargo el repositorio(clon) de github, para crear un ambiente de desarrollo ejecutar: Creación de ambiente de desarrollo Python
conda create --name snowpark_env python=3.8
conda activate snowpark_env
Instalación de Snowpark Instalación Snowpark Python
pip install snowflake-snowpark-python pandas
pip install lat-lon-parser
pip install requests
pip install notebook
conda install -c conda-forge streamlit
conda install -c conda-forge pillow
Configuración config.py
En la URL Snowflake https://<id_cuenta>.<zona_region_cuenta>.snowflakecomputing.com ejemplo: https://ly14496.south-central-us.azure.snowflakecomputing.com los valores correspondientes son:
id_cuenta = ly14496
zona_region_cuenta = south-central-us.azure
En este archivo config.py ingresar los valores para cada propiedad con la información para acceder a Snowflake desde Paython usando Snowpark.
connection_parameters = {
"account": "id_cuenta.zona_region_cuenta",
"user": "tu_usuario_snowflake",
"password": "tu_contraseñan_snowflake",
"warehouse": "INEGI_WH",
"role": "INEGI_ROLE",
"database": "INEGI",
"schema": "PUBLIC"
}
En el ambiente Snowflake UI(Web) ejecutar con role ACCOUNTADMIN:
use role accountadmin;
--objetos
create database inegi;
--wharehouse
create warehouse inegi_wh
warehouse_type = 'STANDARD'
warehouse_size =XSMALL
auto_suspend = 120
auto_resume = TRUE
max_cluster_count=1
min_cluster_count=1;
--rol
create role inegi_role;
grant role inegi_role to user <tu_usuario_snowflake>;
grant role sysadmin to user <tu_usuario_snowflake>;
grant role sysadmin to role inegi_role;
--privilegios
grant usage on database inegi to role inegi_role;
grant all privileges on schema public to role inegi_role;
grant usage on warehouse inegi_wh to role inegi_role;
Ejecución
Activación de Notebook y Ambiente de desarrollo (terminal o VSC):
jupyter notebook
conda activate snowpark_env
Ejecutar en Jupyter Notebook para cada uno de los siguientes Notebooks, puede realizarlo en en Visual Studio Code (o terminal) ejecutar:
- 01_INEGI_download.ipynb Ejecutar el cell el cual realizara el proceso de extracción, transformación y partición de origen CSV a JSON
- 02_INEGI_dataEngineering.ipynb
- Ejecutar los dos primeros cells para cargar las librerías necesarias y activar la sesión a Snowflake.
- Ejecutar el cell #Activación para crear los objectos y privilegios Snowflake
- Eljecutar el cell #Crear internal Stage para la carga de datos JSON ya curados
- Electuar e cell #Transformando a objeto Snowflake para la colocación de datos en el objeto Snowflake tabla
- 03_INEGI_dataModeling.ipynb
- Ejecutar los dos primeros cells para cargar las librerías necesarias y activar la sesión a Snowflake.
- Ejecutar el cell #Crear vista para crear la vista que tendrá los datos que incluyen transformación de datos JSON en tabla INEGI_RAW
- Ejecutar el cell #UDF declaración para incorporar la función creada en python nom_entidad que servirá para convertir No. de entidad por nombre de entidad.
- Ejecutar el cell #Vista con totales por entidad aplicando para materializar datos aplicando UDF y que tendrá los totales máximos de población para cada entidad
- Ejecutar el cell #Validar la vista solo con totales por entidad para validar el contenido de la vista creada
- 04_Streamlit.py
Para ejecutar la aplicación web puedes utilizar Visual Studio Code (o en otra terminal):
streamlit run 04_Streamlit.py
#Script para ejección de descarga de archivo y realizar transformaciones (Split a JSON)
from inegidata import urlDownload
# opción 'remote' para descarga desde webhost de INEGI
# opciób 'local' para descompresión desde repo local
urlDownload('remote')