Taller de Introducción a R 2. Manipulación de datos

Documentos relacionados
Taller de análisis estadístico con R 2. Manipulación de datos

Principios y Herramientas de Programación

Programación Web Tema 3.2 Java Script Estructura del Lenguaje. Ramón Alcarria ETSI en Topografía, Geodesia y Cartografía - UPM

Prácticas Propuestas Tema 1 R

Ficha Datos. Grupo Ordenar y filtrar

Entender los objetos de R. Francisco Viciana. Curso

Datos y tipos de datos

Principios de Estadística. Estructuras de Control. Matrices. Archivos y directorios

1 Variables y tipos de datos

BASE DE DATOS EN EXCEL Por Mabel Cortes C.

2.2 CREAR TABLAS Y GRÁFICOS.

Sumar números rápidamente

INFORMÁTICA MATLAB GUÍA 3 Operaciones con Matrices

Consultas. Comparación Filtros vs Consultas Tipos de Consultas Crear, reutilizar y Ejecutar Consultas. Consultas Diapositiva 1.

Computación Aplicada. Universidad de Las Américas. Aula virtual de Computación Aplicada. Módulo de Excel 2013 LIBRO 6

Seminario 1. Excel Básico

Primeros pasos en R. Peter Dalagaard. Facultad de Estudios Superiores Acatlán Licenciatura en Economía Econometría III.

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

Consultas. Consultas Diapositiva 1

GUÍA TEÓRICO PRÁCTICA 2.

Contenido. Prólogo...XV Prefacio... XVII Plataforma de contenidos interactivos... XVIII

SESIÓN PRÁCTICA 3: TRANSFORMACIONES DE DATOS PROBABILIDAD Y ESTADÍSTICA. PROF. Esther González Sánchez. Departamento de Informática y Sistemas

LABORATORIO Nº 9 TABLAS DINÁMICAS

GUIA BÁSICA DEL PROCEDIMIENTO MATRIX END MATRIX

Datos y tipos de datos

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Una vez que se haya instalado el paquete R en la computadora y abierto una consola de programación, realice los siguientes ejercicios:

Aspectos básicos (tipos, I/O, aleatoreidad) Juan A. Botía. Tratamiento Inteligente d la Información y Aplicaciones

Ya sabes cómo introducir datos en listas y hacer operaciones

IDENTIFICACIÓN DE LA ACTIVIDAD PEDAGÓGICA

Planilla de calculo. TIC: Planilla de Cálculo 1

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Programación 1 Tema 3. Información, datos, operaciones y expresiones

Temario 2012 para la certificación de MS Excel Nivel Fundamentos Para versiones de Ms Office 2007 y sucesivas

El Pseudo-código de PsInt

Estos argumentos posicionales trabajan con todos los datos que hay en la dirección especificada hasta que se encuentran con una celda vacía

Temario 2008 para la certificación de MS Excel Nivel Fundamentos

Cursada Segundo Cuatrimestre 2012 Guía de Trabajos Prácticos Nro. 1

33.- BARRA DENTRO DE EXCEL QUE DESPLIEGA LA REFERENCIA DE CELDA Y LOS CONTENIDOS DE LAS CELDAS ACTIVAS

UNIDAD V: ARR R EGL G OS O BIDI D MENS N IONALE L S

CENTRO DE CAPACITACION COMBARRANQUILLA

Hoja electrónica Microsoft Excel

UNIDAD 3 FUNCIONES, FÓRMULAS Y MANIPULACIONES

ESTRATEGIA Y DESARROLLO ORGANIZACIONAL, S.C.

Funciones de análisis de datos

Los DLL que permiten crear y definir nuevas bases de datos, campos e índices.

1.- CREACIÓN DE CONSULTAS.

Tema 10: Estructuras de control de entrada y salida

Ficha Fórmulas. Grupo Biblioteca de funciones

Administración de la producción. Sesión 9: Hojas de cálculo (Microsoft Excel)

Bases de Datos Relacionales III

Método Simplex. Ing. Ricardo Fernando Otero, MSc

Módulo A. PROCESADOR DE TEXTOS. WORD Unidad 0. Introducción...15

Microsoft Excel 2010 Completo + Profesional

Trabajo avanzado con consultas

GUIA DE EXAMEN PARA SEMINARIO DE TITULACION OFFICE 2016 WORD,EXCEL Y POWER POINT

Base de datos. Objetivo. Contenido

Algoritmos y Programación Clase 8

Arreglos numéricos. Programación Clase 23

Anexo 3 COMPONENTES DE SQL SERVER. Los DDL (Data Definition Languaje) que permiten crear y definir nuevas

