Tengo datos. ¿Y ahora qué?

Carga de datos - I

Esta es una serie de post, que nos ayudará a ver de manera aplicada los conceptos de estadística y de machine learning. Para comenzar, lo primero es conseguir información. Asumiendo que ya tenemos esto, el siguiente paso es ahora poder gestionarla dentro de R.

Podemos tener información en distintos formatos, desde un texto plano, separado por comas, excel, XML, base de datos, json, etc. Nos ayudaremos de datos abiertos de kaggle y de openml.

Leer información desde web (CSV)

El dataset “airlines” se compone por la información de los vuelos en Estados Unidos del 2003 al 2016.


airline <- read.csv('https://corgis-edu.github.io/corgis/datasets/csv/airlines/airlines.csv')

head(airline)[,c(1:5)]
#>   Airport.Code
#> 1          ATL
#> 2          BOS
#> 3          BWI
#> 4          CLT
#> 5          DCA
#> 6          DEN
#>                                                          Airport.Name
#> 1               Atlanta, GA: Hartsfield-Jackson Atlanta International
#> 2                                     Boston, MA: Logan International
#> 3 Baltimore, MD: Baltimore/Washington International Thurgood Marshall
#> 4                      Charlotte, NC: Charlotte Douglas International
#> 5                   Washington, DC: Ronald Reagan Washington National
#> 6                                    Denver, CO: Denver International
#>   Time.Label Time.Month Time.Month.Name
#> 1    2003/06          6            June
#> 2    2003/06          6            June
#> 3    2003/06          6            June
#> 4    2003/06          6            June
#> 5    2003/06          6            June
#> 6    2003/06          6            June

Se usó la funcion read.csv, ya que la informacion se encuentra separada por comas. Si la informacion estuviera separa por otro caracter, se agregaria el parametro sep = “/" por ejemplo. No es indispensable que el formato almacenado en la web sea un CSV, tambien puede ser un texto plano (.TXT) u otro.

Leer información desde disco local (Zip file)

Para esto, primero descargar el archivo del siguiente link. Se descargará un zip y dentro de el un archivo csv.


house <- read.csv(unz("archive.zip","housePrice.csv"), header = T)

head(house)
#>   Area Room Parking Warehouse Elevator                    Address     Price
#> 1   63    1    True      True     True                    Shahran 1.850e+09
#> 2   60    1    True      True     True                    Shahran 1.850e+09
#> 3   79    2    True      True     True                     Pardis 5.500e+08
#> 4   95    2    True      True     True              Shahrake Qods 9.025e+08
#> 5  123    2    True      True     True             Shahrake Gharb 7.000e+09
#> 6   70    2    True      True    False North Program Organization 2.050e+09
#>   Price.USD.
#> 1   61666.67
#> 2   61666.67
#> 3   18333.33
#> 4   30083.33
#> 5  233333.33
#> 6   68333.33

Para que funcione el código de arriba, es necesario saber el nombre del archivo que se encuentra dentro del zip, en este caso es “housePrice.csv”

Leer información desde disco local (Excel file)

Cuando tenemos un archivo en formato excel, debemos ser cuidadosos en ver si la extensión es “.xls” o “.xlsx”. A partir de la extensión tendremos que escoger qué libreria usar. Por otra parte, a diferencia de un texto plano, o un csv, el formato de excel como sabemos esta organizado por pestañas, es decir un archivo podria tener información en más de una pestaña. Para el siguiente ejemplo, por favor descargue el siguiente archivo y descomprímalo en su disco local.

library(openxlsx)
paypal <- read.xlsx("Fintech Stocks.xlsx", sheet = "PayPal")
coinbase <- read.xlsx("Fintech Stocks.xlsx", sheet = "Coinbase")

head(paypal,5)
#>    Date  Open  High    Low Close Adj.Close   Volume
#> 1 42557 35.94 36.17 35.715 35.93     35.93  7821300
#> 2 42558 35.92 36.39 35.840 36.32     36.32  7326700
#> 3 42559 36.78 37.46 36.660 37.36     37.36  6828600
#> 4 42562 37.45 38.33 37.400 38.15     38.15 10096200
#> 5 42563 38.47 38.91 38.240 38.79     38.79  9997200

