Está en la página 1de 45

Programa de actualización 2022

Procesamiento estadístico
de datos con R

M. en C. José Félix Paisano Morales

DDTIC_PL_2022
¿Qué veremos hoy?
1)Presentación
2)Repaso
3)Preguntas evaluación
4)Temas 3 y 4
5)Ejercicios
6)Cierre

DDTIC_PL_2022
Objetivo general

El participante utilizará el lenguaje de programación R para realizar


procedimientos de estadística descriptiva y presentar gráficos con la
información obtenida.

DDTIC_PL_2022
Funciones
Una función es un bloque de código que solo se ejecuta
cuando se le llama.
Puede pasar datos, conocidos como parámetros, a una
función.
Una función puede devolver datos como resultado.

W3 School (2022) R tutorial. R Functions. https://www.w3schools.com/r/r_functions.asp

DDTIC_PL_2022
Funciones ejemplo
#Función que resuelve ecuaciones cuadráticas

EcuacionCuadratica <- function(a, b,c) {


x1 <- round((-b + sqrt((b^2) - (4 * a * c)))/(2 * a))
x2 <- round((-b - sqrt((b^2) - (4 * a * c)))/(2 * a))
print(c(x1, x2))
}

W3 School (2022) R tutorial. R Functions. https://www.w3schools.com/r/r_functions.asp

DDTIC_PL_2022
Estructuras de control: ejemplo
#Crear una función que determine el área de un círculo, debe
evaluar si el radio es menor de cero e imprimir el mensaje
"No se puede calcular el área"

Bravo L. P. & Salgado C. F. (2019) Introducción a R y SIG. https://bookdown.org/chescosalgado/intro_r/

DDTIC_PL_2022
Estructuras de control: condicionales

if (Condición) { # La condición debe devolver TRUE o FALSE


# Ejecuta un código
} else {
# Ejecuta otro código
}

Bravo L. P. & Salgado C. F. (2019) Introducción a R y SIG. https://bookdown.org/chescosalgado/intro_r/

DDTIC_PL_2022
Estructuras de control: if anidado
if (Condición) { # La condición debe devolver TRUE o FALSE
# Código
} else {
# Código
if(Condición 2) { # La condición debe devolver TRUE o
FALSE
# Código
} else {
# Más código
}
Bravo L. P. & Salgado C. F. (2019) Introducción a R y SIG. https://bookdown.org/chescosalgado/intro_r/
}

DDTIC_PL_2022
Estructuras de control: ejemplo
#Importar Base “CalcularIMCSex.csv”
#Calcular el IMC de acuerdo con la fórmula:
#IMC = Peso (kg) / altura (m)²
#Crear el Vector ‘Clasificacion’ usando la función elseif() y clasificar a las
personas de acuerdo si IMC y a la Clasificación del IMSS
#Bajo de Peso <= 18.4
#Normal 18.5 a 24.9
#Sobrepeso 25 a 29.9
#Obesidad >30
Bravo L. P. & Salgado C. F. (2019) Introducción a R y SIG. https://bookdown.org/chescosalgado/intro_r/

DDTIC_PL_2022
DataFrame
Los data frames son estructuras de datos de dos dimensiones (rectangulares) que
pueden contener datos de diferentes tipos, por lo tanto, son heterogéneas. Esta
estructura de datos es la más usada para realizar análisis de datos y seguro te
resultará familiar si has trabajado con otros paquetes estadísticos.

Los data frames son una versión más flexible de una matriz. Mientras que en una
matriz todas las celdas deben contener datos del mismo tipo, los renglones de un
data frame admiten datos de distintos tipos, pero sus columnas conservan la
restricción de contener datos de un sólo tipo.

DDTIC_PL_2022
DataFrame

DDTIC_PL_2022
DataFrame
#Crear DataFrame

mi_ejemplo <- data.frame(


"Id" = 1:8,
"Entrenado" = c("Sí","No","No","Sí","No","No","Sí","Sí"),
"t_reaccion" = c(170,250,265,150,190,185,135,130),
"edad" = c(25,27,28,27,26,25,23,24)
)

DDTIC_PL_2022
DataFrame
# Podemos usar dim() en un data frame
dim(mi_ejemplo)

# El largo de un data frame es igual a su número de columnas


length(mi_ejemplo)

# names() nos permite ver los nombres de las columnas


names(mi_ejemplo)

DDTIC_PL_2022
Matriz a DataFrame
#Creamos una matriz
matriz <- matrix(1:12, ncol = 4)

#La convertimos a un data frame


df <- as.data.frame(matriz)