Gráfico de Control de Aceptación

Hasta ahora: los tipos de datos Enteros (int). Punto flotante (float). Cadenas (str). Booleanos (verdadero o falso)

Inducción a MATLAB. Álgebra Lineal. Escuela de Matemáticas. Facultad de Ciencias Universidad Nacional de Colombia Sede Medellín

UNIDAD 8. LAS CONSULTAS DE RESUMEN

Práctica 0: Introducción a Matlab. Matlab es un acrónimo: MATrix LABoratory

PRÁCTICAS DE ESTADÍSTICA CON R

Informática I ACI-191. Taller de Informática

Estructuras de datos

Tema: CREACIÓN DE FORMULAS Y FUNCIONES EN MICROSOFT EXCEL 2013.

Separar texto en columnas

HERRERA CARVAJAL Y ASOCIADOS CIA. LTDA Seminario Taller MS-EXCEL BASICO INTERMEDIO + SAFI ERP Quito: 16 Horas CONTENIDO:

Cadenas. Listas. Matrices.

MANUAL DE FILTROS EN EXCEL Instituto Electoral y de Participación Ciudadana de Tabasco

Curso de diseño experimental 2137

Introducción Comandos básicos en R. Introducción a R. Felipe Bravo Márquez. 13 de noviembre de 2013

MANUAL BÁSICO DEL LENGUAJE SQL

ÍNDICE INTRODUCCIÓN...13

Seminario 55. Excel Experto

UNIDAD 5. calc OPCIONES AVANZADAS. CURSO: LibreOffice

4_funciones I. El resultado sería algo similar a: =B4+B8 (utilizando nombre de celda) =45+56 (utilizando número)

Fundamentos Conceptuales de la Informática. Funciones. Prof. Manuel Rivas

4. Operadores Operador asignación

Herramientas computacionales para la matemática MATLAB: Arreglos

Estructuras de Datos. José Enrique Martín García Universidad Politécnica de Gimialcón (Copyright 2015)

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

Operaciones básicas con hojas de cálculo

Microsoft Office XP Excel XP (III)

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

CAPÍTULO 3 ESTRUCTURAS DE DATOS ESTÁTICAS

Procesador de textos

Operadores. Además se pueden emplear en sentencias SET.

INTRODUCIR FORMULAS EN EXCEL

INTRODUCCIÓN A MATLAB. Laboratorio de Biofísica, U.T.P

4. Aplicar fórmulas y funciones.

Sistema de Registro, Derivación y Monitoreo Chile Crece Contigo

CONVERTIR STRING A NUMBER JAVASCRIPT. REDONDEAR. TOFIXED, ISNAN, TOPRECISION, VALUEOF. PARSEINT Y PARSEFLOAT (CU01156E)

Objetivos: Descripción del curso. Curso: Dirigido a: Microsoft Excel Básico 2016 UNIVERSIDAD NACIONAL DE INGENIERÍA

UNIDAD 4: MATRICES, MARCOS DE DATOS Y LECTURA DE DATOS EN R

Transcripción:

Taller de Introducción a R 2. Manipulación de datos Ricardo Alvarado Rodolfo Mora Ricardo Román ralvarado@cenat.ac.cr rmora@cenat.ac.cr rroman@cenat.ac.cr Noviembre, 2015

Contenido 1 Estructuras de datos Vectores Vectores multidimensionales Listas Marcos de datos 2 Carga de archivos Carga de archivos separados por coma Configuración 3 Filtrado y selección Vectores condicionales Subconjuntos 4 Valores inválidos Identificación NA y NaN Tratamiento de registros inválidos 5 Tratamiento y normalización Agregación 2 / 31

Estructuras de datos 3 / 31

Vectores Una variable que contiene múltiples valores del mismo tipo en una estructura de una dimensión. La función c() permite hacer vectores al concatenar varios valores. x <- c(t,f) x <- c(1,2,3,4) x <- c(0.5,0.6) x <- c(1+0i,2+4i) x <- c("a","b","c","de") 4 / 31

Vectores Todos los elementos de un vector deben ser del mismo tipo, de lo contrario R forzará todos los elementos al tipo más genérico. x <- c(1,0.5,10) # Tipo numérico y <- c(1,1+3i,0.5) # Tipo complejo z <- c(1,"hola",2+1i) # Tipo texto Este comportamiento se llama coerción y R lo aplica automáticamente cuando existe ambigüedad entre los datos. 5 / 31

