Descarregar,
importar (i exportar)
dades amb R

Mòdul pràctic d’ITA
(Grup M)

Es poden aconseguir dades de molts llocs

  • El més normal és descarregar-los de Bases de dades a la WEB


  • A Economia és molt habitual utilitzar dades de agències estadístiques oficials com l’INE, Eurostat, etc … però es poden aconseguir dades de molts altres llocs


  • Per exemple, aquí pots trobar un llistat ampli de fonts de dades.


Com podem descarregar unes dades?


I com es descarreguen aquestes mateixes dades amb R?

  • Podríem fer-ho per menús, però ho farem amb codi.

  • Al principi és una mica més complicat, però té avantatges, ia més a un Economista li convé saber fer servir R

  • Vegem-ho amb un exemple

Tasca: descarregar un fitxer de dades amb R


  • Intenta descarregar el fitxer amb R.


  • Als següents “Tabs” tens pistes i després la solució
  1. Crear un objecte on emmagatzemar la url on hi ha el fitxer de dades:
my_url <- "https://raw.githubusercontent.com/perezp44/archivos_download/refs/heads/master/plazas_turisticas.csv"


  1. Usar la funció download.file() per a descarregar el fitxer. Hauràs de donar-li el valor de 2 arguments:

    • l’url on és el fitxer de dades

    • la ruta del teu ordinador on voleu desar les dades.


(Recorda que estem treballant amb projectes, així que pots fer servir rutes relatives)

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")
1
Emmagatzemem la url a l’objecte my_url
2
Creem, amb codi, una carpeta anomenada pruebas on guardarem les dades
3
Fem servir la funció download.file() per a descarregar les dades que hi ha a my_url. Els guardem a la carpeta ‘pruebas’ del nostre projecte. Concretament al fitxer plazas_turisticas.csv
4
Fa exactament el mateix que 3, però aquest cop hem especificat el nom dels dos arguments de la funció.


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)       
1
És bo fer el codi modular (per si volem canviar les rutes en el futur). Per això, especifiquem a my_ruta el lloc on guardarem les dades
2
Fem servir curl::curl_download() per descarregar el fitxer. És una funció més moderna que download.file().

Importació de dades



  • La primera etapa d’una anàlisi de dades consisteix a carregar les dades a R (a la memòria de R, al Global)

podem fer servir/carregar dades dels paquets

  • Molts paquets de R contenen dades que podem fer servir


per això … intenta entendre el següent chunk de codi


#- quan iniciem R es carreguen automàticament un grup de paquets (R-base)
print(.packages()) #- [🌶]imprimim els noms dels "currently attached packages"

#- en un d'aquests paquets hi ha un conjunt de dades anomenat "iris"
iris          #- cridem a "iris"
find("iris")  #- [🌶] on és iris?
str(iris)     #- què és iris?


my_iris <- iris  #- "fem una còpia" d'iris al Global
find("my_iris")  #- on és my_iris?

iris <- c(2, 4)    #- creem un vector anomenat iris
find("iris")       #- on és ara iris?


Tasca: utilitzar unes dades d’un paquet


  • Vull fer servir el conjunt de dades penguins que està al paquet palmerpenguins


  • Lògicament, per poder fer servir aquestes dades, hem de tenir instal·lat el paquet. Podem fer-ho amb install.packages("palmerpenguins")


  • Després cal carregar el paquet amb library(palmerpenguins)


  • Un cop fet això, ja podem veure i fer servir el conjunt de dades penguins


1library(palmerpenguins)

2mys_pinguinos <- penguins
1
Carreguem el paquet al Global, a la memòria de R. Lògicament abans cal instal·lar el paquet amb install.packages("palmerpenguins")
2
Creem un objecte anomenat mys_pinguinos que és una còpia de les dades penguins


1mys_pinguinos <- palmerpenguins::penguins
1
És una forma alternativa de carregar les dades de penguins sense carregar tot el paquet

Importació de dades (del nostre disc dur)



  • Carregarem a R dades que tenim al nostre ordinador


  • Possiblement, els hem descarregat prèviament de la WEB

Les dades més habituals a Economia són les dades tabulars

  • Hi ha múltiples formats tabulars: .csv, .xlsx, .sav , .dta, etc …

Quan carreguem/importem aquestes dades tabulars a R …

  • S’emmagatzemaran internament a R com data.frames

