Aprenda las habilidades de manejo de datos más importantes en R: cómo extraer valores de una tabla, crear subconjuntos de tablas, calcular estadísticas de resumen y derivar nuevas variables.

Si está listo para comenzar, vaya al primer tutorial. No hay necesidad de instalar o descargar nada. Cada tutorial tiene todo lo que necesita para escribir y ejecutar código R, directamente en el tutorial.

Trabajando con Tibbles

Aprenda a usar tibbles, la estructura de datos tabulares más fácil de usar en R, así como a administrar paquetes tidyverse con el paquete tidyverse.

Bienvenidos

En este manual, explorará la popularidad de diferentes nombres a lo largo del tiempo. Para tener éxito, deberá dominar algunas herramientas comunes para manipular datos con R:

  • tibbles y View(), que le permiten inspeccionar datos sin procesar
  • select() y filter(), que le permiten extraer filas y columnas de un marco de datos
  • arange(), que le permite reordenar las filas en sus datos
  • %>%, que organiza su código en “tuberías” fáciles de leer
  • mutate(), group_by() y summary(), que lo ayudan a usar sus datos para calcular nuevas variables y estadísticas de resumen

Estas son algunas de las funciones de R más útiles para la ciencia de datos, y los tutoriales que siguen le proporcionarán todo lo que necesita para aprenderlas.

En los tutoriales, usaremos un conjunto de datos llamado babynames, que viene en un paquete que también se llama babynames. Dentro de babynames, encontrará información sobre casi todos los nombres dados a los niños en los Estados Unidos desde 1880.

Este tutorial presenta babynames, así como una nueva estructura de datos que facilita el trabajo con datos en R: el tibble.

Además de babynames, este tutorial utiliza los paquetes principales de tidyverse, incluidos ggplot2, tibble y dplyr. Todos estos paquetes han sido preinstalados para su conveniencia. Pero no se han precargado, ¡algo de lo que pronto aprenderá más!

Babynames

Cargando nombres babynames

Antes de comenzar, aprendamos un poco sobre nuestros datos. El conjunto de datos babynames viene en el paquete babynames. El paquete está preinstalado para usted, tal como se preinstaló ggplot2 en el último tutorial. Pero a diferencia del último tutorial, no he precargado babynames ni ningún otro paquete.

library(ggplot2)

¿Qué significa esto? En R, cada vez que desee usar un paquete que no sea parte de la base R, debe cargar el paquete con el comando library(). Hasta que cargue un paquete, R no podrá encontrar los conjuntos de datos y las funciones contenidas en el paquete. Por ejemplo, si le pedimos a R que muestre el conjunto de datos de babynames, que viene en el paquete babynames, en este momento, recibiríamos el siguiente mensaje. R no puede encontrar el conjunto de datos porque no hemos cargado el paquete babynames.

Error in eval(expr, envir, enclos): object ‘babynames’ not found

Para cargar el paquete babynames, ejecutaría el comando

library(babynames)

Después de cargar un paquete, R podrá encontrar su contenido hasta que cierre R. La próxima vez que abra R, deberá volver a cargar el paquete si desea volver a usarlo.

Esto puede sonar como un inconveniente, pero elegir qué paquetes cargar mantiene su experiencia R simple y ordenada.

En el fragmento a continuación, cargue babynames (el paquete) y luego abra la página de ayuda para babynames (el conjunto de datos). Asegúrese de leer la página de ayuda antes de continuar.

library(babynames)
?babynames

Los Datos

Ahora que sabe un poco sobre el conjunto de datos, examinemos su contenido. Si tuviera que ejecutar babynames en su consola R, obtendría un resultado similar al siguiente:

babynames

Mostrar datos grandes

babynames es un marco de datos grande y R no está bien equipado para mostrar el contenido de marcos de datos grandes. R muestra tantas filas como sea posible antes de que su búfer de memoria se sobrecargue. En ese punto, R se detiene, dejándote mirar una sección arbitraria de tus datos.

Puede evitar este comportamiento transformando su marco de datos en un tibble.

Tibbles

¿Que es Tibble?

