# Generar vector con edades de 40 clientes
set.seed(8043) # Fijar semilla para reproducibilidad
edades_clientes <- sample(18:70, 40, replace = TRUE)
# Mostrar las edades
print("Edades de los clientes:")
## [1] "Edades de los clientes:"
print(edades_clientes)
## [1] 52 40 33 44 28 66 23 43 46 26 45 29 52 56 58 24 37 51 22 55 63 22 66 57 20
## [26] 29 37 64 50 70 25 56 69 22 60 50 45 18 60 20
# Calcular estadísticos descriptivos
media_edad <- mean(edades_clientes)
mediana_edad <- median(edades_clientes)
edad_max <- max(edades_clientes)
edad_min <- min(edades_clientes)
# Mostrar resultados
cat("Media de edades:", media_edad, "\n")
## Media de edades: 43.325
cat("Mediana de edades:", mediana_edad, "\n")
## Mediana de edades: 45
cat("Edad máxima:", edad_max, "\n")
## Edad máxima: 70
cat("Edad mínima:", edad_min, "\n")
## Edad mínima: 18
2.Una empresa de comercio electrónico quiere analizar el rendimiento anual de sus 5 productos más vendidos. Para ello, dispone de las cifras de ventas por trimestre: Q1 (enero-marzo), Q2 (abril-junio), Q3 (julio-septiembre) y Q4 (octubre-diciembre). Construya en R una matriz donde:
Cada fila represente un producto (Producto 1, Producto 2, …, Producto 5).
Cada columna represente un trimestre (Q1, Q2, Q3, Q4). • Los valores sean las ventas en unidades o en dólares (puede generar los datos de forma ficticia, asegurándose de incluir variaciones realistas entre trimestres y productos).
Asigne nombres a las filas y columnas usando rownames() y colnames().
Calcule la suma total de ventas por producto (ventas anuales de cada producto).
Calcule la suma total de ventas por trimestre (ventas de todos los productos en cada trimestre). Puede usar funciones como rowSums() y colSums() para obtener los totales rápidamente.
# Generar datos ficticios de ventas
ventas <- matrix(c(
1200, 1500, 1800, 2100, # Producto 1
900, 1100, 1300, 1600, # Producto 2
500, 700, 1200, 1500, # Producto 3
2000, 2500, 2700, 3000, # Producto 4
800, 950, 1100, 1400 # Producto 5
), nrow = 5, byrow = TRUE)
# Asignar nombres a filas y columnas
rownames(ventas) <- paste("Producto", 1:5)
colnames(ventas) <- c("Q1", "Q2", "Q3", "Q4")
# Mostrar la matriz
print("Matriz de ventas trimestrales:")
## [1] "Matriz de ventas trimestrales:"
print(ventas)
## Q1 Q2 Q3 Q4
## Producto 1 1200 1500 1800 2100
## Producto 2 900 1100 1300 1600
## Producto 3 500 700 1200 1500
## Producto 4 2000 2500 2700 3000
## Producto 5 800 950 1100 1400
# Calcular totales por producto (ventas anuales)
ventas_totales_producto <- rowSums(ventas)
print("Ventas anuales por producto:")
## [1] "Ventas anuales por producto:"
print(ventas_totales_producto)
## Producto 1 Producto 2 Producto 3 Producto 4 Producto 5
## 6600 4900 3900 10200 4250
# Calcular totales por trimestre
ventas_totales_trimestre <- colSums(ventas)
print("Ventas totales por trimestre:")
## [1] "Ventas totales por trimestre:"
print(ventas_totales_trimestre)
## Q1 Q2 Q3 Q4
## 5400 6750 8100 9600
Si el saldo es negativo, el cliente se clasifica como “Riesgo Alto”.
Si el saldo es positivo o igual a cero, el cliente se clasifica como “Estable”. Cree en R una función llamada crear_cliente() que reciba como argumentos:
id → Código único del cliente (ejemplo: “C101”).
nombre → Nombre completo del cliente (ejemplo: “Juan Pérez”).
edad → Edad en años (ejemplo: 42). • ingresos_mensuales → Ingresos mensuales en moneda local (ejemplo: 3500).
saldo_actual → Saldo actual de la cuenta del cliente (puede ser positivo o negativo). La función debe devolver una lista con todos los datos anteriores y un nuevo elemento llamado categoria_riesgo que:
Sea “Riesgo Alto” si el saldo actual es menor a 0.
Sea “Estable” si el saldo actual es mayor o igual a 0.
Cree un cliente de ejemplo y almacénelo en un objeto llamado cliente_1.
Imprima la información del cliente para verificar que la clasificación de riesgo sea correcta.
# -------------------------------
# Función: crear_cliente()
# Clasifica riesgo según saldo
# -------------------------------
crear_cliente <- function(id, nombre, edad, ingresos_mensuales, saldo_actual) {
# Clasificación de riesgo en función del saldo
categoria <- ifelse(saldo_actual < 0, "Riesgo Alto", "Estable")
# Estructura de salida (lista)
cliente <- list(
id = id,
nombre = nombre,
edad = edad,
ingresos_mensuales = ingresos_mensuales,
saldo_actual = saldo_actual,
categoria_riesgo = categoria
)
return(cliente)
}
# -------------------------------
# Ejemplo: creación de un cliente
# -------------------------------
cliente_1 <- crear_cliente(
id = "C101",
nombre = "Juan Pérez",
edad = 42,
ingresos_mensuales = 3500,
saldo_actual = -250 # Cambia este valor para probar la clasificación
)
# -------------------------------
# Verificación/impresión
# -------------------------------
print(cliente_1)
## $id
## [1] "C101"
##
## $nombre
## [1] "Juan Pérez"
##
## $edad
## [1] 42
##
## $ingresos_mensuales
## [1] 3500
##
## $saldo_actual
## [1] -250
##
## $categoria_riesgo
## [1] "Riesgo Alto"
Nombre (character): nombre del cliente.
Edad (numeric): edad del cliente en años.
Ingresos (numeric): ingresos mensuales del cliente en dólares.
Estado Civil (character): puede ser “Soltero”, “Casado” o “Divorciado”.
Asegúrese de que los datos sean lo más realistas posible o utilice funciones para datos ficticios lo mas variados para facilitar el análisis. Utilice la función data.frame() para construir la tabla y as.factor() o as.data.frame() para transformar la variable categórica.
Convierta la columna Estado Civil a tipo factor.
Justifique por qué es importante convertir variables categóricas en factores en el contexto de la ciencia de datos y el modelado estadístico. Análisis:
Genere un análisis estadístico del data frame usando la función summary().
Interprete los resultados:
Edad: media, mínimo y máximo.
Ingresos: media y rango.
Estado Civil: distribución de categorías.
A partir del data frame anterior, filtre únicamente los clientes con ingresos superiores a 3000 y estado civil ‘Soltero’.
Implemente un bucle for para imprimir un mensaje que indique la categoría de cada cliente según su ingreso: ‘Bajo’ (<2000), ‘Medio’ (2000-4000) o ‘Alto’ (>4000).
# -------------------------------
# Creación de datos ficticios
# -------------------------------
set.seed(8045) # Para reproducibilidad
# Generar vectores
nombres <- paste("Cliente", 1:50)
edades <- sample(18:70, 50, replace = TRUE)
ingresos <- round(runif(50, 1000, 6000), 2) # entre 1000 y 6000 dólares
estado_civil <- sample(c("Soltero", "Casado", "Divorciado"), 50, replace = TRUE)
# Crear data frame
clientes <- data.frame(
Nombre = nombres,
Edad = edades,
Ingresos = ingresos,
Estado_Civil = estado_civil,
stringsAsFactors = FALSE
)
# Convertir Estado Civil a factor
clientes$Estado_Civil <- as.factor(clientes$Estado_Civil)
# -------------------------------
# Justificación del uso de factores
# -------------------------------
# En ciencia de datos, convertir variables categóricas en factores es crucial
# porque permite:
# 1. Optimizar el uso de memoria al almacenar categorías como niveles.
# 2. Facilitar análisis estadísticos y modelado, ya que funciones como lm() o glm()
# tratan correctamente las variables categóricas.
# 3. Mejorar la interpretación de resultados, ya que los factores identifican
# explícitamente que los valores no son continuos, sino categorías.
# -------------------------------
# Análisis estadístico
# -------------------------------
summary(clientes)
## Nombre Edad Ingresos Estado_Civil
## Length:50 Min. :20.00 Min. :1065 Casado :21
## Class :character 1st Qu.:31.25 1st Qu.:2113 Divorciado: 7
## Mode :character Median :43.00 Median :3081 Soltero :22
## Mean :45.30 Mean :3221
## 3rd Qu.:61.50 3rd Qu.:4352
## Max. :70.00 Max. :5811
# Interpretación esperada:
# - Edad: revisar media, mínimo y máximo
# - Ingresos: revisar media y rango
# - Estado Civil: contar cuántos en cada categoría
# -------------------------------
# Filtrar clientes con ingresos > 3000 y solteros
# -------------------------------
clientes_filtrados <- subset(clientes, Ingresos > 3000 & Estado_Civil == "Soltero")
# -------------------------------
# Clasificación de ingresos con bucle for
# -------------------------------
for (i in 1:nrow(clientes)) {
if (clientes$Ingresos[i] < 2000) {
categoria <- "Bajo"
} else if (clientes$Ingresos[i] <= 4000) {
categoria <- "Medio"
} else {
categoria <- "Alto"
}
cat(clientes$Nombre[i], "- Ingreso:", clientes$Ingresos[i],
"- Categoría:", categoria, "\n")
}
## Cliente 1 - Ingreso: 4617.4 - Categoría: Alto
## Cliente 2 - Ingreso: 4351.59 - Categoría: Alto
## Cliente 3 - Ingreso: 2099.49 - Categoría: Medio
## Cliente 4 - Ingreso: 4351.68 - Categoría: Alto
## Cliente 5 - Ingreso: 2154.64 - Categoría: Medio
## Cliente 6 - Ingreso: 1496.76 - Categoría: Bajo
## Cliente 7 - Ingreso: 1264.7 - Categoría: Bajo
## Cliente 8 - Ingreso: 2528.69 - Categoría: Medio
## Cliente 9 - Ingreso: 1835.39 - Categoría: Bajo
## Cliente 10 - Ingreso: 4497.26 - Categoría: Alto
## Cliente 11 - Ingreso: 2577.53 - Categoría: Medio
## Cliente 12 - Ingreso: 4417.01 - Categoría: Alto
## Cliente 13 - Ingreso: 4499.92 - Categoría: Alto
## Cliente 14 - Ingreso: 5810.7 - Categoría: Alto
## Cliente 15 - Ingreso: 2911.87 - Categoría: Medio
## Cliente 16 - Ingreso: 3743.41 - Categoría: Medio
## Cliente 17 - Ingreso: 3573.43 - Categoría: Medio
## Cliente 18 - Ingreso: 1817.67 - Categoría: Bajo
## Cliente 19 - Ingreso: 1485.26 - Categoría: Bajo
## Cliente 20 - Ingreso: 1845.07 - Categoría: Bajo
## Cliente 21 - Ingreso: 1233.47 - Categoría: Bajo
## Cliente 22 - Ingreso: 2342.82 - Categoría: Medio
## Cliente 23 - Ingreso: 3172.85 - Categoría: Medio
## Cliente 24 - Ingreso: 1065.21 - Categoría: Bajo
## Cliente 25 - Ingreso: 5226.92 - Categoría: Alto
## Cliente 26 - Ingreso: 4224.51 - Categoría: Alto
## Cliente 27 - Ingreso: 3175.14 - Categoría: Medio
## Cliente 28 - Ingreso: 1300.65 - Categoría: Bajo
## Cliente 29 - Ingreso: 2548.25 - Categoría: Medio
## Cliente 30 - Ingreso: 2621.92 - Categoría: Medio
## Cliente 31 - Ingreso: 2619.66 - Categoría: Medio
## Cliente 32 - Ingreso: 2876.1 - Categoría: Medio
## Cliente 33 - Ingreso: 4018.27 - Categoría: Alto
## Cliente 34 - Ingreso: 4261.26 - Categoría: Alto
## Cliente 35 - Ingreso: 1470.93 - Categoría: Bajo
## Cliente 36 - Ingreso: 1261.88 - Categoría: Bajo
## Cliente 37 - Ingreso: 2015.19 - Categoría: Medio
## Cliente 38 - Ingreso: 5438.87 - Categoría: Alto
## Cliente 39 - Ingreso: 4940.22 - Categoría: Alto
## Cliente 40 - Ingreso: 2568.58 - Categoría: Medio
## Cliente 41 - Ingreso: 2990.03 - Categoría: Medio
## Cliente 42 - Ingreso: 5419.68 - Categoría: Alto
## Cliente 43 - Ingreso: 3631.51 - Categoría: Medio
## Cliente 44 - Ingreso: 5196.81 - Categoría: Alto
## Cliente 45 - Ingreso: 3259.31 - Categoría: Medio
## Cliente 46 - Ingreso: 2646.86 - Categoría: Medio
## Cliente 47 - Ingreso: 4106.98 - Categoría: Alto
## Cliente 48 - Ingreso: 5314.65 - Categoría: Alto
## Cliente 49 - Ingreso: 4914.71 - Categoría: Alto
## Cliente 50 - Ingreso: 3303.57 - Categoría: Medio
Simule en R el registro de temperaturas utilizando valores aleatorios generados con runif() entre 20°C y 35°C.
Utilice un bucle repeat para generar las lecturas.
Imprima cada valor de temperatura registrado.
Incluya una condición break que detenga el proceso cuando se detecte una temperatura superior a 30°C.
Guarde todas las temperaturas registradas antes de la detención en un vector.
Calcule e interprete la temperatura media registrada hasta el momento de corte.
Recuerde que repeat ejecuta un ciclo indefinidamente hasta que se cumple una condición break
# -----------------------------------------
# Simulación de control de calidad - Temperatura
# -----------------------------------------
set.seed(123) # Para reproducibilidad (opcional)
temperaturas <- numeric(0) # Vector para guardar las lecturas
repeat {
# Generar una lectura aleatoria entre 20 y 35 °C
lectura <- runif(1, min = 20, max = 35)
# Guardar la lectura
temperaturas <- c(temperaturas, lectura)
# Imprimir la lectura (sin paste / sprintf)
cat("Lectura:", round(lectura, 2), "°C\n")
# Condición de parada: si supera 30 °C, detenemos
if (lectura > 30) break
}
## Lectura: 24.31 °C
## Lectura: 31.82 °C
# Temperatura media hasta el momento de corte (incluye la lectura de corte)
media_temp <- mean(temperaturas)
cat("\nResumen de la simulación:\n")
##
## Resumen de la simulación:
cat("Cantidad de lecturas:", length(temperaturas), "\n")
## Cantidad de lecturas: 2
cat("Temperatura media hasta el corte:", round(media_temp, 2), "°C\n")
## Temperatura media hasta el corte: 28.07 °C
cat("Primera lectura:", round(temperaturas[1], 2), "°C\n")
## Primera lectura: 24.31 °C
cat("Última lectura (corte):", round(tail(temperaturas, 1), 2), "°C\n")
## Última lectura (corte): 31.82 °C