Ahora que ya sabes cómo hacer los cinco gráficos nombrados usando R, es momento de que aprendas a cargar tus propios archivos de datos. No siempre todos los datos con los que queremos trabajar vienen dentro de un paquete de R.
De hecho, la mayoría de veces vamos a querer trabajar con un archivo de datos que está en nuestra computadora. Pueden ser datos que hemos recolectado por nuestra cuenta o que hemos descargado de alguna fuente en internet.
Estos archivos pueden encontrarse en diferentes formatos, siendo uno de los más populares el de Ms Excel. Otros tipos de archivos que quizás conozcas pueden ser SPSS o Stata.
Durante esta sesión desarrollaremos los siguientes temas:
Paso 1: Creamos un nuevo proyecto (dentro de la carpeta “R”)
Menú File >
New Proyect >
New Directory >
New Proyect >
Elegir nombre y ubicación
Nombre: 03-ejercicios
Ubicacion: Carpeta R >
Create project
Paso 2: Dentro de la carpeta del proyecto, creamos una carpeta llamada “data”. Puedes hacer lo desde el visor de archivos de RStudio (“Files”) o desde tu explorador de archivos cotidiano.
Para comprobar que llegaste hasta aquí, ejecuta el siguiente código en la consola y copia el resultado en el chat grupal.
dir()
Crea un documento R Markdown usando la plantilla “Ejercicios ggplot2” del paquete “ejerciciosT1”. Si no tuvieras instalado el paquete, usa el siguiente código en la consola:
remotes::install_github("talleresdedatos/ejerciciosT1")
Si la consola te pregunta si quieres actualizar algún paquetes con versión más reciente, elige que Ninguno (None).
En grupo, resuelve los ejercicios planteados y comparte el enlace del archivo publicado en Rpubs.com en el chat de la sesión.
La data a importar en la práctica se encuentra en una carpeta de Google Drive para su descarga. No olvides ubicar todos los archivos descargados dentro de la carpeta “data” de tu proyecto.
Ahora deberías contar con todos estos archivos en tu carpeta “data”.
data.frame(archivos = dir("data")) %>% slice(1:6) %>% knitr::kable()
| archivos |
|---|
| 09_UNIVERSIDADES_CARATULA.SAV |
| gapminder_comas.csv |
| gapminder_comas2.txt |
| gapminder_excel.xlsx |
| gapminder_excel_col_names.xlsx |
| gapminder_excel_sheet.xlsx |
data.frame(archivos = dir("data")) %>% slice(7:11) %>% knitr::kable()
| archivos |
|---|
| gapminder_excel_skip.xlsx |
| gapminder_guiones.txt |
| gapminder_michi.txt |
| gapminder_slash.txt |
| gapminder_tabs.tsv |
Para comprobar que todo está bien, ejecuta el siguiente código en la consola y copia el resultado en el chat grupal.
dir("data")
Existen paquetes especializados para cada tipo de datos que deseamos descargar. En esta oportunidad, aprenderemos a usar los siguientes.
readr: Para archivos de textoreadxl: Para archivos de Excelhaven: Para archivos de SPSS y StataTodos estos paquetes se descagaron cuando instalaste tidyverse.
Fuera del mundo de la investigación académica, existen muchos tipos de formatos de almacenamiento de datos que están mejor optimizados para tareas específicas.
Una característica común de todos los paquetes presentados es que al leer los datos en R, se crean como tibbles, un formato de trabajo para datos tabulares que existe sólo en R. Además de ello, sus funciones comparten elementos en su interfaz (API), lo que permite trabajar con distintos tipos de datos realizando cambios mínimos.
Para acceder a las funciones de un paquete, siempre debemos primero cargarlo haciendo uso de library().
library(readr)
Alternativamente, podemos cargarlo junto a toda la colección de paquetes del tidyverse.
library(tidyverse)
En la carpeta “data” contamos con cinco tipos de archivos:
La función que nutre el núcleo de readr es read_delim(). Nos permitirá leer prácticamente todo tipo de archivos de texto siempre y cuando le indiquemos el tipo de delimitador.
Exploremos los archivos de texto en nuestra carpeta “data”.
Los archivos de valores separados por comas (Comma Separated Values) son de los más utilizados en el mundo del análisis de datos debido a que prácticamente cualquier software puede reconocerlos.
Son archivos de texto que representan datos tabulares en los que los valores de cada columna están separados por comas.
Ver archivo original
Para leer estos archivos, usamos la función read_csv() del paquete readr.
read_csv("data/gapminder_comas.csv")
read_csv("data/gapminder_comas.csv")
## Rows: 1704 Columns: 6
## -- Column specification -------------------------------------------------------- ## Delimiter: "," ## chr (2): country, continent ## dbl (4): year, lifeExp, pop, gdpPercap
## ## i Use `spec()` to retrieve the full column specification for this data. ## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
## # A tibble: 1,704 x 6 ## country continent year lifeExp pop gdpPercap ## <chr> <chr> <dbl> <dbl> <dbl> <dbl> ## 1 Afghanistan Asia 1952 28.8 8425333 779. ## 2 Afghanistan Asia 1957 30.3 9240934 821. ## 3 Afghanistan Asia 1962 32.0 10267083 853. ## 4 Afghanistan Asia 1967 34.0 11537966 836. ## 5 Afghanistan Asia 1972 36.1 13079460 740. ## 6 Afghanistan Asia 1977 38.4 14880372 786. ## 7 Afghanistan Asia 1982 39.9 12881816 978. ## 8 Afghanistan Asia 1987 40.8 13867957 852. ## 9 Afghanistan Asia 1992 41.7 16317921 649. ## 10 Afghanistan Asia 1997 41.8 22227415 635. ## # ... with 1,694 more rows
Al ejecutar el código, obtenemos dos tipos de output. El primero nos indica que la lectura asignó a cada columna cierto tipo de datos. Este tipo de output es un simple mensaje (message).
El segundo output nos indica el objeto obtenido (un tibble), con la cantidad de filas y columnas que contiene. Además, nos brinda las diez primeras filas de la información obtenida, y el nombre y tipo de cada columna. Si este conjunto de datos tuviera más columnas, sólo se nos mostraría la cantidad de columnas que alcances en nuestra ventana.
Si deseamos usar los datos obtenidos para un análisis posterior, como probablemente sea el caso, es necesario almacenar la tabla generada haciendo uso del operador de asignación <-. El nombre indicado aparecerá en nuestro panel “Environment”.
datos_obtenidos_csv <- read_csv("data/gapminder_comas.csv")
## Rows: 1704 Columns: 6
## -- Column specification -------------------------------------------------------- ## Delimiter: "," ## chr (2): country, continent ## dbl (4): year, lifeExp, pop, gdpPercap
## ## i Use `spec()` to retrieve the full column specification for this data. ## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
Vemos que volvemos a obtener el mensaje, pero esta vez no se nos muestran los datos. Esto sucede porque al asignarle un nombre, le hemos indicado a R que queremos acceder a los datos sólo cuando se lo indiquemos explícitamente. Para hacer ello, simplemente tipeamos el nombre que le asignamos al conjunto de datos.
datos_obtenidos_csv
## # A tibble: 1,704 x 6 ## country continent year lifeExp pop gdpPercap ## <chr> <chr> <dbl> <dbl> <dbl> <dbl> ## 1 Afghanistan Asia 1952 28.8 8425333 779. ## 2 Afghanistan Asia 1957 30.3 9240934 821. ## 3 Afghanistan Asia 1962 32.0 10267083 853. ## 4 Afghanistan Asia 1967 34.0 11537966 836. ## 5 Afghanistan Asia 1972 36.1 13079460 740. ## 6 Afghanistan Asia 1977 38.4 14880372 786. ## 7 Afghanistan Asia 1982 39.9 12881816 978. ## 8 Afghanistan Asia 1987 40.8 13867957 852. ## 9 Afghanistan Asia 1992 41.7 16317921 649. ## 10 Afghanistan Asia 1997 41.8 22227415 635. ## # ... with 1,694 more rows
En esta ocasión, sí obtenemos la información contenida en el conjunto de datos, pero no el mensaje. Esto sucede porque los mensajes sólo nos muestran información relevante al momento de ejecutar una función, como lo es read_csv().
Otra manera de almacenar datos es usando uso de archivos de valores separados por tabulaciones (Tab Separated Values)
Para leer estos archivos, hacemos uso de la función read_tsv().
datos_obtenidos_tsv <- read_tsv("data/gapminder_tabs.tsv")
## Rows: 1704 Columns: 6
## -- Column specification -------------------------------------------------------- ## Delimiter: "\t" ## chr (2): country, continent ## dbl (4): year, lifeExp, pop, gdpPercap
## ## i Use `spec()` to retrieve the full column specification for this data. ## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
Nuevamente, la función nos comunica mediante un mensaje qué tipo de columnas ha identificado.
Podemos inspeccionar el contenido de este conjunto de datos del mismo modo anterior.
datos_obtenidos_tsv
## # A tibble: 1,704 x 6 ## country continent year lifeExp pop gdpPercap ## <chr> <chr> <dbl> <dbl> <dbl> <dbl> ## 1 Afghanistan Asia 1952 28.8 8425333 779. ## 2 Afghanistan Asia 1957 30.3 9240934 821. ## 3 Afghanistan Asia 1962 32.0 10267083 853. ## 4 Afghanistan Asia 1967 34.0 11537966 836. ## 5 Afghanistan Asia 1972 36.1 13079460 740. ## 6 Afghanistan Asia 1977 38.4 14880372 786. ## 7 Afghanistan Asia 1982 39.9 12881816 978. ## 8 Afghanistan Asia 1987 40.8 13867957 852. ## 9 Afghanistan Asia 1992 41.7 16317921 649. ## 10 Afghanistan Asia 1997 41.8 22227415 635. ## # ... with 1,694 more rows
Para archivos de texto con cualquier otro tipo de delimitador, usamos la función read_delim(), que además de solicitarnos la ubicación del archivo, nos pide especificar el delimitador que se usó para almacenar los datos.
Por ejemplo, inspeccionemos el archivo “gapminder_comas2.txt”
Vemos que es muy similar a los archivos anteriores, pero en este caso las columnas están separadas por punto y coma.
Para leer este archivo, hacemos uso de read_delim() indicando como separador el caracter adecuado.
datos_obtenidos_punto_y_coma <- read_delim("data/gapminder_comas2.txt", delim = ";")
## Rows: 1704 Columns: 6
## -- Column specification -------------------------------------------------------- ## Delimiter: ";" ## chr (2): country, continent ## dbl (4): year, lifeExp, pop, gdpPercap
## ## i Use `spec()` to retrieve the full column specification for this data. ## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
Lee el resto de archivos .txt y asignales un nombre en tu “Environment”. Los archivos deben ser leídos cada uno en un bloque de código.
Para comprobar que lograste hacerlo, ejecuta el siguiente código y comparte el resultado en el chat grupal:
ls()
Para poder leer datos de excel, vamos a hacer uso del paquete readxl.
Recuerda que para cargar cualquier paquete, especificas su nombre sin comillas dentro de un llamado a la funcion library().
library(readxl)
La función que nos permite leer archivos .xlsx es read_xlsx(). La usamos igual que en los casos anteriores.
gapminder_excel <- read_xlsx("data/gapminder_excel.xlsx")
gapminder_excel
## # A tibble: 1,704 x 6 ## country continent year lifeExp pop gdpPercap ## <chr> <chr> <dbl> <dbl> <dbl> <dbl> ## 1 Afghanistan Asia 1952 28.8 8425333 779. ## 2 Afghanistan Asia 1957 30.3 9240934 821. ## 3 Afghanistan Asia 1962 32.0 10267083 853. ## 4 Afghanistan Asia 1967 34.0 11537966 836. ## 5 Afghanistan Asia 1972 36.1 13079460 740. ## 6 Afghanistan Asia 1977 38.4 14880372 786. ## 7 Afghanistan Asia 1982 39.9 12881816 978. ## 8 Afghanistan Asia 1987 40.8 13867957 852. ## 9 Afghanistan Asia 1992 41.7 16317921 649. ## 10 Afghanistan Asia 1997 41.8 22227415 635. ## # ... with 1,694 more rows
Alternativamente, podemos usar la función read_excel(), que nos da el mismo resultado.
gapminder_excel2 <- read_excel("data/gapminder_excel.xlsx")
gapminder_excel2
## # A tibble: 1,704 x 6 ## country continent year lifeExp pop gdpPercap ## <chr> <chr> <dbl> <dbl> <dbl> <dbl> ## 1 Afghanistan Asia 1952 28.8 8425333 779. ## 2 Afghanistan Asia 1957 30.3 9240934 821. ## 3 Afghanistan Asia 1962 32.0 10267083 853. ## 4 Afghanistan Asia 1967 34.0 11537966 836. ## 5 Afghanistan Asia 1972 36.1 13079460 740. ## 6 Afghanistan Asia 1977 38.4 14880372 786. ## 7 Afghanistan Asia 1982 39.9 12881816 978. ## 8 Afghanistan Asia 1987 40.8 13867957 852. ## 9 Afghanistan Asia 1992 41.7 16317921 649. ## 10 Afghanistan Asia 1997 41.8 22227415 635. ## # ... with 1,694 more rows
Para leer archivos SPSS cargamos el paquete haven.
library(haven)
Como la extensión de los archivos es .sav podemos leerlos con la función read_sav().
universidades <- read_sav("data/09_UNIVERSIDADES_CARATULA.SAV")
universidades
## # A tibble: 122 x 8 ## SELECT UC0DD_CD UC0DD_DPTO UC0PP_CD UC0PP_PROV UC0DI_CD UC0DI_DIST UC0P_OBS ## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> ## 1 U0001 16 LORETO 01 MAYNAS 13 SAN JUAN BA~ "" ## 2 U0002 14 LAMBAYEQUE 03 LAMBAYEQUE 01 LAMBAYEQUE "" ## 3 U0003 15 LIMA 01 LIMA 40 SANTIAGO DE~ "" ## 4 U0004 15 LIMA 01 LIMA 13 JESUS MARIA "" ## 5 U0005 15 LIMA 01 LIMA 35 SAN MARTIN ~ "" ## 6 U0006 15 LIMA 01 LIMA 40 SANTIAGO DE~ "" ## 7 U0007 15 LIMA 01 LIMA 21 PUEBLO LIBRE "" ## 8 U0008 23 TACNA 01 TACNA 01 TACNA "" ## 9 U0009 10 HUANUCO 01 HUANUCO 01 HUANUCO "" ## 10 U0010 15 LIMA 01 LIMA 13 JESUS MARIA "" ## # ... with 112 more rows
Alternativamente, podemos usar la función read_spss(), que nos da el mismo resultado.
universidades2 <- read_spss("data/09_UNIVERSIDADES_CARATULA.SAV")
universidades2
## # A tibble: 122 x 8 ## SELECT UC0DD_CD UC0DD_DPTO UC0PP_CD UC0PP_PROV UC0DI_CD UC0DI_DIST UC0P_OBS ## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> ## 1 U0001 16 LORETO 01 MAYNAS 13 SAN JUAN BA~ "" ## 2 U0002 14 LAMBAYEQUE 03 LAMBAYEQUE 01 LAMBAYEQUE "" ## 3 U0003 15 LIMA 01 LIMA 40 SANTIAGO DE~ "" ## 4 U0004 15 LIMA 01 LIMA 13 JESUS MARIA "" ## 5 U0005 15 LIMA 01 LIMA 35 SAN MARTIN ~ "" ## 6 U0006 15 LIMA 01 LIMA 40 SANTIAGO DE~ "" ## 7 U0007 15 LIMA 01 LIMA 21 PUEBLO LIBRE "" ## 8 U0008 23 TACNA 01 TACNA 01 TACNA "" ## 9 U0009 10 HUANUCO 01 HUANUCO 01 HUANUCO "" ## 10 U0010 15 LIMA 01 LIMA 13 JESUS MARIA "" ## # ... with 112 more rows
No siempre los datos estarán de antemano en un formato que nos permita leerlos automáticamente. En algunos casos, será necesario especificar argumentos adicionales al momento de leerlos.
Intentar leer los datos de los archivos excel restantes.
Usar los argumentos adicionales:
skipsheetcol_namesCuando se carga un paquete, el usuario tiene acceso a los set de datos contenidos en él. Podemos obtener un listado de los set de datos contenidos en un paquete usando la función datasets() del paquete vcdExtra. Si no lo tenemos instalado debemos usar el siguiente código en la consola.
install.packages("vcdExtra")
Para usar sus funciones usamos:
library(vcdExtra)
Por ejemplo, para conocer los conjuntos de datos del paquete ggplot2:
datasets("ggplot2")
## Item class dim ## 1 diamonds data.frame 53940x10 ## 2 economics data.frame 574x6 ## 3 economics_long data.frame 2870x4 ## 4 faithfuld data.frame 5625x3 ## 5 luv_colours data.frame 657x4 ## 6 midwest data.frame 437x28 ## 7 mpg data.frame 234x11 ## 8 msleep data.frame 83x11 ## 9 presidential data.frame 11x4 ## 10 seals data.frame 1155x4 ## 11 txhousing data.frame 8602x9 ## Title ## 1 Prices of over 50,000 round cut diamonds ## 2 US economic time series ## 3 US economic time series ## 4 2d density estimate of Old Faithful data ## 5 'colors()' in Luv space ## 6 Midwest demographics ## 7 Fuel economy data from 1999 to 2008 for 38 popular models of cars ## 8 An updated and expanded version of the mammals sleep dataset ## 9 Terms of 11 presidents from Eisenhower to Obama ## 10 Vector field of seal movements ## 11 Housing sales in TX
Si ya hemos cargado el paquete, basta con llamar al conjunto de datos usando su nombre.
library(ggplot2)
diamonds
## # A tibble: 53,940 x 10 ## carat cut color clarity depth table price x y z ## <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl> ## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43 ## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31 ## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31 ## 4 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63 ## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75 ## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48 ## 7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47 ## 8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53 ## 9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49 ## 10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39 ## # ... with 53,930 more rows
economics
## # A tibble: 574 x 6 ## date pce pop psavert uempmed unemploy ## <date> <dbl> <dbl> <dbl> <dbl> <dbl> ## 1 1967-07-01 507. 198712 12.6 4.5 2944 ## 2 1967-08-01 510. 198911 12.6 4.7 2945 ## 3 1967-09-01 516. 199113 11.9 4.6 2958 ## 4 1967-10-01 512. 199311 12.9 4.9 3143 ## 5 1967-11-01 517. 199498 12.8 4.7 3066 ## 6 1967-12-01 525. 199657 11.8 4.8 3018 ## 7 1968-01-01 531. 199808 11.7 5.1 2878 ## 8 1968-02-01 534. 199920 12.3 4.5 3001 ## 9 1968-03-01 544. 200056 11.7 4.1 2877 ## 10 1968-04-01 544 200208 12.3 4.6 2709 ## # ... with 564 more rows
seals
## # A tibble: 1,155 x 4 ## lat long delta_long delta_lat ## <dbl> <dbl> <dbl> <dbl> ## 1 29.7 -173. -0.915 0.143 ## 2 30.7 -173. -0.867 0.128 ## 3 31.7 -173. -0.819 0.113 ## 4 32.7 -173. -0.771 0.0980 ## 5 33.7 -173. -0.723 0.0828 ## 6 34.7 -173. -0.674 0.0675 ## 7 35.7 -173. -0.626 0.0522 ## 8 36.7 -173. -0.577 0.0369 ## 9 37.7 -173. -0.529 0.0216 ## 10 38.7 -173. -0.480 0.00635 ## # ... with 1,145 more rows
Gracias por tu participación en la sesión de hoy. Para terminar, llena la encuesta de retroalimentación.