# Establezca la raíz de su proyecto como el directorio de trabajo
setwd("/Users/alonso/Desktop/Intro Analisis de Datos FLACSO/Recursos para aprender R")
# Crear directorios si no existen
if (!dir.exists("data")) dir.create("data")
if (!dir.exists("scripts")) dir.create("scripts")
if (!dir.exists("docs")) dir.create("docs")
if (!dir.exists("output")) dir.create("output")Introducción a R y RStudio
Prof. Alonso Quezada. Correo: alonsoquezadar@gmail.com
Módulo 1: Interfaz de trabajo
En este modulo nos enfocamos en la puesta en marcha del programa, sus principales ventanas y formas de funcionamiento.
Objetivos de Aprendizaje
Al final de este módulo, usted podrá:
- Instalar R y RStudio en su sistema operativo.
- Navegar por la interfaz de RStudio y entender sus distintas áreas.
- Configurar un proyecto y su estructura de directorios en RStudio.
- Crear y ejecutar scripts de R.
Instalación de R y RStudio
Instalación de R
Para instalar R:
- Visite CRAN y seleccione el enlace correspondiente a su sistema operativo (Windows, Mac o Linux).
- Descargue la última versión de R y siga las instrucciones de instalación para su sistema operativo.
Instalación de RStudio
Después de instalar R:
- Visite la página de RStudio y descargue la versión gratuita de RStudio Desktop.
- Siga las instrucciones de instalación para instalar RStudio en su sistema.
Configuración del Entorno de Trabajo
Creación de un Nuevo Proyecto
Para crear un nuevo proyecto en RStudio:
- Abra RStudio.
- En el menú, seleccione
File > New Project.... - Elija
New Directory, luegoNew Project. - Asigne un nombre al proyecto y elija una ubicación para guardar el proyecto.
- Haga clic en
Create Project.
Estructura de Directorios para un Proyecto
Dentro de su proyecto, es una buena práctica crear una estructura de directorios estándar para organizar sus datos, scripts y salida. En la consola de RStudio, puede ejecutar los siguientes comandos:
Creando la Estructura de Directorios
En RStudio, puede usar la consola para crear directorios que almacenarán diferentes tipos de archivos. Una estructura típica incluiría directorios para datos (data), scripts (scripts), documentos y reportes (docs), y salida de análisis (output).
Explicación de la Estructura
data/: Este directorio contiene todos los conjuntos de datos utilizados en el proyecto. Puede ser útil subdividir aún más esta carpeta para datos crudos (raw) y datos procesados (processed).
if (!dir.exists("data/raw")) dir.create("data/raw")
if (!dir.exists("data/processed")) dir.create("data/processed")scripts/: Aquí se almacenan los scripts de R. Es una buena práctica guardar diferentes scripts para tareas específicas, como limpieza de datos, análisis y visualización.docs/: Documentación del proyecto, reportes y manuscritos, incluyendo archivos de Markdown o R Markdown que pueden ser renderizados a documentos de salida.output/: Todos los gráficos, tablas y otros archivos generados por los scripts se guardan aquí para facilitar el acceso y la revisión.
Buenas Prácticas de Nombramiento de Archivos
Para mantener su proyecto aún más organizado, considere seguir un esquema de nombramiento consistente para sus archivos. Por ejemplo:
- Prefijo con una fecha en formato
YYYYMMDDpara mantener una secuencia cronológica, como20231107-script-limpieza.R. - Use guiones bajos (
_) o guiones (-) para separar palabras en el nombre del archivo. - Incluya una breve descripción de lo que hace el archivo o su contenido en el nombre.
Módulo 2: Fundamentos de R
En este módulo, nos enfocaremos en construir una base sólida en los fundamentos de la programación en R. Comenzaremos con los tipos de datos básicos y estructuras de datos, luego nos moveremos a través de operaciones básicas y manipulación de datos. Finalmente, introduciremos la programación funcional y el control de flujo que son esenciales para el análisis de datos.
Tipos de Datos en R
R tiene varios tipos de datos básicos que son utilizados para almacenar información:
- Numéricos: Valores decimales o enteros.
- Caracteres: Texto o cadenas de caracteres.
- Lógicos:
TRUE(verdadero) oFALSE(falso). - Factores: Datos categóricos con un número fijo de categorías.
Cada tipo de dato tiene su importancia y se utiliza en diferentes situaciones durante el análisis de datos.
# Ejemplo de tipos de datos
numero <- 42
caracter <- "Hola Mundo"
logico <- TRUE
factor <- factor(c("bajo", "medio", "alto"))Estructuras de Datos en R
Las estructuras de datos más comunes en R incluyen:
- Vectores: Colección de elementos del mismo tipo.
- Listas: Colección de elementos que pueden ser de diferentes tipos.
- Matrices: Datos dispuestos en un arreglo bidimensional con filas y columnas.
- Data frames: Similar a las matrices, pero cada columna puede contener diferentes tipos de datos.
# Ejemplo de estructuras de datos
vector <- c(1, 2, 3)
lista <- list(numero = 42, caracter = "Hola")
matriz <- matrix(1:9, nrow = 3)
data_frame <- data.frame(numero = 1:3, caracter = c("a", "b", "c"), calidad = factor(c("bueno", "regular", "malo")))Operaciones Básicas
Las operaciones matemáticas básicas incluyen suma (+), resta (-), multiplicación (*) y división (/). En R, también podemos realizar operaciones más complejas como exponenciación (^) y módulo (%%).
# Ejemplo de operaciones básicas
suma <- 5 + 3
resta <- 5 - 3
multiplicacion <- 5 * 3
division <- 5 / 3Manipulación de Datos con dplyr
dplyr es una parte del tidyverse que facilita la manipulación de datos, las cuales demostraremos utilizando la base de datos mtcars. Principales funciones:
filter(): Filtrado de filas.select(): Selección de columnas.mutate(): Creación de nuevas columnas.summarize(): Resumen de valores.
Para instalar paquetes utilicen el comando install.packages() en este caso sería install.packages(tidyverse)
library(tidyverse)── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.2 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.4 ✔ tibble 3.2.1
✔ lubridate 1.9.3 ✔ tidyr 1.3.0
✔ purrr 1.0.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)
# Ejemplo de manipulación de datos utilizando mtcars
b.mtcars <- mtcars %>%
rownames_to_column(var = "model")
# Filtrado de filas donde mpg > 20
autos_eficientes <- b.mtcars %>%
filter(mpg > 20)
# Selección de las columnas mpg y hp
mpg_hp <- b.mtcars %>%
select(mpg, hp)
# Creación de una nueva columna que muestra la relación peso/potencia
mtcars_con_relacion <- b.mtcars %>%
mutate(weight_to_power = wt / hp)
# Resumen de valores, por ejemplo, promedio de mpg
promedio_mpg <- b.mtcars %>%
summarize(promedio_mpg = mean(mpg))
# Visualización de los resultados
head(autos_eficientes) model mpg cyl disp hp drat wt qsec vs am gear carb
1 Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
2 Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
3 Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
4 Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
5 Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
6 Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
head(mpg_hp) mpg hp
1 21.0 110
2 21.0 110
3 22.8 93
4 21.4 110
5 18.7 175
6 18.1 105
head(mtcars_con_relacion) model mpg cyl disp hp drat wt qsec vs am gear carb
1 Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
2 Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
3 Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
4 Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
5 Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
6 Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
weight_to_power
1 0.02381818
2 0.02613636
3 0.02494624
4 0.02922727
5 0.01965714
6 0.03295238
promedio_mpg promedio_mpg
1 20.09062
Visualizar datos con ggplot2
El siguiente ejemplo demuestra cómo crear un scatter plot usando la base de datos `mtcars`. En cada paso, aplicaremos una capa adicional para mejorar nuestro gráfico de dispersión.
Paso 1: Crear un Scatter Plot Básico
Primero, generamos un scatter plot simple de millas por galón (`mpg`) contra la potencia del motor (`hp`).
ggplot(mtcars, aes(x = hp, y = mpg)) +
geom_point()Paso 2: Añadir Color por Factor
Ahora, vamos a añadir color a los puntos basándonos en el número de cilindros (cyl) del motor. Esto nos ayudará a identificar patrones entre diferentes grupos de cilindros.
ggplot(mtcars, aes(x = hp, y = mpg, color = factor(cyl))) +
geom_point()Paso 3: Mejorar la Estética
Para hacer nuestro gráfico más atractivo y comprensible, podemos mejorar la estética agregando etiquetas a los ejes y un título.
ggplot(mtcars, aes(x = hp, y = mpg, color = factor(cyl))) +
geom_point() +
labs(
title = "Relación entre Potencia y Consumo de Combustible",
x = "Potencia del Motor (hp)",
y = "Millas por Galón (mpg)",
color = "Número de Cilindros"
)Paso 4: Personalizar los Temas
Finalmente, personalizamos el tema de nuestro gráfico para darle un aspecto más pulido.
ggplot(mtcars, aes(x = hp, y = mpg, color = factor(cyl))) +
geom_point() +
labs(
title = "Relación entre Potencia y Consumo de Combustible",
x = "Potencia del Motor (hp)",
y = "Millas por Galón (mpg)",
color = "Número de Cilindros"
) +
theme_minimal() +
theme(legend.position = "bottom")Interpretación del gráfico de dispersión
En el scatter plot básico, colocamos la potencia del motor (hp) en el eje x y las millas por galón (mpg) en el eje y. Cada punto representa un coche. Si observamos una tendencia descendente, podemos inferir que a medida que aumenta la potencia del motor, generalmente disminuyen las millas por galón, lo que sugiere que los coches más potentes pueden ser menos eficientes en combustible.
A tener en consideración
Tidyverse: Una Colección de Paquetes para la Ciencia de Datos
El tidyverse es un conjunto de paquetes en R diseñados para la ciencia de datos que comparten una filosofía común y están diseñados para trabajar juntos de manera cohesiva. Desarrollado por Hadley Wickham y otros, tidyverse incluye paquetes para la manipulación de datos (dplyr, tidyr), visualización de datos (ggplot2), importación de datos (readr, readxl), y muchos otros. Los paquetes tidyverse están optimizados para datos “tidy” — un término acuñado para describir datos que están organizados de tal manera que cada variable es una columna, cada observación es una fila, y cada tipo de unidad de observación es una tabla.
Los Pipes: %>%
El operador pipe %>% es uno de los componentes más emblemáticos y útiles de tidyverse. Este operador, tomado del paquete magrittr (y ahora parte de dplyr), permite encadenar múltiples operaciones sin necesidad de crear variables intermedias. Con %>%, el resultado de una expresión se “pasa” directamente a la siguiente, lo que hace que el código sea más legible y conciso.