class: left title-slide background-image: url('images/pipa.jpg') background-size: cover background-position: left [matdknu]: https://twitter.com/matdknu [github]: https://matdknu.github.io .side-text[ [@matdknu][matdknu] | [matdknu.github.io][github] ] .title-where[ ### **InteRculturales <br> Introducción a técnicas de <br> ciencias sociales computacionales ** Centro de Estudios Interculturales e Indígenas <br> Sesión 1 - 2025 ] <style type="text/css"> .title-slide h1 { font-size: 80px; font-family: Jost, sans; color: #960606; /* Cambio del color del texto a morado */ position: absolute; top: 150px; /* Ajusta este valor para mover verticalmente */ left: 50px; /* Ajusta este valor para mover horizontalmente */ } .side-text { color: #960606; /* Cambio del color del texto lateral a morado */ transform: rotate(90deg); position: absolute; font-size: 22px; top: 150px; right: -130px; } .side-text a { color: #960606; /* Cambio del color de los enlaces a morado */ } .title-where { font-family: Jost, sans; font-size: 25px; position: absolute; bottom: 10px; color: #960606; /* Cambio del color del texto de ubicación a morado */ } /****************** * * Coloured content boxes * ****************/ .content-box { box-sizing: content-box; background-color: #e2e2e2; /* Total width: 160px + (2 * 20px) + (2 * 8px) = 216px Total height: 80px + (2 * 20px) + (2 * 8px) = 136px Content box width: 160px Content box height: 80px */ } .content-box-primary, .content-box-secondary, .content-box-blue, .content-box-gray, .content-box-grey, .content-box-army, .content-box-green, .content-box-purple, .content-box-red, .content-box-yellow { /*border-radius: 15px; */ margin: 0 0 25px; overflow: hidden; padding: 20px; width: 100%; } .content-box-primary { background-color: var(--primary); } .content-box-secondary { background-color: var(--secondary); } .content-box-blue { background-color: #F0F8FF; } .content-box-gray { background-color: #e2e2e2; } .content-box-grey { background-color: #F5F5F5; } .content-box-army { background-color: #737a36; } .content-box-green { background-color: #d9edc2; } .content-box-purple { background-color: #e2e2f9; } .content-box-red { background-color: #f9dbdb; } .content-box-yellow { background-color: #fef5c4; } .full-width { display: flex; width: 100%; flex: 1 1 auto; } </style>
--- ## **Bienvenidos al taller metodológico!** .full-width[.content-box-purple[ .bolder[] Esperamos que este espacio sea nutritivo para su aprendizaje y que sea un lugar en el cuál podamos discutir sobre las implicancias del uso de técnicas computacionales para la investigación social. El taller se estructura en dos partes: Presentación, con una introducción a los conceptos fundamentales de la sesión, y un código práctico en el cuál aplicaremos lo aprendido. ]] --- ## **Sobre mí** {width=250px} --- ## **Temario de hoy** 1. ¿Qué son las ciencias sociales computacionales? 2. Introducción a Tidyverse 3. Funciones fundamentales de Tidyverse 4. Aplicación a datos reales 5. Comunicación de resultados 6. Código práctico --- <img src="images/cursos-vanguardia.jpg" alt="matias" style="width 60%; max-width:600px; height:auto; display:block; margin:auto;" /> --- ## **Ciencias Sociales Computacionales** .pull-left[ 📈 **Explosión de datos sociales digitales** - Redes sociales, sensores, plataformas digitales - Nuevas fuentes de datos generadas en tiempo real ⚙️ **Avances tecnológicos** - Aumento del poder computacional - Acceso a técnicas como machine learning y visualización avanzada ] .pull-right[ 🔍 **Limitaciones de los métodos tradicionales** - Crece la necesidad de *escalar* el análisis sin perder profundidad teórica 🌐 **Transformación del mundo social** - Lo digital ya no es un “medio”, sino parte del tejido social. - La vida social deja huellas de datos ] ---  --- ## **Ciencias Sociales Computacionales** .pull-left[ **🔍 ¿Se puede ser crítico? ** ¿Los datos son neutrales o reflejan relaciones de poder? ¿Qué queda fuera cuando modelamos o cuantificamos fenómenos sociales? **🧠 Crítica en CSC implica:** Cuestionar quién produce los datos y con qué fines Reflexionar sobre los modelos, métricas y sesgos Proponer formas más justas de representar la realidad ] .pull-right[ **📌 Corrientes críticas** ✊ Feminismo de datos: ¿A quién se nombra, a quién se invisibiliza? → Data Feminism (D'Ignazio & Klein). 🌍 Decolonización de los datos: → ¿Qué epistemologías quedan fuera del análisis computacional? → Datos como forma de poder colonial. ] --- ## **Ciencias Sociales Computacionales ** .pull-left[  ] .pull-right[ {width=150px} ] --- ## **Introducción: R Base y Tidyverse** .pull-left[ **🧠 R Base ** Es el conjunto de funciones que vienen integradas por defecto en R. Permiten hacer casi todo (leer datos, analizarlos, graficarlos), pero con una sintaxis más técnica, menos legible y a veces más compleja para tareas comunes **🌱 Tidyverse** Es un ecosistema moderno de paquetes construidos sobre R base, diseñado para que trabajar con datos sea más intuitivo, legible y coherente. ] .pull-right[ 📌 En resumen R base es el “idioma nativo” de R. Tidyverse es una forma moderna y fluida de hablar ese idioma. **Ejecución de funciones** ``` r library(tidyverse) ``` ] --- ## ** Sobre R** .pull-left[ Al trabajar en R, realizamos nuestros análisis y pruebas mediante scripts. Los scripts son archivos de texto que terminan en .R. En estos archivos de texto escribimos nuestro código. La consola es la forma directa de interactuar con el lenguaje R. En ella, las instrucciones se escriben y se presiona enter para enviar los comandos. Si escribimos nuestros comandos en scripts, los comandos van a quedar guardados. Si una línea contiene un signo gato #, todo lo que esté después del gato se transformará un comentario ] .pull-right[  ] --- ## ** Sobre R** .pull-left[ R es un lenguaje de programación diseñado especialmente para el análisis de datos, la estadística y la visualización. Con R puedes realizar desde operaciones matemáticas básicas, como si fuera una calculadora, hasta tareas mucho más complejas como definir funciones propias, manipular grandes bases de datos, crear gráficos personalizados, aplicar modelos estadísticos, realizar análisis de texto. Gracias a su comunidad, R cuenta con miles de paquetes que permiten extender sus funcionalidades en áreas como machine learning y análisis espacial. ] <div style="float: right; width: 30%;"> <img src="images/latinr.png" alt="paper" style="width: 100%;"> </div> --- ## **Introducción: El Ecosistema Tidyverse ** <div style="display: flex; justify-content: space-between; align-items: center;"> <div style="flex: 1; text-align: left;"> <img src="images/wickam.jpg" width="130px"><br> <small>Hadley Wickham</small> </div> <div style="flex: 1; text-align: center;"> <img src="images/tidyverso.png" width="140px"><br> <small>Tidyverse</small> </div> <div style="flex: 1; text-align: right;"> <img src="images/4datascience.jpg" width="130px"><br> <small>R for Data Science</small> </div> </div> --- ## **Esto no es una pipa! ** .pull-left[ **¿Qué es la "pipa" en tidyverse?** **La pipa `%>%`** permite *encadenar operaciones* de forma clara y legible. ``` r penguins %>% group_by(species) %>% summarise(avg_bill_length = mean(bill_length_mm, na.rm = TRUE)) ``` ``` ## # A tibble: 3 × 2 ## species avg_bill_length ## <fct> <dbl> ## 1 Adelie 38.8 ## 2 Chinstrap 48.8 ## 3 Gentoo 47.5 ``` ] .pull-right[ 🎨 **¿Por qué se usa la imagen de Magritte para explicar la pipa?** El operador %>% se pronuncia comúnmente como pipe (tubería en inglés), y su símbolo recuerda una tubería por donde fluye algo. Juego conceptual: La obra de Magritte muestra una imagen de una pipa con el texto "Esto no es una pipa". De modo similar, el operador %>% no es literalmente una pipa. ] --- ## **Esto no es una pipa!** .pull-left[  ] .pull-right[ La pipa se ejecuta con `Command/Control + Shift + M `. **Dos formas**: Funcionan igual. - %>% - |>  ] --- ### **Tidyverse: Ejemplos con data Penguins**  --- ## **Funciones del R Base** R es un software basado en objetos. Un objeto es una estructura que almacena información en la memoria. ``` r pepino <- 7 manzana <- 4 pepino * manzana #mutiplicación ``` ``` ## [1] 28 ``` ``` r pepino/manzana #división ``` ``` ## [1] 1.75 ``` --- ## **Funciones del R Base** ``` r # Crear vector de frutas (caracteres) frutas <- c("Manzana", "Banana", "Pera", "Naranja", "Uva") # Crear vector con longitudes en centímetros (números) longitud_cm <- c(8.5, 20.0, 10.0, 9.0, 2.5) # Combinar en una tabla usando data.frame tabla_frutas <- data.frame( Fruta = frutas, Longitud_cm = longitud_cm ) # Ver tabla print(tabla_frutas) ``` ``` ## Fruta Longitud_cm ## 1 Manzana 8.5 ## 2 Banana 20.0 ## 3 Pera 10.0 ## 4 Naranja 9.0 ## 5 Uva 2.5 ``` --- ## **Funciones del R Base** ``` r summary(penguins) ``` ``` ## species island bill_length_mm bill_depth_mm ## Adelie :152 Biscoe :168 Min. :32.10 Min. :13.10 ## Chinstrap: 68 Dream :124 1st Qu.:39.23 1st Qu.:15.60 ## Gentoo :124 Torgersen: 52 Median :44.45 Median :17.30 ## Mean :43.92 Mean :17.15 ## 3rd Qu.:48.50 3rd Qu.:18.70 ## Max. :59.60 Max. :21.50 ## NA's :2 NA's :2 ## flipper_length_mm body_mass_g sex year ## Min. :172.0 Min. :2700 female:165 Min. :2007 ## 1st Qu.:190.0 1st Qu.:3550 male :168 1st Qu.:2007 ## Median :197.0 Median :4050 NA's : 11 Median :2008 ## Mean :200.9 Mean :4202 Mean :2008 ## 3rd Qu.:213.0 3rd Qu.:4750 3rd Qu.:2009 ## Max. :231.0 Max. :6300 Max. :2009 ## NA's :2 NA's :2 ``` --- ## Tidyverse: `select()` **Extrae columnas específicas del dataset** ``` r penguin |> glimpse() ``` ``` ## Rows: 344 ## Columns: 2 ## $ species <fct> Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie, Adelie… ## $ island <fct> Torgersen, Torgersen, Torgersen, Torgersen, Torgersen, Torgers… ``` ``` r penguin %>% select(species) |> head(5) ``` ``` ## # A tibble: 5 × 1 ## species ## <fct> ## 1 Adelie ## 2 Adelie ## 3 Adelie ## 4 Adelie ## 5 Adelie ``` --- ## Tidyverse: `mutate()` : **Crea nuevas columnas o transforma existentes** ``` r penguins %>% mutate(bmi = body_mass_g / flipper_length_mm) |> select(species, bmi, body_mass_g, flipper_length_mm) |> head(2) ``` ``` ## # A tibble: 2 × 4 ## species bmi body_mass_g flipper_length_mm ## <fct> <dbl> <int> <int> ## 1 Adelie 20.7 3750 181 ## 2 Adelie 20.4 3800 186 ``` --- ## Tidyverse: `mutate()` : **Crea nuevas columnas o transforma existentes** ``` r # Clasificación condicional con case_when() penguins %>% mutate(size_class = case_when( body_mass_g < 3000 ~ "liviano", body_mass_g < 4000 ~ "medio", TRUE ~ "pesado" )) |> select(species, size_class, body_mass_g) |> head(2) ``` ``` ## # A tibble: 2 × 3 ## species size_class body_mass_g ## <fct> <chr> <int> ## 1 Adelie medio 3750 ## 2 Adelie medio 3800 ``` --- ## **Tidyverse: `filter()`** ``` r # Igualdad y conjunción (AND) penguins %>% filter(species == "Adelie", # Esta especia island == "Biscoe") #Esta lista ``` ``` r # Disyunción (OR) penguins %>% filter(species == "Adelie" | species == "Gentoo") #Cualquiera de ambas ``` --- ## **Tidyverse: `filter()` ** ``` r # Negación penguins %>% filter(species != "Chinstrap") # Esa no # Pertenencia múltiple penguins %>% filter(species %in% c("Adelie", "Gentoo")) #Cualquiera de las dods # Filtrar valores faltantes penguins %>% filter(!is.na(island)) # No NA ``` --- ## **Tidyverse: `group_by()` + `summarise()`** ``` r penguins %>% group_by(species) %>% summarise( promedio_masa = mean(body_mass_g, na.rm = TRUE), mediana_masa = median(body_mass_g, na.rm = TRUE), conteo = n() ) ``` ``` ## # A tibble: 3 × 4 ## species promedio_masa mediana_masa conteo ## <fct> <dbl> <dbl> <int> ## 1 Adelie 3701. 3700 152 ## 2 Chinstrap 3733. 3700 68 ## 3 Gentoo 5076. 5000 124 ``` --- ## **Aplicación de datos**  ``` r casen2022 <- readRDS("data/casen2022_sample.rds") |> glimpse() ``` ``` ## Rows: 10,000 ## Columns: 11 ## $ region <hvn_lbll> 5, 4, 7, 4, 9, 5, 13, 2, 5, 6, 13, 13, 13, 3, 1… ## $ nse <hvn_lbll> 4, 2, 1, 1, 6, 4, 2, 2, 2, 1, 7, 3, 2, 2, 1, 6,… ## $ sexo <hvn_lbll> 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2,… ## $ ecivil <hvn_lbll> 2, 2, 8, 8, 8, 1, NA, 5, 8, 7, 8, 8, 5, 8, 8, 2… ## $ educ <hvn_lbll> 5, 5, 5, 4, 5, 2, 1, 4, 9, 3, 9, 3, 6, 3, 7, 11… ## $ pueblos_indigenas <hvn_lbll> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,… ## $ pobreza <hvn_lbll> 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3,… ## $ p9 <dbl> 3, 5, 5, 5, 3, 4, 5, 1, 3, 2, 3, 8, 3, 7, 3, 3, 6, 5… ## $ edad <dbl> 43, 27, 26, 16, 22, 43, 7, 60, 24, 45, 30, 15, 51, 1… ## $ yautcor <dbl> 200000, 100000, 400000, NA, NA, 20000, NA, 260000, N… ## $ ind_hacina <hvn_lbll> 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,… ``` --- ## **Aplicación de datos** ``` r casen2022 |> select(pueblos_indigenas, yautcor, region, educ) |> group_by(pueblos_indigenas) |> # Indígena (0 = No, 1 = Sí) summarise( promedio_ingreso = mean(yautcor, na.rm = TRUE)) ``` ``` ## # A tibble: 2 × 2 ## pueblos_indigenas promedio_ingreso ## <hvn_lbll> <dbl> ## 1 0 624245. ## 2 1 494642. ``` --- ## **Comunicación de resultados: R orientado a objetos ** ``` r tabla <- casen2022 |> select(pueblos_indigenas, yautcor, region, educ) |> group_by(pueblos_indigenas) |> # Indígena (0 = No, 1 = Sí) summarise( promedio_ingreso = mean(yautcor, na.rm = TRUE)) ``` ``` r tabla ``` ``` ## # A tibble: 2 × 2 ## pueblos_indigenas promedio_ingreso ## <hvn_lbll> <dbl> ## 1 0 624245. ## 2 1 494642. ``` --- ## **Comunicación de resultados** ``` r readr::write_csv(tabla, "table/tabla.csv") #Guardar en carpeta table ```  --- class: middle right background-image: url('d-koi-GQJY4UPR21U-unsplash.jpg') background-size: cover # **Muchas Gracias** ### **Vamos al código!**