# Importar datos
library(readr)
## Warning: package 'readr' was built under R version 4.0.4
EmojisFood <- read_csv("EmojisFood.csv")
## 
## -- Column specification --------------------------------------------------------
## cols(
##   .default = col_double(),
##   name = col_character(),
##   emoji = col_character()
## )
## i Use `spec()` for the full column specifications.
head(EmojisFood)
## # A tibble: 6 x 35
##   name   emoji  `Calories (kcal~ `Carbohydrates ~ `Total Sugar (g~ `Protein (g)`
##   <chr>  <chr>             <dbl>            <dbl>            <dbl>         <dbl>
## 1 grapes "\U00~            0.69            0.181            0.155         0.0072
## 2 melon  "\U00~            0.28            0.0658           0.0569        0.0111
## 3 water~ "\U00~            0.3             0.0755           0.062         0.0061
## 4 tange~ "\U00~            0.53            0.133            0.106         0.0081
## 5 lemon  "\U00~            0.290           0.0932           0.025         0.011 
## 6 banana "\U00~            0.89            0.228            0.122         0.0109
## # ... with 29 more variables: Total Fat (g) <dbl>, Saturated Fat (g) <dbl>,
## #   Monounsaturated Fat (g) <dbl>, Polyunsaturated Fat (g) <dbl>,
## #   Total Fiber (g) <dbl>, Cholesterol (mg) <dbl>, Vitamin B6 (mg) <dbl>,
## #   Vitamin A (IU) <dbl>, Vitamin B12 (ug) <dbl>, Vitamin C (mg) <dbl>,
## #   Vitamin D (IU) <dbl>, Vitamin E (IU) <dbl>, Vitamin K (ug) <dbl>,
## #   Thiamin (mg) <dbl>, Riboflavin (mg) <dbl>, Niacin (mg) <dbl>,
## #   Folate (ug) <dbl>, Pantothenic Acid (mg) <dbl>, Choline (mg) <dbl>,
## #   Calcium (g) <dbl>, Copper (mg) <dbl>, Iron (mg) <dbl>,
## #   Magnesium (mg) <dbl>, Manganese (mg) <dbl>, Phosphorus (g) <dbl>,
## #   Potassium (g) <dbl>, Selenium (ug) <dbl>, Sodium (g) <dbl>, Zinc (mg) <dbl>
# Normalizar datos
EmojisFoodN <- EmojisFood
EmojisFoodN[,c(3:35)] <- scale(EmojisFoodN[,c(3:35)])

