Sesión 01: Introducción a la programación
CONAHCYT-Universidad de Guadalajara
6 de enero de 2025
Instructor:
Economista y Doctor en Estudios Económicos por la UDG (2022).
Líneas de investigación:
Economía Internacional.
Macroeconomía.
Desarrollo económico.
Usuario de R desde hace + 7 años.
Objetivo principal Aprender a programar en R
para desarrollar nuestras propias investigaciones.
Estructura del curso 5 sesiones (~3.5 h cada una) diseñadas para introducirnos a los principales pasos en el flujo de trabajo para el análisis de datos (investigación empírica):
Introducción a la interfaz y el lenguaje de R
.
Administración y manipulación de datos.
Visualización de datos.
Investigación reproducible.
🚨Las políticas de la clase están disponibles en el sitio en internet del curso.
R
y RStudio
R
R
R
base.R
?R
es un lenguaje de programación que se utiliza principalmente para el análisis estadístico y la visualización de datos.
R
R
se basa en el lenguaje de programación denominado S
desarrollado por John Chambers en 1976.R
fue desarrollado por Ross Ihaka y Robert Gentleman (Universidad de Auckland). Fue documentado por primera vez en un artículo en 1996.R
.R
?R
es un lenguaje muy flexible y poderoso- adaptable a casi cualquier tarea de investigación (análisis de datos, econometría, análisis espacial, machine learning, web scraping, etc.).R
tiene una comunidad en línea que colabora para resolver cualquier problema.R
permite crear investigación reproducible, mostrando el flujo completo del processamiento de datos. 😉R
es gratuito y de código abierto 💰💵💰.R
y Python
Características | R |
Python |
Alcance | Análisis y modelación estadística | Escalable. Desarrollo de aplicaciones y análisis de datos |
Usado por | Analistas, investigadores, científicos de datos | Desarrolladores, programadores e ingenieros de datos |
Útil para | Personas sin experiencia previa en programación | Novatos y profesionales de IT |
Repositorio central | CRAN |
PyPI |
Herramientas de visualización | ggplot2 , plotly , ggiraph |
Matplotlib , seaborn , ggplot |
RStudio
R
= 🧠RStudio
= 🖱️RStudio
¡Estaremos la mayor parte del tiempo aquí! En este panel escribimos y guardamos nuestro código. (File > New File > R Script) 📌 Recordatorio: Siempre guarda tu código.
#
para hacer comentarios en el código. Todo lo que esté después de este símbolo es ignorado por R hasta la línea siguiente.El medio de comunicación entre nuestro código y el cerebro de R 🤖
>
. Esto significa que R está listo para nuestras instrucciones.Escribe todo tu código como script para poder replicarlo
Aquí podemos hacer un seguimiento de lo que hacemos 🖇️
El análisis de datos requiere que manipulemos distintos tipos de objetos. El registro de lo que hacemos se guarda temporalmente en este panel.
R
es un lenguaje orientado a objetos. Esto significa que nosotros manipulamos y modificamos las características de dichos objetos.
Para guardar un objeto podemos usar dos tipos de operadores de asignación:<-
y =
.
Este panel tiene muchas cosas útiles 🏆
Files
nos indica el directorio de trabajo de R.Plots
muestra los gráficos que generamos en nuestro script.Help
es útil para conocer la documentación de las librerías y funciones que podemos usar en R.?
antes del nombre de cualquier función o librería para obtener ayuda. P.ej. ?getwd()
Packages
nos muestra todas las librerías que tenemos instaladas y podemos invocar/desactivar en la sesión activa de R.R
usamos dos tipos de elementos básicos:Programar en R es definir objetos y aplicar funciones a dichos objetos ad infinitum
.
Al instalar R
, se incluyen automáticamente un conjunto de paquetes “básicos” que son escenciales para su funcionamiento:
base
: es el núcleo de R
y contiene las funciones fundamentales para realizar cálculos y manipular datos.stats
: contiene funciones básicas para realizar análisis estadísticos.graphics
: herramientas para crear gráficos y visualizaciones de datos.utils
: incluye funciones para la manipulación de datos y gestión de archivos.datasets
: conjunto de datos de ejemplo para aprender R.En R
se pueden hacer diversas operaciones usando operadores binarios que sirven también como funciones.
+
operador de suma.-
operador de resta./
operador para dividir.^
operador de potencia.%/%
obtener el cociente de una división (entero).%%
obtener residuo de una división.En R
se puede verificar si un objeto cumple una condición dada usando las siguientes pruebas lógicas:
<
un número es menor que otro.>
un número es mayor que otro.==
un número es igual a otro.<=
un numero es menor o igual que otro.>=
un numero es mayor o igual que otro.Para esta sección deben descargar los datos del siguiente enlace 💻
La base de datos contiene información sobre las 250 películas mejor calificadas en IMDB 🎥
Abre el archivo en tu computadora e inspeccionalo. ¿Qué información contiene? Las columnas son variables y las filas observaciones.
¿Cómo podemos importar este archivo a R?
read
, que toman como insumo la ruta en donde está guardado el archivo en nuestra computadora y nos entregan el archivo como resultado en la memoria de R. ⚠️ Los usuarios de Windows debemos usar diagonales normales /
p.ej. "/Documents/file.csv
” en lugar de \
?csv.read()
R
está optimizado para que no tengamos que poner todos los argumentos de las funciones.Revisen línea por línea cuando tengan un error al ejecutar un script
La mayoría de las veces tenemos problemas por este tipo de errores:
R
no está listo: El símbolo >
debe aparecer en la consola. Si aparece un +
significa que no se ha terminado de escribir un comando.
R
esperará hasta que terminemos la instrucción. Para detener el proceso podemos presionar Esc
.mean(1, 2, 3)
es distinto de maen(1, 2, 3)
,
y puntos .
o el uso incorrecto de " "
o c(1,2.3)
DEBEMOS TENER PRECAUCIÓN AL PROGRAMAR.
En R existen varios tipos de objetos que permiten que el usuario pueda almacenar la información para realizar procedimientos estadísticos y gráficos. 💁
Escalares
Prueba que sucede si ejecutamos el siguiente código:
Son objetos unidimensionales que almacenan una secuencia de valores del mismo tipo.
R
convierte todos los elementos del vector al mismo tipo (strings).Tipo. Un vector tiene el mismo tipo que los datos que contiene.
Si tenemos un vector que contiene objetos numéricos el vector es de tipo numérico.
Los vectores son atómicos. Es decir, solo pueden contener datos de un solo tipo.
Largo. Es el número de elementos que contiene el vector lenght(v1)
.
Atributos. Los vectores pueden tener metadatos de muchos tipos, los cuales describen características de los datos que contienen.
05:00
Necesito que generen el siguiente objeto:
Genera un vector que contenga 20 números aleatorios obtenidos de una distribución normal con una media de 2 y una desviación estándar de 3).
Calcula el promedio, la mediana y la desviación estándar del vector.
Pista: Comienza leyendo la documentación de ayuda de la función rnorm()
En R
los factores de usan para trabajar con variables categóricas. Es decir, que tienen un conjunto fijo y conocido de valores posibles.
string
.Las matrices y arreglos pueden ser descritas como vectores multidimensionales. Únicamente pueden tener un solo tipo de datos pero incluyen un largo y más dimensiones.
Las matrices solo tienen dos dimensiones: Largo y Alto. Rectangulares.
Los arreglos pueden tener múltiples dimensiones (Su uso no es común en R
).
Podemos crear matrices usando la función matrix()
que acepta dos argumentos, nrow
y ncol
.
Otro procedimiento para crear matrices es la unión de vectores con las siguientes funciones:
cbind()
para unir vectores, usando cada uno como columna.
rbind()
para unir vectores, usando cada uno como fila.
Ejercicio 🎮
Utiliza las funciones anteriores para unir cuatro vectores como una matriz.
Dataframes
Los dataframes
son estructuras de datos de dos dimensiones (rectangulares) que pueden contener datos de diferentes tipos, por lo tanto, son heterogéneas.
Un data frame está compuesto por vectores y forman una unión rectangular
dataframes
Las listas en R
son un tipo de estructura de datos fundamental y muy flexible, que permiten almacenar colecciones de objetos de diferentes tipos y tamaños, a diferencia de los vectores, que requieren que todos los elementos sean del mismo tipo.
Podemos tener listas que contengan datos atómicos, vectores, matrices, arrays, data frames u otras listas. Esta última característica es la razón por la que una lista puede ser considerada un vector recursivo, pues es un objeto que puede contener objetos de su misma clase.
Para crear una lista usamos la función list()
, que nos pedirá los elementos que deseamos incluir en nuestra lista.
Para esta estructura, no importan las dimensiones o largo de los elementos que queramos incluir en ella.
Exploremos los atributos de la base de datos del IMDB usando la función str()
Podemos usar el operador $
para crear y reemplazar variables:
TRUE
).dataframes
.En donde:
objeto
es un dataframe
.condición
es un subconjunto del objeto al que se le aplica una prueba lógica.columnas_devueltas
el índice o nombre de la columna que deseamos que sea devuelta.rating
> 8.5:subset()
Una alternativa al uso de condicionales, sin necesidad de corchetes, es la función subset()
.
Sintáxis de uso:
x
: Un objeto, generalmente un dataframe
.subset
: Una condición expresada usando operaciones relacionales o condicionales que se aplicaran a x
.select
: Un vector con los nombres de las columas a conservar en el resultado. (Todas por defecto)subset()
rating
mayor que 8.5:NA
)dataframe
:¿Qué sabemos sobre las mascotas de estas personas?
""
)15:00
c(7, 7, 8, 8, 7, 7, 8, 8)
usando la función rep()
.seq(1,6)
para obtener el vector c(0, 2, 4, 6)
.Usando la base de datos del IMDB realiza lo siguiente:
min()
.imdb <- read.csv("C:/Users/jeptt/Documents/IMDB.csv")
# Obten el nombre de la película con la menor duración (en minutos):
# min(imdb$duration_minutes)
min(imdb$duration_minutes, na.rm = TRUE)
# ¿Cómo se llama está película?
imdb[imdb$duration_minutes == 67, "name"]
imdb[!is.na(imdb$duration_minutes) & imdb$duration_minutes == 67, "name"]
# En el dataset hay 6 películas con una duración de 132 minutos ¿Cuáles son?
imdb[imdb$duration_minutes == 132, "name"]
imdb[!is.na(imdb$duration_minutes) & imdb$duration_minutes == 132, "name"]
# Las respuestas muestran NA porque hay películas con información incompleta sobre su duración.
R
base tiene suficientes funciones para que realicemos las tareas básicas de análisis de datos.Supongamos que necesitamos escribir una función en R
para calcular el área de un cuadrilatero: lado x lado
10:00
# Escribimos nuestra función para gráficar la distribución
crear_histograma <- function(datos, nombre) {
media <- mean(datos) # Calculamos la media
desv_est <- sd(datos) # Calculamo la desv.est.
hist(datos, main = nombre, xlab = "Datos", ylab = "Frecuencia", col = "gold")
abline(v = media, col = "red") # Marcar media en rojo
abline(v = media + (desv_est * c(1, -1)), col = "blue") # sd en azul
}
crear_histograma(ingreso, "Ingreso")