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\chave\OneDrive\Documentos\Analisis de datos 7\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
Opciones_Estratégicas
Estudios_Mercado

2. Exploración del contenido de las tablas

2.1 Tabla Estudios de Mercado

SELECT * 
FROM Estudios_Mercado
LIMIT 5;
3 records
Estudio_ID Mercado_ID Descripción Resultados Fecha_Estudio
1 1 Estudio de Demanda en Huichapan Se espera un crecimiento moderado con una tendencia favorable a la expansión. 2023-05-01
2 2 Análisis de Competencia en Tecozautla Alta competencia local, requiere una estrategia diferenciada para el éxito. 2023-06-15
3 3 Estudio de Población en Nopala Mercado pequeño pero con baja competencia, alta probabilidad de éxito. 2023-07-20

2.2 Tabla Mercados

SELECT *
FROM Mercados
LIMIT 5;
5 records
Mercado_ID Nombre_Mercado Tamaño_Mercado Competencia Costo_Entrada Probabilidad_Éxito
1 Huichapan 50000 Media 1500000 0.65
2 Tecozautla 35000 Alta 1000000 0.55
3 Nopala 25000 Baja 750000 0.75
4 Nuevo_Mercado 0 NA NA NA
5 Zimapán 0 NA NA NA

2.3 Tabla Opciones Estratégicas

SELECT *
FROM Opciones_Estratégicas
LIMIT 5;
5 records
Opción_ID Mercado_ID Nombre_Opción Costo_Opción Beneficio_Estimado Probabilidad_Éxito_Opción
1 1 Expansión Total 2000000 3000000 0.70
2 1 Alianza Estratégica 1000000 2000000 0.65
3 1 Expansión Parcial 1200000 2500000 0.60
4 2 Expansión Total 1500000 2500000 0.60
5 2 Alianza Estratégica 800000 1800000 0.55

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 .
3 records
Estudio_ID Mercado_ID Descripción Resultados Fecha_Estudio Mercado_ID Nombre_Mercado Tamaño_Mercado Competencia Costo_Entrada Probabilidad_Éxito
1 1 Estudio de Demanda en Huichapan Se espera un crecimiento moderado con una tendencia favorable a la expansión. 2023-05-01 1 Huichapan 50000 Media 1500000 0.65
2 2 Análisis de Competencia en Tecozautla Alta competencia local, requiere una estrategia diferenciada para el éxito. 2023-06-15 2 Tecozautla 35000 Alta 1000000 0.55
3 3 Estudio de Población en Nopala Mercado pequeño pero con baja competencia, alta probabilidad de éxito. 2023-07-20 3 Nopala 25000 Baja 750000 0.75

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";
1 records
Estudio_ID Mercado_ID Descripción Resultados Fecha_Estudio Mercado_ID Nombre_Mercado Tamaño_Mercado Competencia Costo_Entrada Probabilidad_Éxito
3 3 Estudio de Población en Nopala Mercado pequeño pero con baja competencia, alta probabilidad de éxito. 2023-07-20 3 Nopala 25000 Baja 750000 0.75

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 Descripción TEXT 0 NA 0
3 Resultados TEXT 0 NA 0
4 Fecha_Estudio DATE 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)
}
## Warning: Column `Tamaño_Mercado`: mixed type, first seen values of type
## integer, coercing other values of type string
##   Mercado_ID Nombre_Mercado Tamaño_Mercado Competencia Costo_Entrada
## 1          1      Huichapan          50000       Media       1500000
## 2          2     Tecozautla          35000        Alta       1000000
## 3          3         Nopala          25000        Baja        750000
## 4          4  Nuevo_Mercado              0        <NA>            NA
## 5          5        Zimapán              0        <NA>            NA
##   Probabilidad_Éxito
## 1               0.65
## 2               0.55
## 3               0.75
## 4                 NA
## 5                 NA
##   Opción_ID Mercado_ID       Nombre_Opción Costo_Opción Beneficio_Estimado
## 1         1          1     Expansión Total      2000000            3000000
## 2         2          1 Alianza Estratégica      1000000            2000000
## 3         3          1   Expansión Parcial      1200000            2500000
## 4         4          2     Expansión Total      1500000            2500000
## 5         5          2 Alianza Estratégica       800000            1800000
##   Probabilidad_Éxito_Opción
## 1                      0.70
## 2                      0.65
## 3                      0.60
## 4                      0.60
## 5                      0.55
##   Estudio_ID Mercado_ID                           Descripción
## 1          1          1       Estudio de Demanda en Huichapan
## 2          2          2 Análisis de Competencia en Tecozautla
## 3          3          3        Estudio de Población en Nopala
##                                                                      Resultados
## 1 Se espera un crecimiento moderado con una tendencia favorable a la expansión.
## 2   Alta competencia local, requiere una estrategia diferenciada para el éxito.
## 3        Mercado pequeño pero con baja competencia, alta probabilidad de éxito.
##   Fecha_Estudio
## 1    2023-05-01
## 2    2023-06-15
## 3    2023-07-20