Vectores Existen varios comandos para generar vectores a partir de secuencias numéricas y con el comando vector( TIPO,length=N) se puede crear un vector de tipo TIPO y tamaño N. # Secuencias con incrementos de 1 x <- 1:10 # 1,2,3,...,10 x <- 5:23 # 5,6,7,...,23 x <- 10:1 # 10,9,8,...,1 x <- 0.5:2.8 # 0.5,1.5,2.5 # Secuencias con incrementos variables x <- seq(1,10,2) # 1,3,5,7,9 x <- seq(2,10,2) # 2,4,6,8,10 # Vectores vacíos x <- vector("numeric",length=10) # 0,0,0,0,0,0,0,0,0,0 x <- vector("character",length=3) # "","","" 6 / 31

Vectores Para consultar valores de un vector se debe usar el comando [i] donde i debe ser un número entero (o variable de tipo entero) que indica la posición de la cual se quiere consultar el valor. El operador [i] también se puede usar para asignar valores a una variable. x <- c(10,20,25,30) x[1] # Extracción del primer elemento [1] 1 x[1] <- 10 # Asignación del primer elemento Para extraer valores de un vector se utiliza el operador [], entre los paréntesis cuadrados se debe indicar la posición a extraer. El mismo operador puede ser usado para asignar un valor a la posición del vector. 7 / 31

Matrices Una matriz es un vector ordenado en dos dimensiones, se puede crear con la función matrix() que recibe como primer parámetro un vector cualquiera y los parámetros por nombre nrow y ncol m <- matrix(1:6,nrow=2,ncol=3) m[1,2] [1] 3 # Extracción de un elemento por fila y columna m[2,] [1] 2 4 6 # Extracción de una fila completa m[,1] [1] 1 2 # Extracción de una columna completa Si el vector de entrada tiene más elementos de los que puede tener la matriz, los elementos que se desbordan son descartados, si tiene menos elementos, se repiten los primeros en orden hasta llenar los espacios faltantes. 8 / 31

Arreglos Un arreglo es un vector ordenado en varias dimensiones, dos o más. Recibe como parámetros de creación un vector cualquiera y un vector de enteros que tiene el tamaño de cada una de las dimensiones, por ejemplo si este vector es de tamaño 3 se creará un cubo de datos. a <- array(1:48,dim=c(4,4,3)) m[1,2,3] [1] 37 # Extracción de un único elemento m[1,1,] [1] 1 17 33 # Extracción de una única fila m[1,,] [,1] [,2] [,3] # Extracción de una capa (submatriz) [1,] 1 17 33 [2,] 5 21 37 [3,] 9 25 41 [4,] 13 29 45 9 / 31

Listas A diferencia de los vectores, las listas pueden tener elementos de distintos tipos, R no aplica coerción a los elementos de una lista. El operador [i] funciona distinto con las listas, al consultar un elemento el operador retorna una lista de tamaño 1 con el elemento deseado. Sin embargo es posible extraer un elemento al igual que con un vector si se usa el operador [[i]] x <- list(1,"a",t,1.3) x[1] [[1]] [1] 1 x[[1]] [1] 1 # Extracción de una sublista # Extracción de un elemento 10 / 31

Marcos de datos Un marco de datos o dataframe es una estructura de dos dimensiones en la cual cada columna de la estructura tiene su propio tipo de datos. Las columnas en un marco de datos pueden tener etiquetas que permita al usuario consultarlas con mayor facilidad usando el símbolo $. a <- c(1,2,3) b <- c("x","y","z") c <- c(t,t,f) f <- data.frame(cola = a, ColB = b, ColC = c) f$cola [1] 1 2 3 Nótese que al consultar una columna por su etiqueta, lo que se obtiene es un vector. 11 / 31

Marcos de datos Al igual que los vectores, los elementos en un marco de datos pueden ser consultados con el operador [i,i]. En este caso, al ser una estructura bidimensional siempre hay que indicar las dos dimensiones, aunque puede dejarse una vacía si se quiere recuperar toda una fila o una columna (i.e.: [i,] o [,i]). Las filas también pueden tener etiquetas, y al consultar un valor con el operador [i,i] puede usarse la etiqueta de la fila o columna en lugar de su índice. row.names(f) <- c("f1","f2","f3") f[1,1] # Consulta del elemento en la fila 1, columna 1 [1] 1 f["f1","cola"] # Consulta del elemento en la fila F1, columna ColA [1] 1 12 / 31

Carga de archivos 13 / 31

