Módulo práctico de ITA
(Grupo M)
Se pueden conseguir datos de muchos sitios
¿Cómo solemos 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
¿Donde se descargarán esos datos?
¿Y cómo se descargan datos con R?
Usando código
Al principio es un poco más complicado, pero tiene ventajas, y además estamos aprendiendo R
Veámoslo con un ejemplo
Tarea: descargar un fichero de datos con R
.csv
:Usaremos la función download.file()
download.file()
tiene varios argumentos. Nos centramos en los 2 primeros: url
y destfile
Tendrás que dar valores a esos dos argumentos:
el url donde está el fichero de datos
la ruta de tu ordenador donde quieres guardar los datos. (Lo guardaremos en la subcarpeta “pruebas”)
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
… 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
flows
que está en el paquete refugees
refugees
es un paquete que no está en R-baseinstall.packages("refugees")
library(refugees)
flows
1my_flows_2 <- refugees::flows
flows
sin cargar todo el paquete
Los datos más habituales en Ciencias Sociales 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 single-file .zip or .tar archive”. WTF!!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
) como el valor del argumento (my_ruta
)
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
rio::export()
para exportar a un fichero (de tu ordenador) el conjunto de datos iris en formato .csvrio::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
iris
en R: creamos el objeto df
df
a un fichero llamado iris.csv
x
y file
) de la función rio::export()
iris.csv
?La respuesta es “en el directorio de trabajo”
OK, pero, ¿exactamente donde?
iris.csv
en la subcarpeta “pruebas” del RprojectPráctica: importar/exportar datos
Importa a R esos datos que has descargado
Exporta los datos a formato .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
?Practica: importar datos de Eurostat
eurostat
. ¿Probamos?library(eurostat)
#- podemos buscar un "tema" con la f. search_eurostat()
my_tema <- "employment"
aa <- eurostat::search_eurostat(pattern = my_tema, type = "all")
#- elegimos un dataset; 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)
Webscrapping [🌶🌶🌶 🌶🌶]
Webscrapping (ejemplo 1)
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
digresión: es lo mismo un data.frame que una tibble [🌶🌶🌶]
Sí y no (!!!)
seleccionando “manualmente” un archivo de datos
Bonus 1 (🌶🌶 … 🌶): exportar los datos de un df a 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")
openxlsx
#- tenemos que usar el pkg openxlsx
library(openxlsx) #- pak::pak("openxlsx")
#- tenemos que crear un "Woorkbook" con la f. loadWorkbook()
my_workbook <- openxlsx::loadWorkbook("./pruebas/iris.xlsx")
#- ahora añadimos hojas/sheets al Woorkbook
openxlsx::addWorksheet(my_workbook, "iris_2")
openxlsx::addWorksheet(my_workbook, "my_mtcars")
#- ahora escribimos datos en las nuevas hojas/sheets q hemos creado
openxlsx::writeData(my_workbook, sheet = "iris_2", x = iris)
openxlsx::writeData(my_workbook, sheet = "my_mtcars", x = mtcars)
#- exportamos/guardamos el archivo (con las nuevas sheets)
openxlsx::saveWorkbook(my_workbook, "./pruebas/iris.xlsx", overwrite = TRUE)
Bonus 2 (🌶🌶🌶): exportar 2 df’s en un único archivo .xlsx
rio
, pero …list()
Bonus 3 (🌶🌶): importar una hoja/libro especifica de un archivo .xlsx
rio
, pero …sheet