Actividad Colaborativa M3

En este ejercicio se ha utilizado un dataset relativo a Social Media. Nuestro dataset contiene información relativa a la Agencia, Plataforma, Url, Fecha y Nºde Visitas/Likes. Es descargable en este link: https://data.cityofnewyork.us/api/views/5b3a-rs48/rows.csv?accessType=DOWNLOAD.

Vamos a llevar a cabo una serie de técnicas destinadas a la limpieza y preparación del dataset de cara a un posterior análisis:

Fijamos directorio de trabajo y preparamos nuestros datos

#Fijamos directorio de trabajo
setwd("C:/Users/Gonzalo/Documents/datos")

#Comprobamos directorio de trabajo
getwd()
## [1] "C:/Users/Gonzalo/Documents/datos"
#Descargamos nuestro dataset y lo guardamos en el directorio fijado
URL<-"https://data.cityofnewyork.us/api/views/5b3a-rs48/rows.csv?accessType=DOWNLOAD"
download.file(URL,destfile="./SocialMedia.csv")

#Almacenamos la fecha de la descarga
fechaDescarga <- date()
fechaDescarga
## [1] "Sat Nov 18 18:01:03 2017"
#Librerías necesarias#
library(knitr)

#Lectura de los datos#
socialmedia<-read.csv("./SocialMedia.csv",header=TRUE)

Primera observación de nuestros datos

summary(socialmedia)
##       Agency          Platform               Url      
##  DOE     : 380   Facebook :1680                : 160  
##  DOH     : 300   Twitter  :1400   You The Man  :  40  
##  DOT     : 280   YouTube  : 560   0            :  20  
##  NYC & Co: 260   Flickr   : 440   2800000      :  20  
##  MOME    : 180   Tumblr   : 420   877877       :  20  
##  OEM     : 180   WordPress: 240   Condom Finder:  20  
##  (Other) :4319   (Other)  :1159   (Other)      :5619  
##                  Date.Sampled  Likes.Followers.Visits.Downloads
##  01/20/2012 12:00:00 AM: 295   Min.   :      0                 
##  02/17/2012 12:00:00 AM: 295   1st Qu.:    196                 
##  03/14/2012 12:00:00 AM: 295   Median :    709                 
##  04/09/2012 12:00:00 AM: 295   Mean   :  18486                 
##  04/30/2012 12:00:00 AM: 295   3rd Qu.:   3400                 
##  05/09/2012 12:00:00 AM: 295   Max.   :2785806                 
##  (Other)               :4129   NA's   :1920

Cambiamos nombres de las variables

#Modificamos los nombres de las variables para que no lleven puntos#
colnames(socialmedia)<-c("Agency","Platform","Url","Date_Sampled","Likes_Followers_Visits_Downloads")

Eliminamos los registros vacíos y NAs de nuestro dataset

#Usamos complete.cases para eliminar NA y vacios ya que no nos aportan información#
socialmedia2<-socialmedia[complete.cases(socialmedia),]

Modificación del formato de la fecha

No necesitamos que se incluya la hora. Vamos a mostrar la fecha en formato aaaa-mm-dd:

#Cargamos la librería Ludridate#
library(lubridate)
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
## 
##     date
#Transformamos el formato original que viene con la hora#
socialmedia2$Date_Sampled=mdy_hms(socialmedia2$Date_Sampled)

Modificación del formato de los campos

#Formato Date#
socialmedia2$Date_Sampled=as.Date(socialmedia2$Date_Sampled)

#Formato numérico en el campo Likes#
socialmedia2$Likes_Followers_Visits_Downloads=as.numeric(socialmedia2$Likes_Followers_Visits_Downloads)

Segunda observación de los datos

Vemos en ella que tenemos valores repetidos en función de las mayúsculas. Por ejemplo, tenemos “Youtube” y “YouTube” en el campo Platform. Eliminamos también los registros TOTAL ya que no nos interesa que aparezca el total como un registro más.