Archivos separados por coma Un archivo de texto plano, con información tabular, en la que cada registro está en una ĺınea y cada valor está separado de cada otro con un símbolo arbitrario es un archivo separado por comas, CSV por sus siglas en inglés. En R puede cargarse la información de un archivo CSV usando el comando read.csv(). El resultado es un marco de datos que adoptará ciertas propiedades de forma automática según la estructura del archivo fuente. Por ejemplo es posible indicarle al comando si el archivo tiene encabezado con las etiquetas de las columnas, si tiene etiquetas para las filas y ciertos otros parámetros que sirven para darle el formato deseado al marco de datos. mock <- read.csv("mock_data.csv", header=true, sep= ",",row.names = 1) 14 / 31

Archivos separados por coma El primer parámetro del método read.csv() es la ruta del archivo, esta puede ser absoluta o una ruta relativa al directorio de trabajo actual. Los demás parámetros son opcionales y tienen distintas funciones header : bool : T : Es la primera fila el encabezado? sep : char :, : Cuál símbolo es el separador? quote : char : \ : Cuál símbolo se usa como comillas? dec : char :. : Cuál símbolo se usa como separador de miles? row.names : Etiquetas de las filas, puede ser un número o un vector. stringsasfactors : bool : T : Debe interpretarse el texto como una codificación? 15 / 31

Filtrado y selección 16 / 31

Filtrado y selección En R pueden aplicarse condiciones lógicas a todos los datos en un marco de datos o un vector. Como resultado R genera un vector de booleanas que indica cuáles registros cumplen la condición impuesta y cuales no. Por ejemplo, si se tienen datos de personas y países en los que viven, se pueden filtrar las personas que viven en China. mock <- read.csv("mock_data.csv", stringsasfactors=f) head(mock$country) [1] "Yemen" "Indonesia" "China" "China" "China" "Indonesia" ischinese <- mock$country == "China" head(ischinese) [1] FALSE FALSE TRUE TRUE TRUE FALSE Nota: Las comparaciones léxicográficas ignoran el uso de mayúsculas en las palabras comparadas. 17 / 31

Operaciones sobre la selección Con el operador [i] se puede aplicar una operación masiva sobre todos los datos seleccionados. Por ejemplo, una vez identificados los registros en los cuales el país es China, es posible asignar a todos esos registros el valor 100 en la columna puntaje. Es posible también contar los valores, usando la función sum con el vector de booleanas. mock <- read.csv("mock_data.csv", stringsasfactors=f) ischinese <- mock$country == "China" mock$score[ischinese] <- 100 # Asignar un valor a todos los registros head(mock$score) [1] -1.78 0.01 100.00 100.00 100.00 0.95 sum(ischinese) [1] 202 18 / 31

Subconjuntos Es posible extraer una parte de un marco de datos usando el operador [i,i], solamente es necesario indicar un vector con los índices deseados, ya sea con los números de índice o con un vector de booleanas. mock <- read.csv("mock_data.csv", stringsasfactors=f) nrow(mock) [1] 1000 firsttenmock <- mock[1:10,] nrow(firsttenmock) [1] 10 ischinese <- mock$country == "China" chinesemock <- mock[ischinese,] # Extrae todas las filas con el país China nrow(chinesemock) [1] 202 19 / 31

Muestreo Otra forma de seleccionar elementos de un marco de datos o un vector es por medio de muestreo aleatorio, la función sample() devuelve registros aleatorios de un vector, dicho vector se puede utilizar para filtrar la muestra. mock <- read.csv("mock_data.csv", stringsasfactors=f) nrow(mock) [1] 1000 sampleindex <- sample(1:1000, 10, replace = F) samplemock <- mock[sampleindex,] nrow(samplemock) [1] 10 Nota: la función sample() puede recibir como primer parámetro un número entero, el intervalo usado para la muestra será entre 0 y el número indicado. Esto permite usar, por ejemplo, la función nrow() para calcular una muestra del total de registros de un marco de datos. 20 / 31

Valores inválidos 21 / 31

Valores NA y NaN En R existen dos valores especiales que se utilizan para denotar valores inválidos. El NaN (acrónimo para Not a Number) se utiliza para representar resultados de operaciones inválidas, como 0/0, infinito - infinito y similares. El NA se utiliza para denotar valores inválidos o valores faltantes, es más genérico que el NaN. Las funciones is.nan() y is.na se utilizan para identificar valores inválidos, en un marco de datos pueden usarse para generar vectores booleanos que indiquen cuáles valores son inválidos. Nota: las divisiones por cero diferentes a 0/0 no dan NaN, sino que dan Inf, un valor especial en R que sirve para denotar infinito. 22 / 31

Selección de filas incompletas La función complete.cases() de R identifica todos los registros que tienen datos inválidos, en cualquiera de las columnas de un marco de datos. El resultado de la función es un vector de booleanas. Utilizando esta función y las operaciones de subconjuntos, es posible eliminar de los datos todos los registros incompletos. mock <- read.csv("mock_data.csv", stringsasfactors=f) # Remover algunos valores de forma aleatoria mock$score[sample(nrow(mock), 100, replace = F)] <- NA complete <- complete.cases(mock) # Extraer únicamente los registros completos mock2 <- mock[complete,] 23 / 31