6. Cargar los datos de las tablas

# Con esto las tablas ya están por separado como objetos en R
mercados <- dbGetQuery(con, "SELECT * FROM Mercados")
## Warning: Column `Tamaño_Mercado`: mixed type, first seen values of type
## integer, coercing other values of type string
opciones <- dbGetQuery(con, "SELECT * FROM Opciones_Estratégicas")
estudios <- dbGetQuery(con, "SELECT * FROM Estudios_Mercado")

# Imprimir tablas
mercados
##   Mercado_ID  Nombre_Mercado Tamaño_Mercado Competencia Costo_Entrada
## 1          1       Huichapan          50000       Media       1500000
## 2          2      Tecozautla          35000        Alta       1000000
## 3          3          Nopala          25000        Baja        750000
## 4          4   Nuevo_Mercado              0        <NA>            NA
## 5          5         Zimapán              0        <NA>            NA
## 6         10 Nuevo Municipio             NA        <NA>            NA
##   Probabilidad_Éxito
## 1               0.65
## 2               0.55
## 3               0.75
## 4                 NA
## 5                 NA
## 6                 NA
opciones
##   Opción_ID Mercado_ID       Nombre_Opción Costo_Opción Beneficio_Estimado
## 1         1          1     Expansión Total      2000000            3000000
## 2         2          1 Alianza Estratégica      1000000            2000000
## 3         3          1   Expansión Parcial      1200000            2500000
## 4         4          2     Expansión Total      1500000            2500000
## 5         5          2 Alianza Estratégica       800000            1800000
## 6         6          2   Expansión Parcial      1000000            2200000
## 7         7          3     Expansión Total      1200000            2000000
## 8         8          3 Alianza Estratégica       600000            1500000
## 9         9          3   Expansión Parcial       800000            1800000
##   Probabilidad_Éxito_Opción
## 1                      0.70
## 2                      0.65
## 3                      0.60
## 4                      0.60
## 5                      0.55
## 6                      0.50
## 7                      0.75
## 8                      0.70
## 9                      0.65
estudios
##   Estudio_ID Mercado_ID                           Descripción
## 1          1          1       Estudio de Demanda en Huichapan
## 2          2          2 Análisis de Competencia en Tecozautla
## 3          3          3        Estudio de Población en Nopala
##                                                                      Resultados
## 1 Se espera un crecimiento moderado con una tendencia favorable a la expansión.
## 2   Alta competencia local, requiere una estrategia diferenciada para el éxito.
## 3        Mercado pequeño pero con baja competencia, alta probabilidad de éxito.
##   Fecha_Estudio
## 1    2023-05-01
## 2    2023-06-15
## 3    2023-07-20
dbGetQuery(con, "PRAGMA table_info('Estudios_Mercado')")
##   cid          name    type notnull dflt_value pk
## 1   0    Estudio_ID INTEGER       0         NA  1
## 2   1    Mercado_ID INTEGER       0         NA  0
## 3   2   Descripción    TEXT       0         NA  0
## 4   3    Resultados    TEXT       0         NA  0
## 5   4 Fecha_Estudio    DATE       0         NA  0
dbGetQuery(con, "PRAGMA table_info('Mercados')")
##   cid               name    type notnull dflt_value pk
## 1   0         Mercado_ID INTEGER       0         NA  1
## 2   1     Nombre_Mercado    TEXT       0         NA  0
## 3   2     Tamaño_Mercado INTEGER       0         NA  0
## 4   3        Competencia    TEXT       0         NA  0
## 5   4      Costo_Entrada    REAL       0         NA  0
## 6   5 Probabilidad_Éxito    REAL       0         NA  0
dbGetQuery(con, "PRAGMA table_info('Opciones_Estrategicas')")
## [1] cid        name       type       notnull    dflt_value pk        
## <0 rows> (o 0- extensión row.names)
nuevo_mercado <- "INSERT INTO Mercados (Mercado_ID, Nombre_Mercado,
Tamaño_Mercado, Competencia, Costo_Entrada, Probabilidad_Éxito)
 VALUES (4, 'Zimapán', 40000, 'Media', 1200000,
0.60);"
dbConnect(con, nuevo_mercado)
## <SQLiteConnection>
##   Path: C:\Users\chave\OneDrive\Documentos\Analisis de datos 7\arbol_decisiones_expansion.db
##   Extensions: TRUE
nuevo_estudio <- "INSERT INTO Estudios_Mercado (Estudio_ID, Mercado_ID, Descripción, Resultados, Fecha_Estudio)
 VALUES (101, 4, 'Estudio de viabilidad para Zimapán', 'Alta demanda y competencia media', '2024-11-30');"
