class: center, middle, inverse, title-slide .title[ # Armando un proyecto de trabajo ] .subtitle[ ## R + Ciencias Sociales ] --- <style type="text/css"> .remark-slide-content { font-size: 25px; padding: 1em 1em 1em 1em; } <style type="text/css"> .remark-code{ line-height: 1.5; font-size: 80% } @media print { .has-continuation { display: block; } } </style> # Hoja de ruta <br><br> ## ✔️ Paquetes y funciones ## ✔️ Paquete de paquetes: el mundo de `{tidyverse}` ## ✔️ Importación de datos ## ✔️ Proyecto de trabajo --- # Paquetes ## ¿Qué son? #### ✔️ Un conjunto funciones, pero también bases de datos y objetos de R en general. -- ## ¿Para qué nos sirven? #### ✔️ Ayudan a incorporar funcionalidades al lenguaje para resolver nuevos problemas o alternativas a viejas soluciones --- class: middle, center, inverse <img src="../img/R1.PNG" width="70%" /> --- class: middle, center, inverse <img src="../img/R2.PNG" width="70%" /> --- class: middle, center, inverse <img src="../img/R3.PNG" width="70%" /> --- class: middle, center, inverse <img src="../img/R4.PNG" width="70%" /> --- class: middle, center, inverse <img src="../img/R5.PNG" width="70%" /> --- #Paquetes ## INSTALACIÓN <br> - Podemos descargarlos e instalarlos con el siguiente comando: ```r `install.packages("nombre_del_paquete")` ``` - Sólo es necesario instalar el paquete una vez por computadora. --- #Paquetes ## INVOCACIÓN <br> .pull-left[ - Una vez instalado, cada vez que abramos una nueva sesión de R y querramos utilizar el paquete debemos **cargarlo al ambiente de trabajo** mediante la función: ```r `library(nombre_del_paquete)` ``` ] .pull-right[ <img src="../img/invocacion.gif" width="500px" /> ] --- class: center, middle, inverse # [Tidyverse](https://www.tidyverse.org/) --- # Tidyverse .pull-left[ #### `Tidyverse` es una colección de paquetes de R, pensados para trabajar en "ciencia de datos". ] .pull-right[ <img src="../img/tidyverse.png" width="781" style="display: block; margin: auto;" /> ] --- # __¿Por qué tidyverse?__ - ### Orientado a ser leído y escrito por y para seres humanos -- - ### Funciones no pensadas para una tarea específica sino para un proceso de trabajo .pull-left[ <img src="../img/circuito_del_dato.png" width="110%" style="display: block; margin: auto;" /> ] .pull-right[ <img src="../img/circuito_del_dato_tidy.png" width="110%" style="display: block; margin: auto;" /> ] -- - ### Su comunidad, basada en los principios del código abierto y trabajo colaborativo --- # __Instalación y uso__ * Sólo una vez (por computadora): ```r `install.packages("tidyverse")` ``` -- * En cada inicio de sesión de R o Rstudio: ```r `library(tidyverse)` ``` -- .pull-left[ _No es necesario esto:_ ```r install.packages("dplyr") install.packages("tidyr") install.packages("ggplot2") ``` ] .pull-right[ _Ni esto:_ ```r library(dplyr) library(tidyr) library(ggplot2) ``` ] --- class: inverse, middle, center # Lectura / importación de datos *** --- # Lectura / importación de datos <br><br> ## ✔️ lectura / escritura ### Paquetes para importar datos: - 📦 _{readr}_ - 📦 _{readxl}_ - 📦 _{haven}_ --- # Lectura de archivos ## Funciones para importar datos: .pull-left[ 📦_{readr}_: - 🔧 `read_csv()` - 🔧️ `read_table()` <br> 📦 _{readxl}_: - 🔧 `read_xlsx()` ] .pull-right[ 📦_{haven}_: - 🔧 `read_sav()` - 🔧 `read_dat()` - 🔧 `read_sas()` ] --- # Importar una base de datos ### CASO: - Queremos traer la base _usuaria de personas para el 1er trimestre de 2022_ de la página del [INDEC](https://www.indec.gob.ar/indec/web/Institucional-Indec-BasesDeDatos). --- # Importación: PLAN A ### **Paso 1:** Descargar la base y guardarla en una carpeta de la computadora -- ### **Paso 2:** Según la extensión del archivo (*nombre_del_archivo`.algo`*), elegir la función en r para importar: -- ```r ### Cargo la librería library(readr) ### Importo base de datos base_eph_ind <- read`_delim`(file = "ruta_del_archivo/nombre_del_archico`.txt`") ``` -- ***tip:*** _si estás trabajando en Windows, la barra que separa cada carpeta de una ruta que pegues será `\` (ej: ruta_archivo\archivo.csv), pero la que acepta R es `/` (ej: ruta_archivo/archivo.csv)_ --- # PLAN B ### Paso 1: En la pestaña **Environment --> Import Dataset**, elegimos la opción acorde a la extensión del archivo. <img src="../img/import_1.png" width="80%" style="display: block; margin: auto;" /> --- # Chequeamos la operación con alguna función ```r `head(base_eph)` ``` ``` # A tibble: 6 × 177 CODUSU ANO4 TRIME…¹ NRO_H…² COMPO…³ H15 REGION MAS_500 AGLOM…⁴ PONDERA <chr> <int> <int> <int> <int> <int> <int> <chr> <int> <int> 1 TQRMNOQXQH… 2022 1 1 2 1 43 N 14 104 2 TQRMNOQXQH… 2022 1 1 3 1 43 N 14 104 3 TQRMNOQXQH… 2022 1 1 4 1 43 N 14 104 4 TQRMNOSUPH… 2022 1 1 1 1 1 S 33 1741 5 TQRMNOSUPH… 2022 1 1 2 1 1 S 33 1741 6 TQRMNOSUPH… 2022 1 1 3 1 1 S 33 1741 # … with 167 more variables: CH03 <int>, CH04 <int>, CH05 <chr>, CH06 <int>, # CH07 <int>, CH08 <int>, CH09 <int>, CH10 <int>, CH11 <int>, CH12 <int>, # CH13 <int>, CH14 <chr>, CH15 <int>, CH15_COD <int>, CH16 <int>, # CH16_COD <int>, NIVEL_ED <int>, ESTADO <int>, CAT_OCUP <int>, # CAT_INAC <int>, IMPUTA <int>, PP02C1 <int>, PP02C2 <int>, PP02C3 <int>, # PP02C4 <int>, PP02C5 <int>, PP02C6 <int>, PP02C7 <int>, PP02C8 <int>, # PP02E <int>, PP02H <int>, PP02I <int>, PP03C <int>, PP03D <int>, … ``` --- # Chequeamos la operación con alguna función ```r `str(base_eph_ind)` ``` ``` tibble [49,706 × 177] (S3: tbl_df/tbl/data.frame) $ CODUSU : chr [1:49706] "TQRMNOQXQHLOKQCDEGKDB00777573" "TQRMNOQXQHLOKQCDEGKDB00777573" "TQRMNOQXQHLOKQCDEGKDB00777573" "TQRMNOSUPHKKPQCDEIJAH00780151" ... $ ANO4 : int [1:49706] 2022 2022 2022 2022 2022 2022 2022 2022 2022 2022 ... $ TRIMESTRE : int [1:49706] 1 1 1 1 1 1 1 1 1 1 ... $ NRO_HOGAR : int [1:49706] 1 1 1 1 1 1 1 1 1 1 ... $ COMPONENTE: int [1:49706] 2 3 4 1 2 3 1 2 3 4 ... $ H15 : int [1:49706] 1 1 1 1 1 1 1 1 1 1 ... $ REGION : int [1:49706] 43 43 43 1 1 1 43 43 43 43 ... $ MAS_500 : chr [1:49706] "N" "N" "N" "S" ... $ AGLOMERADO: int [1:49706] 14 14 14 33 33 33 30 30 30 30 ... $ PONDERA : int [1:49706] 104 104 104 1741 1741 1741 221 221 221 221 ... $ CH03 : int [1:49706] 2 3 3 1 2 3 1 2 3 3 ... $ CH04 : int [1:49706] 2 2 1 2 1 2 1 2 2 1 ... $ CH05 : chr [1:49706] "12/07/1979" "26/01/2003" "13/06/2008" "09/08/1954" ... $ CH06 : int [1:49706] 42 19 13 67 68 34 52 52 20 13 ... $ CH07 : int [1:49706] 2 5 5 2 2 5 2 2 5 5 ... $ CH08 : int [1:49706] 1 1 1 1 1 1 1 1 1 1 ... $ CH09 : int [1:49706] 1 1 1 1 1 1 1 1 1 1 ... $ CH10 : int [1:49706] 2 1 1 2 2 2 2 2 2 1 ... $ CH11 : int [1:49706] 0 1 1 0 0 0 0 0 0 1 ... $ CH12 : int [1:49706] 6 6 4 7 4 7 6 4 4 4 ... $ CH13 : int [1:49706] 1 2 2 1 1 1 1 1 1 2 ... $ CH14 : chr [1:49706] NA "1" "2" NA ... $ CH15 : int [1:49706] 1 1 1 1 1 1 3 3 3 1 ... $ CH15_COD : int [1:49706] NA NA NA NA NA NA 50 50 50 NA ... $ CH16 : int [1:49706] 1 1 1 1 1 1 1 1 1 1 ... $ CH16_COD : int [1:49706] NA NA NA NA NA NA NA NA NA NA ... $ NIVEL_ED : int [1:49706] 6 5 3 6 4 6 6 4 4 3 ... $ ESTADO : int [1:49706] 1 1 3 1 3 1 1 3 3 3 ... $ CAT_OCUP : int [1:49706] 3 3 0 2 0 3 3 0 0 0 ... $ CAT_INAC : int [1:49706] 0 0 3 0 1 0 0 4 7 3 ... $ IMPUTA : int [1:49706] NA NA NA NA NA NA NA NA NA NA ... $ PP02C1 : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02C2 : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02C3 : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02C4 : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02C5 : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02C6 : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02C7 : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02C8 : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02E : int [1:49706] 0 0 0 0 0 0 0 0 0 0 ... $ PP02H : int [1:49706] 0 0 2 0 2 0 0 2 2 2 ... $ PP02I : int [1:49706] 0 0 2 0 2 0 0 2 2 2 ... $ PP03C : int [1:49706] 1 1 NA 1 NA 2 0 NA NA NA ... $ PP03D : int [1:49706] 0 0 NA 0 NA 2 0 NA NA NA ... $ PP3E_TOT : int [1:49706] 50 36 NA 21 NA 40 0 NA NA NA ... $ PP3F_TOT : int [1:49706] 0 0 NA 0 NA 20 0 NA NA NA ... $ PP03G : int [1:49706] 2 2 NA 1 NA 2 2 NA NA NA ... $ PP03H : int [1:49706] 0 0 NA 1 NA 0 0 NA NA NA ... $ PP03I : int [1:49706] 2 2 NA 1 NA 2 2 NA NA NA ... $ PP03J : int [1:49706] 2 2 NA 1 NA 2 2 NA NA NA ... $ INTENSI : int [1:49706] 3 2 NA 1 NA 3 4 NA NA NA ... $ PP04A : int [1:49706] 1 2 NA 2 NA 2 1 NA NA NA ... $ PP04B_COD : chr [1:49706] "8401" "4808" NA "3200" ... $ PP04B1 : int [1:49706] 2 2 NA 2 NA 2 2 NA NA NA ... $ PP04B2 : int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP04B3_MES: int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP04B3_ANO: int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP04B3_DIA: int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP04C : int [1:49706] 7 3 NA 1 NA 8 99 NA NA NA ... $ PP04C99 : int [1:49706] 0 0 NA 0 NA 0 3 NA NA NA ... $ PP04D_COD : chr [1:49706] "48311" "30333" NA "80113" ... $ PP04G : int [1:49706] 1 1 NA 1 NA 1 1 NA NA NA ... $ PP05B2_MES: int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP05B2_ANO: int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP05B2_DIA: int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP05C_1 : int [1:49706] 0 0 NA 1 NA 0 0 NA NA NA ... $ PP05C_2 : int [1:49706] 0 0 NA 1 NA 0 0 NA NA NA ... $ PP05C_3 : int [1:49706] 0 0 NA 3 NA 0 0 NA NA NA ... $ PP05E : int [1:49706] 0 0 NA 1 NA 0 0 NA NA NA ... $ PP05F : int [1:49706] 0 0 NA 7 NA 0 0 NA NA NA ... $ PP05H : int [1:49706] 0 0 NA 5 NA 0 0 NA NA NA ... $ PP06A : int [1:49706] 0 0 NA 2 NA 0 0 NA NA NA ... $ PP06C : int [1:49706] 0 0 NA -9 NA 0 0 NA NA NA ... $ PP06D : int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP06E : int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP06H : int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP07A : int [1:49706] 6 2 NA 0 NA 5 5 NA NA NA ... $ PP07C : int [1:49706] 2 1 NA 0 NA 2 2 NA NA NA ... $ PP07D : int [1:49706] 0 9 NA 0 NA 0 0 NA NA NA ... $ PP07E : int [1:49706] 0 4 NA 0 NA 0 0 NA NA NA ... $ PP07F1 : int [1:49706] 2 2 NA 0 NA 2 2 NA NA NA ... $ PP07F2 : int [1:49706] 2 2 NA 0 NA 2 2 NA NA NA ... $ PP07F3 : int [1:49706] 2 2 NA 0 NA 2 2 NA NA NA ... $ PP07F4 : int [1:49706] 2 2 NA 0 NA 2 2 NA NA NA ... $ PP07F5 : int [1:49706] 5 5 NA 0 NA 5 5 NA NA NA ... $ PP07G1 : int [1:49706] 1 2 NA 0 NA 1 1 NA NA NA ... $ PP07G2 : int [1:49706] 1 2 NA 0 NA 1 1 NA NA NA ... $ PP07G3 : int [1:49706] 1 2 NA 0 NA 1 1 NA NA NA ... $ PP07G4 : int [1:49706] 1 2 NA 0 NA 1 1 NA NA NA ... $ PP07G_59 : int [1:49706] 0 5 NA 0 NA 0 0 NA NA NA ... $ PP07H : int [1:49706] 1 2 NA 0 NA 1 1 NA NA NA ... $ PP07I : int [1:49706] 0 2 NA 0 NA 0 0 NA NA NA ... $ PP07J : int [1:49706] 3 1 NA 0 NA 1 1 NA NA NA ... $ PP07K : int [1:49706] 1 4 NA 0 NA 1 1 NA NA NA ... $ PP08D1 : int [1:49706] 150000 10000 NA 0 NA -9 80000 NA NA NA ... $ PP08D4 : int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP08F1 : int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP08F2 : int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... $ PP08J1 : int [1:49706] 0 0 NA 0 NA 0 0 NA NA NA ... [list output truncated] ``` --- # Lectura / importación de datos - A tener en cuenta respecto a la ruta donde se ubica el archivo: ```r base_eph_ind <- read.table( 'file = "C:/Users/pablo/Downloads/EPH_usu_1_Trim_2022_txt/EPH_usu_1er_Trim_2022_txt/usu_individual_T122.txt.txt",' header = TRUE, sep = ";", dec = ",") ``` -- - Si se la compartimos a otra persona, __se rompe__ - Si cambiamos de computadora, __se rompe__ - Si lo cambiamos de lugar, __se rompe__ --- # Lectura / importación de datos <img src="../img/tomy hanky.gif" width="800" height="500" /> --- class: inverse, center, middle <img src="../img/Rproject.png" width="213" /> --- # Proyectos y rutas de trabajo .pull-left[ #### Paso 1: <img src="../img/nuevo_proyecto.png" width="1092" /> ] .pull-right[ #### Paso 2: <img src="../img/nuevo_proyecto_1.png" width="703" /> ] --- # Proyectos y rutas de trabajo .pull-left[ #### Paso 3: <img src="../img/nuevo_proyecto_2.png" width="701" /> ] .pull-right[ #### Resultado: <img src="../img/proyecto_nuevo.png" width="1527" style="display: block; margin: auto;" /> ] --- # Proyectos y rutas de trabajo ### Armando un proyecto con Rstudio, la función se escribiría de esta forma: ```r library(readr) base_eph_ind <- read_delim(file = "entradas/usu_individual_T122.txt.txt", delim = ";", col_names = TRUE) ``` -- ### Ventajas: - Le indicamos a R dónde "vive" nuestra carpeta de trabajo - La ruta ya no contiene ninguna referencia personal que impida ser abierto en otra computadora --- class: inverse, middle, center <img src="../img/la_luz.gif" width="800" height="500" /> --- # Proyectos y rutas de trabajo ### Un proyecto hecho y derecho -- #### El flujo de trabajo sería el siguiente: 1) Armo la carpeta del proyecto, por ejemplo con la estructura siguiente: - 📂 cuidar - 📂 entradas - 📂 salidas - 📂 scripts - 📂 docs_metodologicos --- # Lectura / escritura de datos 2) Ubico la base de datos en la carpeta correspondiente (__entradas__): - 📂 cuidar - 📂 entradas - 📄 usu_individual_T122.txt.txt - 📂 salidas - 📂 scripts - 📂 docs_metodologicos --- # Lectura / escritura de datos 3) Abro Rstudio y creo un proyecto, ubicado en la carpeta principal (__eph__) - 📂 cuidar - <img src = "../img/Rproject.png" style="height: 35px; width:35px;"/> _proyecto_eph.Rproj_ - 📂 entradas - 📄 _usu_individual_T122.txt.txt_ - 📂 salidas - 📂 scripts - 📂 docs_metodologicos --- # Lectura / escritura de datos 4) Creo un script llamado _levantar_datos.R_ para trabajar en R y lo guardo en la carpeta __script__ - 📂 cuidar - <img src = "../img/Rproject.png" style="height: 35px; width:35px;"/> _proyecto_eph.Rproj_ - 📂 entradas - 📄 _usu_individual_T122.txt.txt_ - 📂 salidas - 📂 scripts - 📄 _1_levantar_datos.R_ - 📂 docs_metodologicos --- # Lectura / escritura de datos 5) En el script, cargo los paquetes cuyas funciones voy a utilizar. En este caso, voy a probar el paquete `readr` para poder importar bases de datos de una extensión _.txt (archivo separado por comas)_: ```r library(readr) ``` -- 6) Creo un objeto en el cual voy a importar la base de datos y utilizo la función `read_delim()` para hacerlo. __Recordar:__ _Estamos en un proyecto, por lo que la ruta es a partir de la carpeta en la que se encuentra el mismo_ ```r base_eph_ind <- read_delim(file = "entradas/usu_individual_T122.txt.txt", delim = ";", col_names = TRUE) ``` --- # Funciones para una primera mirada a la base de datos: | __Función__ | __Acción__ | | :--- | :--- | | `dim()` | *Nos dice cuántas filas y columnas tiene la base*| | `colnames()` | *Devuelve todos los nombres de las variables de la base*| | `str()` | *Devuelve una vista preliminar de la estructura de las variables*| | `summary()` | *Devuelve un resúmen de medidas centrales para variables numéricas y características para variables de texto *| | `class()` | *Chequeo el tipo de objeto*| | `length()` | *Devuelve la cantidad de elementos de un objeto*| | `table()` | *Frecuencia simple o bivariada de una variable*| | `is.na()` | *Verifica la presencia de valores NA (_missinh_) en la base/variable*| | `mean()` | *Calcula el valor promedio de una variable numércia*| --- class: inverse, middle, center # PRÁCTICA <html> <div style='float:left'></div> <hr color='#EB811B' size=1px width=1125px></html> --- class: inverse, middle # Práctica 1. Crear una carpeta donde alojar el proyecto de trabajo 1. Crear la estructura de carpetas propuesta 1. En la carpeta __entradas__ incorporar una base de datos, preferentemente que usemos cotidianamente (no importa el formato) 1. Crear un script de trabajo y alojarlo en la carpeta __scripts__ 1. Importar la base de datos y aplicar alguna de las funciones descritas previamente
−
+
10
:
00