Un tibble es un tipo especial de mesa. R muestra tibbles de una manera refinada siempre que tenga cargado el paquete tibble: R imprimirá solo las primeras diez filas de un tibble, así como todas las columnas que se ajusten a la ventana de su consola. R también agrega información de resumen útil sobre el tibble, como los tipos de datos de cada columna y el tamaño del conjunto de datos.

Siempre que no tenga los paquetes de tibble cargados, R mostrará el tibble como si fuera un marco de datos. De hecho, los tibbles son marcos de datos, un tipo mejorado de marco de datos.

Puede pensar en la diferencia entre la visualización del marco de datos y la visualización de tibble de esta manera:

Puede transformar un marco de datos en un tibble con la función as_tibble() en el paquete tibble, p.as_tibble(coches). Sin embargo, babynames ya es un tibble. Para mostrarlo bien, solo necesita cargar el paquete tibble.

Para ver lo que quiero decir, use library() para cargar el paquete tibble en el fragmento a continuación y luego llame a babynames

library(tibble)
babynames

View()

No necesita preocuparse mucho por los tibbles en estos tutoriales; en tutoriales futuros, convertiré automáticamente cada marco de datos en una tabla interactiva. Sin embargo, debería considerar hacer de los tibbles una parte importante de su trabajo en R.

View() funciona junto con el software desde el que ejecuta R: View() abre el editor de datos proporcionado por ese software. Desafortunadamente, este tutorial no viene con un editor de datos, por lo que no podrá usar View() hoy (a menos que abra el IDE de RStudio, por ejemplo, y ejecute el código allí).

Tidyverse

El Tidyverso

El paquete tibble es uno de varios paquetes que se conocen colectivamente como “el tidyverse”. Los paquetes de Tidyverse comparten una filosofía común y están diseñados para funcionar bien juntos. Por ejemplo, en este tutorial utilizará el paquete tibble, el paquete ggplot2 y el paquete dplyr, todos los cuales pertenecen a tidyverse.

El paquete “Tidyverso”

Cuando usa paquetes tidyverse, puede hacer su vida más fácil usando el paquete tidyverse. El paquete tidyverse proporciona un acceso directo para instalar y cargar todo el conjunto de paquetes en “the tidyverse”, e.g.

Instalando El Tidyverso

Piense en el paquete tidyverse como un marcador de posición para los paquetes que están en el “tidyverse”. Por sí mismo, tidyverse no hace mucho, pero cuando instala el paquete tidyverse, le indica a R que instale todos los demás paquetes en tidyverse al mismo tiempo. En otras palabras, cuando ejecuta install.packages(“tidyverse”), R instala los siguientes paquetes en un solo paso:

  • ggplot2
  • dplyr
  • tidyr
  • readr
  • purrr
  • tibble
  • hms
  • stringr
  • lubridate
  • forcats
  • DBI
  • haven
  • jsonlite
  • readxl
  • rvest
  • xml2
  • modelr
  • broom

Cargando el Tidyverse

Cuando carga tidyverse con library(“tidyverse”), le indica a R que cargue los paquetes de tidyverse más utilizados. Estos son:

  • ggplot2
  • dplyr
  • tidyr
  • readr
  • purrr
  • tibble

Puede cargar los paquetes de tidyverse que se usan cen menos frecuencia de la forma normal, ejecutando la biblioteca () para cada uno de ellos.

Probemos esto. Usaremos los paquetes ggplot2 y dplyr más adelante en este tutorial. Usemos el paquete tidyverse para cargarlos en el siguiente fragmento:

library("tidyverse")

Ejemplificacion

Concreto

library(readxl)
Concreto <- read_excel("DATOS_2022_SEM_1.xlsx", 
    sheet = "Concreto")
Concreto

Aislamiento de datos con dplyr

Domine tres funciones simples para encontrar y extraer los datos en su conjunto de datos. Aquí aprenderá a seleccionar variables, filtrar observaciones y organizar valores. Aquí también conocerá al operador de tubería de R, %>%.

Bienvenidos