DDTIC_PL_2022
Operaciones con un data frame
Si hacemos una operación aritmética a un data frame, este
se vectorizará.

mi_ejemplo * 2

Para cambiar el nombre de las columnas del data frame:

colnames(df) <- c("D1", "D2","D3","D4")

DDTIC_PL_2022
Operaciones con un data frame
#Una sola columna
summary(mi_ejemplo$t_reaccion)

#Dos columnas
summary(mi_ejemplo[c('t_reaccion','edad')])
summary(mi_ejemplo[3:4]) #Usamos el índice de la columna

#resumen del data frame


summary(mi_ejemplo)

DDTIC_PL_2022
Operaciones con un data frame
Con un Data Frame podemos acceder a diferentes operaciones y
análisis.

#Ejemplo de correlación (Pearson)


cor(mi_ejemplo[3:4])

DDTIC_PL_2022
Operaciones con un data frame
Importar base de datos “USArrests” y asignarla a la variable df.
#Antes de hacer correlación, hacer las
df <- USArrests gráficas de las combinaciones de
#df variables que faltan

x <- df$Assault #Datos de asalto


y <- df$Rape #Datos de violación

#Graficamos los datos


plot(x,y,pch = 19, col = "blue4") #Revisar paleta de colores
abline(lm(y ~ x), col = "red", lwd = 3) # Línea de regresión

cor(df) #Análisis de correlación “Pearson”

DDTIC_PL_2022
Operaciones con un data frame
#Podemos seleccionar renglones específicos (Hacer subconujntos)
para ejecutar diferentes análisis
#Hacer los siguientes vectores
hr <- c(87, 78, 86, 62, 69, 69, 68, 67, 75, 76)
edad <- rep(c(45, 63, 40, 70), c(3, 2, 4, 1))
#Genero un data frame
Datos <- data.frame(cbind(hr,age))
#Selecciono renglones que cumplen con la condición
Datos2 <- Datos[Datos$age > 60, ] #DataFrame[renglón,columna]
#La función rep repite un numero un determinado número de veces: rep(número, veces que se repite)

DDTIC_PL_2022
Importar datos
Importar base de datos “USArrests” y asignarla a la variable df.

df <- USArrests
#df

x <- df$Assault #Datos de asalto


y <- df$Rape #Datos de violación

#Graficamos los datos


plot(x,y,pch = 19, col = "blue4") #Revisar paleta de colores
abline(lm(y ~ x), col = "red", lwd = 3) # Línea de regresión

cor(df) #Análisis de correlación “Pearson”

DDTIC_PL_2022
Ejercicio
Numerosas investigaciones muestran que las partículas PM10 y
PM2.5 afectan a la salud humana. Algunas de ellas sugieren una
relación directa con enfermedades tales como la diabetes (Pearson,
Bachireddy, Shyamprasad, Goldfine & Brownstein, 2010; He et al.,
2017) o problemas en el desarrollo fetal .

Se sabe que están relacionadas con las enfermedades isquémicas


del corazón, los accidentes cerebrovasculares (infartos cerebrales,
derrames, etc.) y las enfermedades pulmonares obstructivas
crónicas (EPOC).

DDTIC_PL_2022
Ejercicio
Importar la base de datos “Prom_2022_PM10_ PM2-5 .csv”* y
seleccionar los datos los datos de la estación Iztacalco (IZT) y los
datos de partículas PM10.

Graficar los datos de Mes Vs Valor

plot(Datos$Mes,Datos$value)

*https://datos.cdmx.gob.mx/dataset/promedios-particulas-suspendidas

DDTIC_PL_2022
Ejercicio 2
1)A partir de “Prom_2022_PM10_ PM2-5 .csv”, seleccionar las
estaciones Benito Juárez (BJU) y Milpa Alta (MPA) y los datos de
partículas PM2.5 y ponerlos en un data frame llamado Datos2_5.
(4 puntos)
2)Convertir Datos2_5$id_station en un factor.(3 puntos)
3)Graficar los datos de Estación Vs Valor(3 puntos)

4)Valor del ejercicio: 10 puntos

*https://datos.cdmx.gob.mx/dataset/promedios-particulas-suspendidas

DDTIC_PL_2022
BoxPlot
El gráfico de caja (“box-plot” en inglés) es una forma
de presentación estadística destinada,
fundamentalmente, a resaltar aspectos de la
distribución de las observaciones en una o más series
de datos cuantitativos. Reemplaza, en consecuencia,
al histograma y a la curva de distribución de
frecuencias sobre los que tiene ventajas en cuanto a
la información que brinda y a la apreciación global que
surge de la lectura.
Fue ideado por John Tukey, de la Universidad de
Princeton (U.S.A.) en 1977 y los detalles que siguen
corresponden a la descripción dada por este autor.

