Módulo práctico de ITA
(Grupo M)
Se pueden conseguir datos de muchos sitios
¿Cómo podemos descargar unos datos?
Depende de donde estén, pero lo normal es que los datos se descarguen pinchando en un enlace.
Por ejemplo, en la siguiente ruta hay un fichero de datos en formato .xlsx
:
https://www.ine.es/daco/daco42/codmun/codmun20/20codmun.xlsx
¿Y cómo se descargan esos mismos datos con R?
Podríamos hacerlo por menús, pero lo vamos a hacer con código.
Al principio es un poco más complicado, pero tiene ventajas, y además a un Economista le conviene saber usar R
Veámoslo con un ejemplo
Tarea: descargar un fichero de datos con R
.csv
:Usar la función download.file()
para descargar el fichero. Tendrás que darle el valor de 2 argumentos:
el url donde está el fichero de datos
la ruta de tu ordenador donde quieres guardar los datos.
(Recuerda que estamos trabajando con proyectos, así que puedes usar rutas relativas)
1my_url <- "https://raw.githubusercontent.com/perezp44/archivos_download/refs/heads/master/plazas_turisticas.csv"
2fs::dir_create("pruebas")
3download.file(my_url, "./pruebas/plazas_turisticas.csv")
4download.file(url = my_url,
destfile = "./pruebas/plazas_turisticas.csv")
my_url
pruebas
donde guardaremos los datos
download.file()
para descargar los datos que hay en my_url
. Los guardamos en la carpeta pruebas
de nuestro proyecto. Concretamente en el fichero plazas_turisticas.csv
my_url <- "https://raw.githubusercontent.com/perezp44/archivos_download/refs/heads/master/plazas_turisticas.csv"
1my_ruta <- "./pruebas/plazas_turisticas.csv"
2curl::curl_download(url = my_url,
destfile = my_ruta)
my_ruta
el sitio donde guardaremos los datos
curl::curl_download()
para descargar el fichero. Es una función más moderna que download.file()
.
podemos usar/cargar datos de los paquetes
para ello … intenta entender el siguiente chunk de código
#- cuando iniciamos R se cargan automáticamente un grupo de paquetes (R-base)
print(.packages()) #- [🌶]imprimimos los nombres de los "currently attached packages"
#- en uno de esos paquetes hay un conjunto de datos llamado "iris"
iris #- llamamos a "iris"
find("iris") #- [🌶] ¿donde está iris?
str(iris) #- qué es iris?
my_iris <- iris #- "hacemos una copia" de iris en el Global
find("my_iris") #- ¿donde está my_iris?
iris <- c(2, 4) #- creamos un vector llamado iris
find("iris") #- ¿donde está ahora iris?
Tarea: usar unos datos de un paquete
penguins
que está en el paquete palmerpenguins
install.packages("palmerpenguins")
library(palmerpenguins)
penguins
1mys_pinguinos <- palmerpenguins::penguins
penguins
sin cargar todo el paquete
Los datos más habituales en Economía son los datos tabulares
.csv
, .xlsx
, .sav
, .dta
, etc …Cuando carguemos/importemos esos datos tabulares en R …
RStudio permite cargar datos usando menús.
Usando menús (File > Import Dataset
) se pueden cargar datos CSV, EXCEL, SPSS, SAS y STATA.
Se puede hacer con menús, pero nosotros usaremos código
(La razón es que queremos que nuestros análisis sean reproducibles)
Para importar (y exportar) datos utilizaremos código
rio::import()
rio::export()
importando datos con rio::import()
rio::import()
tiene varios argumentos, pero solo usaremos el primero.file
y su descripción dice que el valor de file
ha de ser: “A character string naming a file, URL, or …”file
ha de ser la ruta de nuestro ordenador donde están los datos que queremos importarTarea: importar a R datos que tenemos guardados en nuestro ordenador
./pruebas/plazas_turisticas.csv
?rio::import()
file
) has de especificar la ruta donde están los datos./pruebas/plazas_turisticas.csv
my_ruta <- "./pruebas/plazas_turisticas.csv"
1df <- rio::import(file = my_ruta)
file
y el valor del argumento my_ruta
en la función rio::import()
Una vez tenemos los datos en R …
… imagina que alguien nos pide esos datos limpios
¿Qué hacemos?
Exportando datos en R con el paquete rio
Para exportar datos en R usaremos la función rio::export()
La función rio::export()
tiene varios argumentos, pero solo usaremos los dos primeros.
x
(su valor ha de ser un objeto/datos de R que queremos exportar)file
(su valor ha de ser la ruta donde queremos guardar los datos)Tarea: exportar unos datos de R a un fichero
iris
a un fichero llamado iris.csv
en la carpeta pruebas
de tu proyectoiris.xlsx
en la misma carpetario::export()
x
y file
(*) el valor de x
ha de ser el objeto que quieres exportar (por ejemplo iris
)
(*) el valor de file
ha de ser la ruta donde quieres guardar los datos
df <- iris
1rio::export(x = df,
file = "./pruebas/iris.csv")
x
y file
de la función rio::export()
Práctica: importar/exportar datos
.xlsx
y .rds
Antes de empezar limpiamos la carpeta pruebas
de nuestro proyecto
Hay muuuuuchas organizaciones que ofrecen datos a través de API’s y …
… en muchas ocasiones, hay un paquete de R para acceder fácilmente a ellos!!!
Eurostat
Eurostat es la oficina de estadística de la Unión Europea
El paquete eurostat
permite acceder a las API’s de Eurostat para obtener datos
eurostat
?Eurostat: importando datos en R
library(eurostat)
#- podemos buscar un "tema" con la f. search_eurostat()
aa <- search_eurostat("employment", type = "all")
#- elegimos una tabla de Eurostat
#- "hlth_silc_17": "Healthy life expectancy based on self-perceived health"
my_table <- "hlth_silc_17"
#- da información sobre la Base de datos q hemos elegido
label_eurostat_tables(my_table)
#- descargamos los datos con get_eurostat()
df <- get_eurostat(my_table, time_format = "raw", keepFlags = TRUE )
#- pone labels/etiquetas: mas legible, menos fácil de programar
df_l <- label_eurostat(df)
Practica: importar datos de Eurostat
Podemos buscar un tema en Eurostat; por ejemplo aquí hay datos de “Employment and unemployment (LFS)”, aquí datos sobre “Population and social conditions” y aquí sobre “Crime and criminal justice”
Para mi es más cómodo buscar datos con el paquete eurostat
library(eurostat)
#- podemos buscar un "tema" con la f. search_eurostat()
my_tema <- "employment"
aa <- eurostat::search_eurostat(pattern = my_tema, type = "all")
#- elegimos una tabla; por ejemplo "hlth_silc_17"
my_table <- "hlth_silc_17"
#- da información sobre la Base de datos que estas buscando
eurostat::label_eurostat_tables(my_table)
#- importamos los datos de "my_table" con get_eurostat()
df <- eurostat::get_eurostat(my_table, time_format = "raw", keepFlags = TRUE )
#- pedimos los descriptores/labels de las series
df_l <- eurostat::label_eurostat(df)
El paquete quantmod
library(quantmod) #- install.packages("quantmod")
#- For stocks and shares, the yahoo source is used.
facebook <- getSymbols(Symbols = 'F', src = 'yahoo', auto.assign = FALSE)
barChart(facebook)
#- For currencies and metals, the oanda source is used.
tc_euro_dolar <- getSymbols(Symbols = 'EUR/USD', src = 'oanda', auto.assign = FALSE)
#- For economics series, the FRED source is used.
Japan_GDP <- getSymbols(Symbols = 'JPNNGDP', src = 'FRED', auto.assign = FALSE)
Formatos de datos propios de R
Guardar datos en formatos como .csv
o .xlsx
es lo más habitual si quieres abrir estos datos en otros programas, pero …
… pero al grabar en estos formatos guardas los datos, PERO no guardas los metadatos!!!
R tiene 2 formatos de datos propios: .rda
y .rds
Formato .rds
.rds
Formato .RData (o .rda)
.RData
tiene la ventaja de que puedes guardar varios objetos a la vez.rda
Bonus 1 (🌶🌶): exportar los datos de un df en un archivo .xlsx
ya existente
#- bonus: le añadimos un libro mas al archivo "./pruebas/iris.xlsx"
rio::export(iris, "./pruebas/iris.xlsx") #- por si acaso lo hubiésemos borrado
rio::export(iris, "./pruebas/iris.xlsx", which = "iris_2")
#- lo mismo pero poniendo los nombres de los argumentos
rio::export(x = iris,
file ="./pruebas/iris.xlsx",
which = "iris_3")
Bonus 2 (🌶🌶🌶🌶): exportar 2 df’s en un único archivo .xlsx
Bonus 3 (🌶🌶): importar una hoja/libro especifica de un archivo .xlsx
Webscrapping [🌶🌶🌶 🌶🌶]
rvest
library(rvest)
library(tidyverse)
my_url <- "https://es.wikipedia.org/wiki/Anexo:Municipios_de_la_provincia_de_Teruel"
content <- read_html(my_url)
body_table <- content %>%
html_nodes('body') %>%
html_nodes('table') %>%
html_table(dec = ",")
#- solo hay una tabla
Teruel <- body_table[[1]] #- estoy haciendo subsetting de una lista
disgresión: es lo mismo un data.frame que una tibble [🌶🌶🌶]
Sí y no (!!!)
seleccionando “manualmente” un archivo de datos
(Web del curso aquí)