Rellenar datos inválidos Si la intención no es eliminar los registros incompletos, sino rellenar los datos inválidos. Por ejemplo, puede calcularse el promedio de una columna y asignarlo a todos los registros en los cuales no haya un valor para dicha columna. mock <- read.csv("mock_data.csv", stringsasfactors=f) # Remover algunos valores de forma aleatoria mock$score[sample(nrow(mock), 100, replace = F)] <- NA # Indentificar los registros con un score inválido invalidscore <- is.na(mock$score) # Calcular el promedio de la columna score, ignore los inválidos avg <- mean(mock$score, na.rm = T) # Reemplazar sólo los inválidos de la columna score mock$score[invalidscore] <- avg 24 / 31

Eliminación de columnas incompletas Digamos que una columna tiene demasiados datos inválidos, por lo tanto lo mejor es eliminar dicha columna. En un marco de datos es posible obtener un subconjunto de columnas usando el operador [i,i] mock <- read.csv("mock_data.csv", stringsasfactors=f) # Copiar mock menos la columna score (columna 7) mock2 <- mock[,-7] Al no indicar índice en la primera dimensión se están copiando todas las filas, al poner la columna con un signo negativo, se están copiando todas las columnas menos esa. 25 / 31

Tratamiento y normalización 26 / 31

Funciones de agregación Existen varias funciones que pueden brindar información básica sobre los datos: mean Media aritmética de un vector numérico min Mínimo valor de un vector numérico max Máximo valor de un vector numérico table Frecuencia de valores de un vector cualquiera quantile Obtener quartiles (o percentiles indicados) de una variable numérica var Obtener la varianza de un vector numérico sd Obtener la desviación estándar de un vector numérico En todos los casos la bandera na.rm = TRUE puede ser incluida para prevenir resultados indeseados. 27 / 31

Normalización Las tareas de normalización dependen mucho de la naturaleza de los datos y las operaciones que se desean aplicar. El escenario más común es en el que es necesario aplicar alguna operación que modifique todos los registros de una columna. Una tarea típica de normalización es modificar la escala de una variable para representarla en el intervalo real [0,1], donde el posible valor más alto sea 1 y el posible valor más bajo sea 0. Tomando el caso de MOCK DATA, la variable score puede normalizarse siguiendo estos pasos: 1 Obtener el máximo valor de la variable 2 Obtener el mínimo valor de la variable 3 Calcular el delta (la diferencia entre el máximo y el mínimo) 4 Normalizar cada registro 1 Sustraer el complemento del mínimo 2 Dividir el valor por el delta 28 / 31

Normalización La familia de funciones apply sirve para ejecutar un método sobre un conjunto de valores (un vector o una lista) de forma automática. La versión sapply() genera un vector de respuesta, el cual puede usarse para reemplazar una columna de un marco de datos. mock <- read.csv("mock_data.csv", stringsasfactors=f) maxscore <- max(mock$score) minscore <- min(mock$score) delta <- maxscore - minscore normalize <- function(x, min, delta){ + x <- x - min + x <- x / delta + x } mock$score <- sapply(mock$score, normalize, min, delta) Para más información de las funciones apply, consultar la Documentación oficial de R 29 / 31

Ejercicio Con el archivo DATA.csv realizar las siguientes operaciones: Importar el archivo en un marco de datos Eliminar todos los registros en los que el país sea China Rellenar los valores faltantes con el promedio respectivo de la columna Eliminar las columnas de Nombre y Apellido Identificar cuantos registros tiene el país con mayor frecuencia* Generar registros adicionales** de forma que Todos los países tengan la misma cantidad de registros Los valores de age, weight y height para cada registro nuevo sean el promedio de dicha columna para el país que se está generando ± un valor aleatorio no mayor la desviación estándar del intervalo correspondiente al país. 30 / 31

Ejercicio * La función table() crea una tabla de frecuencias de un vector. ** La función rbind() añade filas a un marco de datos. mock <- read.csv("mock_data.csv", stringsasfactors=f) # Obtener la frecuencia de cada país en un nuevo data frame freqscountry <- as.data.frame(table(mock$country)) # Crear una lista con los datos de una nueva fila newrow <- list(1001,"n","a","na@e.mail", "Costa Rica", "1.1.1.1", "0") # Agregar la fila nueva al data frame mock mock <- rbind(mock, newrow) 31 / 31