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\GABRIEL C\OneDrive\Documentos\Semestre 7\Analisisd\Proyecto4\arbol_decisiones_expansion.db
## Extensions: TRUE
# Valores para el nuevo municipio
nuevo_mercado <- data.frame(
Mercado_ID = 4, # Un ID único
Nombre_Mercado = "Ixmiquilpan"
)
nuevo_estudio <- data.frame(
Estudio_ID = 4, # Un ID único
Mercado_ID = 4, # Relación con el Mercado_ID
Demanda = 1500, # Ejemplo de valor para la demanda
Competencia = 3, # Ejemplo de valor para la competencia
Crecimiento = 5 # Ejemplo de valor de crecimiento
)
nueva_opcion <- data.frame(
Opcion_ID = 4, # Un ID único
Mercado_ID = 4, # Relación con el Mercado_ID
Estrategia = "Foco en productos locales",
Inversion_Requerida = 120000 # Ejemplo de valor
)
# Verificar si el ID ya existe en la tabla Mercados
id_existente <- dbGetQuery(con, "SELECT Mercado_ID FROM Mercados WHERE Nombre_Mercado = 'Ixmiquilpan'")
# Comprobar si el resultado tiene filas (es decir, si ya existe en la tabla)
if (nrow(id_existente) == 0) {
# Calcula el próximo ID disponible si no existe
proximo_id <- dbGetQuery(con, "SELECT MAX(Mercado_ID) + 1 AS Proximo_ID FROM Mercados")
proximo_id <- ifelse(is.na(proximo_id$Proximo_ID), 1, proximo_id$Proximo_ID)
# Inserta en la tabla Mercados
dbExecute(con, sprintf("
INSERT INTO Mercados (Mercado_ID, Nombre_Mercado)
VALUES (%d, 'Ixmiquilpan');
", proximo_id))
# Inserta en la tabla Estudios_Mercado
dbExecute(con, sprintf("
INSERT INTO Estudios_Mercado (Estudio_ID, Mercado_ID, Demanda, Competencia, Crecimiento)
VALUES (%d, %d, 1500, 3, 5);
", proximo_id, proximo_id))
# Inserta en la tabla Opciones_Estratégicas
dbExecute(con, sprintf("
INSERT INTO Opciones_Estratégicas (Opcion_ID, Mercado_ID, Estrategia, Inversion_Requerida)
VALUES (%d, %d, 'Foco en productos locales', 120000);
", proximo_id, proximo_id))
cat("Nuevo registro insertado con éxito.\n")
} else {
cat("El municipio Ixmiquilpan ya existe en la tabla Mercados.\n")
}
## El municipio Ixmiquilpan ya existe en la tabla Mercados.
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 |
| 4 | 4 | Estudio relacionado con Ixmiquilpan | 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 | Ixmiquilpan | 30000 | Media | 800000 | 0.00 |
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 |
# Verifica si el ID ya existe en la tabla Mercados
id_existente <- dbGetQuery(con, "SELECT Mercado_ID FROM Mercados WHERE Nombre_Mercado = 'Ixmiquilpan'")
# Comprobar si el resultado tiene filas (es decir, si ya existe en la tabla)
if (nrow(id_existente) == 0) {
# Calcula el próximo ID disponible si no existe
proximo_id <- dbGetQuery(con, "SELECT MAX(Mercado_ID) + 1 AS Proximo_ID FROM Mercados")
proximo_id <- ifelse(is.na(proximo_id$Proximo_ID), 1, proximo_id$Proximo_ID)
# Inserta en la tabla Mercados
dbExecute(con, sprintf("
INSERT INTO Mercados (Mercado_ID, Nombre_Mercado)
VALUES (%d, 'Ixmiquilpan');
", proximo_id))
# Inserta en la tabla Estudios_Mercado
dbExecute(con, sprintf("
INSERT INTO Estudios_Mercado (Estudio_ID, Mercado_ID, Demanda, Competencia, Crecimiento)
VALUES (%d, %d, 1500, 3, 5);
", proximo_id, proximo_id))
# Inserta en la tabla Opciones_Estratégicas
dbExecute(con, sprintf("
INSERT INTO Opciones_Estratégicas (Opcion_ID, Mercado_ID, Estrategia, Inversion_Requerida)
VALUES (%d, %d, 'Foco en productos locales', 120000);
", proximo_id, proximo_id))
cat("Nuevo registro insertado con éxito.\n")
} else {
cat("El municipio Ixmiquilpan ya existe en la tabla Mercados.\n")
}
## El municipio Ixmiquilpan ya existe en la tabla Mercados.
# Primero, comprobamos si el municipio ya existe en la tabla
municipio_existente <- dbGetQuery(con, "SELECT Mercado_ID FROM Mercados WHERE Nombre_Mercado = 'Ixmiquilpan'")
if (nrow(municipio_existente) == 0) {
# Si no existe, insertamos el nuevo registro
proximo_id <- dbGetQuery(con, "SELECT MAX(Mercado_ID) + 1 AS Proximo_ID FROM Mercados")
proximo_id <- ifelse(is.na(proximo_id$Proximo_ID), 1, proximo_id$Proximo_ID)
# Inserta el nuevo municipio en la tabla Mercados
dbExecute(con, sprintf("
INSERT INTO Mercados (Mercado_ID, Nombre_Mercado)
VALUES (%d, 'Ixmiquilpan');
", proximo_id))
cat("Nuevo municipio 'Ixmiquilpan' insertado con éxito.\n")
} else {
cat("El municipio 'Ixmiquilpan' ya existe en la tabla Mercados.\n")
}
## El municipio 'Ixmiquilpan' ya existe en la tabla Mercados.
# Obtener el Mercado_ID de Ixmiquilpan
id_ixmiquilpan <- dbGetQuery(con, "SELECT Mercado_ID FROM Mercados WHERE Nombre_Mercado = 'Ixmiquilpan'")
# Verificar si se encontró el ID y proceder a la inserción
if (nrow(id_ixmiquilpan) > 4) {
# Extraer el valor de Mercado_ID
mercado_id <- id_ixmiquilpan$Mercado_ID
# Preparar la consulta para insertar un nuevo registro en Estudios_Mercado
sql_insercion <- sprintf("
INSERT INTO Estudios_Mercado (Mercado_ID, Columna1, Columna2, Columna3)
VALUES (%d, 'Valor1', 'Valor2', 'Valor3');
", mercado_id)
# Ejecutar la consulta de inserción
dbExecute(con, sql_insercion)
cat("Nuevo registro insertado en Estudios_Mercado con éxito.\n")
} else {
cat("No se pudo insertar en Estudios_Mercado porque Ixmiquilpan no tiene un ID válido.\n")
}
## No se pudo insertar en Estudios_Mercado porque Ixmiquilpan no tiene un ID válido.
if (nrow(id_ixmiquilpan) > 5) {
mercado_id <- id_ixmiquilpan$Mercado_ID
# Verificar si el Mercado_ID ya está en la tabla Estudios_Mercado
id_existente <- dbGetQuery(con, sprintf("SELECT * FROM Estudios_Mercado WHERE Mercado_ID = %d", mercado_id))
if (nrow(id_existente) == 5) {
# Si no existe, se inserta un nuevo registro
# Asegúrate de que la descripción sea adecuada
sql_insercion <- sprintf("
INSERT INTO Estudios_Mercado (Mercado_ID, Descripción)
VALUES (%d, 'Descripción de Ixmiquilpan');
", mercado_id)
# Ejecutar la consulta de inserción
dbExecute(con, sql_insercion)
cat("Nuevo registro insertado en Estudios_Mercado con éxito.\n")
} else {
cat("El Mercado_ID de Ixmiquilpan ya existe en la tabla Estudios_Mercado.\n")
}
} else {
cat("No se encontró el Mercado_ID de Ixmiquilpan.\n")
}
## No se encontró el Mercado_ID de Ixmiquilpan.
# Verificar si ya existe un registro con el Mercado_ID 4 en la tabla Estudios_Mercado
id_existente <- dbGetQuery(con, "SELECT * FROM Estudios_Mercado WHERE Mercado_ID = 4")
if (nrow(id_existente) == 0) {
# Insertar el nuevo registro en la tabla Estudios_Mercado
sql_insercion <- "INSERT INTO Estudios_Mercado (Mercado_ID, Descripción) VALUES (4, 'Estudio relacionado con Ixmiquilpan')"
# Ejecutar la consulta de inserción
dbExecute(con, sql_insercion)
cat("Nuevo registro insertado en Estudios_Mercado con éxito.\n")
} else {
cat("El registro con el Mercado_ID 4 ya existe en la tabla Estudios_Mercado.\n")
}
## El registro con el Mercado_ID 4 ya existe en la tabla Estudios_Mercado.
# Definir los valores para las columnas Resultados y Fecha_Estudio
resultados_nuevos <- "Mercado pequeño pero con baja competencia, alta probabilidad de éxito."
fecha_estudio_nueva <- "2023-07-20"
# Actualizar el registro en la tabla Estudios_Mercado
sql_actualizacion <- sprintf(
"UPDATE Estudios_Mercado SET Resultados = '%s', Fecha_Estudio = '%s' WHERE Estudio_ID = %d",
resultados_nuevos,
fecha_estudio_nueva,
nuevo_estudio$Estudio_ID
)
# Ejecutar la consulta de actualización
dbExecute(con, sql_actualizacion)
## [1] 1
cat("Las columnas Resultados y Fecha_Estudio se han actualizado con éxito.\n")
## Las columnas Resultados y Fecha_Estudio se han actualizado con éxito.
# Consultar y mostrar todos los registros de la tabla Estudios_Mercado
resultados_estudios <- dbGetQuery(con, "SELECT * FROM Estudios_Mercado")
print(resultados_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
## 4 4 4 Estudio relacionado con Ixmiquilpan
## 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.
## 4 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
## 4 2023-07-20
-- Consultamos los datos de las tablas Estudios_Mercado y Mercados
SELECT estudios_mercado.*, mercado.*
FROM Estudios_Mercado AS estudios_mercado
INNER JOIN Mercados AS mercado
ON estudios_mercado.Mercado_ID = mercado.Mercado_ID;
| 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 |
| 4 | 4 | Estudio relacionado con Ixmiquilpan | Mercado pequeño pero con baja competencia, alta probabilidad de éxito. | 2023-07-20 | 4 | Ixmiquilpan | 30000 | Media | 800000 | 0.00 |
-- Unir tablas Estudios_Mercado con Mercados, usando columna Mercado_ID
-- Filtrar para columna Nombre_Mercado == "Ixmiquilpan"
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 = "Ixmiquilpan";
| Estudio_ID | Mercado_ID | Descripción | Resultados | Fecha_Estudio | Mercado_ID | Nombre_Mercado | Tamaño_Mercado | Competencia | Costo_Entrada | Probabilidad_Éxito |
|---|---|---|---|---|---|---|---|---|---|---|
| 4 | 4 | Estudio relacionado con Ixmiquilpan | Mercado pequeño pero con baja competencia, alta probabilidad de éxito. | 2023-07-20 | 4 | Ixmiquilpan | 30000 | Media | 800000 | Alta |
-- 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 `Probabilidad_Éxito`: mixed type, first seen values of type
## real, 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 Ixmiquilpan 30000 Media 800000
## Probabilidad_Éxito
## 1 0.65
## 2 0.55
## 3 0.75
## 4 0.00
## 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
## 4 4 4 Estudio relacionado con Ixmiquilpan
## 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.
## 4 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
## 4 2023-07-20
# Paso 1: Verificar si el Mercado_ID 4 existe en la tabla Mercados
consulta_id <- dbGetQuery(con, "SELECT Mercado_ID, Nombre_Mercado FROM Mercados WHERE Mercado_ID = 4")
# Verificar si la consulta devolvió resultados
if (nrow(consulta_id) > 0) {
# Imprimir los resultados para confirmar que el ID existe
print(consulta_id)
# Paso 2: Realizar la actualización de la tabla Mercados si el ID existe
# Definir los valores para la actualización
tamano_mercado_nuevo <- 30000 # Ejemplo de tamaño de mercado
competencia_nueva <- "Media" # Ejemplo de competencia
costo_entrada_nuevo <- 800000 # Ejemplo de costo de entrada
probabilidad_exito_nueva <- "Alta" # Ejemplo de probabilidad de éxito
# Crear la consulta de actualización
sql_actualizacion_mercado <- sprintf(
"UPDATE Mercados SET Tamaño_Mercado = %d, Competencia = '%s', Costo_Entrada = %f, Probabilidad_Éxito = '%s' WHERE Mercado_ID = 4",
tamano_mercado_nuevo,
competencia_nueva,
costo_entrada_nuevo,
probabilidad_exito_nueva
)
# Ejecutar la consulta de actualización
dbExecute(con, sql_actualizacion_mercado)
cat("Las columnas Tamaño_Mercado, Competencia, Costo_Entrada y Probabilidad_Éxito se han actualizado con éxito para Ixmiquilpan.\n")
} else {
cat("No se pudo realizar la actualización. Mercado_ID 4 no encontrado.\n")
}
## Mercado_ID Nombre_Mercado
## 1 4 Ixmiquilpan
## Las columnas Tamaño_Mercado, Competencia, Costo_Entrada y Probabilidad_Éxito se han actualizado con éxito para Ixmiquilpan.
# Verificar si el duplicado con Mercado_ID 5 existe en la tabla
consulta_duplicado <- dbGetQuery(con, "SELECT Mercado_ID, Nombre_Mercado FROM Mercados WHERE Mercado_ID = 5")
# Comprobar si el duplicado existe
if (nrow(consulta_duplicado) > 0) {
cat("Se encontró un duplicado con Mercado_ID 5. Procediendo a eliminarlo.\n")
# Eliminar el duplicado
dbExecute(con, "DELETE FROM Mercados WHERE Mercado_ID = 5")
cat("El duplicado con Mercado_ID 5 ha sido eliminado.\n")
# Opcional: Verificar la tabla después de la eliminación
consulta_verificacion <- dbGetQuery(con, "SELECT * FROM Mercados WHERE Mercado_ID = 5")
if (nrow(consulta_verificacion) == 0) {
cat("La eliminación se realizó con éxito. No hay registros con Mercado_ID 5.\n")
} else {
cat("Error al eliminar el duplicado. El registro aún existe.\n")
}
} else {
cat("No se encontró un duplicado con Mercado_ID 5. No se realizó ninguna acción.\n")
}
## No se encontró un duplicado con Mercado_ID 5. No se realizó ninguna acción.
# Con esto las tablas ya están por separado como objetos en R
mercados <- dbGetQuery(con, "SELECT * FROM Mercados")
## Warning: Column `Probabilidad_Éxito`: mixed type, first seen values of type
## real, 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 Ixmiquilpan 30000 Media 800000
## Probabilidad_Éxito
## 1 0.65
## 2 0.55
## 3 0.75
## 4 0.00
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
## 4 4 4 Estudio relacionado con Ixmiquilpan
## 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.
## 4 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
## 4 2023-07-20
# A partir de este paso ya no puedo acceder a la base de datos
dbDisconnect(con)