En este estudio de caso, explorará la popularidad de su propio nombre a lo largo del tiempo. En el camino, dominará algunas de las funciones más útiles para aislar variables, casos y valores dentro de un marco de datos:

  • select() y filter(), que le permiten extraer filas y columnas de un marco de datos
  • arrange(), que le permite reordenar las filas en sus datos
  • %>%, que organiza su código en “tuberías” fáciles de leer

Este tutorial utiliza los paquetes principales de tidyverse, incluidos ggplot2, tibble y dplyr, así como el paquete babynames. Todos estos paquetes han sido preinstalados y precargados para su comodidad.

Tu Nombre

La historia de tu nombre

Puede utilizar los datos de babynames para hacer gráficos, que revelan la historia de un nombre, tal vez su nombre.

Pero antes de hacerlo, deberá recortar los nombres de los bebés. Por el momento, hay más filas en babynames de las que necesita para construir su gráfico.

Un Ejemplo

Para ver a lo que me refiero, considere cómo hice el gráfico anterior: comencé con el conjunto de datos completo, que si se trazara como un diagrama de dispersión se vería así.

Luego reduje los datos a solo las filas que contienen mi nombre, antes de trazar los datos con una línea geom. Así es como se ven las filas con solo mi nombre como un diagrama de dispersión.

Su objetivo en esta sección es repetir este proceso para su propio nombre (o un nombre que elija). En el camino, aprenderá un conjunto de funciones que aíslan la información dentro de un conjunto de datos.

install.packages("tidyverse")
install.packages("dplyr")

Aislamiento de datos

Este tipo de tarea ocurre a menudo en Data Science: necesita extraer datos de una tabla antes de poder usarla. Puede realizar esta tarea rápidamente con tres funciones que vienen en el paquete dplyr:

  • select() - que extrae columnas de un marco de datos
  • filter() - que extrae filas de un marco de datos
  • arrange() - que mueve filas importantes a la parte superior de un marco de datos

Cada función toma un marco de datos o tibble como primer argumento y devuelve un nuevo marco de datos o tibble como salida.

Select()

select() extrae columnas de un marco de datos y devuelve las columnas como un nuevo marco de datos. Para usar select(), pásele el nombre de un marco de datos para extraer columnas y luego los nombres de las columnas para extraer. Los nombres de las columnas no necesitan aparecer entre comillas ni tener el prefijo $; select() sabe encontrarlos en el marco de datos que proporciona.

Ejercicio - Select()

Use el ejemplo a continuación para tener una idea de select(). ¿Puedes extraer solo la columna de nombre? ¿Qué hay de las columnas de nombre y año? ¿Qué hay de todas las columnas excepto el apoyo?

library(tidyverse)
select(babynames,name)

Ayudantes de select

También puede usar una serie de ayudantes con select(). Por ejemplo, si coloca un signo menos antes del nombre de una columna, select() devolverá todas las columnas excepto esa columna. ¿Puedes predecir cómo funcionará el signo menos aquí?

select(babynames, -c(n, prop))

Filter()

filter() extrae filas de un marco de datos y las devuelve como un nuevo marco de datos. Al igual que con select(), el primer argumento de filter() debería ser un marco de datos del que extraer filas. Los argumentos que siguen deben ser pruebas lógicas; filter() devolverá cada fila para la que las pruebas devuelvan VERDADERO.

Filter en acción

Por ejemplo, el fragmento de código a continuación devuelve cada fila con el nombre “Sea” en babynames

library(babynames)
filter(babynames, name == "Sea")

Pruebas lógicas

Para aprovechar al máximo el filtro, deberá saber cómo usar los operadores de prueba lógicos de R.

Operador Logico Prueba Ejemplo
> Es x mayor que y? x > y
>= Es x mayor o igual a y? x >= y
< Es x menor que y? x < y
<= Es x menor o igual que y? x <= y
== Es x igual a y? x == y
!= Es x no es igual que y? x != y
is.na() Es x un NA? is.na(x)
!is.na() Es x no es un NA? !is.na(x)

Ejercicio - Operadores logicos

Vea si puede usar los operadores lógicos para manipular nuestro código a continuación para mostrar:

  • Todos los nombres donde prop es mayor o igual a 0.08
  • Todos los niños llamados “Khaleesi”
  • Todos los nombres a los que les falta un valor para n (Sugerencia: esto debería devolver un conjunto de datos vacío).
