Header EDIC

Sprint # - Sprint 1

Equipo ANKARA - Integrantes: Parisi, Franco, Da Silva, Massone

12/09/2021

  • Carga de la base de datos
  • Analisis de datos
  • Outliers
    • Popularity
    • Danceability
    • Energy:
    • Loudness
    • Mode
    • Speechniness
    • Acousticness
    • Instrumentalness
    • Valance
    • Tempo
  • Analisis de corelacion entre variables
    • Histogramas
    • Imputacion de valores faltantes
  • Analisis de la variable objetivo
    • Publicidad y Popularity
    • Publicidad y danceability
    • Publicidad y mode
    • Publicidad y speechiness
    • Publicidad y acousticness
    • Publicidad y instrumentalness
    • Publicidad y liveness
    • Publicidad y valence
    • Publicidad y tempo
    • Publicidad y time_signature


---



# Carga de las librerias necesarias

En este apartado se cargan las librerias necesarias para ejecutar el codigo


```r
# https://cran.r-project.org/web/packages/ggplot2/index.html
if (!require('ggplot2')) install.packages('ggplot2'); library('ggplot2')
# https://cran.r-project.org/web/packages/dplyr/index.html
if (!require('dplyr')) install.packages('dplyr'); library('dplyr')
# https://cran.r-project.org/web/packages/mice/index.html
if (!require('mice')) install.packages('mice'); library('mice')

Carga de la base de datos

Vamos a cargar la base de datos, tambien vamos a crear una copia de la base de datos original.

Train <- read.csv("C:\\Users\\masso\\OneDrive\\Escritorio\\train_edic.csv")


TrainOriginal<- Train

filas <- c(1:2000)

Train$id <- seq(filas)

Analisis de datos

Primero se visualizara un resumen de los datos para luego analizarlos

summary(Train)
##  artist_name         track_name          popularity     danceability    
##  Length:2000        Length:2000        Min.   : 1.00   Min.   : 0.0755  
##  Class :character   Class :character   1st Qu.:34.75   1st Qu.: 0.4360  
##  Mode  :character   Mode  :character   Median :45.00   Median : 0.5490  
##                                        Mean   :45.59   Mean   : 0.5697  
##                                        3rd Qu.:57.00   3rd Qu.: 0.6640  
##                                        Max.   :97.00   Max.   :44.0000  
##                                        NA's   :52                       
##      energy             key            loudness            mode       
##  Min.   :0.00395   Min.   : 1.000   Min.   :-34.378   Min.   :-9.000  
##  1st Qu.:0.50650   1st Qu.: 3.000   1st Qu.: -9.437   1st Qu.: 0.000  
##  Median :0.70150   Median : 7.000   Median : -6.971   Median : 1.000  
##  Mean   :0.66095   Mean   : 6.067   Mean   : -7.926   Mean   : 0.639  
##  3rd Qu.:0.86300   3rd Qu.: 9.000   3rd Qu.: -5.196   3rd Qu.: 1.000  
##  Max.   :0.99900   Max.   :11.000   Max.   : 11.000   Max.   : 1.000  
##                    NA's   :250                                        
##   speechiness       acousticness       instrumentalness    liveness      
##  Min.   :0.02270   Min.   :0.0000016   Min.   :0.0000   Min.   :0.00153  
##  1st Qu.:0.03580   1st Qu.:0.0027675   1st Qu.:0.0001   1st Qu.:0.09728  
##  Median :0.04965   Median :0.0682000   Median :0.0051   Median :0.13200  
##  Mean   :0.08273   Mean   :0.2402621   Mean   :0.1838   Mean   :0.20280  
##  3rd Qu.:0.08530   3rd Qu.:0.4092500   3rd Qu.:0.2057   3rd Qu.:0.27300  
##  Max.   :1.00000   Max.   :0.9930000   Max.   :0.9650   Max.   :0.99200  
##                                        NA's   :496                       
##     valence           tempo         duration_in.min.ms  time_signature 
##  Min.   :0.0307   Min.   :  0.153   Min.   :      1.1   Min.   :1.000  
##  1st Qu.:0.2968   1st Qu.: 99.991   1st Qu.: 164450.2   1st Qu.:4.000  
##  Median :0.4750   Median :120.026   Median : 208974.0   Median :4.000  
##  Mean   :0.4830   Mean   :122.764   Mean   : 200862.6   Mean   :3.916  
##  3rd Qu.:0.6670   3rd Qu.:141.988   3rd Qu.: 253133.5   3rd Qu.:4.000  
##  Max.   :0.9760   Max.   :216.091   Max.   :1244613.0   Max.   :5.000  
##                                                                        
##     genre                 id        
##  Length:2000        Min.   :   1.0  
##  Class :character   1st Qu.: 500.8  
##  Mode  :character   Median :1000.5  
##                     Mean   :1000.5  
##                     3rd Qu.:1500.2  
##                     Max.   :2000.0  
## 

#Analisis de cada columna:

-artist_name: Esta variable categorica contiene el nombre del artista que interpreta la canción y es de tipo caracter.

-Track_name:Esta variable categorica es el nombre del tema y es de tipo caracter

-Popularity: Mide el índice de popularidad de la canción, esta contenida entre 1 y 97. La media es 45 y contiene valores no disponibles.

-Danceability: Mide el índice de danceabilidad del tema basándose en una combinación de elementos musicales que incluye el tempo, la estabilidad rítmica, la intensidad del pulso y la regularidad general. Los valores que puede tomar van desde 0.0 (la menos bailable) hasta 1.0 (la más bailable). Sin embargo se observa que tiene un valor atípico de 44 el cual será tratado mas adelante.

-Energy: Mide la energía que transmite la canción y toma valores comprendidos entre 0 y 1. Su media es de 0.66095

-Key: Variable categorica que informa de la escala en la que está la canción. Contiene valores no disponibles

-Loudness:Esta compuesta de valores negativos y un solo número positivo (11), lo cual nos lleva a pensar que es un valor atípico, mas adelante será analizado con mayor profundidad.

-Mode:Es una variable binaria con un valor atípico de -9. Indica si está en una escala mayor o menor.

-Speechiness: Por speechiness se entiende la presencia de palabras habladas en el tema. Para pistas totalmente habladas, como un audiolibro, un recital de un poema, etc., el valor de este parámetro se acercará a 1.0. Los valores entre 0.33 y 0.66 representan temas en los que se combinan partes habladas con música, ya sea secuencialmente o a la vez, como puede ser el caso del rap. Por debajo de 0.33 estaríamos hablando del resto de géneros en los que la letra no se recita, sino que se canta.

-Acousticness:Este parámetro da información sobre la presencia de elementos vocales en la canción. Cuanto más próximo esté este valor a 1.0, mayor probabilidad de que el tema no tenga voces. En general, con valores superiores a 0.5 el tema puede considerarse como instrumental. La función de probabilidad de esta variable nos lo deja bastante claro: distingue entre temas estrictamente instrumentales (los cercanos a 1.0) y temas que también incluyen voz (los cercanos a 0.0)

-Instrumentalness:Mide cuanto instrumental tiene la canción y se distribuye entre 0 y 1. Contiene valores no disponibles.

-Liveness: Detecta la presencia de publico en el tema y se distribuye del 0 al 1.

-Valence: Esta propiedad musical describe la positividad musical transmitida por una pista de audio. Las pistas con alta valencia están asociadas con emociones positivas tales como: estar feliz, alegre eufórico, entre otros. Por otra parte, las pistas de con baja valencia están asociadas a emociones negativas o estados de ánimo tales como: tristeza, depresión, enojo. Esta distribuida entre 0 y 1.

-Tempo:indica los beats por minuto que tiene la canción. A simple vista puede observarse que 0.153 es un valor atípico.

-duration_in.min.ms:Indica la duracion en milisegundos del tema.

-Time_signature:Esta variable nos indica el compás en el que está escrita la canción. Comprende valores entre 1 y 5.

-Genre:Es una variable tipo caracter que contiene el genero de cada tema.

A continuación se adicionará una variable llamada ‘Publicidad’ que será binaria y tendra un 1 si el tema pertenece a alguno de los siguientes géneros:

Train$publicidad <- 0
Train$publicidad[Train$genre == 'Country'] <- 1
Train$publicidad[Train$genre == 'HipHop'] <- 1
Train$publicidad[Train$genre == 'Bolywood'] <- 1
Train$publicidad[Train$genre == 'Metal'] <- 1
Train$publicidad[Train$genre == 'Pop'] <- 1

Ahora analizaremos la variable publicidad

barplot(table(Train$publicidad), main='Publicidad', ylab='Frecuencia', col=123)

Se puede visualizar que hay mayor frecuencia de canciones que no pertenecen a los generos a publictar.

Outliers

En este punto se graficara y analizara un boxplot de cada variable con el fin de identificar posibles outliers y su razón.

Popularity

Train_num <- Train[, 3:15] #Nos quedamos solo con las variables numericas

boxplot(Train$popularity, main= 'Popularity', col=143)

boxplot.stats(Train$popularity)
## $stats
## [1]  1.0 34.5 45.0 57.0 90.0
## 
## $n
## [1] 1948
## 
## $conf
## [1] 44.19454 45.80546
## 
## $out
## [1] 92 95 97 92 93
OutPopu <- subset(Train, popularity > 90)
table(OutPopu$genre)
## 
## HipHop    Pop 
##      1      4

Se distinguen 5 canciones extremadamente populares, particularmente del genero pop. Se decide eliminarlos ya que no representan cantidad significativa en el data frame y distorsionan el valor de la media de la variable.

Train <- Train[(Train$popularity < 90), ]
FilasABorrar <- which(rowMeans(is.na(Train))>0.9)
Train <- Train[-FilasABorrar, ]

Danceability

boxplot(Train$danceability, main= 'Danceability', col=453)

boxplot.stats(Train$danceability)
## $stats
## [1] 0.0985 0.4360 0.5480 0.6640 0.9800
## 
## $n
## [1] 1942
## 
## $conf
## [1] 0.5398254 0.5561746
## 
## $out
## [1] 0.0850 0.0755 0.0918
OutDanc <- subset(Train, danceability < 0.0985)
table(OutDanc$genre)
## 
## Instrumental        Metal 
##            2            1

Como puede verse los generos que presentan valores outliers son generos que comunmente no se bailan, por lo tanto tiene sentido que se encuentren debajo del límite inferior entonces se determina que no son datos atipicos.

Energy:

boxplot(Train$energy, main= 'Energy', col=263)

boxplot.stats(Train$energy)
## $stats
## [1] 0.00395 0.50800 0.70250 0.86400 0.99900
## 
## $n
## [1] 1942
## 
## $conf
## [1] 0.6897361 0.7152639
## 
## $out
## numeric(0)

Esta variable no presenta valores outliers.

Loudness

boxplot(Train$loudness, main= 'loudness', col=453)

boxplot.stats(Train$loudness)
## $stats
## [1] -15.786  -9.452  -6.975  -5.213  -1.101
## 
## $n
## [1] 1942
## 
## $conf
## [1] -7.126983 -6.823017
## 
## $out
##   [1] -16.117 -19.559 -19.947 -17.117 -25.743 -15.969 -20.924 -22.505 -23.714
##  [10] -18.252 -18.481 -22.533 -24.035 -17.948 -22.751 -34.378 -17.789 -20.816
##  [19] -22.079 -23.987 -15.921 -16.653 -18.621 -17.737 -18.928 -19.055 -21.322
##  [28] -18.181 -16.670 -16.225 -23.811 -18.022 -20.043 -15.982 -20.689 -16.843
##  [37] -16.225 -20.219 -24.937 -16.225 -16.551 -29.298 -18.152 -23.295 -19.991
##  [46] -18.769 -16.296 -17.208 -21.903 -16.209 -17.850 -23.378 -23.806 -16.415
##  [55] -19.161 -25.567 -18.730 -19.872 -17.651 -18.318 -26.085 -19.165 -25.533
##  [64] -19.539 -19.782 -19.429 -20.758 -24.253 -16.945 -22.241 -18.201 -17.424
##  [73] -22.482 -26.725 -18.827 -18.604 -30.470 -16.239 -25.826 -22.159 -21.178
##  [82] -16.729 -16.415 -17.999 -22.487 -25.934 -16.446 -16.509 -19.854 -18.064
##  [91] -22.925 -16.729 -24.372 -16.498 -16.117 -17.343 -17.339 -16.204 -19.696
## [100] -15.965
OutLoud <- subset(Train, loudness < -15.786)
table(OutLoud$genre)
## 
## Acoustic/Folk     Alt_Music         Blues     Bollywood       Country 
##             4             9            14             1             2 
##        HipHop     Indie_Alt  Instrumental         Metal           Pop 
##             3            12            45             1             2 
##          Rock 
##             7

Los valores outliers pertenecientes a los generos: Indie_Alt, Instrumental, Country, Blues, Acoustic/Folk de por si tienen bajos sonidos debido a la naturaleza del genero.

Los outliers pertenecientes a HipHop, Bollywood, Metal, Pop y Rock si son atipicos debibo a la naturaleza del genero, por lo tanto se reemplazaran como NA para luego imputarlos.

OutLoud <- subset(OutLoud, genre == 'HipHop' | genre == 'Bollywood' | genre == 'Metal' | genre== 'Pop' | genre == 'Rock')
OutLoud$loudness <- OutLoud$loudness == NA


Train$loudness[OutLoud$id] <- NA

Mode

Se analiza mode porque a pesar de que es una variable binaria, en el summary se observo un valor atípico

boxplot(Train$mode, main= 'Mode', col=453)

boxplot.stats(Train$mode)
## $stats
## [1] 0 0 1 1 1
## 
## $n
## [1] 1942
## 
## $conf
## [1] 0.9641464 1.0358536
## 
## $out
## integer(0)

Se decide eliminar ese dato atípico ya que no representa un porcentaje notable para el data frame y claramente es un outlier.

OutMode <- subset(Train, mode < 0)
Train <- Train[Train$mode > -1,]

Speechniness

boxplot(Train$speechiness, main= 'speechiness', col=426)

boxplot.stats(Train$speechiness)
## $stats
## [1] 0.02270 0.03580 0.04955 0.08560 0.16000
## 
## $n
## [1] 1942
## 
## $conf
## [1] 0.04776449 0.05133551
## 
## $out
##   [1] 0.242 0.176 0.366 0.872 0.334 0.261 0.499 0.251 0.234 0.209 0.339 0.161
##  [13] 0.187 0.340 0.321 0.182 0.406 0.483 0.222 0.201 0.424 0.193 0.201 0.176
##  [25] 0.418 0.305 0.217 0.198 0.303 0.363 0.504 0.236 0.310 0.210 0.263 0.299
##  [37] 0.368 0.357 0.316 0.178 0.282 0.230 0.165 0.303 0.334 0.170 0.325 0.209
##  [49] 0.920 0.291 0.350 0.197 0.299 0.220 0.210 0.313 0.530 0.559 0.182 0.163
##  [61] 0.311 0.298 0.241 0.210 0.171 0.236 0.300 0.315 0.228 0.438 0.258 0.266
##  [73] 0.678 0.245 0.169 0.253 0.280 0.229 0.179 0.186 0.409 0.525 0.439 0.305
##  [85] 0.333 0.289 0.193 0.264 0.261 0.216 0.216 0.167 0.723 0.344 0.294 0.161
##  [97] 0.315 0.175 0.300 0.402 0.219 0.169 0.242 0.166 0.450 0.290 0.428 0.285
## [109] 0.500 0.315 0.266 0.200 0.439 0.321 0.392 0.219 0.550 0.256 0.190 0.341
## [121] 0.252 0.181 0.364 0.274 0.237 0.187 0.241 0.258 0.433 0.306 0.164 0.191
## [133] 0.361 0.253 0.166 0.332 0.477 0.187 0.174 0.241 0.212 0.245 0.326 0.332
## [145] 0.204 0.530 0.251 0.272 0.180 0.268 0.170 0.176 0.293 0.341 0.252 0.167
## [157] 0.365 0.302 0.315 0.369 0.315 0.522 0.318 0.204 0.329 0.502 0.318 0.162
## [169] 0.597 0.172 0.171 0.198 0.368 0.374 0.287 0.277 0.309 0.188 0.955 0.366
## [181] 0.309 0.303 0.252 0.305 0.170 0.182 0.207 0.218 0.212 0.294 0.167 0.218
## [193] 0.193 0.348 0.295 0.202 0.245 0.161 0.370 0.164 0.174 0.248 0.380 0.165
## [205] 0.173 0.268 0.173 0.333 0.293 0.435 0.374 0.303 0.202 0.427 0.318 0.211
OutSpech <- subset(Train, speechiness > 0.15900)
table(OutSpech$genre)
## 
## Alt_Music     Blues Bollywood    HipHop Indie_Alt     Metal       Pop      Rock 
##        14         7         5       109        20        17        21        24

Por la naturaleza del genero HipHop es logico que haya tantos outliers dado que las canciònes presentan mucha parte hablada.

Acousticness

boxplot(Train$acousticness, main= 'Acousticness', col=480)

boxplot.stats(Train$acousticness)
## $stats
## [1] 1.610e-06 2.770e-03 6.795e-02 4.070e-01 9.930e-01
## 
## $n
## [1] 1942
## 
## $conf
## [1] 0.05345691 0.08244309
## 
## $out
## numeric(0)

Acouticness no posee outliers por lo cual no es necesario realizar ninguna operacion

Instrumentalness

boxplot(Train$instrumentalness, main= 'Instrumentalness', col=490)

boxplot.stats(Train$instrumentalness)
## $stats
## [1] 0.000001 0.000127 0.005090 0.218000 0.543000
## 
## $n
## [1] 1458
## 
## $conf
## [1] -0.003925332  0.014105332
## 
## $out
##   [1] 0.947 0.658 0.827 0.941 0.946 0.671 0.865 0.900 0.758 0.959 0.865 0.772
##  [13] 0.617 0.611 0.667 0.937 0.776 0.791 0.745 0.816 0.887 0.721 0.789 0.921
##  [25] 0.951 0.830 0.694 0.879 0.608 0.731 0.775 0.582 0.921 0.584 0.562 0.843
##  [37] 0.710 0.875 0.911 0.671 0.906 0.907 0.864 0.893 0.725 0.944 0.749 0.826
##  [49] 0.932 0.918 0.926 0.778 0.945 0.936 0.899 0.734 0.904 0.687 0.925 0.756
##  [61] 0.940 0.581 0.922 0.956 0.886 0.842 0.680 0.878 0.707 0.769 0.837 0.750
##  [73] 0.914 0.878 0.917 0.842 0.880 0.961 0.869 0.939 0.879 0.590 0.808 0.941
##  [85] 0.878 0.735 0.916 0.941 0.886 0.586 0.880 0.908 0.911 0.566 0.807 0.761
##  [97] 0.928 0.571 0.901 0.859 0.937 0.783 0.765 0.808 0.855 0.690 0.940 0.606
## [109] 0.565 0.566 0.845 0.874 0.928 0.946 0.880 0.626 0.953 0.837 0.725 0.918
## [121] 0.949 0.965 0.846 0.842 0.808 0.901 0.926 0.760 0.722 0.668 0.667 0.914
## [133] 0.953 0.882 0.818 0.842 0.814 0.756 0.835 0.933 0.572 0.917 0.621 0.658
## [145] 0.936 0.924 0.892 0.849 0.578 0.882 0.595 0.817 0.915 0.841 0.840 0.897
## [157] 0.856 0.856 0.897 0.896 0.779 0.918 0.881 0.945 0.870 0.564 0.830 0.924
## [169] 0.555 0.565 0.671 0.902 0.863 0.886 0.732 0.667 0.852 0.914 0.641 0.704
## [181] 0.870 0.653 0.935 0.747 0.902 0.783 0.937 0.929 0.716 0.899 0.725 0.943
## [193] 0.947 0.708 0.927 0.923 0.644 0.733 0.927 0.858 0.557 0.889 0.703 0.799
## [205] 0.826 0.850 0.914 0.670 0.741 0.725 0.720 0.737 0.823 0.958 0.923 0.898
## [217] 0.847 0.893 0.814 0.852 0.826 0.839 0.752 0.800 0.866 0.932 0.881 0.901
## [229] 0.886 0.728 0.687 0.948 0.866 0.916 0.762 0.835 0.800 0.826 0.869 0.928
## [241] 0.794 0.658 0.814 0.803 0.858 0.583 0.929 0.929 0.899 0.944 0.563
OutInstru <- subset(Train, instrumentalness > 0.1550) 
table(OutInstru$genre)
## 
## Acoustic/Folk     Alt_Music         Blues     Bollywood        HipHop 
##             5            40            25             5             3 
##     Indie_Alt  Instrumental         Metal           Pop          Rock 
##           106            59            71             7            74

Las canciones de Indie_Alt, Metal o Rock poseen una fuerte base instrumental por lo tanto es logico que sus valores sean muy cercanos a la unidad. ## Liveneess

boxplot(Train$liveness, main= 'Liveness', col=50)

boxplot.stats(Train$liveness)
## $stats
## [1] 0.0244 0.0969 0.1310 0.2730 0.5360
## 
## $n
## [1] 1942
## 
## $conf
## [1] 0.1246862 0.1373138
## 
## $out
##   [1] 0.771 0.762 0.809 0.667 0.743 0.706 0.593 0.683 0.839 0.868 0.741 0.626
##  [13] 0.938 0.834 0.679 0.793 0.567 0.877 0.641 0.660 0.746 0.906 0.612 0.811
##  [25] 0.556 0.784 0.677 0.557 0.847 0.909 0.594 0.608 0.702 0.665 0.560 0.548
##  [37] 0.771 0.596 0.596 0.639 0.861 0.611 0.538 0.950 0.920 0.567 0.986 0.643
##  [49] 0.752 0.856 0.726 0.717 0.953 0.582 0.546 0.605 0.923 0.680 0.617 0.671
##  [61] 0.719 0.601 0.955 0.612 0.565 0.575 0.790 0.587 0.538 0.927 0.700 0.598
##  [73] 0.551 0.847 0.970 0.739 0.962 0.979 0.712 0.652 0.752 0.707 0.879 0.680
##  [85] 0.669 0.585 0.965 0.908 0.962 0.585 0.992 0.639 0.567 0.977 0.971 0.696
##  [97] 0.796 0.544 0.622 0.754 0.676 0.658 0.555 0.659
OutLive <- subset(Train, liveness > 0.53600)
table(OutLive$genre)
## 
## Acoustic/Folk     Alt_Music         Blues     Bollywood        HipHop 
##             1             7             9             5            11 
##     Indie_Alt         Metal           Pop          Rock 
##            10            14            16            31

Los generos que figuran en la tabla por lo general graban canciones en vivo por lo cual se podrà apreciar la presencia del publico.

Valance

boxplot(Train$valence, main= 'Valence', col=500)

boxplot.stats(Train$valence)
## $stats
## [1] 0.0307 0.2990 0.4750 0.6700 0.9760
## 
## $n
## [1] 1942
## 
## $conf
## [1] 0.4616983 0.4883017
## 
## $out
## numeric(0)

No posee Outliers por lo cual no debo realizar ninguna accion

Tempo

boxplot(Train$tempo, main= 'Tempo', col=500)

boxplot.stats(Train$tempo)
## $stats
## [1]  50.329 100.006 120.035 142.184 204.065
## 
## $n
## [1] 1942
## 
## $conf
## [1] 118.5228 121.5472
## 
## $out
## [1] 207.452 212.049 207.469 216.091
OutTempo <- subset(Train, tempo > 204.0650| tempo < 0.153)
table(OutTempo$genre)
## 
## Alt_Music     Blues    HipHop 
##         1         2         1

Esta variable toma valores entre 50 y 216, en la base de datos original se detectaba un valor atìpico de 0.153 sin embargo este fue eliminado anteriormente. ## Duration

boxplot(Train$duration_in.min.ms, main= 'Duration', col=500)

boxplot.stats(Train$duration_in.min.ms)
## $stats
## [1]  68413.0 166400.0 209761.5 254691.0 385400.0
## 
## $n
## [1] 1942
## 
## $conf
## [1] 206596 212927
## 
## $out
##   [1] 3.578883e+00 4.319730e+05 5.153550e+00 3.158633e+00 4.430450e+00
##   [6] 2.853783e+00 4.220217e+00 3.831417e+00 4.484983e+00 6.815600e+05
##  [11] 2.641283e+00 5.233470e+05 4.290930e+05 2.818867e+00 3.066117e+00
##  [16] 3.697817e+00 3.936667e+00 4.167600e+05 3.274450e+00 3.283333e+00
##  [21] 2.629117e+00 7.540450e+00 3.178883e+00 4.342283e+00 1.880717e+00
##  [26] 3.884533e+00 6.019783e+00 4.081117e+00 3.857150e+00 2.289333e+00
##  [31] 7.033730e+05 3.648217e+00 6.178580e+05 4.678950e+00 4.030450e+00
##  [36] 4.144883e+00 3.219667e+00 8.437117e+00 3.981100e+05 2.555633e+00
##  [41] 5.706130e+05 3.687333e+00 3.666983e+00 6.108667e+00 7.626670e+05
##  [46] 4.512450e+00 5.202450e+00 3.347117e+00 5.232030e+05 5.257900e+00
##  [51] 4.199550e+00 3.319100e+00 4.631583e+00 5.126217e+00 2.779917e+00
##  [56] 4.251783e+00 5.504800e+05 4.021783e+00 3.341333e+00 3.162667e+00
##  [61] 3.650883e+00 4.660667e+00 2.658333e+00 3.450967e+00 3.925333e+00
##  [66] 4.731517e+00 3.055767e+00 2.988450e+00 2.777433e+00 4.178000e+05
##  [71] 3.457117e+00 5.616000e+00 4.224640e+05 5.145733e+00 1.121253e+06
##  [76] 3.340450e+00 3.623467e+00 3.181333e+00 4.617283e+00 7.131920e+05
##  [81] 4.615330e+05 9.104800e+05 2.902450e+00 3.692883e+00 4.750367e+00
##  [86] 2.839083e+00 7.245333e+00 3.850667e+00 3.657783e+00 4.008670e+05
##  [91] 5.080000e+00 3.850233e+00 3.186883e+00 3.336217e+00 2.873333e+00
##  [96] 4.258217e+00 2.228783e+00 3.919583e+00 4.103783e+00 3.643383e+00
## [101] 4.294890e+05 3.859717e+00 4.330000e+05 4.092883e+00 3.170667e+00
## [106] 4.822217e+00 5.033117e+00 6.844450e+00 3.061117e+00 8.977080e+05
## [111] 4.002883e+00 5.563617e+00 3.211783e+00 3.731600e+00 4.154883e+00
## [116] 3.916930e+05 3.639700e+00 3.019983e+00 4.140217e+00 3.706667e+00
## [121] 3.878670e+05 4.527783e+00 3.614233e+00 5.016667e+00 4.224640e+05
## [126] 5.153870e+05 3.643550e+00 4.470000e+05 5.158217e+00 6.504670e+05
## [131] 2.508617e+00 5.535550e+00 6.770933e+00 6.883333e+00 3.750000e+00
## [136] 3.509333e+00 5.096000e+05 3.692217e+00 4.304217e+00 2.792667e+00
## [141] 4.699550e+00 3.267550e+00 3.045833e+00 3.436817e+00 5.496450e+00
## [146] 2.069117e+00 2.721550e+00 4.479990e+05 4.115700e+00 2.765433e+00
## [151] 4.427330e+05 4.647333e+00 4.770270e+05 3.098617e+00 6.066217e+00
## [156] 8.515550e+00 2.926783e+00 1.130667e+00 3.873333e+00 3.466233e+00
## [161] 4.056400e+05 2.132200e+00 3.977680e+05 7.023267e+00 4.228130e+05
## [166] 3.066000e+00 3.167783e+00 2.790450e+00 4.972833e+00 5.030450e+00
## [171] 3.820450e+00 3.228883e+00 7.927683e+00 7.226883e+00 4.854883e+00
## [176] 3.635117e+00 2.565367e+00 4.026667e+00 1.760683e+00 9.084450e+00
## [181] 1.244613e+06 2.860883e+00 5.186433e+00 3.424217e+00 6.178883e+00
## [186] 4.041117e+00 4.509840e+05 3.962217e+00 2.700000e+00 3.878933e+00
## [191] 4.266667e+00 3.133333e+00 6.011783e+00 5.696217e+00 5.372030e+05
## [196] 3.860450e+00 2.733083e+00 4.000000e+00 4.555240e+05 4.289750e+00
## [201] 3.913320e+05 5.794667e+00 5.407783e+00 5.617070e+05 3.863867e+00
## [206] 2.642450e+00 8.545550e+00 6.210000e+00 5.718950e+05 3.892000e+05
## [211] 4.747333e+00 4.358883e+00 2.720400e+00 6.316667e+00 3.424700e+00
## [216] 3.502667e+00 6.191017e+00 2.303817e+00 2.147550e+00 2.704883e+00
## [221] 4.035330e+05 4.408400e+00 3.312450e+00 6.569340e+05 4.653330e+05
## [226] 2.631550e+00 3.771783e+00 4.443070e+05 4.845167e+00 5.135730e+05
## [231] 4.142530e+05 8.962270e+05 3.636217e+00 2.810267e+00 4.046667e+00
## [236] 3.750667e+00 3.140150e+00 3.643183e+00 4.023760e+05 2.394450e+00
## [241] 3.098667e+00 4.094400e+05 5.057233e+00 4.207920e+05 1.863117e+00
## [246] 4.368400e+05 3.619550e+00 6.180000e+00 3.602883e+00 4.102800e+05
## [251] 5.996780e+05 2.572667e+00 2.445333e+00 3.947750e+00 3.149800e+00
## [256] 3.946450e+00 4.391200e+05 7.697333e+00 3.421317e+00 4.007170e+05
## [261] 6.807950e+00 2.570000e+00 1.473967e+00 5.294683e+00 4.236217e+00
## [266] 2.923917e+00 2.599200e+00 3.976000e+00 2.133250e+00 4.382483e+00
## [271] 4.138333e+00 4.390670e+05 4.671117e+00 3.930450e+00 6.233870e+05
## [276] 1.772150e+00 3.646000e+00 3.668450e+00 3.371783e+00 6.788450e+00
## [281] 4.171817e+00 3.105550e+00 3.609117e+00 4.583217e+00 5.353600e+05
## [286] 2.816850e+00 4.051470e+05 4.197117e+00 3.122883e+00 4.899500e+00
## [291] 3.881550e+00 2.875567e+00 3.584883e+00 3.807333e+00 5.516917e+00
## [296] 4.776067e+00 3.997200e+05 7.267117e+00 3.465183e+00 4.135240e+05
## [301] 3.729333e+00 4.183117e+00 2.716217e+00 2.806000e+00 1.023037e+01
## [306] 3.430450e+00 3.616000e+00 3.273700e+00 4.193070e+05 7.987117e+00
## [311] 6.402500e+05 3.912033e+00 2.469333e+00 3.626000e+00 4.318667e+00
## [316] 4.498667e+00 4.347200e+00 4.947117e+00 5.522217e+00 2.235300e+00
## [321] 4.954450e+00 3.926450e+00 4.486267e+00 3.288883e+00 7.105333e+00
## [326] 5.150000e+05 6.160000e+00 4.135600e+05 3.953817e+00 5.940000e+05
## [331] 4.679330e+05 3.307333e+00 4.663820e+05 3.222217e+00
OutDuran <- subset(Train, duration_in.min.ms > 385400| duration_in.min.ms < 68413)
table(OutDuran$genre)
## 
## Acoustic/Folk     Alt_Music         Blues     Bollywood       Country 
##            55             4            11            40            41 
##        HipHop     Indie_Alt  Instrumental         Metal           Pop 
##             2             8            64            21            38 
##          Rock 
##            50

Las duraciones mas altas se deben a conciertos en vivo o discos enteros. Se puede ver que la mayoria de los datos atipicos pertenecen a generos instrumenaltes, acusticos, pop, rock y bollywood los cuales poseen mayor duracion en general.En este Sprint no se eliminaran dado que podrìan ser de valor mas adelante.

Analisis de corelacion entre variables

Para analizar la coreelacion entre las variables usaremos la herramienta pairs.panels de la libreria “psych”

Train_num2 <- select(Train, -mode, -key, -publicidad, -time_signature, -id)
if (!require('psych')) install.packages('psych'); library('psych')
## Loading required package: psych
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
pairs.panels(Train_num2)

Podemos ver que existen correlaciones entre algunas variables.

-Energy tiene una correlacion positiva con loudness

-Energy tiene una correlacion negativa con Acoustiness

-Danceability tiene una correlacion negativa con mode.

Histogramas

Vamos a realizar un analisis de las distintas variables que componen el dataframe mediante el uso de histogramas y boxplots.

if (!require('inspectdf')) install.packages('inspectdf'); 
## Loading required package: inspectdf
library(inspectdf)
num <- inspect_num(Train_num2) 
show_plot(num)

  • Las variables popularity, danceability, valance y tempo presentan una distribucion normal, por esta razon de ser necesario imputar valores se realizara por la media.

  • Energy y loudness presentan una distribucion sesgada hacia la derecha, los valores se imputaran por la mediana.

  • Spechness, acousticness, instrumentalness y liveness presentan distribucion sesgada hacia la izquierda, los valores se imputaran por la mediana.

Imputacion de valores faltantes

Vamos a ver graficamente la proporcion de datos faltantes

na <-inspect_na(Train) 
show_plot(na) 

Podemos apreciar que las variables que contienen datos faltantes son instrumentalness, key, popularity y loudness. Se procede a la imputacion.

TrainLimpio <- na.omit(Train)

TrainLimpio$key <- as.numeric(TrainLimpio$key)

MedianaInstrum <- median(TrainLimpio$instrumentalness)
MediaKey <- round(mean((TrainLimpio$key)))
MediaPopularity <- mean(TrainLimpio$popularity)
MediaLoudness <- median(TrainLimpio$loudness)

Train$instrumentalness[is.na(Train$instrumentalness)] <- MedianaInstrum
Train$key[is.na(Train$key)] <- MediaKey
Train$popularity[is.na(Train$popularity)] <- MediaPopularity
Train$loudness[is.na(Train$loudness)] <- MediaLoudness

Verificamos que ya no existen datos faltantes

na <-inspect_na(Train) 
show_plot(na) 
## Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> =
## "none")` instead.

