From 73fb054a49342e8fa838bdbe1307589e8de35370 Mon Sep 17 00:00:00 2001
From: Omar Orozco <69235190+omargorozcor@users.noreply.github.com>
Date: Wed, 23 Feb 2022 18:43:44 -0300
Subject: [PATCH 1/5] RFC 001 WIP newbie: Data Pipeline
---
RFCs/accepted/000-Pipeline-datos.md | 52 +++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
create mode 100644 RFCs/accepted/000-Pipeline-datos.md
diff --git a/RFCs/accepted/000-Pipeline-datos.md b/RFCs/accepted/000-Pipeline-datos.md
new file mode 100644
index 0000000..63e975f
--- /dev/null
+++ b/RFCs/accepted/000-Pipeline-datos.md
@@ -0,0 +1,52 @@
+# RFC 01 WIP: Data Pipeline
+
++ Recommender: omargorozcor@gmail.com, luis.fer.0987654@gmail.com y ing.nicaes@gmail.com
++ Date: 23/02/2022
++ Status: WIP
++ Decider:
++ Input providers:
++ Approvers
++ Approvals:
++ Team: (Business Intelligence)
+
+## Background
+
+Una pipeline de datos es una construcción lógica que representa un proceso dividido en fases. Los pipelines de datos se caracterizan por definir el conjunto de pasos o fases y las tecnologías involucradas en un proceso de movimiento o procesamiento de datos.
+
+Las fuentes indican de dónde provienen los datos. Las fuentes comunes incluyen sistemas de administración de bases de datos relacionales como MySQL, CRM como Salesforce y HubSpot, ERP como SAP y Oracle, herramientas de administración de redes sociales e incluso sensores de dispositivos IoT. Un pipeline de datos debe ser capaz de consumir la información que se analizará desde diversas fuentes de datos.
+
+## Problem
+
+Determinar el pipeline de datos que permitirá recolectar toda la información que generen los demás squads.
+
+Los problemas que se pueden presentar son:
+
+* Datos sobre aspectos de diferente naturaleza y formato
+* Datos que se generan constantemente y deben ser recolectados en tiempo real
+* Datos que generados por diferentes squads y por lo tanto provienen de diversas fuentes
+* Enorme cantidad de datos a procesar
+* Datos sobre información confidencial
+
+Escoger un pipeline adecuado de datos permitirá crear un proceso adecuado de procesamiento de datos que recolectará la información de diversas fuentes, las procesará en tiempo real y quedará lista para su análisis, sin comprometer la seguridad de los usuarios ni el rendimiento del procesamiento.
+
+## Proposal
+
+**Apache Airflow**
+
+Es una herramienta open source para gestionar, monitorizar y planificar flujos de trabajo. Se usa para automatizar trabajos dividiéndolos en subtareas y es común en la automatización de ingesta de datos, acciones de mantenimiento periódicas y tareas de administración.
+
+Airflow también es bastante útil para gestionar procesos de ETL (Extract, Transform, Load), integra una interfaz de usuario sencilla, permite hacer backups, generar reportes y métricas.
+
+Cualquier persona con conocimientos de Python puede implementar un flujo de trabajo, tiene una gran comunidad activa y puede ejecutar sus tareas en Google Cloud Platform, Amazon Web Services, Microsoft Azure y muchos otros servicios de terceros, por lo que es bastante versátil y potente.
+
+Una gran desventaja de usar esta herramienta es su alta curva de aprendizaje. Probablemente sea necesario conocimientos de DevOps para gestionar todo el proceso debido a lo personalizable y complejo que puede llegar a ser.
+
+Algunos links para conocer un poco más sobre Apache:
+
+https://airflow.apache.org/
+https://aprenderbigdata.com/apache-airflow/
+https://www.run.ai/guides/machine-learning-operations/apache-airflow
+
+## Definition of success
+
+Los diversos datos de los diferentes squads pueden ser consumidos y procesados en tiempo real sin problemas, por lo que están listos para ser analizados y establecer diferentes métricas. Además la curva de aprendizaje del framework para el squad no es tan compleja como para llevar a cabo este proceso.
From 26af0d9b67daa4528e20732b89b503f7a162867a Mon Sep 17 00:00:00 2001
From: Omar Orozco <69235190+omargorozcor@users.noreply.github.com>
Date: Thu, 24 Feb 2022 05:19:18 -0300
Subject: [PATCH 2/5] Delete 000-Pipeline-datos.md
---
RFCs/accepted/000-Pipeline-datos.md | 52 -----------------------------
1 file changed, 52 deletions(-)
delete mode 100644 RFCs/accepted/000-Pipeline-datos.md
diff --git a/RFCs/accepted/000-Pipeline-datos.md b/RFCs/accepted/000-Pipeline-datos.md
deleted file mode 100644
index 63e975f..0000000
--- a/RFCs/accepted/000-Pipeline-datos.md
+++ /dev/null
@@ -1,52 +0,0 @@
-# RFC 01 WIP: Data Pipeline
-
-+ Recommender: omargorozcor@gmail.com, luis.fer.0987654@gmail.com y ing.nicaes@gmail.com
-+ Date: 23/02/2022
-+ Status: WIP
-+ Decider:
-+ Input providers:
-+ Approvers
-+ Approvals:
-+ Team: (Business Intelligence)
-
-## Background
-
-Una pipeline de datos es una construcción lógica que representa un proceso dividido en fases. Los pipelines de datos se caracterizan por definir el conjunto de pasos o fases y las tecnologías involucradas en un proceso de movimiento o procesamiento de datos.
-
-Las fuentes indican de dónde provienen los datos. Las fuentes comunes incluyen sistemas de administración de bases de datos relacionales como MySQL, CRM como Salesforce y HubSpot, ERP como SAP y Oracle, herramientas de administración de redes sociales e incluso sensores de dispositivos IoT. Un pipeline de datos debe ser capaz de consumir la información que se analizará desde diversas fuentes de datos.
-
-## Problem
-
-Determinar el pipeline de datos que permitirá recolectar toda la información que generen los demás squads.
-
-Los problemas que se pueden presentar son:
-
-* Datos sobre aspectos de diferente naturaleza y formato
-* Datos que se generan constantemente y deben ser recolectados en tiempo real
-* Datos que generados por diferentes squads y por lo tanto provienen de diversas fuentes
-* Enorme cantidad de datos a procesar
-* Datos sobre información confidencial
-
-Escoger un pipeline adecuado de datos permitirá crear un proceso adecuado de procesamiento de datos que recolectará la información de diversas fuentes, las procesará en tiempo real y quedará lista para su análisis, sin comprometer la seguridad de los usuarios ni el rendimiento del procesamiento.
-
-## Proposal
-
-**Apache Airflow**
-
-Es una herramienta open source para gestionar, monitorizar y planificar flujos de trabajo. Se usa para automatizar trabajos dividiéndolos en subtareas y es común en la automatización de ingesta de datos, acciones de mantenimiento periódicas y tareas de administración.
-
-Airflow también es bastante útil para gestionar procesos de ETL (Extract, Transform, Load), integra una interfaz de usuario sencilla, permite hacer backups, generar reportes y métricas.
-
-Cualquier persona con conocimientos de Python puede implementar un flujo de trabajo, tiene una gran comunidad activa y puede ejecutar sus tareas en Google Cloud Platform, Amazon Web Services, Microsoft Azure y muchos otros servicios de terceros, por lo que es bastante versátil y potente.
-
-Una gran desventaja de usar esta herramienta es su alta curva de aprendizaje. Probablemente sea necesario conocimientos de DevOps para gestionar todo el proceso debido a lo personalizable y complejo que puede llegar a ser.
-
-Algunos links para conocer un poco más sobre Apache:
-
-https://airflow.apache.org/
-https://aprenderbigdata.com/apache-airflow/
-https://www.run.ai/guides/machine-learning-operations/apache-airflow
-
-## Definition of success
-
-Los diversos datos de los diferentes squads pueden ser consumidos y procesados en tiempo real sin problemas, por lo que están listos para ser analizados y establecer diferentes métricas. Además la curva de aprendizaje del framework para el squad no es tan compleja como para llevar a cabo este proceso.
From be12639f28ed6e4182c6b76fbf92c63afc7aa4d7 Mon Sep 17 00:00:00 2001
From: Omar Orozco <69235190+omargorozcor@users.noreply.github.com>
Date: Thu, 24 Feb 2022 05:19:58 -0300
Subject: [PATCH 3/5] Add 000-Data-Pipeline.md
---
RFCs/accepted/000-Pipeline-datos.md | 57 +++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
create mode 100644 RFCs/accepted/000-Pipeline-datos.md
diff --git a/RFCs/accepted/000-Pipeline-datos.md b/RFCs/accepted/000-Pipeline-datos.md
new file mode 100644
index 0000000..fe04d48
--- /dev/null
+++ b/RFCs/accepted/000-Pipeline-datos.md
@@ -0,0 +1,57 @@
+# RFC 01 WIP: Data Pipeline
+
++ Recommender: omargorozcor@gmail.com, luis.fer.0987654@gmail.com y ing.nicaes@gmail.com
++ Date: 23/02/2022
++ Status: WIP
++ Decider:
++ Input providers:
++ Approvers
++ Approvals:
++ Team: (Business Intelligence)
+
+## Background
+
+Una pipeline de datos es una construcción lógica que representa un proceso dividido en fases. Los pipelines de datos se caracterizan por definir el conjunto de pasos o fases y las tecnologías involucradas en un proceso de movimiento o procesamiento de datos.
+
+A Data Pipeline is the process where the idea is to collect the data, send it to a specific location in order to work with it and try to find out if there is some relevant information that can be shared by the team in a Dashboard or other way to post it.
+
+
+## Problem
+
+Determinar el pipeline de datos que permitirá recolectar toda la información que generen los demás squads.
+
+Los problemas que se pueden presentar son:
+
+● Tipos de Datos diferentes en naturaleza y formato
+● Datos generados en tiempo real
+● Múltiples fuentes de datos
+● Escalar la cantidad de datos a procesar
+● Establecer si es necesario procesos de anonimización
+
+Escoger un pipeline adecuado de datos permitirá crear un proceso que recolectará la información de diversas fuentes, las procesará en tiempo real y quedará lista para su análisis, sin comprometer la seguridad de los usuarios ni el rendimiento del procesamiento.
+
+
+## Proposal
+
+**Apache Airflow**
+
+Es una herramienta open source para gestionar, monitorizar y planificar los flujos de trabajo. Se usa para automatizar trabajos dividiéndolos en subtareas y es común en la automatización de ingesta de datos, acciones de mantenimiento periódicas y tareas de administración.
+
+Airflow también es bastante útil para gestionar procesos de ETL/ELT (Extract, Transform, Load), integra una interfaz de usuario sencilla, permite hacer backups, generar reportes y métricas.
+
+Una persona con conocimientos de Python puede implementar un flujo de trabajo, tiene una gran comunidad activa y puede ejecutar sus tareas en Google Cloud Platform, Amazon Web Services, Microsoft Azure y muchos otros servicios de terceros, por lo que es bastante versátil y potente.
+
+Una gran desventaja de usar esta herramienta es su alta curva de aprendizaje. Probablemente sea necesario conocimientos de DevOps para gestionar todo el proceso debido a lo personalizable y complejo que puede llegar a ser.
+
+Es posible utilizar servicios como docker para solventar dichos problemas y tener una imagen funcional de Airflow, pero es posible que no permita el 100% de personalización sino existen bases sólidas en conjunto del equipo para llegar a ese punto.
+
+Algunos links para conocer un poco más sobre Apache:
+
+https://airflow.apache.org/
+https://aprenderbigdata.com/apache-airflow/
+https://www.run.ai/guides/machine-learning-operations/apache-airflow
+
+
+## Definition of success
+
+Los diversos datos de los diferentes squads pueden ser consumidos y procesados en tiempo real buscando replicar una arquitectura orientada a eventos, por lo que están listos para ser analizados y establecer diferentes métricas. Además la curva de aprendizaje del framework para el squad puede ser un skill a desarrollar que es útil para cada uno de los integrantes.
From 7fd579037bb21d9686d781a0274f6f15a3db23ca Mon Sep 17 00:00:00 2001
From: Omar Orozco <69235190+omargorozcor@users.noreply.github.com>
Date: Thu, 24 Feb 2022 05:20:24 -0300
Subject: [PATCH 4/5] Update 000-Pipeline-datos.md
---
RFCs/accepted/000-Pipeline-datos.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/RFCs/accepted/000-Pipeline-datos.md b/RFCs/accepted/000-Pipeline-datos.md
index fe04d48..47d61e5 100644
--- a/RFCs/accepted/000-Pipeline-datos.md
+++ b/RFCs/accepted/000-Pipeline-datos.md
@@ -1,4 +1,4 @@
-# RFC 01 WIP: Data Pipeline
+# RFC 000 WIP: Data Pipeline
+ Recommender: omargorozcor@gmail.com, luis.fer.0987654@gmail.com y ing.nicaes@gmail.com
+ Date: 23/02/2022
From fcc5358a672b5376246041d3948ca52b3c71174e Mon Sep 17 00:00:00 2001
From: Omar Orozco <69235190+omargorozcor@users.noreply.github.com>
Date: Thu, 3 Mar 2022 00:14:49 -0300
Subject: [PATCH 5/5] Data Pipeline Restructuring
Reformulation of the data pipeline taking into account the advice of the team leaders and the RFCs of other teams
---
RFCs/accepted/000-Pipeline-datos.md | 241 ++++++++++++++++++++++++----
1 file changed, 208 insertions(+), 33 deletions(-)
diff --git a/RFCs/accepted/000-Pipeline-datos.md b/RFCs/accepted/000-Pipeline-datos.md
index 47d61e5..21e95cc 100644
--- a/RFCs/accepted/000-Pipeline-datos.md
+++ b/RFCs/accepted/000-Pipeline-datos.md
@@ -1,57 +1,232 @@
# RFC 000 WIP: Data Pipeline
-+ Recommender: omargorozcor@gmail.com, luis.fer.0987654@gmail.com y ing.nicaes@gmail.com
-+ Date: 23/02/2022
-+ Status: WIP
-+ Decider:
-+ Input providers:
-+ Approvers
-+ Approvals:
-+ Team: (Business Intelligence)
++ Start Date: (2022-03-02)
++ Members: Omar Orozco, Nicholás Castañeda and Luis Tapia
++ RFC PR
-## Background
+## Summary
-Una pipeline de datos es una construcción lógica que representa un proceso dividido en fases. Los pipelines de datos se caracterizan por definir el conjunto de pasos o fases y las tecnologías involucradas en un proceso de movimiento o procesamiento de datos.
+The proposed pipeline will be an ETL: It will extract the data collected by the Data Monitoring team, perform transformations and calculate the corresponding metrics, and then export the results to a Postgresql database. For the reading and transformation of data, a script will be made under the Python language and various modules and libraries will be used.
-A Data Pipeline is the process where the idea is to collect the data, send it to a specific location in order to work with it and try to find out if there is some relevant information that can be shared by the team in a Dashboard or other way to post it.
+## Basic Example
-## Problem
+**1. Data Ingestion**
-Determinar el pipeline de datos que permitirá recolectar toda la información que generen los demás squads.
+For reading the API created by the Data Monitoring team, it is proposed to use the Requests library. The requests library is the de facto standard for making HTTP requests in Python. It abstracts the complexities of making requests behind a beautiful, simple API so that you can focus on interacting with services and consuming data in your application.
-Los problemas que se pueden presentar son:
+Example
-● Tipos de Datos diferentes en naturaleza y formato
-● Datos generados en tiempo real
-● Múltiples fuentes de datos
-● Escalar la cantidad de datos a procesar
-● Establecer si es necesario procesos de anonimización
-Escoger un pipeline adecuado de datos permitirá crear un proceso que recolectará la información de diversas fuentes, las procesará en tiempo real y quedará lista para su análisis, sin comprometer la seguridad de los usuarios ni el rendimiento del procesamiento.
+
+
+
+
-## Proposal
+**2. Data Transformation**
-**Apache Airflow**
+For the analysis and transformation of information in tables, it is recommended to use the Pandas library, which is a software library written for the Python programming language for data manipulation and analysis. In particular, it offers data structures and to manipulate numerical tables and time series.
+Pandas has a method that allows converting the information from a JSON to a Dataframe. This step is necessary to be able to structure the information received in a table and to be able to take advantage of the functions of the library.
-Es una herramienta open source para gestionar, monitorizar y planificar los flujos de trabajo. Se usa para automatizar trabajos dividiéndolos en subtareas y es común en la automatización de ingesta de datos, acciones de mantenimiento periódicas y tareas de administración.
+Example:
-Airflow también es bastante útil para gestionar procesos de ETL/ELT (Extract, Transform, Load), integra una interfaz de usuario sencilla, permite hacer backups, generar reportes y métricas.
+We have the following JSON
-Una persona con conocimientos de Python puede implementar un flujo de trabajo, tiene una gran comunidad activa y puede ejecutar sus tareas en Google Cloud Platform, Amazon Web Services, Microsoft Azure y muchos otros servicios de terceros, por lo que es bastante versátil y potente.
+
-Una gran desventaja de usar esta herramienta es su alta curva de aprendizaje. Probablemente sea necesario conocimientos de DevOps para gestionar todo el proceso debido a lo personalizable y complejo que puede llegar a ser.
+To read a JSON file via Pandas, we can use the read_json() method.
-Es posible utilizar servicios como docker para solventar dichos problemas y tener una imagen funcional de Airflow, pero es posible que no permita el 100% de personalización sino existen bases sólidas en conjunto del equipo para llegar a ese punto.
+
-Algunos links para conocer un poco más sobre Apache:
+Once you have the dataframe, you can use the properties. For example, one of the Pandas methods allows knowing the information of the columns and the type of data they have.
-https://airflow.apache.org/
-https://aprenderbigdata.com/apache-airflow/
-https://www.run.ai/guides/machine-learning-operations/apache-airflow
+
-## Definition of success
-Los diversos datos de los diferentes squads pueden ser consumidos y procesados en tiempo real buscando replicar una arquitectura orientada a eventos, por lo que están listos para ser analizados y establecer diferentes métricas. Además la curva de aprendizaje del framework para el squad puede ser un skill a desarrollar que es útil para cada uno de los integrantes.
+**3. Data Visualization**
+
+For data visualization, it is recommended to use a library such as matplotlib.pyplot. Every pyplot function makes some change to a figure: for example, create a figure, create a plot area on a figure, draw some lines on a plot area, decorate the plot with labels, etc. For example:
+
+
+
+
+In case we require a more complex and interactive graphics library, it is recommended to use Seaborn. This is a Python data visualization library based on matplotlib. It provides a high-level interface for drawing attractive and informative statistical graphics
+
+
+
+Example:
+
+
+
+
+
+
+
+**4. Data Loading**
+
+It is proposed to connect and save the information in a PostgreSQL database. This is currently recognized as one of the most powerful relational database management systems on the market. It is easily accessible, cross-platform and available for use on almost all operating systems used today without slowing down its performance.
+
+We can integrate Postgres with Python using the psycopg2 module. psycopg2 is a Postgre database adapter for Python.
+
+
+
+Example of a connection:
+
+
+
+
+
+Example of a data load:
+
+
+
+
+## Motivation
+
+The main purpose is to be able to prepare and fix the data to calculate the business metrics of the Booking System application. On the other hand, choosing an adequate data pipeline will allow the creation of an adequate data processing process that can collect information from different squads, process it in real time and transform it so that it can be analyzed without compromising user security or performance. of processing.
+
+
+
+
+## Detailed Design
+
+
+
+
+
+There are 3 phases: Extraction (1), transformation (2) and loading (3)
+
+
+**1. Extraction**
+
+Consists of collecting the information from the API developed by the Data Monitoring team. In this phase we expect to receive the following tables with the following columns:
+
+● **Users Table**
+
+- User type (host or guest)
+- User creation date
+- Coordinates or location
+- Age
+- Type of property (If he is a host, it is the type of property he owns / If he is a guest, it is the type of property he likes to rent)
+- Status (If the account is active or not)
+
+
+● **Reservations Table**
+
+- Site location
+- Status (Confirmed, pending or rejected)
+- Date
+- Host user
+- Guest user
+- Price
+
+
+● **Propertys Table**
+
+- Building status (Available or not)
+- Qualification
+- Square meter
+- Number of rooms
+- Property type
+- Number of bathrooms
+- Description of the bathroom
+- Kitchen
+- Balcony
+- Terrace
+- Climate
+- Cell phone coverage
+- Internet coverage
+- Price per night
+
+● **Searches Table**
+
+- Search date
+- User who made it
+
+● **Sessions Table**
+
+- Login date
+- Login User
+
+
+● **Conversation Table**
+
+- Host User
+- Guest User
+- Messages sent to the host
+- Messages sent to the caller
+
+
+
+
+
+**2. Transformation**
+
+Phase II consists of data transformation. With the collected tables, the following variables will be filtered and extracted:
+- Searches made with date
+- Sessions started with date
+- Location or coordinates of each reservation
+- Reservations confirmed with date
+- Reservations or requests not confirmed with date
+- Register of users created with date / Register of sessions started with date
+- Number of accommodations
+- Number of registered users
+- Accountless user sessions
+- Location of users
+- Age of the hosts
+- Age of the guests
+- Type of property owned by the Hosts
+- Type of property that guests like
+- Daily booking notifications
+- Number of chats or conversations started
+- Messages sent by users (To do sentiment analysis)
+- Rating of accommodation
+- Property specifications: square meters, number of rooms, type of property, number of bathrooms, description of the bathroom, if it has a balcony, if it has a terrace, climate, cellular network coverage, internet coverage, etc.
+- Accommodations made by Hosts
+- Accommodations requested by Guests
+- Deactivated accounts with their date
+- Accommodations made with price and dates
+- Number of active reservations
+- Total reservations (cancelled and active)
+- And other useful variables that may arise
+
+
+**3. Loading**
+
+Phase III consists of loading these variables into a PostgreSQL database. These are the variables necessary to perform the calculation of metrics required by the BI team. When these variables are saved in a database, they will be available for the calculation of metrics and visualization of the information generated.
+
+
+
+## Drawbacks
+
+The problems that can occur are:
+- Data on aspects of a different nature and format
+- Data that is constantly generated and must be collected in real time
+- Data generated by different squads and therefore come from various sources
+- Huge amount of data to process
+- Data on confidential information
+- Slow reading, transformation and loading of data
+- If the data is not accurate, reliable and robust, we will end up with incorrect or misleading results.
+
+
+## Alternatives
+
+Our own Pipeline design might fall short in some respects, have performance issues, or have inadequate structure and control. In case a more complex and specialized system is required, there is the Apache Airflow framework, which is an open source tool to manage, monitor and plan workflows. It is used to automate jobs by dividing them into subtasks and is common in automating data ingestion, regular maintenance actions, and management tasks. Airflow is also quite useful for managing ETL processes (Extract, Transform, Load), integrates a simple user interface, allows backups, generate reports and metrics.
+
+A big disadvantage of using this tool is its high learning curve. DevOps knowledge is probably required to manage the entire process due to how customizable and complex it can become.
+
+## Adoption strategy
+
+It is necessary to learn concepts of ETL, handling of APIs with Python, SQL databases and the use of libraries such as Pandas, Requests, Matplotlib.Pyplot, Seaborn and any other library that can help solve problems that arise.
+
+## How we teach this
+
+All the libraries and resources proposed are Open Source. All have resources, support and contributions from thousands of users who have collaborated in the development and teaching of these resources. In addition, they all have a website where you can find their official documentation.
+
+The Plazi platform also has courses and tutorials on them. In addition, any questions that arise can be consulted in the slack channel so that the rest of the team can help solve them.
+
+## Unresolved questions
+
+It is necessary to define if the appropriate database is PostgreSQL. It is also necessary to coordinate with the Data Monitoring team to know how to connect to their API and what variables they can export to us. Finally, it is also necessary to define where and how the metrics that will be calculated with the generated information will be displayed.