filter(babynames, prop >= 0.08)
filter(babynames, name == "Khaleesi")
filter(babynames, is.na(n))

Dos errores comunes

Cuando utilice pruebas lógicas, asegúrese de buscar dos errores comunes. Uno aparece en cada fragmento de código a continuación. ¿Puede encontrarlos? Cuando detecte un error, corríjalo y luego ejecute el fragmento para confirmar que funciona.

filter(babynames, name = “Sea”) filter(babynames, name == Sea)

Dos errores - Resumen

Cuando utilice pruebas lógicas, asegúrese de estar atento a estos dos errores comunes:

  1. usar = en lugar de == para probar la igualdad.
  2. Olvidarse de usar comillas al comparar cadenas, p. nombre == Abby, en lugar de nombre == "Abby"

Combinando pruebas

Si proporciona más de una prueba a filter(), filter() combinará las pruebas con una instrucción y (&): solo devolverá las filas que satisfagan todas las pruebas.

Para combinar varias pruebas de forma diferente, utilice los operadores booleanos de R. Por ejemplo, el siguiente código devolverá todos los niños llamados Sea o Anemone.

filter(babynames, name == "Sea" | name == "Anemone")

Operadores booleanos

Puede encontrar una lista completa o los operadores booleanos de base R en la siguiente tabla.

Operador booleano representa Ejemplo
& ¿Son verdaderas tanto A como B ? A y B
| ¿Son verdaderos uno o ambos de A y B ? A | B
! ¿ ‘A’ no es cierto? !A
xor() ¿Es verdadero uno y sólo uno de A y B ? xor(A, B)
%en% ¿Está x en el conjunto de a , b y c ? x %in% c(a, b, c)
cualquiera() ¿Son verdaderos cualquiera de A , B o C ? cualquiera (A, B, C)
todos() ¿Son verdaderos todos de A , B o C ? todos (A, B, C)

Ejercicio - Combinación de pruebas

Use operadores booleanos para modificar el fragmento de código a continuación para devolver solo las filas que contienen:

  • Chicas llamadas Sea
  • Nombres que fueron usados ​​por exactamente 5 o 6 niños en 1880
  • Nombres que son uno de Acura, Lexus o Yugo
filter(babynames, name == "Sea" | name == "Anemone")
filter(babynames, name == "Sea", sex == "F")
filter(babynames, n == 5 | n == 6, year == 1880)
filter(babynames, name %in% c("Acura", "Lexus", "Yugo"))

Dos errores más comunes

Las pruebas lógicas también invitan a dos errores comunes que debe tener en cuenta. Cada uno se muestra en un fragmento de código a continuación, uno produce un error y el otro es innecesariamente detallado. Diagnosticar los fragmentos y luego corregir el código.

Dos errores más comunes - Resumen

Cuando combine varias pruebas lógicas, asegúrese de estar atento a estos dos errores comunes:

  1. Colapsar múltiples pruebas lógicas en una sola prueba sin usar un operador booleano
  2. Usar | repetido en lugar de %in% , por ejemplo, x == 1 | X == 2 | x == 3 en lugar de x %in% c(1, 2, 3)

Arrenge()

arrange() devuelve todas las filas de un marco de datos reordenadas por los valores de una columna. Al igual que con select() , el primer argumento de arrange() debe ser un marco de datos y los argumentos restantes deben ser los nombres de las columnas. Si le da a arrange() un nombre de columna única, devolverá las filas del marco de datos reordenadas para que la fila con el valor más bajo en esa columna aparezca primero, la fila con el segundo valor más bajo aparezca en segundo lugar, y así sucesivamente. . Si la columna contiene cadenas de caracteres, arrange() los colocará en orden alfabético.

Ejercicio - arrange()

Use el fragmento de código a continuación para organizar los nombres de los bebés por n . ¿Puedes decir cuál es el valor más pequeño de n ?

arrange(babynames, n)

%>%

Pasos