head(coinbase,5)
#>    Date   Open   High    Low  Close Adj.Close   Volume
#> 1 44300 381.00 429.54 310.00 328.28    328.28 81065700
#> 2 44301 348.90 349.20 317.27 322.75    322.75 39777900
#> 3 44302 327.50 345.99 321.03 342.00    342.00 22654500
#> 4 44305 337.26 341.01 326.79 333.00    333.00 11405600
#> 5 44306 333.43 334.83 312.02 320.82    320.82 18082300

Leer información de una base de datos externa (online)

Con R podemos conectarnos a distintos gestores de base datos (MS Accsess, SQL, MySQL, Oracle, etc), por medio de la ODBC (Open DataBase Connectivity). Para ello se cuentan con distintos paquetes, entre ellos DBI, ODBC, etc. Si nuestra información se encuentra en una base SQL cuyo servidor físico se encuentra en tu centro laboral, o ubicado fuera de tu red local, podemos conectarnos a ella conociendo la IP, el usuario y contraseña y asegurar que tengas un perfil de acceso.

library(DBI)
library(odbc)

conn <- dbConnect(odbc::odbc(), Driver = "SQL Server",
Server = "161.132.193.XXX",
Database = "Nombre_Base",
UID = "usuario",
PWD = "usuario",
encoding = "latin1")

Creamos un objeto de tipo Conexión llamado “conn”. Para esto debes conocer si el gestor es un SQL Server, MySQL, etc. En el campo “Server”, tienes que ingresar la IP del servidor. En “UID” el nombre del usuario de tu perfil de acceso y en “PWD” el password. El tipo de “encoding” ayuda con los caracteres especiales, como la ñ.

consulta <- dbGetQuery(conn, "SELECT * FROM TABLA")

Una vez que se estableció con éxito la conexión, se podrán hacer extracciones y filtros de la información con las sentencias SELECT por medio de la función “dbGetQuery” cuyo parámetro será la conexión que hicimos anteriormente.

Leer información de una base de datos local (MS Accsess)

En el caso que contemos con información en nuestro disco local, y en un gestor de base de datos como por ejemplo un MS Accsess, podemos usar el paquete de R “RODBC”. Para pode acceder al servidor local, debemos hacer lo siguiente:

library(RODBC)

conn <- odbcConnectAccess2007("basedatos.accdb")

sin <- sqlQuery(conn, "SELECT * FROM Tabla", stringsAsFactors = FALSE)

odbcCloseAll()

Al igual que en el bloque anterior, debemos construir primero la conexión, esto se hace con la función odbcConnectAccess2007. Notar que esta se utiliza con versiones de access mayores a 2007. Para poder extraer datos de las tablas de la base, se usa la función sqlQuery cuyo parámetro es la conexión abierta y el query que necesites.

Por último, es recomendable cerrar la conexión por el tráfico, para ellos puedes usar la función odbcCloseAll().

Leer información por medio de REST API (JSON)

Podemos tener información valiosa proveniente de sitios web, en el cual si existe una API desarrollada para poder hacer peticiones o request HTTP, R nos entrega una librerias para poder extraer información. En este ejemplo, usaremos la API de Wikipedia, para recolectar las respuestas en ingles y español de lo que es un capacitor, sus definiciones y sus alias.

library(httr)
library(XML)
library(jsonlite)

query <- 
  'https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q5322&format=json'
response <- GET(URLencode(query))
response <- rawToChar(response$content)
response <- fromJSON(response)

# Buscamos como se dice capacitor en distintos idiomas:

