Taller en R con vectores, matrices, funciones y data frames; incluye dos alternativas de solución en ejercicios clave para comparar enfoques.
En el Punto 1 se trabajó con la variable edad de una base de clientes, simulando 40 registros mediante un vector en R generado con la función sample(). A partir de estos datos, se calcularon los estadísticos descriptivos fundamentales —media, mediana, valor máximo y valor mínimo—, con el fin de ilustrar cómo estas medidas permiten segmentar el mercado, personalizar campañas y comprender patrones de consumo en el sector retail.
#======= ======= ======= ======= ======= ======= ======= PUNTO 1. ==============
# Creo un Edadvp1 le asigno vector c, asigno un sample con un rango de 18 a 70 años y creo 40 numeros
#REPLACE, permite repetir numeros
Edadvp1=c(sample(18:70, 40, replace =TRUE))
Edadvp1
## [1] 55 33 38 60 56 39 24 47 51 23 69 36 54 63 38 29 32 18 45 66 21 58 35 66 20
## [26] 49 69 62 55 67 45 62 46 41 40 46 41 51 53 20
MEAN1 <- mean(Edadvp1)
MEDIAN1 <- median(Edadvp1)
MAX1 <- max(Edadvp1)
MIN1 <- min(Edadvp1)
cat("\nLa media de la edad es:",MEAN1, "\nLa Mediana es:",MEDIAN1,"\n La Máxima es:",MAX1,"\n la Mínima es:",MIN1)
##
## La media de la edad es: 45.575
## La Mediana es: 46
## La Máxima es: 69
## la Mínima es: 18
Edadvp1
con 40 edades
aleatorias entre 18 y 70 usando
sample(18:70, 40, replace = TRUE)
. El argumento
replace=TRUE
permite repeticiones.Edadvp1
para confirmar los valores simulados.mean(Edadvp1)
(media), median(Edadvp1)
(mediana),
max(Edadvp1)
(máximo) y min(Edadvp1)
(mínimo).En el Punto 2 se planteó la construcción de una matriz en R para simular el rendimiento anual de cinco productos más vendidos en una empresa de comercio electrónico. Cada fila representa un producto y cada columna un trimestre del año (Q1, Q2, Q3 y Q4), con datos ficticios de ventas en unidades o dólares. Además de asignar nombres a filas y columnas, se calcularon los totales de ventas anuales por producto (suma por filas) y los totales de ventas por trimestre (suma por columnas), utilizando funciones como rowSums() y colSums(). Este ejercicio permite organizar la información de manera estructurada y obtener un análisis comparativo entre productos y periodos de venta.
#======= ======= ======= ======= ======= ======= ======= PUNTO 2. ==============
#para este ejercicio voy a crear 3 matrices la primera para los precios,
#serán aletorios, aunque en el mundo real no es algo normal, quiero porbar dos matrices aleatorias
#La segunda matriz esta orientada a crear las unidades vendidas tambien de manera aletoria entre 0 y 100 Productos
#La 3ra matriz es para multiplicar
#MATRIZ 1
#Creo una Matriz de Precios de 5 filas y 4 columnas, con llenado aleatorio entre 10 y 50, con 20 elementos, se pueden repetir valores
PrecioM=matrix(sample(10:50,20, replace = FALSE,), nrow = 5, ncol = 4)
row.names(PrecioM)=c("P1Arroz","P2Panela","P3Cafe","P4Pan","P5Aceite") # Asgino los nombres de cada Fila
colnames(PrecioM)=c("Q1","Q2","Q3","Q4") #asigno los nombres de cada Columna
PrecioM # Muestro la matriz
## Q1 Q2 Q3 Q4
## P1Arroz 11 45 25 49
## P2Panela 16 41 19 27
## P3Cafe 21 48 34 18
## P4Pan 22 20 13 12
## P5Aceite 37 28 40 23
#MATRIZ 2
#creo una matriz de unidades en esta se generan numeros aleatorios de unidades vendidas
UnidadesM=matrix(sample(0:100, 20, replace = TRUE), # De 0 a 100, se pueden repetir numeros y vamos a crear 20 numeros
nrow = 5, #5 filas
ncol = 4) #4 columnas
row.names(UnidadesM)=c("P1Arroz","P2Panela","P3Cafe","P4Pan","P5Aceite") # Asgino los nombres de cada Fila
colnames(UnidadesM)=c("Q1","Q2","Q3","Q4") #asigno los nombres de cada Columna
UnidadesM #Muestro Matriz
## Q1 Q2 Q3 Q4
## P1Arroz 36 73 61 13
## P2Panela 97 79 100 30
## P3Cafe 56 35 49 83
## P4Pan 64 13 40 39
## P5Aceite 14 76 40 22
#MATRIZ 3
VentasM=(UnidadesM*PrecioM) # Cree una matriz VentasM para que multiplique Las unidades y el precio
VentasM # Acá Muestro la Tabla
## Q1 Q2 Q3 Q4
## P1Arroz 396 3285 1525 637
## P2Panela 1552 3239 1900 810
## P3Cafe 1176 1680 1666 1494
## P4Pan 1408 260 520 468
## P5Aceite 518 2128 1600 506
#SUMA DE PRODUCTO Y MATRICES
#Creo un objeto Llamado SumaUnidades y aplico ROWSUMS- Genero que en ese objeto se guarde la suma de las Filas (Productos)
SumaUnidades=rowSums(VentasM)
#Creo un objeto llamado SumaVentas aplico COLSUMS-El objeto va a recibir el valor de la suma de las Columnas Q1 hasta Q4
SumaVentas=colSums(VentasM)
#Crear una Fila y una Columna para mostar los totales que guarde con el RowSums y el ColSums
#Creo una Tabla para almacenar los datos nuevos, CBin=crea una nueva columna
#Tomo la Matriz3, donde almacene los valores*unidades,la columna nueva se Llama TotalAñoQ y le asigno SumaUnidades.
Tabla1=cbind(VentasM, TotalAñoQ=SumaUnidades)
Tabla1 #Muestro la Tabla Para ver la nueva columna
## Q1 Q2 Q3 Q4 TotalAñoQ
## P1Arroz 396 3285 1525 637 5843
## P2Panela 1552 3239 1900 810 7501
## P3Cafe 1176 1680 1666 1494 6016
## P4Pan 1408 260 520 468 2656
## P5Aceite 518 2128 1600 506 4752
#A la Tabla1, que ya le había creado una columna, le creo una Fila rbind para unificar datos
#En la Tabla 1, La fila nueva se llama Total Año, y le asigno como vectores, la Suma Ventas, y le suma de estas.
Tabla1=rbind(Tabla1,TotalAño=c(SumaVentas,sum(SumaVentas)))
Tabla1
## Q1 Q2 Q3 Q4 TotalAñoQ
## P1Arroz 396 3285 1525 637 5843
## P2Panela 1552 3239 1900 810 7501
## P3Cafe 1176 1680 1666 1494 6016
## P4Pan 1408 260 520 468 2656
## P5Aceite 518 2128 1600 506 4752
## TotalAño 5050 10592 7211 3915 26768
#Creo un objeto para asignar los datos de la Tabla 1, ademas va a recorrer la tabla agregando el $
TablaImpresa=apply(Tabla1,c(1,2), function(x) paste0("$",x))
cat("\n=== Unidades ===\n"); print(UnidadesM)
##
## === Unidades ===
## Q1 Q2 Q3 Q4
## P1Arroz 36 73 61 13
## P2Panela 97 79 100 30
## P3Cafe 56 35 49 83
## P4Pan 64 13 40 39
## P5Aceite 14 76 40 22
cat("\n=== Precios Dolares $ x Unidad ===\n");print(PrecioM)
##
## === Precios Dolares $ x Unidad ===
## Q1 Q2 Q3 Q4
## P1Arroz 11 45 25 49
## P2Panela 16 41 19 27
## P3Cafe 21 48 34 18
## P4Pan 22 20 13 12
## P5Aceite 37 28 40 23
cat("\n=== Ventas Totales US ===\n"); print(noquote(TablaImpresa))
##
## === Ventas Totales US ===
## Q1 Q2 Q3 Q4 TotalAñoQ
## P1Arroz $396 $3285 $1525 $637 $5843
## P2Panela $1552 $3239 $1900 $810 $7501
## P3Cafe $1176 $1680 $1666 $1494 $6016
## P4Pan $1408 $260 $520 $468 $2656
## P5Aceite $518 $2128 $1600 $506 $4752
## TotalAño $5050 $10592 $7211 $3915 $26768
#Crear un clico FOR para imprimir un mensaje con cada producto las venta de unidades totales y el valor Total
#creo un objeto llamado productos y le asigno los nombres de la tabla VentasM
productos=rownames(VentasM)
#Creo el ciclo FOR
for (i in 1:length(productos)) { #El length me permite saber cuantos elementos tiene productos y le indica al For cuando parar
#Uso cat para unir los mensajes
cat( "\n El producto", productos[i],
"Vendió al año", sum(UnidadesM[i]),"Unidades",
"El total de ventas fue $",SumaUnidades[i], "Dolares.\n")
} # cierro el corchete FOR
##
## El producto P1Arroz Vendió al año 36 Unidades El total de ventas fue $ 5843 Dolares.
##
## El producto P2Panela Vendió al año 97 Unidades El total de ventas fue $ 7501 Dolares.
##
## El producto P3Cafe Vendió al año 56 Unidades El total de ventas fue $ 6016 Dolares.
##
## El producto P4Pan Vendió al año 64 Unidades El total de ventas fue $ 2656 Dolares.
##
## El producto P5Aceite Vendió al año 14 Unidades El total de ventas fue $ 4752 Dolares.
repeat { ... }
, el cual se ejecuta indefinidamente hasta
encontrar un break
.runif(100, 20, 35)
y las redondeo con
round(..., 0)
.any(Temperature > 30)
para verificar si al menos una de
las 100 lecturas supera los 30 °C.break
para salir del
repeat
.Temperature
la media (mean()
),
la desviación estándar (sd()
) y la mediana
(median()
).Temperature
completo y reporto los tres estadísticos formateados con
cat(sprintf(...))
.El ejercicio automatiza el registro de 32 clientes, asigna un ID, simula sus datos, clasifica su riesgo financiero según el saldo y consolida todo en un data frame listo para análisis.
#======= ======= ======= ======= ======= ======= ======= PUNTO 3======= complejo VECTOR, FUNCIÓN, LISTA, DATA FRAME
# ======= 1. Creo una base de posibles nombres , lista de la clase de fundamentos
NombreAlt=c( "KAKELLY ALVARADO","DARNEYI ASTUDILLO","YULIETH BENAVIDES","HERNAN CAICEDO","JOSE CASTELLANOS",
"MARGGY CASTILLO","HERNAN CRUZ","MAIRA DIAZ","CRISTINA GARNICA","LUIS GUTIERREZ",
"CLAUDIA GUTIERREZ","ANDRES JIMENEZ","JAMES MARMOLEJO","JHONATAN MARQUEZ","MARIA MORALES",
"BRAYAN MORAN","UBALDO MUÑOZ","JESUS NIETO","MARIA POLO","JENNY QUINTERO",
"LUIS RAMIREZ","MARIA RESTREPO","DIEGO RIAÑO","JUAN RIOS","DIEGO ROA",
"JUAN RODRIGUEZ","ADRIANA RODRIGUEZ","GISELLE ROJAS","MANUEL ROMERO","MARIA SANCHEZ",
"JEINER VELANDIA","ALEXANDER VERA")
NombreAlt# Imprime el objeto
## [1] "KAKELLY ALVARADO" "DARNEYI ASTUDILLO" "YULIETH BENAVIDES"
## [4] "HERNAN CAICEDO" "JOSE CASTELLANOS" "MARGGY CASTILLO"
## [7] "HERNAN CRUZ" "MAIRA DIAZ" "CRISTINA GARNICA"
## [10] "LUIS GUTIERREZ" "CLAUDIA GUTIERREZ" "ANDRES JIMENEZ"
## [13] "JAMES MARMOLEJO" "JHONATAN MARQUEZ" "MARIA MORALES"
## [16] "BRAYAN MORAN" "UBALDO MUÑOZ" "JESUS NIETO"
## [19] "MARIA POLO" "JENNY QUINTERO" "LUIS RAMIREZ"
## [22] "MARIA RESTREPO" "DIEGO RIAÑO" "JUAN RIOS"
## [25] "DIEGO ROA" "JUAN RODRIGUEZ" "ADRIANA RODRIGUEZ"
## [28] "GISELLE ROJAS" "MANUEL ROMERO" "MARIA SANCHEZ"
## [31] "JEINER VELANDIA" "ALEXANDER VERA"
# ======= 2. creo una función ID
IdAut<-function(){ #voy a crear la función con 32 datos adentro, tengo 32 clientes
#sprintf: Formatea texto con patrones específicos
#C: Texto fijo del codigo Cliente
#%02d -> 02 son los digitos que voy a usar, %d -> indica que son un numero entero
sprintf("C%02d", 1:32)
}
print(IdAut()) #muestra los ID
## [1] "C01" "C02" "C03" "C04" "C05" "C06" "C07" "C08" "C09" "C10" "C11" "C12"
## [13] "C13" "C14" "C15" "C16" "C17" "C18" "C19" "C20" "C21" "C22" "C23" "C24"
## [25] "C25" "C26" "C27" "C28" "C29" "C30" "C31" "C32"
#============ 3. FUNCIÓN LISTA======
cliente_crear<-function(id,nombre,edad,ing_men,saldo_now)#cierro función
{#Ciclo IF para evaluar el riesgo
if(saldo_now<0){cate_riesgo="RIESGO ALTO"}
else {cate_riesgo= "ESTABLE"}
#cierro IF función
#============== 4. CREAR LISTA==========
cliente_lista<-list(
id=id,
nombre=nombre,
edad=edad,
ing_men=ing_men,
saldo_now = saldo_now,
cate_riesgo=cate_riesgo
)
return(cliente_lista)
}
#================ VOY A CREAR UN DATA FRAME==========
ids<-IdAut() #Uso mi funcion para crear ID punto 2
#voy a crear datos aleatorios con los puntos 1 y 2
edades1=sample(25:65,32, replace = TRUE)
ingresos=sample(2000:8000,32,replace = TRUE)
saldos<-sample(-3000:5000,32,replace = TRUE)
### Crear otra funcion para empezar a llenar los objetos por medio de una Lista
clientes_full<-list()
for (i in 1:32) {
clientes_full[[i]]<-cliente_crear(
id=ids[i], # acá estoy creado la lista con los datos que ya tenai de la función
nombre=NombreAlt[i], #esta hciendo un recorrido por le ciclo for i hasta llegar a 32
edad=edades1[i],
ing_men=ingresos[i],
saldo_now=saldos[i]
)
}
###### DATA FRAME
Tb_clientes<-data.frame( #
ID=sapply(clientes_full,function(x)x$id),
Nombre=sapply(clientes_full,function(x)x$nombre),
Edad = sapply(clientes_full, function(x) x$edad),
Ingreso_Mensual = sapply(clientes_full, function(x) x$ing_men),
Saldo_Actual = sapply(clientes_full, function(x) x$saldo_now),
Categoria_Riesgo = sapply(clientes_full, function(x) x$cate_riesgo)
)
#Mostar Tabla
print(Tb_clientes)
## ID Nombre Edad Ingreso_Mensual Saldo_Actual Categoria_Riesgo
## 1 C01 KAKELLY ALVARADO 51 2997 -1343 RIESGO ALTO
## 2 C02 DARNEYI ASTUDILLO 26 4817 -656 RIESGO ALTO
## 3 C03 YULIETH BENAVIDES 45 6349 -972 RIESGO ALTO
## 4 C04 HERNAN CAICEDO 65 5150 228 ESTABLE
## 5 C05 JOSE CASTELLANOS 43 2634 3902 ESTABLE
## 6 C06 MARGGY CASTILLO 46 6818 -1357 RIESGO ALTO
## 7 C07 HERNAN CRUZ 50 5672 -1633 RIESGO ALTO
## 8 C08 MAIRA DIAZ 27 3115 2719 ESTABLE
## 9 C09 CRISTINA GARNICA 33 4806 1363 ESTABLE
## 10 C10 LUIS GUTIERREZ 48 7769 -715 RIESGO ALTO
## 11 C11 CLAUDIA GUTIERREZ 31 6794 -2587 RIESGO ALTO
## 12 C12 ANDRES JIMENEZ 51 7076 3005 ESTABLE
## 13 C13 JAMES MARMOLEJO 54 2275 622 ESTABLE
## 14 C14 JHONATAN MARQUEZ 42 6991 -1905 RIESGO ALTO
## 15 C15 MARIA MORALES 60 3409 4378 ESTABLE
## 16 C16 BRAYAN MORAN 25 4239 -1945 RIESGO ALTO
## 17 C17 UBALDO MUÑOZ 47 7032 2371 ESTABLE
## 18 C18 JESUS NIETO 32 4033 1528 ESTABLE
## 19 C19 MARIA POLO 56 6600 1281 ESTABLE
## 20 C20 JENNY QUINTERO 47 5778 186 ESTABLE
## 21 C21 LUIS RAMIREZ 31 6138 -1873 RIESGO ALTO
## 22 C22 MARIA RESTREPO 45 4512 -1387 RIESGO ALTO
## 23 C23 DIEGO RIAÑO 61 7819 508 ESTABLE
## 24 C24 JUAN RIOS 45 6465 -2589 RIESGO ALTO
## 25 C25 DIEGO ROA 61 5890 -1947 RIESGO ALTO
## 26 C26 JUAN RODRIGUEZ 60 6305 -2712 RIESGO ALTO
## 27 C27 ADRIANA RODRIGUEZ 49 3999 196 ESTABLE
## 28 C28 GISELLE ROJAS 32 6016 -423 RIESGO ALTO
## 29 C29 MANUEL ROMERO 52 6854 335 ESTABLE
## 30 C30 MARIA SANCHEZ 27 5916 1994 ESTABLE
## 31 C31 JEINER VELANDIA 61 2766 2881 ESTABLE
## 32 C32 ALEXANDER VERA 62 6373 4514 ESTABLE
NombreAlt
con 32 nombres.IdAut()
que usa sprintf("C%02d", 1:32)
para
producir C01
–C32
.cliente_crear(id, nombre, edad, ing_men, saldo_now)
clasifica el riesgo con if (saldo_now < 0)
→
"RIESGO ALTO"
; en caso contrario "ESTABLE"
, y
devuelve una lista con todos los campos +
cate_riesgo
.edades1
,
ingresos
y saldos
aleatorios; asigno
ids <- IdAut()
.1:32
y guardo en clientes_full[[i]]
la lista
devuelta por cliente_crear(...)
para cada persona.sapply()
para
extraer cada campo y creo Tb_clientes
con las columnas
ID
, Nombre
, Edad
,
Ingreso_Mensual
, Saldo_Actual
y
Categoria_Riesgo
.Tb_clientes
para
confirmar que cada cliente quedó registrado y clasificado.Esta versión encapsula todo en una sola función: recibe los datos de un cliente, calcula su nivel de riesgo según el saldo y entrega una lista con la información lista para usar o almacenar. Ideal para crear y revisar casos individuales de forma rápida.
#======= ======= ======= ======= ======= ======= ======= PUNTO 3 SENCILLO, lista y función, IF
## Paso 1 ##
## Crar una función que tiene dos elementos 1- Validador de Riesgo con un IF
# 2-Crea una lista
CLIENTRISK <-function(ID,NOMBRE,EDAD,INGRESOMEN,SALDOACT) # DECLARO LOS OBJETOS QUE VA A TENER LA FUNCIÓN
{#ABRO LA FUNCIÓN
#VALIDO CON UN IF NIVEL DE RIESGO
if (SALDOACT>=0)
{NVLRIESGO <- "ESTABLE"}
else{NVLRIESGO <- "RIESGO ALTO"}
##AHORA CREO LA LISTA , LA LISTA ESTÁ DENTRO DE LA FUNCTION POR ESO NO REQUIERO LLAMARLA DESPUES ESTÁ INTEGRADA
CLIENT <- list(
ID=ID,
NOMBRE=NOMBRE,
EDAD=EDAD,
INGRESOMEN=INGRESOMEN,
SALDOACT=SALDOACT,
NVLRIESGO=NVLRIESGO
)
return(CLIENT)
}
####### Ahora voy a crear un cliente usando la función creada CLIENTRISK
ClienteC001 <- CLIENTRISK("C001", "JEINER VELANDIA", 37,6000,-200)
print(ClienteC001)#imprimo clientes, a diferencia del ejercioa anterior solo me va a mostar los datos de los clientes creados.
## $ID
## [1] "C001"
##
## $NOMBRE
## [1] "JEINER VELANDIA"
##
## $EDAD
## [1] 37
##
## $INGRESOMEN
## [1] 6000
##
## $SALDOACT
## [1] -200
##
## $NVLRIESGO
## [1] "RIESGO ALTO"
CLIENTRISK(ID, NOMBRE, EDAD, INGRESOMEN, SALDOACT)
.if
: si
SALDOACT >= 0
→ NVLRIESGO = "ESTABLE"
; de
lo contrario NVLRIESGO = "RIESGO ALTO"
.CLIENT
que reúne todos
los campos más NVLRIESGO
.return(CLIENT)
.ClienteC001 <- CLIENTRISK("C001", "JEINER VELANDIA", 37, 6000, -200)
.se solicitó crear un data frame en R con información ficticia de 50 clientes, incluyendo nombre, edad, ingresos mensuales y estado civil. La columna de estado civil debía transformarse en un factor para permitir un análisis estadístico más preciso. A partir de este conjunto de datos, se realizó un análisis descriptivo con la función summary(), interpretando medidas de tendencia central y dispersión para edad e ingresos, así como la distribución de categorías de estado civil. Finalmente, se aplicaron filtros para identificar clientes solteros con ingresos superiores a 3000 y se programó un ciclo for para clasificar los ingresos en tres categorías: Bajo (<2000), Medio (2000–4000) y Alto (>4000).
#======= ======= ======= ======= ======= ======= ======= PUNTO 4 ===============================
#### 1ER PASO ===
#### Crear un vector con los nombres
# Estos nombres son los 32 de la clase mas 18 creados aletoriament
NAMESBD <- c("KAKELLY ALVARADO","DARNEYI ASTUDILLO","YULIETH BENAVIDES","HERNAN CAICEDO","JOSE CASTELLANOS",
"MARGGY CASTILLO","HERNAN CRUZ","MAIRA DIAZ","CRISTINA GARNICA","LUIS GUTIERREZ",
"CLAUDIA GUTIERREZ","ANDRES JIMENEZ","JAMES MARMOLEJO","JHONATAN MARQUEZ","MARIA MORALES",
"BRAYAN MORAN","UBALDO MUÑOZ","JESUS NIETO","MARIA POLO","JENNY QUINTERO",
"LUIS RAMIREZ","MARIA RESTREPO","DIEGO RIAÑO","JUAN RIOS","DIEGO ROA",
"JUAN RODRIGUEZ","ADRIANA RODRIGUEZ","GISELLE ROJAS","MANUEL ROMERO","MARIA SANCHEZ",
"JEINER VELANDIA","ALEXANDER VERA", "SOFIA MENDEZ","NICOLAS CAMPO","FABIOLA CORDOBA","MATEO BERMUDEZ","ANGELA TAFUR",
"JORGE SALAMANCA","NATALIA CARDENAS","HUGO BELTRAN","VICTOR MONTENEGRO","CAMILA PEÑA",
"MARIO CARRILLO","ANDREA MURILLO","OSCAR PARRA","CAROLINA LOPEZ","FERNANDO PRIETO",
"KAREN ORTIZ","EDUARDO PEREZ","VALENTINA TORO")
###2DO PASO
##Crear un SED para datos aleatorios
set.seed(123)
n <- length(NAMESBD)# EVITA ESCRIBIR EL NUMERO 5 EN LOS SAMPLES Y LO REMPLAZO POR n
EDAD <- sample(18:65,n, replace = TRUE) #Creo un Sample para crear edades aletorias entre 18 y 65 con 50 datos se pueden repetir
INGRESO <- sample(1000:8000,n,replace = TRUE)#creo los ingresos aleatorios entre 2000 y 8000
### Creo un objeto llamado estado civil, le agrego un obj llamado prob, lo que busco es que soltero salga70%, casado 25%, divorciado=5%
ESTADO_CIVIL <- sample( c("SOLTERO", "CASADO", "DIVORCIADO"),n, replace = TRUE, prob=c(0.7,0.25,0.05))
FESTADO_CIVIL <- factor(ESTADO_CIVIL,levels = c("Soltero", "Casado", "Divorciado")) #creo un objeto donde almaceno el factor estado civil
##3er paso Creo un data frame Clientes ING
CLIENTES_ING <- data.frame( #mi data frame se llama CLIENTES_ING
Nombre=NAMESBD, #DENTRO DEL DATA FRAME / HOJA DE EXCEL, ESTOY cargando los datos que cree.
Edad=EDAD,
Ingresos=INGRESO,
EstadoCivil=ESTADO_CIVIL
)
##### 4TO PASO ANALISIS ESTIDISTICO BASICO
summary(CLIENTES_ING)
## Nombre Edad Ingresos EstadoCivil
## Length:50 Min. :20.00 Min. :1040 Length:50
## Class :character 1st Qu.:29.00 1st Qu.:2864 Class :character
## Mode :character Median :42.50 Median :4641 Mode :character
## Mean :40.26 Mean :4483
## 3rd Qu.:50.50 3rd Qu.:6202
## Max. :62.00 Max. :7741
# aca hago el promedio, mediana, desviación estandar desde el data frame y le digo que tome Edad
mean(CLIENTES_ING$edad); median(CLIENTES_ING$edad); sd(CLIENTES_ING$edad)
## Warning in mean.default(CLIENTES_ING$edad): argument is not numeric or logical:
## returning NA
## [1] NA
## NULL
## [1] NA
# aca hago el promedio, mediana, desviación estandar desde el data frame y le digo que tome INGRESOS
mean(CLIENTES_ING$Ingresos); median(CLIENTES_ING$Ingresos); sd(CLIENTES_ING$Ingresos)
## [1] 4483.36
## [1] 4641
## [1] 2057.642
# Acá voy a usar el table para saber la distribución de cattegorias
table(CLIENTES_ING$EstadoCivil)
##
## CASADO DIVORCIADO SOLTERO
## 8 2 40
prop.table(table(CLIENTES_ING$EstadoCivil)) # Uso el prop.table para saber los porcentajes % relativas de estado civil
##
## CASADO DIVORCIADO SOLTERO
## 0.16 0.04 0.80
#### 5to paso
### Filtro para solteros alto
CLIENTES_ING ### QUIERO VER EL DATA FRAME COMPLETO
## Nombre Edad Ingresos EstadoCivil
## 1 KAKELLY ALVARADO 48 5817 SOLTERO
## 2 DARNEYI ASTUDILLO 32 4936 SOLTERO
## 3 YULIETH BENAVIDES 31 5088 SOLTERO
## 4 HERNAN CAICEDO 20 3906 DIVORCIADO
## 5 JOSE CASTELLANOS 59 5248 SOLTERO
## 6 MARGGY CASTILLO 60 1293 SOLTERO
## 7 HERNAN CRUZ 54 1276 SOLTERO
## 8 MAIRA DIAZ 31 6582 SOLTERO
## 9 CRISTINA GARNICA 42 1040 SOLTERO
## 10 LUIS GUTIERREZ 43 7574 CASADO
## 11 CLAUDIA GUTIERREZ 44 7233 SOLTERO
## 12 ANDRES JIMENEZ 22 1315 CASADO
## 13 JAMES MARMOLEJO 44 7671 SOLTERO
## 14 JHONATAN MARQUEZ 45 3821 SOLTERO
## 15 MARIA MORALES 26 3794 CASADO
## 16 BRAYAN MORAN 46 3503 CASADO
## 17 UBALDO MUÑOZ 52 7741 DIVORCIADO
## 18 JESUS NIETO 25 4925 SOLTERO
## 19 MARIA POLO 43 2182 SOLTERO
## 20 JENNY QUINTERO 24 1751 SOLTERO
## 21 LUIS RAMIREZ 59 4280 SOLTERO
## 22 MARIA RESTREPO 26 1373 SOLTERO
## 23 DIEGO RIAÑO 36 2841 CASADO
## 24 JUAN RIOS 53 7128 SOLTERO
## 25 DIEGO ROA 31 3081 SOLTERO
## 26 JUAN RODRIGUEZ 34 5611 SOLTERO
## 27 ADRIANA RODRIGUEZ 60 5108 SOLTERO
## 28 GISELLE ROJAS 56 3116 CASADO
## 29 MANUEL ROMERO 29 7133 CASADO
## 30 MARIA SANCHEZ 32 7014 SOLTERO
## 31 JEINER VELANDIA 49 1754 SOLTERO
## 32 ALEXANDER VERA 59 7552 SOLTERO
## 33 SOFIA MENDEZ 62 6427 SOLTERO
## 34 NICOLAS CAMPO 24 6208 SOLTERO
## 35 FABIOLA CORDOBA 26 2005 SOLTERO
## 36 MATEO BERMUDEZ 58 3584 SOLTERO
## 37 ANGELA TAFUR 27 3338 SOLTERO
## 38 JORGE SALAMANCA 40 2447 SOLTERO
## 39 NATALIA CARDENAS 44 4951 SOLTERO
## 40 HUGO BELTRAN 24 4357 SOLTERO
## 41 VICTOR MONTENEGRO 44 4979 SOLTERO
## 42 CAMILA PEÑA 49 5766 SOLTERO
## 43 MARIO CARRILLO 55 7264 SOLTERO
## 44 ANDREA MURILLO 42 2133 SOLTERO
## 45 OSCAR PARRA 51 4229 CASADO
## 46 CAROLINA LOPEZ 46 6183 SOLTERO
## 47 FERNANDO PRIETO 22 6602 SOLTERO
## 48 KAREN ORTIZ 25 2933 SOLTERO
## 49 EDUARDO PEREZ 29 2500 SOLTERO
## 50 VALENTINA TORO 30 5575 SOLTERO
SINGLE_HIGH <- subset(CLIENTES_ING, Ingresos>3000 & EstadoCivil=="SOLTERO") #CREO EL FILTRO
SINGLE_HIGH #MUESTRO EL FILTRTO
## Nombre Edad Ingresos EstadoCivil
## 1 KAKELLY ALVARADO 48 5817 SOLTERO
## 2 DARNEYI ASTUDILLO 32 4936 SOLTERO
## 3 YULIETH BENAVIDES 31 5088 SOLTERO
## 5 JOSE CASTELLANOS 59 5248 SOLTERO
## 8 MAIRA DIAZ 31 6582 SOLTERO
## 11 CLAUDIA GUTIERREZ 44 7233 SOLTERO
## 13 JAMES MARMOLEJO 44 7671 SOLTERO
## 14 JHONATAN MARQUEZ 45 3821 SOLTERO
## 18 JESUS NIETO 25 4925 SOLTERO
## 21 LUIS RAMIREZ 59 4280 SOLTERO
## 24 JUAN RIOS 53 7128 SOLTERO
## 25 DIEGO ROA 31 3081 SOLTERO
## 26 JUAN RODRIGUEZ 34 5611 SOLTERO
## 27 ADRIANA RODRIGUEZ 60 5108 SOLTERO
## 30 MARIA SANCHEZ 32 7014 SOLTERO
## 32 ALEXANDER VERA 59 7552 SOLTERO
## 33 SOFIA MENDEZ 62 6427 SOLTERO
## 34 NICOLAS CAMPO 24 6208 SOLTERO
## 36 MATEO BERMUDEZ 58 3584 SOLTERO
## 37 ANGELA TAFUR 27 3338 SOLTERO
## 39 NATALIA CARDENAS 44 4951 SOLTERO
## 40 HUGO BELTRAN 24 4357 SOLTERO
## 41 VICTOR MONTENEGRO 44 4979 SOLTERO
## 42 CAMILA PEÑA 49 5766 SOLTERO
## 43 MARIO CARRILLO 55 7264 SOLTERO
## 46 CAROLINA LOPEZ 46 6183 SOLTERO
## 47 FERNANDO PRIETO 22 6602 SOLTERO
## 50 VALENTINA TORO 30 5575 SOLTERO
### 5TO PASO voy a crear un data Frame para guardar los datos
### CICLO FOR PARA
for (i in 1:nrow(CLIENTES_ING))
{ # Abro ciclo FOR
ING_FOR <- CLIENTES_ING$Ingresos[i] #### Acá estoy creando el objeto ING_FOR el cual va traer la información del DF Ingresos, y se va a guiar por el i
NAM_FOR <- CLIENTES_ING$Nombre[i]#### Acá estoy creando el objeto ING_FOR el cual va traer la información del DF Nombre, y se va a guiar por el i
### condicional======
if(ING_FOR<2000){cat(i,NAM_FOR, "INGRESO ES DE",ING_FOR,"CATEGORIA BAJO \n")} ## INICIO CON El i para que aparezca la numeración
else if(ING_FOR<=4000){cat(i,NAM_FOR,"INGRESO ES DE",ING_FOR,"CATEGORIA MEDIO\n" )}
else {cat(i,NAM_FOR,"INGRESO ES DE",ING_FOR,"CATEGORIA ALTO\n")}
}
## 1 KAKELLY ALVARADO INGRESO ES DE 5817 CATEGORIA ALTO
## 2 DARNEYI ASTUDILLO INGRESO ES DE 4936 CATEGORIA ALTO
## 3 YULIETH BENAVIDES INGRESO ES DE 5088 CATEGORIA ALTO
## 4 HERNAN CAICEDO INGRESO ES DE 3906 CATEGORIA MEDIO
## 5 JOSE CASTELLANOS INGRESO ES DE 5248 CATEGORIA ALTO
## 6 MARGGY CASTILLO INGRESO ES DE 1293 CATEGORIA BAJO
## 7 HERNAN CRUZ INGRESO ES DE 1276 CATEGORIA BAJO
## 8 MAIRA DIAZ INGRESO ES DE 6582 CATEGORIA ALTO
## 9 CRISTINA GARNICA INGRESO ES DE 1040 CATEGORIA BAJO
## 10 LUIS GUTIERREZ INGRESO ES DE 7574 CATEGORIA ALTO
## 11 CLAUDIA GUTIERREZ INGRESO ES DE 7233 CATEGORIA ALTO
## 12 ANDRES JIMENEZ INGRESO ES DE 1315 CATEGORIA BAJO
## 13 JAMES MARMOLEJO INGRESO ES DE 7671 CATEGORIA ALTO
## 14 JHONATAN MARQUEZ INGRESO ES DE 3821 CATEGORIA MEDIO
## 15 MARIA MORALES INGRESO ES DE 3794 CATEGORIA MEDIO
## 16 BRAYAN MORAN INGRESO ES DE 3503 CATEGORIA MEDIO
## 17 UBALDO MUÑOZ INGRESO ES DE 7741 CATEGORIA ALTO
## 18 JESUS NIETO INGRESO ES DE 4925 CATEGORIA ALTO
## 19 MARIA POLO INGRESO ES DE 2182 CATEGORIA MEDIO
## 20 JENNY QUINTERO INGRESO ES DE 1751 CATEGORIA BAJO
## 21 LUIS RAMIREZ INGRESO ES DE 4280 CATEGORIA ALTO
## 22 MARIA RESTREPO INGRESO ES DE 1373 CATEGORIA BAJO
## 23 DIEGO RIAÑO INGRESO ES DE 2841 CATEGORIA MEDIO
## 24 JUAN RIOS INGRESO ES DE 7128 CATEGORIA ALTO
## 25 DIEGO ROA INGRESO ES DE 3081 CATEGORIA MEDIO
## 26 JUAN RODRIGUEZ INGRESO ES DE 5611 CATEGORIA ALTO
## 27 ADRIANA RODRIGUEZ INGRESO ES DE 5108 CATEGORIA ALTO
## 28 GISELLE ROJAS INGRESO ES DE 3116 CATEGORIA MEDIO
## 29 MANUEL ROMERO INGRESO ES DE 7133 CATEGORIA ALTO
## 30 MARIA SANCHEZ INGRESO ES DE 7014 CATEGORIA ALTO
## 31 JEINER VELANDIA INGRESO ES DE 1754 CATEGORIA BAJO
## 32 ALEXANDER VERA INGRESO ES DE 7552 CATEGORIA ALTO
## 33 SOFIA MENDEZ INGRESO ES DE 6427 CATEGORIA ALTO
## 34 NICOLAS CAMPO INGRESO ES DE 6208 CATEGORIA ALTO
## 35 FABIOLA CORDOBA INGRESO ES DE 2005 CATEGORIA MEDIO
## 36 MATEO BERMUDEZ INGRESO ES DE 3584 CATEGORIA MEDIO
## 37 ANGELA TAFUR INGRESO ES DE 3338 CATEGORIA MEDIO
## 38 JORGE SALAMANCA INGRESO ES DE 2447 CATEGORIA MEDIO
## 39 NATALIA CARDENAS INGRESO ES DE 4951 CATEGORIA ALTO
## 40 HUGO BELTRAN INGRESO ES DE 4357 CATEGORIA ALTO
## 41 VICTOR MONTENEGRO INGRESO ES DE 4979 CATEGORIA ALTO
## 42 CAMILA PEÑA INGRESO ES DE 5766 CATEGORIA ALTO
## 43 MARIO CARRILLO INGRESO ES DE 7264 CATEGORIA ALTO
## 44 ANDREA MURILLO INGRESO ES DE 2133 CATEGORIA MEDIO
## 45 OSCAR PARRA INGRESO ES DE 4229 CATEGORIA ALTO
## 46 CAROLINA LOPEZ INGRESO ES DE 6183 CATEGORIA ALTO
## 47 FERNANDO PRIETO INGRESO ES DE 6602 CATEGORIA ALTO
## 48 KAREN ORTIZ INGRESO ES DE 2933 CATEGORIA MEDIO
## 49 EDUARDO PEREZ INGRESO ES DE 2500 CATEGORIA MEDIO
## 50 VALENTINA TORO INGRESO ES DE 5575 CATEGORIA ALTO
CLIENTRISK(ID, NOMBRE, EDAD, INGRESOMEN, SALDOACT)
.if
: si
SALDOACT >= 0
→ NVLRIESGO = "ESTABLE"
; de
lo contrario NVLRIESGO = "RIESGO ALTO"
.CLIENT
que reúne todos
los campos más NVLRIESGO
.return(CLIENT)
.ClienteC001 <- CLIENTRISK("C001", "JEINER VELANDIA", 37, 6000, -200)
.En el Punto 5 se planteó la simulación de un sistema de control de calidad automatizado en una planta de alimentos, donde se monitorea la temperatura de un lote durante el empaquetado. El ejercicio consiste en generar lecturas aleatorias de temperatura entre 20 °C y 35 °C usando un bucle repeat, imprimir cada valor y detener el proceso con un break cuando se registre una temperatura superior a 30 °C. Todas las temperaturas previas se almacenan en un vector y, con ellas, se calcula la media, la mediana y la desviación estándar hasta el momento de corte. De este modo se simula cómo un sistema automático puede prevenir riesgos en la calidad del producto.
#========================================= PUNTO 5==================================
#USANDO ANY en el REPEAT en este caso correo 100 RUN IF y luego evalua, en este caso el va a crear los 100 datos
#Abre REPEAT
repeat {
#CREO LAS VARIABLE PARA LA TEMPERATURA DE MANERA ALETAORIA CON UN RUNIF Y UN ROUND PARA DEJARLO SIN DECIMALES
Temperature <- runif(100,min = 20, max = 35)
Temperature <- round(Temperature,digits =0 )
# ABRO IF # QUIERO PROBAR UN ANY, EL any revisa todos los 100 vectores
if(any(Temperature>30)){
print("ALERTA !!!! LA TEMPERATURA HA SUPERADO LOS 30ºC")
#El break va dentro del IF
break
} # CIERRO IF
} # CIERRO REPEAT
## [1] "ALERTA !!!! LA TEMPERATURA HA SUPERADO LOS 30ºC"
#Estadistico, como use el Any calcurala sobre 100
PROMEDIO <- mean(Temperature)
DSV <- sd(Temperature)
MEDIANA <- median(Temperature)
####IMPRIMIR
Temperature
## [1] 33 31 30 29 26 28 33 29 33 25 31 24 29 27 24 28 34 34 24 25 35 29 34 27 26
## [26] 30 22 29 24 34 29 28 26 33 25 24 23 23 27 24 23 30 21 31 25 26 32 34 24 34
## [51] 31 30 21 26 27 28 30 34 29 26 28 21 24 26 23 32 22 32 28 30 23 29 25 31 26
## [76] 35 35 31 24 23 29 24 28 32 23 26 27 33 34 33 30 34 28 29 25 25 20 28 33 20
cat(sprintf("El promedio de temperatura ha sido de: %.2f ºC \n La Desviación estándar de la temperatura es de %.2f ºC \n La Mediana de la temperatura ha sido de %.2f",
PROMEDIO, DSV,MEDIANA))
## El promedio de temperatura ha sido de: 28.00 ºC
## La Desviación estándar de la temperatura es de 4.01 ºC
## La Mediana de la temperatura ha sido de 28.00
repeat { ... }
(se ejecuta
indefinidamente hasta un break
).runif(100, 20, 35)
y las
redondeo a enteros con round(..., 0)
.any(Temperature > 30)
para
verificar si al menos una de las 100 lecturas supera 30 °C.break
para salir del
repeat
.Temperature
la media con mean()
, la desviación
estándar con sd()
y la mediana con
median()
.cat(sprintf(...))
.En este ejercicio se simula un sistema de control de calidad que registra temperaturas una por una, deteniendo el proceso inmediatamente cuando aparece un valor mayor a 30 °C. Todas las mediciones registradas hasta ese punto se almacenan en un vector, y con ellas se calculan estadísticos descriptivos (media, desviación estándar y mediana). De esta forma se representa cómo un sistema automatizado puede detenerse ante un riesgo y analizar la información previa.
#========================================= PUNTO 5==================================
#ACA EL CICLO SE ROMPE APENAS DETECTE UN VALOR POR ENCIMA DE 3O
Temperature2 <- NULL## Usare Temperature2 como objeto, le asigno un NULL para evitar que al volver a correr el Ciclo quedé con datos
Temperature2 # El Null garantiza que no tendre datos adentro cuando repita el ciclo
## NULL
#Abre REPEAT
repeat {
#DEBO CREAR DOS VARIABLES UNA TEMP Y OTRA TEMPERATURE2, LA RAZÓN ES QUE QUIEREO QUE EL SISTEMA PARE APENAS DETECTE POR ENCIMA DE 30ºC
Temp <- round(runif(1, min = 20, max = 35),0) # Acá usare un Round para dejar sin decimales la temperatura, el EL RUNIF solo creará de a un
#CREO UN VECTOR QUE VA GUARDANDO LOS DATOS GENERADOS
Temperature2 <- c(Temperature2,Temp)#Va guardando el vector a medida que lo genero con el RUN IF en estte caso Temperature2 Es mi VECTOR
cat("Temperatura registrada",Temp," ºC\n")
if(Temp>30){
print("ALERTA !!!! LA TEMPERATURA HA SUPERADO LOS 30ºC")
#El break va dentro del IF
break
} # CIERRO IF
} # CIERRO REPEAT
## Temperatura registrada 21 ºC
## Temperatura registrada 22 ºC
## Temperatura registrada 32 ºC
## [1] "ALERTA !!!! LA TEMPERATURA HA SUPERADO LOS 30ºC"
#Estadistico, como use el Any calcurala sobre 100
PROMEDIO <- mean(Temperature2)
DSV <- sd(Temperature2)
MEDIANA <- median(Temperature2)
####IMPRIMIR
Temperature2 # Muestro los valores que guardo el Vector para comprobar que si paro el ciclo en la primera de >30
## [1] 21 22 32
cat(sprintf(" 1.El promedio de temperatura ha sido de: %.2f ºC \n 2.La Desviación estándar de la temperatura es de %.2f ºC \n 3.La Mediana de la temperatura ha sido de %.2f ºC",
PROMEDIO, DSV,MEDIANA))
## 1.El promedio de temperatura ha sido de: 25.00 ºC
## 2.La Desviación estándar de la temperatura es de 6.08 ºC
## 3.La Mediana de la temperatura ha sido de 22.00 ºC
Temperature2 <- NULL
para asegurar que empiece vacío y
pueda almacenar las lecturas.repeat
: inicio un ciclo infinito
que solo terminará con un break
.runif(1, 20, 35)
y la redondeo sin
decimales.Temperature2
para conservar el historial de valores.cat()
.break
para detener el ciclo.mean()
), la desviación estándar (sd()
) y la
mediana (median()
) sobre los valores acumulados en
Temperature2
.cat(sprintf(...))
.