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)
# 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
SELECT name
FROM sqlite_master
WHERE type = "table";
| name |
|---|
| Mercados |
| Opciones_Estratégicas |
| Estudios_Mercado |
SELECT *
FROM Estudios_Mercado
LIMIT 5;
| 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 |
SELECT *
FROM Mercados
LIMIT 5;
| 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 |
SELECT *
FROM Opciones_Estratégicas
LIMIT 5;
| 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 |
-- 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 .
| 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 |
-- 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";
| 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 |
-- Similar a función str() en R
-- Información necesaria para realizar nuevos registros
PRAGMA table_info(Estudios_Mercado);
| 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 |
# 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
# 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)
# A partir de este paso ya no puedo acceder a la base de datos
dbDisconnect(con)