DDTIC_PL_2022
Exportar Data Frame
#Usamos la siguiente instrucción
write.csv(NombreDataFrame, RutayNombreDelArchivo, row.names = FALSE)

Usar History para conocer la ruta

#write.csv(Datos2_5, paste(Ruta,"Datos2.5",".csv"))

*La función paste une cadenas de caracteres

DDTIC_PL_2022
Tidyverse
Tidy: having everything ordered and arranged in the right place, or liking to
keep things. https://dictionary.cambridge.org/dictionary/english/tidy?q=Tidy

Tidyverse es una colección de paquetes R diseñados para la ciencia de datos.


Todos los paquetes comparten una filosofía de diseño, gramática y estructuras
de datos subyacentes.

DDTIC_PL_2022
Tidyverse: método de trabajo
Tidy: having everything ordered and arranged in the right place, or liking to
keep things. https://dictionary.cambridge.org/dictionary/english/tidy?q=Tidy

Tidyverse es una colección de paquetes R diseñados para la ciencia de datos.


Todos los paquetes comparten una filosofía de diseño, gramática y estructuras
de datos subyacentes.

DDTIC_PL_2022
Usando Tidyverse: Limpieza de base de datos
#Definir ruta de trabajo:
Ruta <-"~/Documentos/CursosUnam/R Studio/Bases/"
#En windows: setwd("d:\\Documents\\CursoR") se debe usar “\\”

setwd(Ruta)

https://www.rpubs.com/camilamila/limpieza_R

DDTIC_PL_2022
Usando Tidyverse: Limpieza de base de datos
#Cargar la siguientes bibliotecas
library(readxl) #Lee archivos excel
library(dplyr) #Gramática (Funciones) de manipulación de datos
library(tidyr) #Ayuda a organizar los datos

#Importar datos
morosidad16 <- read_xlsx("morosidad16.xlsx")
morosidad17<- read_xlsx("morosidad17.xlsx")

DDTIC_PL_2022
Usando Tidyverse: Limpieza de base de datos
Campos o variables de las bases de datos:

id: cédula del deudor ya sea cédula física o moral.


nombre: Nombre de la persona física o moral.
deuda16 y deuda17 : monto de la deuda ($).
situación: situación en la que se encuentra la deuda
lugar.pago: sucursal donde se tiene que cancelar la deuda
Estado: Estado de la deuda

DDTIC_PL_2022
Usando Tidyverse: Unión de bases de datos
Para unir dos base de datos diferenets usamos la función merge()

Combina dos data frames por columnas comunes o nombres de fila.

merge(x, y, by = intersect(names(x), names(y)),


by.x = by, by.y = by, all = FALSE, all.x = all, all.y = all,
sort = TRUE, suffixes = c(".x",".y"), no.dups = TRUE,
incomparables = NULL, …)

x y y son los DataFrame que se quieren combinar


by = intersect(names(x), names(y): especificaciones de columnas o reglones por el que
vana unirse. https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/merge

DDTIC_PL_2022
Usando Tidyverse: Unión de bases de datos
#Para unir las bases de datos se necesita una o más variables (campos) en común.
#Ambas bases tienen el campo “id”, ese campo se usará para la unión

morosidad<-merge(morosidad17, morosidad16, by= "id", all=TRUE) #all sinfica que traerá


todos los renglones y columnas.

https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/merge

DDTIC_PL_2022
Usando dplyr
Se usa para organizar y seleccionar datos de forma fácil.
Algunas funciones útiles son:
1)select() #permite seleccionar columnas: select(dataframe, col1, col2)
2)filter()
3)arrange()
4)mutate()
5)summarize().

https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/merge

DDTIC_PL_2022
Usando select
select(DataFrame, col1, col2, col3…, etc)
select(morosidad, id, deuda17, deuda16) #Selecciona 3 columnas
select(morosidad, -Estado) #Selecciona todas las columnas excepto la columa Estado

https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/merge

DDTIC_PL_2022
Usando filter
#Pemite seleccionar un grupo de filas o reglones de acuerdo a una condición
#Sintaxis: filter(base, condición)
filter(morosidad, deuda17>2083074) #selcciona la deuda mayor de 2,083,074
filter(morosidad, deuda17>deuda16) #Selecciona renglones en donde aumentó la deuda del año16
al año 17
filter(morosidad1, deuda17>1000000 & situacion.x=="DIFICIL COBRO")