dbConnect(con, nuevo_estudio)
## <SQLiteConnection>
##   Path: C:\Users\chave\OneDrive\Documentos\Analisis de datos 7\arbol_decisiones_expansion.db
##   Extensions: TRUE
# Verificar nuevo registro en Mercados
print (dbGetQuery(con, "SELECT * FROM Mercados WHERE Nombre_Mercado == 'Zimapán';"))
##   Mercado_ID Nombre_Mercado Tamaño_Mercado Competencia Costo_Entrada
## 1          5        Zimapán        Hidalgo        <NA>            NA
##   Probabilidad_Éxito
## 1                 NA
# Verificar nuevo registro en Estudios_Mercado
print(dbGetQuery (con, "SELECT * FROM Estudios_Mercado WHERE Mercado_ID =
4;"))
## [1] Estudio_ID    Mercado_ID    Descripción   Resultados    Fecha_Estudio
## <0 rows> (o 0- extensión row.names)
nuevo_mercado_sql <- "INSERT INTO Mercados (Mercado_ID, Nombre_Mercado, Tamaño_Mercado,Competencia, Costo_Entrada, Probabilidad_Éxito)
VALUES (4, 'Zimapán', 40000, 'Media', 1200000.0, 0.60);"
dbConnect(con, nuevo_mercado_sql)
## <SQLiteConnection>
##   Path: C:\Users\chave\OneDrive\Documentos\Analisis de datos 7\arbol_decisiones_expansion.db
##   Extensions: TRUE
print(dbGetQuery(con, "SELECT * FROM Estudios_Mercado WHERE Mercado_ID = 10;"))
## [1] Estudio_ID    Mercado_ID    Descripción   Resultados    Fecha_Estudio
## <0 rows> (o 0- extensión row.names)
print(dbGetQuery(con, "SELECT * FROM Opciones_Estratégicas WHERE Mercado_ID = 10;"))
## [1] Opción_ID                 Mercado_ID               
## [3] Nombre_Opción             Costo_Opción             
## [5] Beneficio_Estimado        Probabilidad_Éxito_Opción
## <0 rows> (o 0- extensión row.names)

Dimos lo mejor que pudimos, pero creo que tiene un par de errores, aún así, es trabajo honesto, gracias por su comprensión.

# A partir de este paso ya no puedo acceder a la base de datos
dbDisconnect(con)