# Asignación de nombres
rownames(EmojisFoodN) <- EmojisFood$name
## Warning: Setting row names on a tibble is deprecated.
summary(EmojisFoodN)
##      name              emoji           Calories (kcal)   Carbohydrates (g)
##  Length:58          Length:58          Min.   :-1.0639   Min.   :-1.0219  
##  Class :character   Class :character   1st Qu.:-0.7687   1st Qu.:-0.7282  
##  Mode  :character   Mode  :character   Median :-0.2925   Median :-0.3300  
##                                        Mean   : 0.0000   Mean   : 0.0000  
##                                        3rd Qu.: 0.4538   3rd Qu.: 0.2736  
##                                        Max.   : 3.9322   Max.   : 3.1973  
##  Total Sugar (g)     Protein (g)      Total Fat (g)     Saturated Fat (g)
##  Min.   :-0.53076   Min.   :-0.7405   Min.   :-0.5343   Min.   :-0.5029  
##  1st Qu.:-0.53076   1st Qu.:-0.6398   1st Qu.:-0.5228   1st Qu.:-0.4988  
##  Median :-0.32710   Median :-0.4445   Median :-0.4885   Median :-0.4877  
##  Mean   : 0.00000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.09345   3rd Qu.: 0.2784   3rd Qu.: 0.2602   3rd Qu.: 0.1850  
##  Max.   : 4.89934   Max.   : 3.3174   Max.   : 5.7458   Max.   : 5.2561  
##  Monounsaturated Fat (g) Polyunsaturated Fat (g) Total Fiber (g)  
##  Min.   :-0.4936         Min.   :-0.48592        Min.   :-0.8385  
##  1st Qu.:-0.4919         1st Qu.:-0.46840        1st Qu.:-0.8385  
##  Median :-0.4778         Median :-0.39896        Median :-0.2018  
##  Mean   : 0.0000         Mean   : 0.00000        Mean   : 0.0000  
##  3rd Qu.: 0.1989         3rd Qu.: 0.05455        3rd Qu.: 0.4349  
##  Max.   : 5.5993         Max.   : 4.65856        Max.   : 4.0590  
##  Cholesterol (mg)   Vitamin B6 (mg)    Vitamin A (IU)    Vitamin B12 (ug)  
##  Min.   :-0.54253   Min.   :-0.81610   Min.   :-0.2333   Min.   :-0.39416  
##  1st Qu.:-0.54253   1st Qu.:-0.52795   1st Qu.:-0.2329   1st Qu.:-0.39416  
##  Median :-0.54253   Median :-0.41563   Median :-0.2148   Median :-0.39416  
##  Mean   : 0.00000   Mean   : 0.00000   Mean   : 0.0000   Mean   : 0.00000  
##  3rd Qu.:-0.04561   3rd Qu.:-0.08841   3rd Qu.:-0.1856   3rd Qu.:-0.07245  
##  Max.   : 3.34109   Max.   : 4.11979   Max.   : 5.5979   Max.   : 5.75848  
##  Vitamin C (mg)    Vitamin D (IU)    Vitamin E (IU)     Vitamin K (ug)    
##  Min.   :-0.4132   Min.   :-0.2218   Min.   :-0.41123   Min.   :-0.56700  
##  1st Qu.:-0.4132   1st Qu.:-0.2218   1st Qu.:-0.41123   1st Qu.:-0.56700  
##  Median :-0.3951   Median :-0.2218   Median :-0.27068   Median :-0.43099  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.00000   Mean   : 0.00000  
##  3rd Qu.:-0.1557   3rd Qu.:-0.2218   3rd Qu.: 0.08709   3rd Qu.: 0.09516  
##  Max.   : 5.3463   Max.   : 7.0921   Max.   : 6.68453   Max.   : 5.20270  
##   Thiamin (mg)     Riboflavin (mg)    Niacin (mg)       Folate (ug)     
##  Min.   :-0.7580   Min.   :-1.0235   Min.   :-0.7268   Min.   :-0.7362  
##  1st Qu.:-0.5955   1st Qu.:-0.7851   1st Qu.:-0.6508   1st Qu.:-0.6032  
##  Median :-0.3805   Median :-0.4665   Median :-0.4071   Median :-0.3056  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000  
##  3rd Qu.: 0.1825   3rd Qu.: 0.7301   3rd Qu.: 0.1062   3rd Qu.: 0.3211  
##  Max.   : 3.9035   Max.   : 3.0077   Max.   : 4.8244   Max.   : 5.3418  
##  Pantothenic Acid (mg)  Choline (mg)      Calcium (g)        Copper (mg)      
##  Min.   :-0.8894       Min.   :-0.6944   Min.   :-0.43652   Min.   :-0.68044  
##  1st Qu.:-0.7173       1st Qu.:-0.5831   1st Qu.:-0.37984   1st Qu.:-0.46652  
##  Median :-0.2574       Median :-0.3917   Median :-0.31507   Median :-0.22798  
##  Mean   : 0.0000       Mean   : 0.0000   Mean   : 0.00000   Mean   : 0.00000  
##  3rd Qu.: 0.2353       3rd Qu.: 0.1226   3rd Qu.:-0.03371   3rd Qu.: 0.08597  
##  Max.   : 3.3322       Max.   : 5.0225   Max.   : 6.76942   Max.   : 6.33731  
##    Iron (mg)       Magnesium (mg)    Manganese (mg)     Phosphorus (g)   
##  Min.   :-0.8899   Min.   :-0.7685   Min.   :-0.49738   Min.   :-0.8269  
##  1st Qu.:-0.6601   1st Qu.:-0.4432   1st Qu.:-0.42991   1st Qu.:-0.6489  
##  Median :-0.4940   Median :-0.3293   Median :-0.26775   Median :-0.3911  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.00000   Mean   : 0.0000  
##  3rd Qu.: 0.4182   3rd Qu.: 0.1100   3rd Qu.: 0.03228   3rd Qu.: 0.3142  
##  Max.   : 3.2778   Max.   : 4.6976   Max.   : 6.32613   Max.   : 4.5439  
##  Potassium (g)     Selenium (ug)       Sodium (g)        Zinc (mg)       
##  Min.   :-1.3421   Min.   :-0.7164   Min.   :-0.6320   Min.   :-0.68967  
##  1st Qu.:-0.5695   1st Qu.:-0.6962   1st Qu.:-0.6234   1st Qu.:-0.59653  
##  Median :-0.2368   Median :-0.6205   Median :-0.5743   Median :-0.35633  
##  Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.0000   Mean   : 0.00000  
##  3rd Qu.: 0.2711   3rd Qu.: 0.2522   3rd Qu.: 0.2810   3rd Qu.:-0.03524  
##  Max.   : 3.6656   Max.   : 2.3510   Max.   : 3.1993   Max.   : 3.89868
# Distancias
distancias <- dist(EmojisFoodN)
## Warning in dist(EmojisFoodN): NAs introducidos por coerción
# Agrupamiento jerarquico
clusters <- hclust(distancias)
# install.packages("ggdendro")

# Dendrograma
library(ggdendro)
## Warning: package 'ggdendro' was built under R version 4.0.5
dendrograma <- ggdendrogram (clusters, size=2)
dendrograma

# install.packages("stringi")

# Adicionar emojis
library(stringi)
labels <- EmojisFood[,c(1,2)]

# function para adicionar datos de labels
trimEmojiCode <- function (df,order){
  for(i in 1:nrow(df)){
    index <- order[i]
    df[index,3] <- order[i]
    tmp <- strsplit(stringi::stri_escape_unicode(df[index,2]),"\\\\U000")
    df[i,4] <- tmp[[1]][2]
  }
  colnames(df)<- c('name','emoji','id','code')
  return (df)
}

# Nuevo dataset de labels
labels <- trimEmojiCode(labels, clusters$order)
# install.packages("ggimage")

# Dendograma con emojis
library(ggimage)
## Warning: package 'ggimage' was built under R version 4.0.5
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.0.5
dendrograma <- ggdendrogram (clusters, size=2)
dendrograma <- dendrograma + geom_emoji(data=labels, aes(id,-0.3,image=code),size=0.02)
dendrograma <- dendrograma + geom_hline(yintercept = 13, color='red')
dendrograma <- dendrograma + annotate("text", label="corte", x=0, y=14, color='red')
dendrograma