#Vemos los posibles valores que toman Agency y Platform#
levels(socialmedia2$Agency)
##  [1] ""                                 "311"                             
##  [3] "ACS"                              "All"                             
##  [5] "CAU"                              "CCRB"                            
##  [7] "Change by Us"                     "Change By Us"                    
##  [9] "Child Services"                   "City Charter"                    
## [11] "City Store"                       "Commission on Human Rights"      
## [13] "Culture"                          "DCA"                             
## [15] "DEP"                              "Dept of Consumer Affairs"        
## [17] "DFTA"                             "DHS"                             
## [19] "DOB"                              "DOB: Cool Roofs"                 
## [21] "DOB: UrbanCanvas"                 "DOC"                             
## [23] "DOE"                              "DOF"                             
## [25] "DOH"                              "DOHMH"                           
## [27] "DOI"                              "DOITT"                           
## [29] "DOT"                              "DPR"                             
## [31] "DRIS"                             "DSNY"                            
## [33] "DYCD"                             "EDC"                             
## [35] "ENDHT"                            "energyNYC"                       
## [37] "FDNY"                             "FUND"                            
## [39] "GreeNYC"                          "HDP"                             
## [41] "HHC"                              "HHS"                             
## [43] "HIA"                              "HPD/Commission on Human Rights"  
## [45] "HRA"                              "LMEC"                            
## [47] "LPC"                              "Materials for the Arts"          
## [49] "Mayor's Fund"                     "Mayor's Office"                  
## [51] "MOAE"                             "MOIA"                            
## [53] "MOME"                             "MOPD"                            
## [55] "NYC & Co"                         "NYC Digital"                     
## [57] "NYC Digital: external newsletter" "NYC Gov"                         
## [59] "NYC Mayors Cup"                   "NYC Water"                       
## [61] "NYC Waterfront"                   "NYCCFB"                          
## [63] "NYCDCAS"                          "NYCGLOBAL"                       
## [65] "nycgov"                           "NYCHA"                           
## [67] "NYCService"                       "NYCSevereWeather"                
## [69] "NYPD"                             "OCDV"                            
## [71] "OEM"                              "OMB"                             
## [73] "PlaNYC"                           "Prob"                            
## [75] "Probation"                        "SBS"                             
## [77] "SBS - Workforce1"                 "SICB1"                           
## [79] "SimpliCity"                       "SnowUpdate"                      
## [81] "TLC"                              "TOTAL"                           
## [83] "VAC"                              "Veteran's Affairs"               
## [85] "Vets"                             "YMI"                             
## [87] "Young Mens Initiative"
levels(socialmedia2$Platform)
##  [1] "Android"                   "Broadcastr"               
##  [3] "Facebook"                  "Flickr"                   
##  [5] "Foursquare"                "Foursquare (Badge Unlock)"
##  [7] "Google+"                   "Instagram"                
##  [9] "iPhone"                    "iPhone app"               
## [11] "iPhone App"                "Linked-In"                
## [13] "Newsletter"                "nyc.gov"                  
## [15] "Pinterest"                 "SMS"                      
## [17] "TOTAL"                     "Tumblr"                   
## [19] "Twitter"                   "Vimeo"                    
## [21] "WordPress"                 "Youtube"                  
## [23] "YouTube"
#Corregimos posibles errores en los valores pasando a minúsculas#
socialmedia3<-data.frame(tolower(as.matrix(socialmedia2)))
kable(head(socialmedia3[1:6,]))
Agency Platform Url Date_Sampled Likes_Followers_Visits_Downloads
1 oem sms 2012-02-17 61652
2 oem sms 2012-11-09 44547
5 dhs twitter www.twitter.com/nycdhs 2012-06-13 389
6 dhs twitter www.twitter.com/nycdhs 2012-08-02 431
7 doh android condom finder 2011-08-08 5026
9 mome android miny venor app 2011-08-08 313
#Ya no tenemos Youtube y YouTube separados#
levels(socialmedia3$Platform)
##  [1] "android"                   "facebook"                 
##  [3] "flickr"                    "foursquare"               
##  [5] "foursquare (badge unlock)" "google+"                  
##  [7] "instagram"                 "iphone"                   
##  [9] "iphone app"                "linked-in"                
## [11] "newsletter"                "pinterest"                
## [13] "sms"                       "total"                    
## [15] "tumblr"                    "twitter"                  
## [17] "wordpress"                 "youtube"
dim(socialmedia3)
## [1] 3979    5
#Existen filas intermedias que indican el total para algun día concreto#
#Las eliminamos. Los totales no deberían estar como un registro más#
socialmedia4<-socialmedia3[socialmedia3$Platform!="total",]

#Se reduce el numero de filas al quitar los totales#
dim(socialmedia4)
## [1] 3960    5

Ordenamos nuestro dataset

Utilizamos el comando Order para ordenar por Fecha, Agencia y Plataforma.

#Utilizamos el comando order para ordenar nuestro dataframe#
DatosLimpios<-socialmedia4[order(socialmedia4$Date_Sampled,socialmedia4$Agency,socialmedia4$Platform),]
rownames(DatosLimpios) <- NULL

#Vista final de los datos limpios#
kable(head(DatosLimpios[1:10,]))
Agency Platform Url Date_Sampled Likes_Followers_Visits_Downloads
311 facebook http://www.facebook.com/pages/new-york-city-311/84372567650 2011-08-08 1078
311 iphone app http://itunes.apple.com/us/app/nyc-311/id324897619?mt=8 2011-08-08 16879
311 twitter http://www.twitter.com/nycasp 2011-08-08 6677
311 twitter http://www.twitter.com/311nyc 2011-08-08 17956
311 wordpress http://311nyc.wordpress.com/ 2011-08-08 100
acs facebook http://www.facebook.com/familyconnectionsnyc 2011-08-08 290

Exportamos los datos limpios y ordenados

#Grabamos nuestros datos limpios en el directorio fijado inicialmente#
write.csv(DatosLimpios,"DatosLimpios.csv",row.names=FALSE)