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.
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.
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:
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!
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.
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)
?babynamesAhora 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:
babynamesbabynames 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.
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)
babynamesNo 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í).
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.
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.
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:
Cuando carga tidyverse con library(“tidyverse”), le indica a R que cargue los paquetes de tidyverse más utilizados. Estos son:
Puede cargar los paquetes de tidyverse que se usan cen menos
frecuencia de la forma normal, ejecutando la biblioteca
(
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")library(readxl)
Concreto <- read_excel("DATOS_2022_SEM_1.xlsx",
sheet = "Concreto")
ConcretoDomine 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, %>%.
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:
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.
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.
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")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:
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() 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.
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)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() 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.
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")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) |
Vea si puede usar los operadores lógicos para manipular nuestro código a continuación para mostrar:
filter(babynames, prop >= 0.08)filter(babynames, name == "Khaleesi")filter(babynames, is.na(n))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)
Cuando utilice pruebas lógicas, asegúrese de estar atento a estos dos errores comunes:
= en lugar de == para probar la
igualdad.nombre == Abby, en lugar de
nombre == "Abby"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")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) |
Use operadores booleanos para modificar el fragmento de código a continuación para devolver solo las filas que contienen:
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"))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.
Cuando combine varias pruebas lógicas, asegúrese de estar atento a estos dos errores comunes:
| repetido en lugar de %in% , por
ejemplo, x == 1 | X == 2 | x == 3 en lugar de
x %in% c(1, 2, 3)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.
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)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:
name y n del
resultadoboys_2017 <- filter(babynames, year == 2017, sex == "M")
boys_2017 <- select(boys_2017, name, n)
boys_2017 <- arrange(boys_2017, desc(n))
boys_2017Ahora 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:
babynames solo a las filas que contienen su
nombre y su sexoaño
en el eje x y prop en el eje yTenga 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")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.
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.
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 resumenEstas 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.
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.
Sugiero que nos centremos en dos definiciones de popular , una que usa sumas y otra que usa rangos:
Esto plantea una pregunta:
¿Tenemos suficiente información en babynames para
comparar la popularidad de los nombres?
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))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() toma un marco de datos y lo usa para
calcular un nuevo marco de datos de estadísticas de resumen.
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.
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ñomedia - el número medio de niños llamados “Garrett” por
añobabynames %>%
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")
.
Use el fragmento de código a continuación para calcular tres estadísticas:
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))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:
media(x) ,
mediana(x) , cuantil(x, 0,25) ,
min(x) y max(x)sd(x) ,
var(x) , IQR(x) y mad(x)first(x) ,
nth(x, 2) y last(x)n_distinct(x) y
n() , que no acepta argumentos y devuelve el tamaño del
grupo o marco de datos actual.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.
“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