Se pueden usar los operadores lógicos


>: mayor que
<: menor que
>=: mayor o igual que
<=: menor o igual que
==: igual que (se ponen dos signos de igual)
!=: diferente
&: y
|: o
is.na(variable): filtra los valores en blanco de la variable seleccionada.
!is.na(variable): filtra los valores que no están en blanco de la variable.

DDTIC_PL_2022
Ejercicio 3
Seleccionar los datos de las empresas o personas que han estado morosas en los dos
años y guardarlo en la variable morosidad1.

Use los datos de los campos deuda16 y deuda17

(valor: 2 puntos)

DDTIC_PL_2022
Usando mutate()
#Permite crear nuevas columnas de forma fácil.
#Sintaxis: mutate(base, NombreNuevaColumna = (operación o condición))
#Cambio entre la deuda del año 16 al año 17
morosidad1 <- mutate(morosidad1, cambio.deuda=deuda17-deuda16)

DDTIC_PL_2022
Ejercicio 4
Crear la variable (Columna) tipo.cambio en morosidad1 que categorice el cambio en la
deuda. Si el cambio = 0(cero), entonces “Sin cambio”, Si cambio < 0(cero), “Disminuyó”,
en caso contrario, “Aumentó” (4 ptos)

Convierta la variable tipo.cambio en un factor (2 ptos).

Haga una gráfica de tipo.cambio vs cambio.deuda (2 ptos).

DDTIC_PL_2022
Múltiples columnas
#Se pueden crear múltiples columnas

morosidad1 <- mutate(morosidad1, cambio.deuda=deuda17-deuda16,


tipo.cambio=ifelse(cambio.deuda<0,"disminuyó", "aumentó"))

DDTIC_PL_2022
Usando paquete dplyr
#Se pueden crear múltiples columnas

morosidad<-full_join(morosidad17, morosidad16, by= "id")

#Ordenar los datos


#ordena la base en orden ascendente por deuda17 y por cambio.deuda:
morosidad1 <- arrange(morosidad1, deuda17, cambio.deuda)

#orden descendente desc()


morosidad1 <- arrange(morosidad1, desc(deuda17), desc(cambio.deuda))

DDTIC_PL_2022
Comando pipe (%>%)
#Se usa %>% para asignación múltiple a una misma base

morosidad2 <- morosidad %>%


select(-nombre.y, -situacion.y, -lugar.pago.y) %>%
filter(!is.na(deuda17), !is.na(deuda16)) %>%
mutate(cambio.deuda=deuda17-deuda16,
tipo.cambio=ifelse(cambio.deuda<0,"disminuyó", "aumentó")) %>%
arrange(desc(deuda17), desc(cambio.deuda))

#Exportamos los datos a un archivo csv


#Si tenemos apuntando a una ruta con el objeto setwd(Ruta),
#podemos exportar directamente, en caso contrario debemos dar la ruta para guardar.

write.csv(morosidad2, "baselimpia.csv")

DDTIC_PL_2022
Reorganizar Bases de datos

#Importar datos de certificados de Nacimiento:


#CertificadosNacionalidadMexicanaPorNacimiento.csv
#Asigno a Datos el DataFrame
Datos <- CertificadosNacionalidadMexicanaPorNacimiento
#Genero una nueva base organizada
CertificadosMes <- gather(Datos, Mes, Frecuencia, -A.O)
#Hago factor a Mes
CertificadosMes$Mes <- as.factor(CertificadosMes$Mes)
#Hago gráfico
plot(CertificadosMes$Mes,CertificadosMes$Frecuencia)

DDTIC_PL_2022
Regresar a la Bases de datos original
#Regresamos a la base orignal
CertificadosOriginal <- spread(CertificadosMes, Mes, -A.O)

DDTIC_PL_2022
Ejercicio 5
Importe la base “AsesoriasProfedet.csv”, reordene la base de tal modo que se tengan
las variables “Ciudad”, A.O (Año), Mes y Frecuencia. (3 ptos)
Selecciones los datos del año 2018 de la ciudad de Villahermosa (3 ptos)

Haga un gráfico en donde se vea el número de asesorías usando las siguientes


condiciones:
1)Mes vs Frecuencia (2 ptos)
2)Ciudad vs Frecuencia (2 ptos)

Valor 10 ptos

DDTIC_PL_2022
Contacto

M. en C. José Félix Paisano Morales


josflix2@gmail.com

DDTIC_PL_2022

También podría gustarte