1. Introducción

El objetivo de este análisis es construir y visualizar un árbol de decisiones que ayude a “El Mercader de Venecia” a tomar decisiones estratégicas para expandirse a tres municipios del estado de Hidalgo: Huichapan, Tecozautla y Nopala.

# Cargamos paquetes necesarios y limpiamos la memoria
rm(list = ls()) # Remueve trabajos previos
# Cargar librerías necesarias
pacman::p_load(RSQLite, DBI, rpart, rpart.plot, 
               tidyr, janitor, dplyr, ggplot2)
# Quitar notación científica
options(scipen=999)

1.1 Leer la ruta del archivo

# Ruta a la base de datos
db_path <- "arbol_decisiones_expansion.db"

# Establecer la conexión
con <- dbConnect(RSQLite::SQLite(), db_path)

# Imprimir conexión (se llama con)
con
## <SQLiteConnection>
##   Path: C:\Users\gus16\OneDrive\Documentos\Tema 4\arbol_decisiones_expansion.db
##   Extensions: TRUE

1.2 Obtener lista de tablas disponibles en la base

SELECT name
FROM sqlite_master
WHERE type = "table";
3 records
name
Mercados
Estudios_Mercado
Opciones_Estrategicas

2. Exploración del contenido de las tablas

2.1 Tabla Estudios de Mercado

SELECT * 
FROM Estudios_Mercado
UNION ALL
SELECT 4, 4, 'Análisis de consumo en Chapantongo', "El consumo es favorable para el municipio", '2024-11-29'
LIMIT 4;
4 records
Estudio_ID Mercado_ID Nombre_Estudio Presupuesto Resultados
1 1 Análisis de consumo en Huichapan 2000000 Media
2 2 Análisis de consumo en Tecozautla 2200000 Alta
3 3 Análisis de consumo en Nopala 1800000 Baja
4 4 Análisis de consumo en Chapantongo 2500000 Media

2.2 Tabla Mercados

SELECT *
FROM Mercados
LIMIT 4;
4 records
Mercado_ID Municipio Nombre_Mercado Competencia Fecha
1 Huichapan Mercado Municipal Media 2024-01-15
2 Tecozautla Mercado Central Alta 2024-01-15
3 Nopala Mercado Principal Baja 2024-01-15
4 Chapantongo Mercado Central Media 2024-01-15

2.3 Tabla Opciones Estratégicas

SELECT *
FROM Mercados
LIMIT 5;
INSERT INTO Mercados (ID_Mercado, Nombre_Municipio, Demanda_Poblacional, Nivel_Consumo)
VALUES (3, 'Chapantongo', 20000, 'Favorable');
SELECT *
FROM Mercados
ORDER BY ID_Mercado DESC
LIMIT 5;
4 records
Mercado_ID Municipio Nombre_Mercado Competencia Fecha
1 Huichapan Mercado Municipal Media 2024-01-15
2 Tecozautla Mercado Central Alta 2024-01-15
3 Nopala Mercado Principal Baja 2024-01-15
4 Chapantongo Mercado Central Media 2024-01-15

3 Manejo de tablas con SQL

3.1 Unión de dos tablas con SQL

-- Vamos a unir dos tablas: Estudios de Mercado y Mercados a partir
-- de la columnna Mercado_ID
-- Se usan alias de las tablas con función AS

SELECT estudios_mercado.*, mercado.*
FROM Estudios_Mercado AS estudios_mercado
INNER JOIN Mercados AS mercado
ON estudios_mercado.Mercado_ID = mercado.Mercado_ID;


-- La última línea menciona el nombre de las columnas que se parecen
-- Para acceder a una columna en R se usa $, en SQL se usa .
4 records
Estudio_ID Mercado_ID Nombre_Estudio Presupuesto Resultados Mercado_ID Municipio Nombre_Mercado Competencia Fecha
1 1 Análisis de consumo en Huichapan 2000000 Media 1 Huichapan Mercado Municipal Media 2024-01-15
2 2 Análisis de consumo en Tecozautla 2200000 Alta 2 Tecozautla Mercado Central Alta 2024-01-15
3 3 Análisis de consumo en Nopala 1800000 Baja 3 Nopala Mercado Principal Baja 2024-01-15
4 4 Análisis de consumo en Chapantongo 2500000 Media 4 Chapantongo Mercado Central Media 2024-01-15

3.2 Consulta cruzada de tablas

-- Unir tablas Estudios_Mercado con Mercados, usando columna Mercado_ID
-- Filtrar para columna Nombre_Mercado == "Nopala"
SELECT estudios_mercado.*, mercado.*
FROM Estudios_Mercado AS estudios_mercado
INNER JOIN Mercados AS mercado
ON estudios_mercado.Mercado_ID = mercado.Mercado_ID
WHERE mercado.Nombre_Mercado = "Nopala";
0 records
Estudio_ID Mercado_ID Nombre_Estudio Presupuesto Resultados Mercado_ID Municipio Nombre_Mercado Competencia Fecha

4. Exploración de columnas en una tabla

4.1 Columnas de tabla Estudios de Mercado

-- Similar a función str()  en R
-- Información necesaria para realizar nuevos registros
PRAGMA table_info(Estudios_Mercado);
5 records
cid name type notnull dflt_value pk
0 Estudio_ID INTEGER 0 NA 1
1 Mercado_ID INTEGER 0 NA 0
2 Nombre_Estudio TEXT 0 NA 0
3 Presupuesto DECIMAL(10,2) 0 NA 0
4 Resultados TEXT 0 NA 0

5. Vista previa de los datos en R

# Ejemplo de programación en R
# Guardar lista de tablas en un objeto llamado tables
# Vamos a leer las tablas completas porque no son muy grandes
tables <-  dbGetQuery(con, "SELECT name FROM sqlite_master WHERE type = 'table';")$name

# Loop para tener vista previa el contenido de cada tabla
for (table in tables){
  my_query <- paste("SELECT * FROM", table, "LIMIT 5")
  data_table <- dbGetQuery(con, my_query)
  print(data_table)
}
##   Mercado_ID   Municipio    Nombre_Mercado Competencia      Fecha
## 1          1   Huichapan Mercado Municipal       Media 2024-01-15
## 2          2  Tecozautla   Mercado Central        Alta 2024-01-15
## 3          3      Nopala Mercado Principal        Baja 2024-01-15
## 4          4 Chapantongo   Mercado Central       Media 2024-01-15
##   Estudio_ID Mercado_ID                     Nombre_Estudio Presupuesto
## 1          1          1   Análisis de consumo en Huichapan     2000000
## 2          2          2  Análisis de consumo en Tecozautla     2200000
## 3          3          3      Análisis de consumo en Nopala     1800000
## 4          4          4 Análisis de consumo en Chapantongo     2500000
##   Resultados
## 1      Media
## 2       Alta
## 3       Baja
## 4      Media
##   Opcion_ID Mercado_ID      Tipo_Expansion Inversion_Inicial Beneficio_Esperado
## 1         1          1     Expansión Total           1500000            3000000
## 2         2          1 Alianza Estratégica            800000            1800000
## 3         3          1   Expansión Parcial           1000000            2200000
## 4         4          2     Expansión Total           1500000            3000000
## 5         5          2 Alianza Estratégica            800000            1800000
##   Probabilidad_Exito
## 1               0.70
## 2               0.80
## 3               0.75
## 4               0.70
## 5               0.80