Observe cómo cada función dplyr toma un marco de datos como entrada y devuelve un marco de datos como salida. Esto hace que las funciones sean fáciles de usar paso a paso. Por ejemplo, podrías:

  1. Filtra nombres de bebés solo para niños nacidos en 2017
  2. Seleccione las columnas name y n del resultado
  3. Organice esas columnas de modo que los nombres más populares aparezcan cerca de la parte superior.
boys_2017 <- filter(babynames, year == 2017, sex == "M")
boys_2017 <- select(boys_2017, name, n)
boys_2017 <- arrange(boys_2017, desc(n))
boys_2017

Tu nombre

Ahora domina un conjunto de habilidades que le permitirán determinar fácilmente la popularidad de su nombre a lo largo del tiempo. En el fragmento de código a continuación, use una combinación de funciones dplyr y ggplot2 con %>% para:

  1. Recorte babynames solo a las filas que contienen su nombre y su sexo
  2. Recorta el resultado a solo las columnas que aparecerán en tu gráfico (no es estrictamente necesario, pero es una práctica útil)
  3. Trace los resultados como un gráfico de líneas con año en el eje x y prop en el eje y

Tenga en cuenta que el primer argumento de ggplot() toma un marco de datos, lo que significa que puede agregar ggplot() directamente al final de una canalización. Sin embargo, deberá cambiar de %>% a + para terminar de agregar capas a su gráfico

library("tidyverse")
library("dplyr")
babynames %>% 
  filter(name == "Garrett", sex == "M") %>% 
  select(year, prop) %>% 
  ggplot() +
    geom_line(aes(x = year, y = prop)) +
    labs(title = "Popularity of the name Garrett")

Resumen

Juntos, select() , filter() y arrange() le permiten encontrar rápidamente la información que se muestra dentro de sus datos.

El siguiente tutorial le mostrará cómo derivar información implícita en sus datos, pero que no se muestra en su conjunto de datos.

En ese tutorial, continuará utilizando el operador %>% , que es una parte esencial de la programación con la biblioteca dplyr.

Las tuberías ayudan a que R sea expresivo, como un lenguaje hablado. Los idiomas hablados consisten en palabras simples que se combinan en oraciones para crear pensamientos sofisticados.

En el tidyverse, las funciones son como palabras: cada una hace bien una tarea simple. Puede combinar estas tareas en conductos con %>% para realizar procedimientos complejos y personalizados.

Obtención de información con dplyr

Los conjuntos de datos contienen más información de la que muestran, y este tutorial le mostrará cómo acceder a esa información.

Bienvenido

En este estudio de caso, identificará los nombres estadounidenses más populares desde 1880 hasta 2015. Mientras hace esto, dominará otras tres funciones de dplyr:

  • mutate() , group_by() y summarize() , que lo ayudan a usar sus datos para calcular nuevas variables y estadísticas de resumen

Estas son algunas de las funciones de R más útiles para la ciencia de datos, y este tutorial proporciona todo lo que necesita para aprenderlas.

