Cargando las librerias a utilizar

require(ggplot2)
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 3.2.5
require(RMySQL)
## Loading required package: RMySQL
## Warning: package 'RMySQL' was built under R version 3.2.5
## Loading required package: DBI
## Warning: package 'DBI' was built under R version 3.2.5
require(DBI)

Cargando el dataset a utilizar llamado “Diamonds” de GGPLOT2

d <- diamonds

Visualización del dataset Diamonds

dim(d) #Se puede ver un dataset con 10 variables/columnas y 53,940 filas
## [1] 53940    10
str(d)
## Classes 'tbl_df', 'tbl' and 'data.frame':    53940 obs. of  10 variables:
##  $ carat  : num  0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
##  $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
##  $ color  : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
##  $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
##  $ depth  : num  61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
##  $ table  : num  55 61 65 58 58 57 57 55 61 61 ...
##  $ price  : int  326 326 327 334 335 336 336 337 337 338 ...
##  $ x      : num  3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
##  $ y      : num  3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
##  $ z      : num  2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...

Podemos ver en esta estructura del dataset que Diamonds tiene 10 variables perfectamente coherentes. Es decir, las variables con números decimales tienen “num”, el precio que no tiene decimales tiene “int” y las categóricas son factores con diferentes niveles.

head(d)
## # A tibble: 6 × 10
##   carat       cut color clarity depth table price     x     y     z
##   <dbl>     <ord> <ord>   <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
## 1  0.23     Ideal     E     SI2  61.5    55   326  3.95  3.98  2.43
## 2  0.21   Premium     E     SI1  59.8    61   326  3.89  3.84  2.31
## 3  0.23      Good     E     VS1  56.9    65   327  4.05  4.07  2.31
## 4  0.29   Premium     I     VS2  62.4    58   334  4.20  4.23  2.63
## 5  0.31      Good     J     SI2  63.3    58   335  4.34  4.35  2.75
## 6  0.24 Very Good     J    VVS2  62.8    57   336  3.94  3.96  2.48
summary(d)
##      carat               cut        color        clarity     
##  Min.   :0.2000   Fair     : 1610   D: 6775   SI1    :13065  
##  1st Qu.:0.4000   Good     : 4906   E: 9797   VS2    :12258  
##  Median :0.7000   Very Good:12082   F: 9542   SI2    : 9194  
##  Mean   :0.7979   Premium  :13791   G:11292   VS1    : 8171  
##  3rd Qu.:1.0400   Ideal    :21551   H: 8304   VVS2   : 5066  
##  Max.   :5.0100                     I: 5422   VVS1   : 3655  
##                                     J: 2808   (Other): 2531  
##      depth           table           price             x         
##  Min.   :43.00   Min.   :43.00   Min.   :  326   Min.   : 0.000  
##  1st Qu.:61.00   1st Qu.:56.00   1st Qu.:  950   1st Qu.: 4.710  
##  Median :61.80   Median :57.00   Median : 2401   Median : 5.700  
##  Mean   :61.75   Mean   :57.46   Mean   : 3933   Mean   : 5.731  
##  3rd Qu.:62.50   3rd Qu.:59.00   3rd Qu.: 5324   3rd Qu.: 6.540  
##  Max.   :79.00   Max.   :95.00   Max.   :18823   Max.   :10.740  
##                                                                  
##        y                z         
##  Min.   : 0.000   Min.   : 0.000  
##  1st Qu.: 4.720   1st Qu.: 2.910  
##  Median : 5.710   Median : 3.530  
##  Mean   : 5.735   Mean   : 3.539  
##  3rd Qu.: 6.540   3rd Qu.: 4.040  
##  Max.   :58.900   Max.   :31.800  
## 

