volver al /blog

Código resumen para el análisis de datos en R

[ R  ]

Este código resumen se lo hice a una amiga para ayudarla en su primera entrevista de trabajo, apenas terminamos de estudiar la carrera, allá por 2017. Sirve de ayuda para limpiar y analizar datos en R en menos de 10 pasos, con un conjunto de datos inventado para revisar que funcione :) Cada vez que empiezo un proyecto nuevo en R, abro esta guía txt para no tener que buscar ni escribir las mismas funciones que uso cada vez. Comparto el código en archivo txt y la base csv de ejemplo .

Pasos:

  1. Directorio - Elegir un directorio (carpeta) para tu código o verificar que estás en el correcto.
  2. Abrir un conjunto de datos .csv en R como un dataframe (df).
  3. Dimensionar la forma y tamaño del df, columnas, tipos de variables y estadísticas resumen para tener una idea de tus datos.
  4. Seleccionar subgrupos de variables y/o filas.
  5. Cambiar tipos de variable (de factor a texto, de decimal a entero).
  6. Filtrar datos por condiciones o reglas.
  7. Limpiar duplicados o imputar valores perdidos
  8. Visualizar datos agregados y gráficos.
  9. Exportar el dataframe como .csv

Código:

# 1 DIRECTORIO  

# getwd() para ver el directorio en el que estás ahora
# setwd() para cambiarlo si no era el correcto
# list.files() imprime lo que hay adentro

getwd()
setwd("/Users/camilaburne/folder")
list.files()

Al correr list.files() podés ver los archivos en tu directorio. Están ordenados y podés acceder al primer elemento con list.files()[1]:

# 2 ABRIR    

# Abrir archivos que estén dentro del directorio
# poniendo el nombre en donde dice 'file'
# read.csv(file, header = TRUE, sep = ",")

df01 <- read.csv("base_ejemplo.csv")
df02 <- read.csv(list.files()[1])

En el panel de la derecha, una vez que importás los archivos con read_csv, te aparecen el nombre y dimensión de cada objeto.

# 3 DIMENSIONAR  

# Funciones para ver qué son y qué tienen los df
# dim() devuelve el nro de filas y columnas
# name() muestra las columnas
# head() y tail() las primeras y últ filas

dim(df01)
names(df01)
head(df01, 10)
tail(df01,  2)

# Funciones para ver qué son y qué tienen las variables
# typeof() te dice qué tipo de objeto es

typeof(df01$grupo)
typeof(df01$gasto)
typeof(df01$nombre)

# Funciones para ver sus estadísticas resumen
# mean() y median() para ver promedio y mediana
# range() y sd() para ver rango y dispersión
# quantile() es para ver los percentiles

mean(df01$gasto)
median(df01$gasto)

range(df01$gasto)
sd(df01$gasto)

quantile(df01$gasto, 0.5)
summary(df01)

Con names() se ve que el dataframe muestra valores de compra y venta, para ciertos nombres, grupos y mes. Una variable que puede analizarse es gasto, de la cual se calcula el promedio y los percentiles 25%, 50%, 75%, 90%.

# 4 SELECCIONAR    

# Seleccionar una variable solita, con $ o [ ]
df01$nombre
df01[ ,'nombre']

# Seleccionar un par de filas y de columnas con [ ]
# y pasando el nombre de columnas y número de filas
df01[1:10, ]
df01[c(1,10,20,30), c('nombre','gasto')]
df01[c(1,10,20,30), c(1,2)]

# 5 CAMBIAR TIPOS  

# Funciones para cambiar el tipo de variable
df01$nombre <- as.character(df01$nombre)
df01$gasto  <- as.numeric(df01$gasto)
df01$gasto_redondo <- as.integer(df01$gasto)

# 6 FILTRAR  

# Seleccionar filas usando filtros. Operadores útiles:
#  &     cumple TODAS las conduciones (Y)
#  |     cumple AL MENOS una condicion (O)
#  %in%  significa contenido en  

df01[df01$gasto < 70, ]
df01[df01$gasto < 100  & df01$grupo==1, ]

df01[!(df01$mes=='enero'),]
df01[(df01$mes=='febrero' | df01$mes=='marzo'),]

df01[df01$grupo %in% c(1,2,3), ]

grup12 = c(1,2)
vars   = c(1,4)
df01[df01$grupo %in% grup12, vars]

# Una vez que te interesa un subgrupo que filtraste
# Conviene guardarlo en un df o variable nueva

gastos    <- as.data.frame(df01$gasto)
meses     <- unique(df01$mes)
df01enero <- df01[df01$mes=='enero',]

El operador ! significa “que no sea”, en este caso si se filtran meses que no son ‘enero’ se ven los restantes (febrero, marzo).

# 7 LIMPIAR  

# is.na() te dice TRUE si hay datos perdidos
# Para reemplazarlos:

df01$pct[is.na(df01$pct)] = 0

# duplicated() devuelve TRUE si hay repetidos
# Para encontrar duplicados:
df01$doble <- duplicated(df01)
table(df01$doble)

# Crear df nuevo sin duplicados
df01unico <- subset(df01, df01$doble==FALSE)

nrow(df01)
nrow(df01unico)

La función duplicated() devuelve TRUE si la fila está repetida, y FALSE si es única. Con subset se puede obtener el subgrupo de filas que no están repetidas, generando un dataframe con menos filas que el original.

# 8 VISUALIZAR  

# Funciones para sacar conteos, porcentajes,
# y graficar scatterplots, gráfico de barras, histogramas

table(df01unico$tipo)
prop.table(table(df01unico$tipo))

hist(df01unico$pct, col = 'navyblue', border = 'white')
plot(df01unico$gasto, df01unico$pct, pch=19)
barplot(table(df01unico$grupo))

En el panel a la derecha se visualizan los gráficos, ya sea que se hagan con R básico o ggplot.

Los gráficos básicos de R son sencillos pero aún así tienen varios parámetros para modificar, cómo main (título), xlab, ylab (nombre de ejes). Al correr ?hist, se ven los parámetros de esta función.

# 9 EXPORTAR  

# revisar dónde lo estoy guardando

getwd()
write.csv(df01unico, 'baseok.csv', row.names = F)

Con esta guía se pueden arrancar muchísimos proyectos de ciencias de datos, ya que entender, organizar, limpiar, resumir, visualizar la información cruda es la parte más importante, la que lleva más tiempo (el 80% al menos!) y la habilidad que le pidieron a mi amiga en su entrevista :) que al final se ganó el puesto y ya lleva +5 años ahí.





Volver al principio del artículo


Comments

Podés ser el primer o único usuario dejando un comentario via github en este ticket. Si todo funciona, debería aparecer abajo automáticamente. O no. /p>