labels <- lapply(response$entities$Q5322$labels, function(x) {
  paste0(x$value, "(", x$language, ")")
})
labels <- paste(labels, collapse = ", ")
print(labels)
#> [1] "condensatore(it), condensateur(fr), kondensator(nb), capacitor(en), Kondensator(de), Kapasitor(af), Condensador(an), <U+0645><U+064F><U+0643><U+062B><U+0651><U+0641>(ar), <U+0627><U+0644><U+0645><U+0643><U+062B><U+0641>(arz), Kondensator(az), <U+041A><U+0430><U+043D><U+0434><U+044D><U+043D><U+0441><U+0430><U+0442><U+0430><U+0440>(be), <U+041A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0437><U+0430><U+0442><U+043E><U+0440>(bg), <U+09A7><U+09BE><U+09B0><U+0995>(bn), Kondenzator(bs), condensador(ca), kondenzátor(cs), Cynhwysydd(cy), elektrisk kondensator(da), <U+03A0><U+03C5><U+03BA><U+03BD><U+03C9>t<U+03AE><U+03C2>(el), Capacitor(en-ca), capacitor(en-gb), kondensilo(eo), condensador eléctrico(es), Kondensaator(et), Kondentsadore elektriko(eu), <U+062E><U+0627><U+0632><U+0646>(fa), kondensaattori(fi), <U+96FB><U+5BB9>(gan), Condensador(gl), <U+05E7><U+05D1><U+05DC>(he), <U+0938><U+0902><U+0927><U+093E><U+0930><U+093F><U+0924><U+094D><U+0930>(hi), Elektricni kondenzator(hr), Kondenzátor(hu), condensator(ia), Kondensator(id), Kondensatoro(io), Rafþéttir(is), <U+30B3><U+30F3><U+30C7><U+30F3><U+30B5>(ja), Kondensator(jv), <U+10D4><U+10DA><U+10D4><U+10E5><U+10E2><U+10E0><U+10E3><U+10DA><U+10D8> <U+10D9><U+10DD><U+10DC><U+10D3><U+10D4><U+10DC><U+10E1><U+10D0><U+10E2><U+10DD><U+10E0><U+10D8>(ka), <U+041C><U+0414><U+0428>-<U+043A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(kk), <U+CD95><U+C804><U+AE30>(ko), Kondansator(ku), Condensatrum(la), Kondensatorius(lt), Kondensators(lv), <U+043A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0437><U+0430><U+0442><U+043E><U+0440>(mk), <U+0D15><U+0D2A><U+0D4D><U+0D2A><U+0D3E><U+0D38><U+0D3F><U+0D31><U+0D4D><U+0D31><U+0D7C>(ml), <U+041A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(mn), <U+0927><U+093E><U+0930><U+093F><U+0924><U+094D><U+0930>(mr), Pemuat(ms), <U+101C><U+103B><U+103E><U+1015><U+103A><U+101E><U+102D><U+102F>(my), condensator(nl), kondensator(nn), Condensador(oc), <U+0A38><U+0A70><U+0A27><U+0A3E><U+0A30><U+0A3F><U+0A24><U+0A30>(pa), kondensator(pl), Condensator(pms), <U+06A9><U+06CC><U+067E><U+06CC><U+0633><U+06CC><U+0679><U+0631>(pnb), <U+06A9><U+0627><U+0646><U+0689><U+0646><U+0633><U+0631>(ps), capacitor(pt), capacitor(pt-br), <U+044D><U+043B><U+0435><U+043A><U+0442><U+0440><U+0438><U+0447><U+0435><U+0441><U+043A><U+0438><U+0439> <U+043A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(ru), <U+041A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0437><U+0430><U+0442><U+043E><U+0440>(rue), Kondenzator(sh), <U+0DB0><U+0DCF><U+0DBB><U+0DD2><U+0DAD><U+0DCA> <U+0DBB><U+0D9A>(si), kondenzátor(sk), Kondenzator(sl), Kondensatori(sq), <U+043A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0437><U+0430><U+0442><U+043E><U+0440>(sr), Kondensatore(stq), Kapasitor(su), kondensator(sv), <U+0BAE><U+0BBF><U+0BA9><U+0BCD><U+0BA4><U+0BC7><U+0B95><U+0BCD><U+0B95><U+0BBF>(ta), <U+0E15><U+0E31><U+0E27><U+0E40><U+0E01><U+0E47><U+0E1A><U+0E1B><U+0E23><U+0E30><U+0E08><U+0E38>(th), Kapasitor(tl), Kondansatör(tr), <U+041A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(tt), <U+0643><U+0648><U+0646><U+062F><U+06D0><U+0646><U+0633><U+0627><U+062A><U+0648><U+0631>(ug), <U+0415><U+043B><U+0435><U+043A><U+0442><U+0440><U+0438><U+0447><U+043D><U+0438><U+0439> <U+043A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(uk), <U+06AF><U+0646><U+062C><U+0627><U+0626><U+0634><U+062F><U+0627><U+0631>(ur), T<U+1EE5> di<U+1EC7>n(vi), Kapasitor(war), Fattalukaay(wo), <U+05E7><U+05D0><U+05E0><U+05D3><U+05E2><U+05E0><U+05E1><U+05D0><U+05D8><U+05D0><U+05E8>(yi), <U+7535><U+5BB9><U+5668>(zh), <U+96FB><U+5BB9>(yue), Kondensator(de-ch), Toilleoir(ga), <U+0915><U+094D><U+092F><U+093E><U+092A><U+093E><U+0938><U+093F><U+0924><U+0930>(new), <U+041A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(os), <U+043A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0437><U+0430><U+0442><U+043E><U+0440>(sr-ec), kondenzator(sr-el), capacitor(sco), condensator electric(ro), <U+042D><U+043B><U+0435><U+043A><U+0442><U+0440><U+0438><U+0447><U+0435><U+0441><U+043A><U+0438> <U+043A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(ce), Kondensator(uz), <U+062E><U+0627><U+0632><U+0646>(mzn), <U+043A><U+0430><U+043D><U+0434><U+044D><U+043D><U+0441><U+0430><U+0442><U+0430><U+0440>(be-tarask), Kondensator(gsw), Kondensaator(frr), Kadobo(mg), <U+0567><U+056C><U+0565><U+056F><U+057F><U+0580><U+0561><U+056F><U+0561><U+0576> <U+056F><U+0578><U+0576><U+0564><U+0565><U+0576><U+057D><U+0561><U+057F><U+0578><U+0580>(hy), <U+0915><U+094D><U+092F><U+093E><U+092A><U+093E><U+0938><U+093F><U+091F><U+0930>(ne), Kaappaasiterii(om), <U+06A9><U+0648><U+0646><U+062F><U+0627><U+0646><U+0633><U+0627><U+062A><U+0648><U+0631>(azb), Tian-iông-khì(nan), condensador(ast), <U+09A7><U+09BE><U+09F0><U+0995>(as), Kiapasita(jam), <U+042D><U+043B><U+0435><U+043A><U+0442><U+0440> <U+043A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440><U+044B>(ba), <U+0C15><U+0C46><U+0C2A><U+0C3E><U+0C38><U+0C3F><U+0C1F><U+0C30><U+0C4D>(te), <U+7535><U+5BB9><U+5668>(wuu), <U+041A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(tg), Kondensatoa(bar), <U+041A><U+043E><U+043D><U+0434><U+0435><U+043D><U+0441><U+0430><U+0442><U+043E><U+0440>(ky), Kapasita(sw), <U+0927><U+0930><U+0928><U+0940>(bho), Condensator (elettrotecnica)(lmo), <U+0643><U+0648><U+0646><U+062F><U+0627><U+0633><U+0627><U+062A><U+0648><U+0631>(ary), <U+96FB><U+5BB9><U+5668>(zh-hant), Elektrik kondensator(crh), Asguday(shi)"

