Introducción

El presente estudio trata de analizar el dataset público Diamonds a través del uso de paquetes avanzados en lenguaje R.

El dataset Diamonds forma parte del paquete ggplot2 y contiene información de precio, características del corte, color, quilates, etc… de casi 54.000 diamantes.

El estudio se divide en dos secciones: la primera de preparación y carga de los datos y la segunda referente a los distintos análisis que se llevan a cabo.

A su vez los análisis se subdividen en: análisis numéricos usando la sintaxis de data.table y análisis gráficos usando la sintaxis de ggplot2.

1. Carga de los paquetes necesarios y del conjunto de datos

Carga de los paquetes tidyverse, data.table y ggplot2:

library("tidyverse", lib.loc="~/R/win-library/3.5")
## -- Attaching packages -------------------------------------- tidyverse 1.2.1 --
## v ggplot2 3.2.0     v purrr   0.3.2
## v tibble  2.1.3     v dplyr   0.8.2
## v tidyr   0.8.3     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.4.0
## -- Conflicts ----------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library("data.table", lib.loc="~/R/win-library/3.5")
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
## 
##     between, first, last
## The following object is masked from 'package:purrr':
## 
##     transpose
library("ggplot2", lib.loc="~/R/win-library/3.5")

Carga del conjunto Diamonds:

data(diamonds)

2. Análisis

Numérico

Análisis de los datos usando la sintaxis de data.table:

Definiendo el data.table diamdt

diamdt=data.table(diamonds)
  1. Data.frame ordenado por precio máximo max(price) en función de los quilates carat
head(diamdt[,.(precio_max=max(price)), by=carat][order(-precio_max)],10)
##     carat precio_max
##  1:  2.29      18823
##  2:  2.00      18818
##  3:  1.51      18806
##  4:  2.07      18804
##  5:  2.04      18795
##  6:  2.15      18791
##  7:  1.71      18791
##  8:  2.80      18788
##  9:  2.05      18787
## 10:  2.03      18781
  1. Data.frame ordenado por precio máximomax(price) en función del color color
diamdt[,.(precio_max=max(price)), by=color][order(-precio_max)]
##    color precio_max
## 1:     I      18823
## 2:     G      18818
## 3:     H      18803
## 4:     F      18791
## 5:     E      18731
## 6:     J      18710
## 7:     D      18693
  1. Data.frame ordenado por precio máximo max(price) en función del corte cut
diamdt[,.(precio_max=max(price)), by=cut][order(-precio_max)]
##          cut precio_max
## 1:   Premium      18823
## 2: Very Good      18818
## 3:     Ideal      18806
## 4:      Good      18788
## 5:      Fair      18574
  1. Data.frame ordenado por precio máximo max(price) en función de la claridad clarity
diamdt[,.(precio_max=max(price)), by=clarity][order(-precio_max)]
##    clarity precio_max
## 1:     VS2      18823
## 2:     SI1      18818
## 3:      IF      18806
## 4:     SI2      18804
## 5:     VS1      18795
## 6:    VVS1      18777
## 7:    VVS2      18768
## 8:      I1      18531
  1. Data.frame ordenado por precio máximo max(price) en función de los quilates carat y el color color
head(diamdt[,.(precio_max=max(price)), by=.(carat,color)][order(-precio_max)],10)
##     carat color precio_max
##  1:  2.29     I      18823
##  2:  2.00     G      18818
##  3:  1.51     G      18806
##  4:  2.07     G      18804
##  5:  2.00     H      18803
##  6:  2.00     I      18795
##  7:  2.04     H      18795
##  8:  1.71     F      18791
##  9:  2.15     G      18791
## 10:  2.80     G      18788
  1. Data.frame ordenado por precio máximo max(price) en función de los quilates carat y el corte cut
head(diamdt[,.(precio_max=max(price)), by=.(carat,cut)][order(-precio_max)],10)
##     carat       cut precio_max
##  1:  2.29   Premium      18823
##  2:  2.00 Very Good      18818
##  3:  1.51     Ideal      18806
##  4:  2.07     Ideal      18804
##  5:  2.00   Premium      18795
##  6:  2.04   Premium      18795
##  7:  1.71   Premium      18791
##  8:  2.15     Ideal      18791
##  9:  2.80      Good      18788
## 10:  2.05     Ideal      18787
  1. Data.frame ordenado por precio máximo max(price) en función de los quilates carat y la claridad clarity
head(diamdt[,.(precio_max=max(price)), by=.(carat,clarity)][order(-precio_max)],10)
##     carat clarity precio_max
##  1:  2.29     VS2      18823
##  2:  2.00     SI1      18818
##  3:  1.51      IF      18806
##  4:  2.07     SI2      18804
##  5:  2.29     SI1      18797
##  6:  2.00     VS1      18795
##  7:  2.04     SI1      18795
##  8:  1.71     VS2      18791
##  9:  2.15     SI2      18791
## 10:  2.80     SI2      18788

Gráfico

Gráficos de ggplot de tipo geom_point ()

  1. Relación entre quilates carat y precio price
gp<-ggplot(diamdt, aes(carat, price))
gp+geom_point()

  1. Asociando el color en función del corte cut
gp+geom_point(aes(colour = cut))

  1. Usando la función facet_grid() en función del corte cut
gp+geom_point(aes(colour = cut))+facet_grid(rows = vars(cut))

  1. Usando la funciónfacet_grid() en función del corte cut y el color color
gp+geom_point(aes(colour = cut))+facet_grid(rows = vars(cut), cols = vars(color))

Gráficos de ggplot de tipo geom_boxplot()

  1. Variación del precio price en función del corte cut
gb<-ggplot(diamdt, aes(cut, price, fill=cut))
gb+geom_boxplot()

ii.Variación del precio price en función del color color

gb2<-ggplot(diamdt, aes(color, price, fill=color))
gb2+geom_boxplot()

Conclusiones

Este estudio ha permitido mostrar, de manera sencilla y través del uso de datos abiertos, algunas de las capacidades de las que dispone R para el análisis de datos.

En concreto, cuando se usan paquetes avanzados como data.table y ggplot2 el lenguaje R se transforma en una potente herramienta de análitica de datos masivos.