Aquí podemos ver que las variables numéricas del dataset se comportan casi de forma normal porque su media y mediana estan muy cerca. En la siguiente grafica podremos ver los histogramas de algunas de las variables numéricas para ver que forman casi una distribución normal. Sin embargo, esto no es perfectamente así por lo que no sabemos como se comporta y pueden tener outlayers como lo vemos en “price” y en “carat” ya que sus valores mínimos y máximos estan bastante alejados y puede que afecte en el análisis. Las demás variables son categóricas.

par(mfrow=c(2,2))
hist(d$carat, col="green", main="Carat")
hist(d$depth, col="blue", main="Depth")
hist(d$table, col="red", main="Table")
hist(d$price, col="orange", main="Price")

Conectando R con SQL

db <- dbConnect(RMySQL::MySQL(), host="localhost", dbname="diamonds", user="root", password="") #Se conecta con mi base de datos en PHPMYADMIN en mi localhost via APACHE XAMPP y DBI de RStudio  
dbWriteTable(db, value = d, name = "diamonds", append = TRUE ) #Copia la tabla de DIAMONDS en la base de datos que llame de la misma forma en PHPMYADMIN
## [1] TRUE

Se genera un query de 10 datos de la tabla creada DIAMONDS en SQL

query1 <- fetch(dbSendQuery(db, "select * from diamonds limit 10"))
query1
##    row_names carat       cut color clarity depth table price    x    y
## 1          1  0.23     Ideal     E     SI2  61.5    55   326 3.95 3.98
## 2          2  0.21   Premium     E     SI1  59.8    61   326 3.89 3.84
## 3          3  0.23      Good     E     VS1  56.9    65   327 4.05 4.07
## 4          4  0.29   Premium     I     VS2  62.4    58   334 4.20 4.23
## 5          5  0.31      Good     J     SI2  63.3    58   335 4.34 4.35
## 6          6  0.24 Very Good     J    VVS2  62.8    57   336 3.94 3.96
## 7          7  0.24 Very Good     I    VVS1  62.3    57   336 3.95 3.98
## 8          8  0.26 Very Good     H     SI1  61.9    55   337 4.07 4.11
## 9          9  0.22      Fair     E     VS2  65.1    61   337 3.87 3.78
## 10        10  0.23 Very Good     H     VS1  59.4    61   338 4.00 4.05
##       z
## 1  2.43
## 2  2.31
## 3  2.31
## 4  2.63
## 5  2.75
## 6  2.48
## 7  2.47
## 8  2.53
## 9  2.49
## 10 2.39

Se genera un query que suma el precio de cada categoría de CLARITY de la tabla creada DIAMONDS en SQL

db <- dbConnect(RMySQL::MySQL(), host="localhost", dbname="diamonds", user="root", password="")
query2 <- fetch(dbSendQuery(db, "select *, sum(price) as 'total_price' from diamonds group by clarity"))
query2
##   row_names carat       cut color clarity depth table price    x    y    z
## 1        16  0.32   Premium     E      I1  60.9    58   345 4.38 4.42 2.68
## 2       230  0.52     Ideal     F      IF  62.2    55  2783 5.14 5.18 3.21
## 3         2  0.21   Premium     E     SI1  59.8    61   326 3.89 3.84 2.31
## 4         1  0.23     Ideal     E     SI2  61.5    55   326 3.95 3.98 2.43
## 5         3  0.23      Good     E     VS1  56.9    65   327 4.05 4.07 2.31
## 6         4  0.29   Premium     I     VS2  62.4    58   334 4.20 4.23 2.63
## 7         7  0.24 Very Good     I    VVS1  62.3    57   336 3.95 3.98 2.47
## 8         6  0.24 Very Good     J    VVS2  62.8    57   336 3.94 3.96 2.48
##   total_price
## 1    23262472
## 2    41024496
## 3   417662040
## 4   372395880
## 5   250977520
## 6   384900160
## 7    73775872
## 8   133083296
query2$clarity <- as.factor(query2$clarity)
p <- ggplot(query2, aes(clarity, total_price)) +
  geom_bar(stat = "identity", position = "dodge", fill="orange")
p