Técnicas para ‘Big Data’ en Economía - Curso 2026/27
Universidad de Alicante
Dpto. de Fundamentos del Análisis Económico. Universidad de Alicante
R es el lenguaje: ejecuta instrucciones directamente en una consola (es interpretado)
Positron es el entorno de trabajo (IDE): derivado de VS Code, uno de los editores más usados
Misma interfaz y manejo, con añadidos específicos para el análisis de datos en R y Python
Se puede usar VS Code “puro” de forma muy similar
Instalación: página Puesta a punto de la web (si no lo tenéis, LO ANTES POSIBLE)
Este tema: de los primeros comandos hasta empezar a trabajar con datos; el material de cada sesión, siempre en Contenidos
Escribimos comandos en la consola y se ejecutan pulsando Enter:
La tecla de tabulador ofrece opciones de autocompletado
Ejecutar algo que no es un comando de R devuelve un error
Es preferible incluir varios comandos en un archivo de texto para ejecutarlos
Se puede replicar el proceso de cálculos paso a paso (no como Excel)
Creamos un nuevo archivo en el menú File > New File… eligiendo R File
Guardamos el archivo en File > Save (atajo Ctrl + S), eligiendo un directorio y nombre con extensión “.R” (por defecto) o “.r”
Desde el editor, Ctrl+Enter envía a la consola la línea actual o las líneas seleccionadas (en MacOS, la tecla Command en lugar de Ctrl)
En un archivo de guion (guardado), Positron marca las líneas con error y muestra el mensaje de error al pasar el puntero
Cada comando es “una” línea y se ejecutan secuencialmente
Un comando se puede extender visualmente más de una línea hasta completarse: p.e., hasta cerrar los paréntesis.
Escribimos log(, en otra línea 9 y ejecutamos: la consola cambia de > a +
No hace “nada” esperando que completemos el comando.
# marca el inicio de un comentario: lo que sigue se “ignora” (no se ejecuta) en RComentar es un buen hábito: ayuda a entender/recordar qué hacemos
Notad que Positron tiene resaltado de sintaxis: distinto color para comentarios, números, funciones, etc.
En la programación moderna (Positron, VS Code y la mayoría de editores actuales), un proyecto ES simplemente una carpeta
Cread una carpeta para el curso (p.e. AnalisisDatos) con subcarpetas para datos, código, etc., y abridla con File > Open Folder
Sin carpeta abierta, el Explorador (barra izquierda) solo ofrece precisamente eso: Open Folder
Al abrir una carpeta por primera vez, Positron pregunta si confiáis en sus archivos: pulsad “Yes, I trust the authors” (es vuestra carpeta: la acabáis de crear)
Si contestáis que no, Positron queda en modo restringido: sin consola de R, sin resaltado, sin casi nada; se arregla pulsando en Restricted Mode (abajo a la izquierda) y confiando la carpeta
Con la carpeta abierta, esa carpeta es vuestro directorio de trabajo: R busca y guarda los archivos ahí (usad rutas RELATIVAS, como veremos)
Al abrir Positron se recupera la última carpeta usada; con File > Open Recent podéis cambiar entre carpetas (p.e., otra asignatura u otro proyecto)
Para trabajar con un archivo, usamos la ruta relativa al directorio de trabajo:
si están en el raíz del directorio: codigo.R, misdatos.Rdata
si están en un subdirectorio, indicamos la ruta separando directorios por /: datos/ventas.Rdata, datos/ano2020/ingresos.Rdata
Las rutas relativas son otra idea general de la programación: el proyecto funciona igual en cualquier ordenador (la ruta completa C:/Users/minombre/... solo existe en el vuestro)
El Explorador (icono de archivos en la barra lateral izquierda) ofrece una forma visual de abrir, crear, copiar, mover o eliminar archivos y carpetas
El Explorador solo muestra lo que está DENTRO de la carpeta abierta: lo de fuera no se ve ni se puede tocar desde aquí
Esa barra lateral tiene mucho más (extensiones, asistente de IA, control de versiones, búsqueda): NO lo necesitáis por ahora; la ayuda y la IA integradas las iremos usando poco a poco
Evitad caracteres “raros” (acentos, espacios, etc.) en directorios y ficheros
NOTA. El Explorador de Archivos de Windows y Finder de MacOS no muestran por defecto las extensiones de los archivos.
Algunos argumentos son obligatorios, otros tienen valores por defecto que se pueden omitir
Los argumentos se pueden especificar por nombre o por orden.
F1 sobre una función, o ?min / help(min) en la consolaPositron incluye un asistente de IA (icono de chat en la barra lateral), que se conecta a proveedores como Copilot o Claude; también en VS Code, y siempre están las IAs externas (ChatGPT, Gemini…)
Usos LEGÍTIMOS que os harán mejores: pedir que os explique un mensaje de error, recordar la sintaxis de una función, entender un código ajeno
Uso que os hará PEORES: dejar que reescriba vuestro código sin entenderlo: no aprendéis, no detectáis sus errores… y en la evaluación se nota
La disciplina es la misma que el pensamiento algorítmico del primer día:
Ante un error: leer el mensaje, localizar la línea, formular una hipótesis, probar; la IA ayuda a entender, la solución tenéis que entenderla vosotros: copiar-pensar-adaptar
<- almacena un contenido en un objeto con un nombre,1 que incluye letras, números y algunos carácteres especiales (“.”, “_”)R es “case-sensitive”: x y X son dos objetos distintos
Los objetos asignados pueden usarse posteriormente, p.e., para generar otros a partir de ellos
El espacio de trabajo es el conjunto de objetos activos en memoria, resultado de todos los comandos ejecutados previamente
En Positron, el panel Variables muestra los objetos y su valor
Las funciones ls() y rm() muestran y eliminan respectivamente objetos del espacio de trabajo
.R recuperamos los objetosEn programación, cometer errores es normal
En muchos errores, R se “quejará” mostrando mensajes en rojo
Aviso: R ofrece un resultado (y continuará al siguiente comando), PERO indica que puede haber algo “no deseado”
Error: para la ejecución, sin resultado, e “informa” de la razón
Algunos mensajes son claros, pero otros requieren más investigación: pegarlos a una IA y pedir que os los EXPLIQUE es un buen uso; que os reescriba el código sin entenderlo, no
Peor que un mensaje de error: escribimos (copiamos) un código que funciona pero no hace lo que queremos…
El ordenador NO se equivoca: hace lo que le pedimos según unas reglas bien definidas por R, que debemos conocer
A partir de aquí nos acompaña un mini-caso: las fichas de clientes de un pequeño gimnasio: nombre, altura, peso, si es socio, gasto mensual, género, satisfacción
Iremos como en un análisis real: de una variable suelta (un vector) a la información cualitativa (factores) y a la tabla completa (data frame)
Habrá varias PRÁCTICAS en clase sobre este caso: implementar vosotros es donde se aprende
NO hay que memorizar cada comando: hay que entender la IDEA de cada uno; los detalles se consultan (Ayuda, IA)
Y aprenderemos a leer los fallos: los mensajes de error, y los casos peores en que no hay mensaje pero el resultado no es el que queríamos
Lo que se entrega es el trabajo de las PRÁCTICAS de este tema (el resto de cosas que probéis o veamos en pantalla, no)
Para este tema, ese trabajo va en un guion propio: Tema00_DNI.R (con VUESTRO DNI: p.e., Tema00_12345678X.R), en la carpeta del curso
Si una tarea pide contestar algo (no solo código), escribid la respuesta como TEXTO en un comentario del guion
Cuando se pida, se sube mediante un formulario cuyo enlace se dará en clase en ese momento
Cuenta el TRABAJO, no la perfección: se valora que lo habéis ido haciendo y razonando
Además de las funciones, los principales objetos con los que trabajaremos son:
Estos objetos pueden contener varios tipos de datos o variables:
Un vector es una secuencia de datos elementales, creados con el operador “c()” (combinar)
Empezamos nuestras fichas: cada variable de los 5 clientes es un vector
str() o class() (el panel Variables muestra los valores)Forzamos que un objeto sea tratado con una clase concreta, con as.integer(), as.numeric(), as.character() y as.logical()
NA (con un “warning”)NO se pueden realizar operaciones incompatibles entre clases
names()
&), O (|) y NO (!)x %in% Y es cierto cuando x es un elemento de Y[] (paréntesis cuadrado)1 yCon los vectores cliente, altura, peso y socio de nuestras fichas:
Cread el vector gasto con el gasto mensual de cada cliente: 45, 60, 30, 75, 50
Calculad el gasto medio mensual y el gasto TOTAL anual del negocio
Obtened el gasto de los clientes que NO son socios; ¿su media es mayor o menor que la de los socios?
¿QUÉ clientes (sus nombres) gastan más de 40 al mes?
Elena se hace socia: corregid el dato
Llega un cliente nuevo (Luis, 172 cm, 68 kg, no socio, gasto 55): actualizad los vectores. ¿Qué puede salir mal si olvidáis uno?
Para destacar la naturaleza distinta de estos datos, existe un tipo de objeto específico en R: los factores
Además de otras ventajas que veremos, permiten separar la representación original de las categorías (niveles) de cómo queremos mostrarlas (etiquetas)
Se asocia nivel 1 con “Mujer”, 2 con “Hombre”, etc.
Las operaciones con factores se realiza con las etiquetas, no con los niveles
También podemos usar as.factor() para convertir un vector en un factor
PERO es conveniente especificar niveles y etiquetas: si no, R usa como niveles los valores únicos ordenados (numérica o alfabéticamente) y como etiquetas esos mismos valores
Las etiquetas resultantes (“1”, “2”) no son informativas: no sabemos cuál es “Mujer” y cuál “Hombre”
También podemos tener factores con orden con la opción order = TRUE y enumerando los niveles en orden
summary() con vector y factorsummary() devuelve los principales estadísticos descriptivos de un vector numéricosummary() ofrece resultados diferentes según el tipo de objeto (porque tiene distintas propiedades)Cread satisf <- c(2, 3, 2, 1, 3) (la satisfacción de los 5 clientes: 1=Baja, 2=Media, 3=Alta) y pedid summary(satisf): ¿tiene sentido “una satisfacción media de 2.2”?
Convertidlo en factor ordenado con esas etiquetas y repetid summary(): ¿qué cambia y por qué?
Probad satisf_f >= "Media" para localizar clientes satisfechos; ¿funcionaría con un factor SIN orden, como el género?
Es un tipo de objetos específico para facilitar el análisis de datos: una colección de variables por columnas y observaciones por filas.
Cada columna es un vector con un nombre y tipos de datos (quizás) diferentes
Nuestras fichas de clientes son EXACTAMENTE eso: las juntamos en una tabla
View(datos) (abre el Data Explorer de Positron, con filtros y ordenación), desde el panel Variables, o una parte con head()$ o por nombre o posición con [[ ]][] para seleccionar filas y columnas por posición, nombre y/o condición lógicasubset() que devuelve siempre un “data frame”Reconstruid el data frame datos con cliente, altura, peso, genero_f y gasto, y añadid la columna imc
Extraed las fichas de los clientes con imc > 25: ¿data frame o vector?
¿Gastan más los hombres o las mujeres? (media de gasto por grupo)
Abrid la tabla con View(datos) (Data Explorer) y comprobad los tipos con str(): ¿coincide cada columna con lo que esperabais?
[[ ]] (por posición o por nombre) o con $(solo por nombre) extraemos los elementos en su clase original[], pero devuelve una listaunlist() convierte una lista en vector, usando la clase que pueda ajustarse a todos los objetos (elementales)Muchas funciones de R devuelven sus resultados como una lista: guardan cosas diversas (estadísticos, opciones, datos…) en un único objeto
Por eso importa saber ACCEDER a sus elementos: cuando ejecutemos un contraste o una regresión, extraeremos de ahí lo que necesitemos
Una biblioteca contiene nuevos objetos de R: funciones, datos, etc.
Para instalar una nueva biblioteca (se hace una vez), con el comando
O visualmente en el panel Packages (icono en la barra de la izquierda): botón Install Package; ahí también se actualizan (filtro Outdated)
La biblioteca solo está disponible si se carga en la sesión actual
Nota: en adelante, la bibliotecas que carguemos se suponen instaladas
El panel Packages muestra las instaladas y marca las cargadas (“attached”)
El nombre completo de un objeto es biblioteca::nombre
save() (en una ruta relativa al directorio de trabajo)load()Varias bibliotecas permiten trabajar con distintos formatos de datos, p.e.:
utils (R base), readrreadxl, openxlsxhaven, foreignDescargad estos ejemplos (UA cloud): renta.txt, sex_data.csv, beauty.xls, nsw.dta
Positron NO tiene menú visual de importación: los datos se cargan con comandos (mejor: quedan en el script y el proceso es replicable)
PERO el Data Explorer de Positron permite ver un archivo de datos (p.e., un .csv) como tabla, con filtros y ordenación: doble clic en el Explorador
rio es un meta-paquete (instala otras bibliotecas) para importar y exportar varios formatos de datos de forma sencilla
riorio permite trabajar con el mismo comando para todos los formatos, pero las opciones por defecto pueden no ser adecuadas
El comando import() se usa para leer los datos
export()convert()Ahora que hemos visto save()/load() y rio:
Guardad las fichas en datos/fichas.RData (con save()); borrad TODO el espacio de trabajo y recuperadlas con load(): ¿está todo?
Exportad las fichas a datos/fichas.csv (con export() de rio), abrid el csv con doble clic en el Explorador (Data Explorer) y volved a importarlo con import() a un objeto NUEVO
Comparad con str() el objeto original y el importado: ¿qué le ha pasado al factor? ¿Por qué?
NANA y la frecuencia total:NAs es NA: debemos decir que los elimine explícitamente (y ser conscientes de lo que implica)na.omit() elimina observaciones con NAs de una o varias variablesNAs? Eliminarlos implica selección muestral y la alternativa de imputar valores implica supuestos sobre éstosComo en todo lenguaje de programación R, tiene funciones para
Ejecución condicional if(): una parte del código se ejecuta solo si se cumple una condición
Bucles for(): se repite un mismo bloque de código mientras se itera por los valores de vector
Crear funciones propias con function()
Una variante de la ejecución condicional, solo para crear variables según una condición