Para poder entender como usar la información, es necesario entender el modelo de datos o el diccionario de datos de la fuente en este caso de wikipedia, que si es bastante complicado, pero una vez comprendido, se tiene a una gran fuente de datos.

Leer información por medio de REST API (XML)

Tomamos el mismo ejemplo, extraer toda la información de wikipedia de lo que es un capacitor.

library(httr)
library(XML)
library(jsonlite)

query <- 
  'https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q5322&languages=en&format=xml'
response <- GET(URLencode(query))
response <- rawToChar(response$content)
response <- xmlParse(response)
response <- xmlToList(response)

Aquí te dejo la versión de los paquetes que se usó en esta sesión.

#>  ! package  * version  date (UTC) lib source
#>    DBI        1.1.1    2021-01-15 [1] CRAN (R 4.1.1)
#>    httr     * 1.4.2    2020-07-20 [1] CRAN (R 4.1.1)
#>    jsonlite * 1.7.2    2020-12-09 [1] CRAN (R 4.1.1)
#>  R odbc       <NA>     <NA>       [?] <NA>
#>    openxlsx * 4.2.4    2021-06-16 [1] CRAN (R 4.1.1)
#>    RODBC      1.3-19   2021-09-16 [1] CRAN (R 4.1.1)
#>    XML      * 3.99-0.8 2021-09-17 [1] CRAN (R 4.1.1)
#> 
#>  [1] C:/Users/d_mor/Documents/R/win-library/4.1
#>  [2] C:/Program Files/R/R-4.1.2/library
#> 
#>  R -- Package was removed from disk.

Te invito a realizar tus propias conexiones, aplicarlo en algún proyecto personal o laboral. Si tienes alguna pregunta o consejo, déjalo en los comentarios.

Te parece útil? Considera compartirlo 🙌

Avatar
David Mori Alva
Ingeniería Estadística

My research interests include statistics, insurance-Reinsurance, machine learning and finance quantitative.

comments powered by Disqus

Related