# vector en r sus caracteristicas
#Tiene una estructura homogenea, esto quiere decir que todos sus elemnetos deben ser del mismo tipo
#Tambien es unidimensional y se maneja como una secuencia ordenada de datos del mismo tipo
# lista en python sus caracteristicas
#Tiene una estructura heterogénea, puede contener elementos de distinto tipo como booleanos, enteros , etc
#Es mutable, sus elementos se pueden modificar y también puede crecer dinámicamente.
# DataFrame en Python (pandas)
#utiliza un índice explícito y flexible, que puede ser numérico, texto o fechas.Se accede a filas mediante .loc[] ; tambien por .iloc[]
# data.frame en R en términos de indexación
#la indexación de filas es numérica por defecto (1, 2, 3, …),aunque también permite nombres de columna que se accede con corchetes [fila, columna] o trambien con $ para columnas.
# Crear estructuras de datos en R
numeros <- c(10, 25, 30, 15, 40)
nombres <- c("Ana", "Bruno", "Carlos", "Diana", "Elena")
edades <- c(22, 25, 23, 24, 22)
# a) (0.5 puntos) ¿Qué tipo de estructura de datos es numeros?
# Es un vector numerico en R
# b) (0.5 puntos) Escribe el código para crear un data.frame llamado estudiantes que combine nombres, edades y numeros (como columna “notas”).
# Crear un vector numérico con las notas
numeros <- c(10, 25, 30, 15, 40)
# Crear un vector de caracteres con los nombres
nombres <- c("Ana", "Bruno", "Carlos", "Diana", "Elena")
# Crear un vector numérico con las edades
edades <- c(22, 25, 23, 24, 22)
# Combinar los vectores en un data.frame llamado 'estudiantes'
estudiantes <- data.frame(
nombre = nombres, # Columna con los nombres
edad = edades, # Columna con las edades
notas = numeros # Columna con las notas
)
# Mostrar el contenido del data.frame
estudiantes
## nombre edad notas
## 1 Ana 22 10
## 2 Bruno 25 25
## 3 Carlos 23 30
## 4 Diana 24 15
## 5 Elena 22 40
# c) (0.5 puntos) ¿Cómo accederías al nombre del tercer estudiante?
# Usando índices de fila y columna:
# [fila, columna] → fila 3, columna 1 (que corresponde a 'nombre')
estudiantes[3, 1]
## [1] "Carlos"
# Usando el nombre de la columna y el índice del elemento
# Accedemos a la columna 'nombre' y pedimos el 3er valor
estudiantes$nombre[3]
## [1] "Carlos"
# esto me manda a poner, porque no me permite publicar para guardarlo
# Configurar el repositorio
options(repos = c(CRAN = "https://cloud.r-project.org"))
# Vamor a instalar un paquete para luego poder instalar pandas, porque al importar panda, no se puede ejecutar, porque con el paquete reticule puede correr python, pero luego debemos instalar pandas
# Ahora sí puedes instalar cualquier paquete sin problema
install.packages("reticulate") # si aún no lo tienes
## Installing package into 'C:/Users/magno/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'reticulate' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'reticulate'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\magno\AppData\Local\R\win-library\4.5\00LOCK\reticulate\libs\x64\reticulate.dll
## a
## C:\Users\magno\AppData\Local\R\win-library\4.5\reticulate\libs\x64\reticulate.dll:
## Permission denied
## Warning: restored 'reticulate'
##
## The downloaded binary packages are in
## C:\Users\magno\AppData\Local\Temp\RtmpIvmr9p\downloaded_packages
# a) Importa pandas y crea el DataFrame
# ahora que ya lo instalamos, podemos impotar pandas
# Importar la librería pandas
import pandas as pd
# Crear el diccionario de datos
datos = {
'producto': ['Laptop', 'Mouse', 'Teclado', 'Monitor', 'Auriculares'],
'precio': [1200, 25, 75, 300, 150],
'stock': [10, 50, 30, 15, 25]
}
# Convertir el diccionario en un DataFrame de pandas
df = pd.DataFrame(datos)
# Mostrar el DataFrame completo
print(df)
## producto precio stock
## 0 Laptop 1200 10
## 1 Mouse 25 50
## 2 Teclado 75 30
## 3 Monitor 300 15
## 4 Auriculares 150 25
#b) Muestra solo los productos con precio mayor a 100
# Filtrar filas donde el precio sea mayor a 100
productos_caros = df[df['precio'] > 100]
# Mostrar el resultado
print(productos_caros)
## producto precio stock
## 0 Laptop 1200 10
## 3 Monitor 300 15
## 4 Auriculares 150 25
#c) Calcula el precio promedio de todos los productos
# 1. Calcular el precio promedio de todos los productos
precio_promedio = df['precio'].mean()
# 2. Mostrar el resultado
print("El precio promedio de los productos es:", precio_promedio)
## El precio promedio de los productos es: 350.0
#d) Agrega una nueva columna llamada ‘categoria’ con valores [‘Computadora’, ‘Accesorio’, ‘Accesorio’,‘Computadora’, ‘Accesorio’]
df['categoria'] = ['Computadora', 'Accesorio', 'Accesorio', 'Computadora', 'Accesorio']
df
## producto precio stock categoria
## 0 Laptop 1200 10 Computadora
## 1 Mouse 25 50 Accesorio
## 2 Teclado 75 30 Accesorio
## 3 Monitor 300 15 Computadora
## 4 Auriculares 150 25 Accesorio
Problema práctico: Una universidad categoriza a sus estudiantes según su promedio: Excelente: 18-20 Bueno: 15-17.9 Regular: 11-14.9 Deficiente: 0-10.9 Escribe una función en R que: Reciba un vector de calificaciones Use estructuras condicionales para categorizar cada calificación Retorne un vector con las categorías correspondientes # Código base para completar:
categorizar_notas <- function(notas) {
categorias <- c() # vector vacío para guardar las categorías
for (n in notas) {
if (n >= 18 && n <= 20) {categorias <- c(categorias, "Excelente")}
else if (n >= 15 && n < 18) {categorias <- c(categorias, "Bueno")}
else if (n >= 11 && n < 15) {categorias <- c(categorias, "Regular")}
else if (n >= 0 && n < 11) {categorias <- c(categorias, "Deficiente")}
else {categorias <- c(categorias, "Nota inválida") # por si se pasa de rango
}}
return(categorias)}
# Prueba
notas_prueba <- c(19, 12, 16, 8, 20, 14)
categorizar_notas(notas_prueba)
## [1] "Excelente" "Regular" "Bueno" "Deficiente" "Excelente"
## [6] "Regular"
Problema práctico: Crea un programa en Python que simule un sistema de inventario simple.
# Diccionario de inventario
inventario = {
'manzanas': 50,
'naranjas': 30,
'plátanos': 0,
'uvas': 20
}
#Escribe código que:
#a) (0.5 puntos) Use un bucle for para mostrar cada producto y su cantidad
# Mostrar un encabezado para indicar que se listará el inventario actual
print("Inventario actual:")
## Inventario actual:
# Recorrer el diccionario 'inventario' con un bucle for
# .items() devuelve pares (clave, valor) → (producto, cantidad)
for producto, cantidad in inventario.items():
# Mostrar el nombre del producto y su cantidad
print(f"{producto}: {cantidad}")
## manzanas: 50
## naranjas: 30
## plátanos: 0
## uvas: 20
#b) (0.75 puntos) Use condicionales para identificar productos agotados (cantidad = 0) y productos con bajo stock (cantidad < 25)
# Mostrar un encabezado para la revisión de stock
print("\nRevisión de stock:")
##
## Revisión de stock:
# Recorrer cada producto y su cantidad en el inventario
for producto, cantidad in inventario.items():
# Caso 1: si la cantidad es 0, significa que está agotado
if cantidad == 0:
print(f"{producto} está agotado.")
# Caso 2: si la cantidad es menor que 25, consideramos que tiene bajo stock
elif cantidad < 25:
print(f"{producto} tiene bajo stock ({cantidad} unidades).")
## plátanos está agotado.
## uvas tiene bajo stock (20 unidades).
#c) (0.75 puntos) Cree una lista con los nombres de productos que necesitan reabastecimiento (cantidad ≤25)
# Crear una lista por comprensión con los productos que necesitan reabastecimiento
# La condición es que su cantidad sea menor o igual a 25
reabastecer = [producto for producto, cantidad in inventario.items() if cantidad <= 25]
# Mostrar el resultado en pantalla
print("\nProductos que necesitan reabastecimiento:", reabastecer)
##
## Productos que necesitan reabastecimiento: ['plátanos', 'uvas']
Parte A - R (1.25 puntos): Escribe una función que calcule estadísticas básicas de un vector numérico:
# Función que calcula estadísticas básicas de un vector numérico
estadisticas_basicas <- function(vector_numerico) {
# Crear una lista con los resultados de cada estadística
lista_resultados <- list(
media = mean(vector_numerico), # Calcula el promedio
mediana = median(vector_numerico), # Calcula la mediana
minimo = min(vector_numerico), # Encuentra el valor mínimo
maximo = max(vector_numerico) # Encuentra el valor máximo
)
# Retorna la lista con todas las estadísticas
return(lista_resultados)
}
# Ejemplo de prueba con un vector de valores
valores <- c(1, 2, 3, 5, 4)
estadisticas_basicas(valores)
## $media
## [1] 3
##
## $mediana
## [1] 3
##
## $minimo
## [1] 1
##
## $maximo
## [1] 5
Parte B - Python (1.25 puntos): Escribe la función equivalente en Python: def estadisticas_basicas(lista_numeros):
# Función que calcula estadísticas básicas de una lista numérica
def estadisticas_basicas(lista_numeros):
# Calcular la media (suma de elementos / cantidad de elementos)
media = sum(lista_numeros) / len(lista_numeros)
# Calcular la mediana:
# 1. Ordenamos la lista
lista_ordenada = sorted(lista_numeros)
n = len(lista_ordenada)
# 2. Verificamos si la cantidad de elementos es par o impar
if n % 2 == 1: # Si es impar, tomamos el valor del medio
mediana = lista_ordenada[n // 2]
else: # Si es par, sacamos el promedio de los dos valores centrales
mediana = (lista_ordenada[n // 2 - 1] + lista_ordenada[n // 2]) / 2
# Calcular mínimo y máximo usando funciones built-in
minimo = min(lista_numeros)
maximo = max(lista_numeros)
# Retornar un diccionario con los resultados
return {
"media": media,
"mediana": mediana,
"minimo": minimo,
"maximo": maximo
}
# Ejemplo de prueba con una lista de números
valores = [1, 2, 3, 5, 4]
# Llamamos a la función y mostramos los resultados
print(estadisticas_basicas(valores))
## {'media': 3.0, 'mediana': 3, 'minimo': 1, 'maximo': 5}
Parte A (1 punto): Explica el proceso de instalación y carga de paquetes:
#¿Cuál es la diferencia entre install.packages() y library ()?
# 1.install.packages("nombre"): se usa para descargar e instalar el paquete desde CRAN en la computadora. Solo se hace una vez (o cuando se actualiza el paquete).
# 2.library(nombre): se usa para cargar el paquete en la sesión actual de R y así poder usar sus funciones, y esto se hace cada qie iniciamos en R
# ¿Cuál es la diferencia entre pip install y import?
# 1.pip install nombre_paquete: sirve para descargar e instalar el paquete desde PyPI en la computadora. Solo se hace una vez (o al actualizarlo).
#2.import nombre_paquete: sirve para cargar el paquete en el programa o script actual y así poder usar sus funciones. Esto se hace cada vez que se ejecuta el código.
Parte B (1.5 puntos): Escribe el código para:
# Instalar y cargar el paquete dplyr en R
# Instalar el paquete dplyr (solo se hace una vez)
install.packages("dplyr")
## Installing package into 'C:/Users/magno/AppData/Local/R/win-library/4.5'
## (as 'lib' is unspecified)
## package 'dplyr' successfully unpacked and MD5 sums checked
## Warning: cannot remove prior installation of package 'dplyr'
## Warning in file.copy(savedcopy, lib, recursive = TRUE): problema al copiar
## C:\Users\magno\AppData\Local\R\win-library\4.5\00LOCK\dplyr\libs\x64\dplyr.dll
## a C:\Users\magno\AppData\Local\R\win-library\4.5\dplyr\libs\x64\dplyr.dll:
## Permission denied
## Warning: restored 'dplyr'
##
## The downloaded binary packages are in
## C:\Users\magno\AppData\Local\Temp\RtmpIvmr9p\downloaded_packages
# Cargar el paquete dplyr en la sesión actual (esto se hace cada vez que se abre R)
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Instalar e importar la librería pandas en Python (con alias pd)
# Instalar la librería pandas (solo se hace una vez en la computadora)
# Esto se ejecuta en la terminal o consola de Python, no dentro del script
# pip install pandas
# Importar la librería pandas en el script y asignarle el alias "pd"
import pandas as pd
#Usar una función básica de cada uno (ej: filter() en dplyr
# Cargar el paquete dplyr
library(dplyr)
# Crear un data.frame de ejemplo
df <- data.frame(
nombre = c("Ana", "Bruno", "Carlos", "Diana"),
nota = c(18, 14, 16, 20)
)
# Usar filter() para seleccionar estudiantes con nota mayor a 15
df_filtrado <- filter(df, nota > 15)
df_filtrado
## nombre nota
## 1 Ana 18
## 2 Carlos 16
## 3 Diana 20
#Usar una función básica de cada uno (ej:read_csv() en pandas)
import pandas as pd
# Crear un DataFrame de ejemplo
df = pd.DataFrame({
"nombre": ["Ana", "Bruno", "Carlos", "Diana"],
"nota": [18, 14, 16, 20]
})
# Usar read_csv() para leer un archivo CSV (ejemplo)
# df = pd.read_csv("archivo.csv")
# Aquí, mostramos cómo filtrar notas mayores a 15
df_filtrado = df[df["nota"] > 15]
print(df_filtrado)
## nombre nota
## 0 Ana 18
## 2 Carlos 16
## 3 Diana 20
Escenario: Tienes un archivo CSV con datos de estudiantes que contiene las columnas: nombre, edad, carrera,promedio.
# Crear un data frame de ejemplo
estudiantes <- data.frame(
nombre = c("Ana", "Luis", "María", "José", "Claudia"),
edad = c(20, 22, 19, 21, 23),
carrera = c("Ingeniería", "Medicina", "Ingeniería", "Derecho", "Medicina"),
promedio = c(16, 14, 17, 13, 15)
)
# Guardar como CSV
write.csv(estudiantes, "estudiantes.csv", row.names = FALSE, fileEncoding = "UTF-8")
import pandas as pd
# Crear un DataFrame de ejemplo
estudiantes = pd.DataFrame({
"nombre": ["Ana", "Luis", "María", "José", "Claudia"],
"edad": [20, 22, 19, 21, 23],
"carrera": ["Ingeniería", "Medicina", "Ingeniería", "Derecho", "Medicina"],
"promedio": [16, 14, 17, 13, 15]
})
# Guardar como CSV
estudiantes.to_csv("estudiantes.csv", index=False, encoding="utf-8")
Tareas:
a) (0.5 puntos) Escribe el código en R para leer el archivo “estudiantes.csv”
estudiantes <- read.csv("estudiantes.csv", header = TRUE, sep = ",", fileEncoding = "UTF-8")
head(estudiantes)
## nombre edad carrera promedio
## 1 Ana 20 Ingeniería 16
## 2 Luis 22 Medicina 14
## 3 María 19 Ingeniería 17
## 4 José 21 Derecho 13
## 5 Claudia 23 Medicina 15
b) (0.5 puntos) Escribe el código en Python para leer el mismo archivo
estudiantes = pd.read_csv("estudiantes.csv", encoding="utf-8")
print(estudiantes.head())
## nombre edad carrera promedio
## 0 Ana 20 Ingeniería 16
## 1 Luis 22 Medicina 14
## 2 María 19 Ingeniería 17
## 3 José 21 Derecho 13
## 4 Claudia 23 Medicina 15
c) (0.75 puntos) En R, filtra estudiantes con promedio > 15 usando dplyr
library(dplyr)
estudiantes_filtrados <- estudiantes %>% filter(promedio > 15)
print(estudiantes_filtrados)
## nombre edad carrera promedio
## 1 Ana 20 Ingeniería 16
## 2 María 19 Ingeniería 17
d) (0.75 puntos) En Python, calcula el promedio por carrera usando pandas
promedio_por_carrera = estudiantes.groupby("carrera")["promedio"].mean()
print(promedio_por_carrera)
## carrera
## Derecho 13.0
## Ingeniería 16.5
## Medicina 14.5
## Name: promedio, dtype: float64
e) (0.5 puntos) ¿Qué parámetro usarías si el archivo tiene problemas de codificación(tildes,ñ)?
En R: usar el parámetro fileEncoding = “UTF-8” en read.csv(). En Python: usar el parámetro encoding=“utf-8” en pd.read_csv().
Caso práctico con datos del INEI: Supón que tienes datos de población por departamento del Perú.
# Crear vectores con departamentos y población
departamentos <- c("Lima", "Arequipa", "La Libertad", "Piura", "Junín")
poblacion_2020 <- c(10628470, 1382730, 1905301, 2047954, 1246038)
# Crear un data.frame con los datos
datos_peru <- data.frame(
departamento = departamentos,
poblacion_2020 = poblacion_2020
)
# a) Calcular qué porcentaje de la población total representa cada departamento
total_poblacion <- sum(datos_peru$poblacion_2020)
datos_peru$porcentaje <- round((datos_peru$poblacion_2020 / total_poblacion) * 100, 2)
# b) Identificar el departamento más y menos poblado
mas_poblado <- datos_peru$departamento[which.max(datos_peru$poblacion_2020)]
menos_poblado <- datos_peru$departamento[which.min(datos_peru$poblacion_2020)]
# c) Categorización de densidad poblacional
datos_peru$categoria <- ifelse(datos_peru$poblacion_2020 > 2000000, "Alta densidad",
ifelse(datos_peru$poblacion_2020 >= 1000000 & datos_peru$poblacion_2020 <= 2000000,
"Media densidad", "Baja densidad"))
# Mostrar resultados finales
print(datos_peru)
## departamento poblacion_2020 porcentaje categoria
## 1 Lima 10628470 61.76 Alta densidad
## 2 Arequipa 1382730 8.03 Media densidad
## 3 La Libertad 1905301 11.07 Media densidad
## 4 Piura 2047954 11.90 Alta densidad
## 5 Junín 1246038 7.24 Media densidad
cat("\nDepartamento más poblado:", mas_poblado, "\n")
##
## Departamento más poblado: Lima
cat("Departamento menos poblado:", menos_poblado, "\n")
## Departamento menos poblado: Junín
Reflexión: Un compañero te dice: “Es mejor usar siempre Python porque es más moderno que R”. YO CONSIDERO QUE R ES MEJOR POR EL MOTIVO QUE FUE PARA ANALISIS ESTADISTICO Y VISUALIZAR DATOS, Y POR EL LADO DE PYTHON ES UN LENGUAJE BASICO, PERO EN SI NO DEBEMOS SIEMPRE IRNOS POR EL MAS MODERNO, SINO POR CUAL ES MAS ADECUADA PARA CADA SITUACION. PYTHON: ES MEJOR MACHINE LEARNING , AUTOMATIZACION R: ES MEJOR PARA ESTADISTICA AVANZADA , VISUALIZACION DE DATO
Responde: a) (0.75 puntos) Menciona 2 ventajas de R sobre Python para análisis estadístico
R fue diseñado específicamente para análisis estadístico.
Tiene una gran cantidad de paquetes especializados como dplyr, ggplot2, caret; que facilitan análisis y visualizaciones de alta calidad.
b) (0.75 puntos) Menciona 2 ventajas de Python sobre R para ciencia de datos en general
Python es un lenguaje multipropósito, lo que permite no solo analizar datos, sino también desarrollar aplicaciones, inteligencia artificial, automatización , etc..
Tiene gran escalabilidad e integración con librerías de machine learning