Este tutorial utiliza los [ paquetes principales de tidyverse ] (http://tidyverse.org/), incluidos ggplot2, tibble y dplyr, así como el paquete babynames . Todos estos paquetes han sido preinstalados y precargados para su comodidad.

Haga clic en el botón Siguiente tema para comenzar.

Los nombres más populares

¿Cuáles son los nombres más populares de todos los tiempos?

Usemos nombres de bebé para responder una pregunta diferente: ¿cuáles son los nombres más populares de todos los tiempos?

Esta pregunta parece bastante simple, pero para responderla debemos ser más precisos: ¿cómo define los nombres “más populares”? Trate de pensar en varias definiciones y luego haga clic en Continuar. Después del botón Continuar, sugeriré dos definiciones propias.

Obtención de información

Cada marco de datos que encuentra implica más información de la que muestra. Por ejemplo, babynames no muestra el número total de niños que tenían su nombre, pero babynames ciertamente implica cuál es ese número. Para descubrir el número, solo necesitas hacer un cálculo:

babynames %>% 
  filter(name == "Garrett", sex == "M") %>% 
  summarise(total = sum(n))

Funciones útiles

dplyr proporciona tres funciones que pueden ayudarlo a revelar la información implícita en sus datos:

  • summarise()
  • group_by()
  • mutate()

Al igual que select() , filter() y arrange() , todas estas funciones toman un marco de datos como su primer argumento y devuelven un nuevo marco de datos como salida, lo que las hace fáciles de usar en canalizaciones.

Dominemos cada función y usémoslas para analizar la popularidad a medida que avanzamos.

Summarise()

summarise() toma un marco de datos y lo usa para calcular un nuevo marco de datos de estadísticas de resumen.

Sintaxis

Para usar summarise() , pásele un marco de datos y luego uno o más argumentos con nombre. Cada argumento con nombre debe establecerse en una expresión R que genera un valor único. Resumir convertirá cada argumento con nombre en una columna en el nuevo marco de datos. El nombre de cada argumento se convertirá en el nombre de la columna y el valor devuelto por el argumento se convertirá en el contenido de la columna.

Ejemplo

Usé summarise() arriba para calcular el número total de niños llamados “Garrett”, pero ampliemos ese código para calcular también

  • max - el número máximo de niños llamados “Garrett” en un solo año
  • media - el número medio de niños llamados “Garrett” por año
babynames %>% 
  filter(name == "Garrett", sex == "M") %>% 
  summarise(total = sum(n), max = max(n), mean = mean(n))

No dejes que el código anterior te engañe. El primer argumento de summarise() siempre es un marco de datos, pero cuando usa summarise() en una canalización, el primer argumento lo proporciona el operador de canalización, %>% . Aquí, el primer argumento será el marco de datos que devuelve babynames %>% filter(name == "Garrett", sex == "M") .

Ejercicio - summarise()

Use el fragmento de código a continuación para calcular tres estadísticas:

  1. el número total de niños que alguna vez tuvieron su nombre
  2. el número máximo de niños dado su nombre en un solo año
  3. el número medio de niños que reciben su nombre por año

Si no puede pensar en una función R que calcule cada estadística, haga clic en el botón Sugerencia/Solución.

babynames %>% 
  filter(name == "Garrett", sex == "M") %>% 
  summarise(total = sum(n), max = max(n), mean = mean(n))

Resumen de funciones

Hasta ahora, nuestros ejemplos summarise() se han basado en sum() , max() y mean() . Pero puedes usar cualquier función en summarise() siempre y cuando cumpla con un criterio: la función debe tomar un vector de valores como entrada y devolver un único valor como salida. Las funciones que hacen esto se conocen como funciones de resumen y son comunes en el campo de las estadísticas descriptivas. Algunas de las funciones de resumen más útiles incluyen:

  1. Medidas de ubicación : media(x) , mediana(x) , cuantil(x, 0,25) , min(x) y max(x)
  2. Medidas de dispersión - sd(x) , var(x) , IQR(x) y mad(x)
  3. Medidas de posición - first(x) , nth(x, 2) y last(x)
  4. Recuentos - n_distinct(x) y n() , que no acepta argumentos y devuelve el tamaño del grupo o marco de datos actual.
  5. Recuentos y proporciones de valores lógicos - sum(!is.na(x)) , que cuenta el número de VERDADEROS devueltos por una prueba lógica; mean(y == 0) , que devuelve la proporción de VERDADEROS devueltos por una prueba lógica.

Apliquemos algunas de estas funciones de resumen.

Desafío Khaleesi

“Khaleesi” es un nombre muy moderno que parece estar basado en la serie de televisión Game of Thrones , que se estrenó el 17 de abril de 2011. En el fragmento a continuación, filtre los nombres de los bebés solo en las filas donde el nombre == “Khaleesi”. Luego use summarise() y una función de resumen para devolver el primer valor de año en el conjunto de datos.

babynames %>% 
  filter(name == "Khaleesi") %>% 
  summarise(year = first(year))

A ESTE PUNTO SURGIO UN ERROR (ERROR 137) IMPOSIBILITANDO SEGUIR CONVERTIENDO EL DOCUMENTO AL FORMATO HTML, SE DEJO DE ANEXAR MAS INFORMACION, SIN EMBARGO LLEGAMOS A LA CONCLUSION QUE EL OBJETIVO PRINCIPAL DE LA ACTIVIDAD ESTA CUMPLIDO