kiramishima / snowpark_inegi

Snowpark with Python to download data from webhost, apply data engineering, load to Snowflake and visualize using Streamlit

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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. App

Qué necesitas

Arquitectura de Solución

Arquitectura y modelo de servicio desde descarga de archivos en fuente Hosting de proveedor de datos, extracción y transformación de datos con Snowpark Python, carga datos usando   código hacia un  internal stage con Snowflake, con una interfase en Streamlit usando  Python para implementar la visualización de datos

Instalación

Código fuente

Decargar el repositorio que contiene el código en [Github repo](https://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

Creación de ambiente de desarrollo Python

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:
conda create --name snowpark_env python=3.8 
conda activate snowpark_env

Instalación Snowpark Python

Instalación de Snowpark
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
    #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')
  • 02_INEGI_dataEngineering.ipynb
    1. Ejecutar los dos primeros cells para cargar las librerías necesarias y activar la sesión a Snowflake.
    2. Ejecutar el cell #Activación para crear los objectos y privilegios Snowflake
    3. Eljecutar el cell #Crear internal Stage para la carga de datos JSON ya curados
    4. Electuar e cell #Transformando a objeto Snowflake para la colocación de datos en el objeto Snowflake tabla
  • 03_INEGI_dataModeling.ipynb
    1. Ejecutar los dos primeros cells para cargar las librerías necesarias y activar la sesión a Snowflake.
    2. Ejecutar el cell #Crear vista para crear la vista que tendrá los datos que incluyen transformación de datos JSON en tabla INEGI_RAW
    3. 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.
    4. 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
    5. 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

About

Snowpark with Python to download data from webhost, apply data engineering, load to Snowflake and visualize using Streamlit

License:GNU General Public License v3.0


Languages

Language:Python 59.4%Language:Jupyter Notebook 40.6%