RStudio permet carregar dades usant menús.

  • Usant menús (File > Import Dataset) es poden carregar dades CSV, EXCEL, SPSS, SAS y STATA.

  • Es pot fer amb menús, però nosaltres usarem codi


(La raó és que volem que els nostres anàlisis siguin reproduïbles)

Per importar (i exportar) dades utilitzarem codi

  • Usarem funcions, concretament funcions del paquet rio que permet importar i exportar fitxers en gairebé qualsevol format.


  • Per a importar dades a R farem servir la funció rio::import()
  • Per a exportar dades a R farem servir la funció rio::export()

important dades amb rio::import()

  • La funció rio::import() té diversos arguments, però només farem servir el primer.


  • El seu primer argument s’anomena file i la seva descripció diu que el valor de file ha de ser: “A character string naming a file, URL, or …”


  • És a dir, el valor de file ha de ser la ruta del nostre ordinador on hi ha les dades que volem importar


Tasca: importar a R dades que tenim guardades al nostre ordinador


  • Et recordes que abans hem descarregat unes dades al fitxer ./pruebas/plazas_turisticas.csv?


  • La tasca consisteix a carregar aquestes dades a R (al Global, en memòria de R)


  • Heu d’usar la funció rio::import()


  • En el primer argument (anomenat file) has d’especificar la ruta on hi ha les dades


  • Recorda que hem guardat les dades a ./pruebas/plazas_turisticas.csv


1my_ruta <- "./pruebas/plazas_turisticas.csv"

2df <- rio::import(my_ruta)
1
Desem a my_ruta la ruta a les dades que vull importar
2
Creem un objecte anomenat df amb les dades que hi ha a my_ruta


my_ruta <- "./pruebas/plazas_turisticas.csv"   

1df <- rio::import(file = my_ruta)
1
Aquesta vegada posem el nom de l’argument file i el valor de l’argument my_ruta a la funció rio::import()

Un cop tenim les dades a R …

  • … podem començar a treballar a les nostres dades; per exemple per netejar-los


… imagina que algú ens demana aquestes dades netes

Què fem?


  • Haurem de exportar/guardar les dades en un fitxer del nostre ordinador per poder enviar-les

Exportació de dades



  • Anem a exportar/guardar al nostre ordinador dades que tinguem a la memòria de R


Exportant dades a R amb el paquet rio


  • Per a exportar dades a R farem servir la funció rio::export()

  • La funció rio::export() té diversos arguments, però només farem servir els dos primers.


  1. El primer argument s’anomena x (el seu valor ha de ser un objecte/dades de R que volem exportar)


  1. El segon argument s’anomena file (el seu valor ha de ser la ruta on volem desar les dades)


Tasca: exportar unes dades de R a un fitxer

  • Carrega unes dades a R i exporta’ls a un fitxer al teu ordinador


  • Per exemple, podeu exportar les dades iris a un fitxer anomenat iris.csv a la carpeta pruebas del vostre projecte


  • Després, exporteu les mateixes dades, però a un fitxer anomenat iris.xlsx a la mateixa carpeta
  • Heu d’usar la funció rio::export()


  • Has de donar-li valors a dos arguments de la funció: x i file


(*) el valor de x ha de ser l’objecte que vols exportar (per exemple iris)

(*) el valor de file ha de ser la ruta on vols desar les dades


1df <- iris

2rio::export(df, "./pruebas/iris.csv")
1
Carreguem les dades de iris a R: creem l’objecte df
2
Exportem df a un fitxer anomenat iris.csv a la carpeta pruebas


df <- iris  

1rio::export(x = df,
            file = "./pruebas/iris.csv")
1
Exportem les dades però especificant el nom dels arguments x i file de la funció rio::export()

Pràctica: importar/exportar dades

  1. Descarrega (usant codi) aquestes dades al teu ordinador: https://raw.githubusercontent.com/perezp44/iris_data/master/data/iris.csv


  1. Importa a R aquestes dades que has baixat


  1. Exporta les dades a format .xlsx i .rds


Abans de començar netegem la carpeta pruebas del nostre projecte

fs::dir_delete("pruebas")    
fs::dir_create("pruebas")    
  1. Descarregant les dades
#- en aquesta url hi ha un fitxer de dades en format .csv
my_url <- "https://raw.githubusercontent.com/perezp44/iris_data/master/data/iris.csv"