Analisis de la variable objetivo

Vamos a analizar la variable publicidad comparandola con las demas variables.

Publicidad y Popularity

Train$publicidad <- as.character(Train$publicidad)
ggplot(data = Train[!(is.na(Train[1:1942,]$popularity)),],aes(x=popularity,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

Se puede observar una tendencia que a medida que aumenta la popularidad de la canciòn, la proporciòn de cancion publicitadas es mayor.

Publicidad y danceability

Train$publicidad <- as.character(Train$publicidad)
ggplot(data = Train[!(is.na(Train[1:1942,]$danceability)),],aes(x=danceability,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A simple vista no se observa una relaciòn entre que tan bailable sea la canciòn y si conviene o no publicitar ## Publicidad y energy

ggplot(data = Train[!(is.na(Train[1:1942,]$energy)),],aes(x=energy,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A simple vista no se observa una relaciòn entre energy y si conviene o no publicitar ## Publicidad y key

ggplot(data = Train[!(is.na(Train[1:1942,]$key)),],aes(x=key,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

Se observa una leve tendencia entre que si la categoria de key es baja o alta conviene publicitar ## Publicidad y loudness

ggplot(data = Train[!(is.na(Train[1:1942,]$loudness)),],aes(x=loudness,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

Se observa que las canciones con mayor loudness tienen mas posibilidad de ser publicitadas.

Publicidad y mode

ggplot(data = Train[!(is.na(Train[1:1942,]$mode)),],aes(x=mode,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A simple vista no se observa una relaciòn entre mode y si conviene o no publicitar

Publicidad y speechiness

ggplot(data = Train[!(is.na(Train[1:1942,]$speechiness)),],aes(x=speechiness,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A simple vista no se observa una relaciòn entre speechiness y si conviene o no publicitar

Publicidad y acousticness

ggplot(data = Train[!(is.na(Train[1:1942,]$acousticness)),],aes(x=acousticness,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A simple vista no se observa una relaciòn entre acousticness y si conviene o no publicitar

Publicidad y instrumentalness

ggplot(data = Train[!(is.na(Train[1:1942,]$instrumentalness)),],aes(x=instrumentalness,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A simple vista no se observa una relaciòn entre instrumentalness y si conviene o no publicitar

Publicidad y liveness

ggplot(data = Train[!(is.na(Train[1:1942,]$liveness)),],aes(x=liveness,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A simple vista no se observa una relaciòn entre liveness y si conviene o no publicitar

Publicidad y valence

ggplot(data = Train[!(is.na(Train[1:1942,]$valence)),],aes(x=valence,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A simple vista no se observa una relaciòn entre valance y si conviene o no publicitar

Publicidad y tempo

ggplot(data = Train[!(is.na(Train[1:1942,]$tempo)),],aes(x=tempo,fill=publicidad))+geom_histogram(binwidth =3, position="fill")
## Warning: Removed 6 rows containing missing values (geom_bar).

A simple vista no se observa una relaciòn entre tempo y si conviene o no publicitar

Publicidad y time_signature

ggplot(data = Train[!(is.na(Train[1:1942,]$time_signature)),],aes(x=time_signature,fill=publicidad))+geom_histogram(binwidth =3, position="fill")

A medida que aumenta el valor de time_signature hay mas posibilidades de que la canciòn sea publicitada.