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)
d <- 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")
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
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
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