curl::curl_download(url = my_url, 
                    destfile =  "./pruebas/iris.csv")
  1. Important les dades
my_ruta <- "./pruebas/iris.csv" 

iris <- rio::import(my_ruta)       
  1. Exportant les dades
rio::export(x = iris, file = "./pruebas/iris.xlsx")  

rio::export(x = iris, file = "./pruebas/iris.rds")  

Accedir a dades a través deAPI’s



  • Hi ha moltes organitzacions que ofereixen dades a través d’API’s i …

  • … moltes vegades, hi ha un paquet de R per accedir fàcilment a ells!!!

Eurostat

  • Eurostat és l’oficina d’estadística de la Unió Europea

  • El paquet eurostat permet accedir a les API d’Eurostat per obtenir dades


  • Per exemple aquí pots veure una de les múltiples taules de dades que ofereix Eurostat; concretament la taula Cultural employment by sex o amb sigles “cult_emp_sex”


  • Importem aquesta taula a R amb el paquet eurostat?
# install.packages("eurostat")
library(eurostat)

#- importem les dades de la taula "cult_emp_sex": "Cultural employment by sex"
df <- eurostat::get_eurostat("cult_emp_sex")   

Eurostat: important dades a R


Si vols provar tu mateix a baixar dades de Eurostat:


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 dades de Eurostat

  • Podem cercar un tema a Eurostat; per exemple aquí hi ha dades de “Employment and unemployment (LFS)”, aquí dades sobre “Population and social conditions” i aquí sobre “Crime and criminal justitzi”

  • Per mi és més còmode buscar dades amb el paquet 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 paquet quantmod

  • Permet accedir a una gran varietat de dades econòmiques. Aquí tens informació


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)

Extensions




Formats de dades pròpies de R

  • Desar dades en formats com .csv o .xlsx és el més habitual si vols obrir aquestes dades en altres programes, però …

  • … però en gravar en aquests formats guardes les dades, PERÒ no guardes les metadades!!!


R té 2 formats de dades pròpies: .rda y .rds

  • Aquests formats sí guarden les metadades

Format .rds

  • Exportar dades a format .rds
rio::export(x = iris, file = "./pruebas/iris.rds")   


  • Importar dades al format .rds
df <- rio::import(file = "./pruebas/iris.rds")

Format .RData (o .rda)

  • El format .RData té l’avantatge que podeu desar diversos objectes alhora


  • Per exportar dades a format .rda
#- guardamos los objetos mtcars e iris en un fichero llamado "mtcars_and_iris.RData"

save(mtcars, iris,  file = "./pruebas/mtcars_and_iris.RData")


  • Per importar dades en format .Rda, hem d’usar la funció load()
load(file = "./pruebas/mtcars_and_iris.RData")

Bonus 1 (🌶🌶): exportar les dades d’un df a un fitxer .xlsx ja existent


#- 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 únic arxiu .xlsx


rio::export(x = list(iris = iris, 
                     pinguinos = palmerpenguins::penguins), 
            file = "./pruebas/my_iris_pinguinos.xlsx")

Bonus 3 (🌶🌶): importar un full/llibre específic d’un fitxer .xlsx


iris_1 <- rio::import("./pruebas/my_iris_pinguinos.xlsx")  #- solo importa el primer libro
  

pinguinos_1 <- rio::import("./pruebas/my_iris_pinguinos.xlsx", sheet = 2)


pinguinos_2 <- rio::import(file = "./pruebas/my_iris_pinguinos.xlsx", 
                           sheet = "pinguinos")

Webscrapping [🌶🌶🌶 🌶🌶]

  • Webscrapping consisteix a obtenir dades directament de pàgines web, de su código html.


Webscrapping (exemple 1)

  • Per obtenir aquestes dades a R, podem utilitzar el paquet 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

disgressió: és el mateix un data.frame que una tibble [🌶🌶🌶]

Sí i no (!!!)

  • No són exactament el mateix, però per a nosaltres són totalment equivalents. Podem pensar que les tibbles són data.frame’s modernitzats o tunejats


  • Les dues són estructures de R per emmagatzemar dades tabulars. Si vols veure en què es diferencien llegeix això

seleccionant “manualment” un fitxer de dades


  • Aquest truc és xulo… però no cal fer-ho
my_data <- rio::import(file.choose())


  • No cal fer-ho si volem que les nostres anàlisis siguin reproduïbles