TAREA UNO
SEBASTIAN, IVAN Y JORGE
library(readxl)
TP <- read_excel("BASES/TABLA_TAREA1.xlsx")
1. ¿Cuántas filas y columnas tiene el data.frame?
dim(TP)
## [1] 62 10
2. Realice una exploración rápida usando las instrucciones: head, tail, str, summary, etc.
head(TP)
## # A tibble: 6 × 10
## PERSONA EDAD SEXO ESTATURA NIVEL…¹ MARCA…² NUMER…³ SALARIO MASCOTA CIUDA…⁴
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 <NA> <NA> <NA> <NA> <NA> <NA> <NA> NA <NA> <NA>
## 2 <NA> <NA> <NA> <NA> <NA> <NA> <NA> NA <NA> <NA>
## 3 PERSONA 1 21 M 1.54 MAESTR… AUDI 0 1200000 SI Bogotá…
## 4 PERSONA 2 26 F 1.55 PROFES… RENAULT 5 1250000 NO Medell…
## 5 PERSONA 3 30 F 1.6 DOCTOR… BMW 2 900000 NO Palmir…
## 6 PERSONA 4 31 f 1.7 PROFES… RENAULT 2 800000 NO Medell…
## # … with abbreviated variable names ¹`NIVEL ESCOLAR`, ²`MARCA DE AUTO`,
## # ³`NUMERO DE HIJOS`, ⁴`CIUDAD-DPTO`
tail(TP)
## # A tibble: 6 × 10
## PERSONA EDAD SEXO ESTAT…¹ NIVEL…² MARCA…³ NUMER…⁴ SALARIO MASCOTA CIUDA…⁵
## <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 PERSONA 55 30 F 1.54 MAESTR… CHEVRO… 2 2400000 SI Bogotá…
## 2 PERSONA 56 39 M 1.58 MAESTR… AUDI 1 2600000 NO Medell…
## 3 PERSONA 57 34 F 1.6 DOCTOR… BMW 1 3500000 SI Pasto/…
## 4 PERSONA 58 24 f 1.7 PROFES… RENAULT 3 800000 SI Palmir…
## 5 PERSONA 59 20 M 1.71 MAESTR… AUDI 0 850000 NO Villav…
## 6 PERSONA 60 10 M 1.8 PROFES… AUDI 0 1000000 NO Pasto/…
## # … with abbreviated variable names ¹ESTATURA, ²`NIVEL ESCOLAR`,
## # ³`MARCA DE AUTO`, ⁴`NUMERO DE HIJOS`, ⁵`CIUDAD-DPTO`
str(TP)
## tibble [62 × 10] (S3: tbl_df/tbl/data.frame)
## $ PERSONA : chr [1:62] NA NA "PERSONA 1" "PERSONA 2" ...
## $ EDAD : chr [1:62] NA NA "21" "26" ...
## $ SEXO : chr [1:62] NA NA "M" "F" ...
## $ ESTATURA : chr [1:62] NA NA "1.54" "1.55" ...
## $ NIVEL ESCOLAR : chr [1:62] NA NA "MAESTRÍA" "PROFESIONAL" ...
## $ MARCA DE AUTO : chr [1:62] NA NA "AUDI" "RENAULT" ...
## $ NUMERO DE HIJOS: chr [1:62] NA NA "0" "5" ...
## $ SALARIO : num [1:62] NA NA 1200000 1250000 900000 800000 950000 2000000 2500000 3500000 ...
## $ MASCOTA : chr [1:62] NA NA "SI" "NO" ...
## $ CIUDAD-DPTO : chr [1:62] NA NA "Bogotá-Cundinamarca" "Medellín-antioquia" ...
summary(TP)
## PERSONA EDAD SEXO ESTATURA
## Length:62 Length:62 Length:62 Length:62
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
##
## NIVEL ESCOLAR MARCA DE AUTO NUMERO DE HIJOS SALARIO
## Length:62 Length:62 Length:62 Min. : 800000
## Class :character Class :character Class :character 1st Qu.:2000000
## Mode :character Mode :character Mode :character Median :3450000
## Mean :3286667
## 3rd Qu.:4700000
## Max. :6500000
## NA's :2
## MASCOTA CIUDAD-DPTO
## Length:62 Length:62
## Class :character Class :character
## Mode :character Mode :character
##
##
##
##
3. ¿Existen datos faltantes? ¿Cuántos en total? ¿Cuántos por cada variable? Hay esta cantidad de datos faltantes:
Datos_Faltantes <- sum(is.na(TP)) ;Datos_Faltantes
## [1] 26
Por variable:
apply(is.na(TP),2,sum)
## PERSONA EDAD SEXO ESTATURA NIVEL ESCOLAR
## 2 2 3 2 3
## MARCA DE AUTO NUMERO DE HIJOS SALARIO MASCOTA CIUDAD-DPTO
## 4 3 2 3 2
4. Mencione los problemas, si los tiene, en las variables del data.frame.
Las únicas variables sin problemas son PERSONAS, MASCOTA y SALARIO
Las variables que presentan problemas son:
EDAD (2O)
SEXO (MUJER, f, mujer, hombre).
ESTATURA ( comas y puntos).
NIVEL ESCOLAR (PhD).
MARCA DE AUTO (renault, FOR).
NUMERO DE HIJOS (Datos anómalos).
CIUDAD-DPTO (guiones, raya al piso y back slash).
5. Para la variable EDAD
class(TP$EDAD)
## [1] "character"
Se importó como character ya que existe un caracter NA y un 2O.
EDAD <- na.omit(TP$EDAD)
EDAD1 <- as.numeric(EDAD)
## Warning: NAs introducidos por coerción
sum(is.na(EDAD1))
## [1] 2
which(is.na(EDAD1))
## [1] 24 28
EDAD1[which(is.na(EDAD1))] <- 22; EDAD1
## [1] 21 26 30 31 35 65 45 42 52 63 57 58 68 41 42 62 53 51 30 40 60 45 56 22 37
## [26] 39 28 22 61 38 21 50 56 47 20 35 41 58 46 30 26 65 45 46 52 62 57 58 68 41
## [51] 42 62 53 51 30 39 34 24 20 10
##hist(EDAD1, col = "pink")
hist(EDAD1,
labels = T, #etiquetas de las barras.
ylim = c(0,18),
xlim = c(10,80),
col = "pink",
xlab = "Intervalos: Edades",
ylab = "Frecuencia",
main = "Histograma frecuencia absoluta ",
freq = T) # frecuencias absolutas
6. Para la variable ESTATURA
a.¿Se importó como numeric or character? Explique
class(TP$ESTATURA)
## [1] "character"
Se importó como tipo character ya que algunos valores tienen coma y otros punto, es un problema de digitación de valores.
which(is.na(TP$ESTATURA))
## [1] 1 2
TEstatura <- as.numeric(TP$ESTATURA)
A pesar de ser importada toda la variable como tipo character, al evaluarla como variable numérica se encuentra que los primeros dos valores iniciales que estaban definidos como NA se mantienen, por lo que no hay valores del tipo character dentro del vector.
Estas son las posiciones en las que se encuentran los NA:
which(is.na(TEstatura))
## [1] 1 2
TP$ESTATURA <- as.numeric(TP$ESTATURA)
summary(TP$ESTATURA)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 1.490 1.540 1.650 1.685 1.765 3.450 2
No, porque los valores asignados a la variable no presentan una frecuencia concreta, es decir, son muy diferentes entre sí y saldrían demasiadas barras para ser un gráfico conveniente.
7. Para la variable NUMERO_HIJOS
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
n.hijos <- TP$`NUMERO DE HIJOS`; n.hijos
## [1] NA NA "0" "5" "2" "2" "1" "1" "1" "1" "0" "0" "4" "3" "2"
## [16] "1" "2" "2" "2" "1" "1" "0" NA "2" "2" "NA" "3" "4" "4" "0"
## [31] "0" "0" "0" "2" "54" "0" "0" "2" "5" "4" "6" "0" "2" "3" "0"
## [46] "4" "1" "1" "5" "5" "3" "0" "1" "20" "3" "2" "2" "1" "1" "3"
## [61] "0" "0"
Tiene varios NA y por otra parte esta almacenada como cadena de texto
n.hijos1 <- as.numeric(n.hijos)
## Warning: NAs introducidos por coerción
which(is.na(n.hijos1))
## [1] 1 2 23 26
n.hijos1[c(1,2,23,26)] <- 3; n.hijos1
## [1] 3 3 0 5 2 2 1 1 1 1 0 0 4 3 2 1 2 2 2 1 1 0 3 2 2
## [26] 3 3 4 4 0 0 0 0 2 54 0 0 2 5 4 6 0 2 3 0 4 1 1 5 5
## [51] 3 0 1 20 3 2 2 1 1 3 0 0
barplot(table(n.hijos1),
main="Número de hijos",
xlab="Hijos",
ylab="Frecuencias",
col=c("red","blue","pink","orange","purple","navy","green"),
ylim=c(0,16)
)
La tabla de frecuencias es:
freq_abs <- table(TP$`MASCOTA`); freq_abs
##
## NO SI
## 29 30
freq_rel <- prop.table(freq_abs);
freq_por <- freq_rel*100;
Tabla_h <- round(cbind(freq_abs,freq_rel,freq_por),3); Tabla_h
## freq_abs freq_rel freq_por
## NO 29 0.492 49.153
## SI 30 0.508 50.847
Ya que las respuestas son SI y NO, se puede decir que un SÍ equivale a un 1 y un NO equivale a un 0
MASCOTA <- na.omit(TP$MASCOTA);
MASCOTA[which(TP$MASCOTA == "SI")] <- 1
MASCOTA[which(TP$MASCOTA == "NO")] <- 0
MASCOTA1 <- as.numeric(MASCOTA);
## Warning: NAs introducidos por coerción
barplot(table(MASCOTA1),
main="MASCOTAS",
xlab="RESPUESTAS (SI = 1, NO = 0)",
ylab="Frecuencias",
col=c("red","blue"),
ylim=c(0,35)
)