SlideShare una empresa de Scribd logo
1 de 30
Ricardo Schifini
Doctor en Ciencias Físicas por la Pontificia Universidade Católica do Rio de Janeiro y Licenciado de la UBA.
Consultor independiente de data analytics, munging, cleaning, scrapping y ETLs. Ha trabajado en proyectos para
empresas lideres mundiales del agro, petróleo y gas y compañías Argentinas lideres de la salud prepaga. Ha
formado a profesionales bancarios y de la salud en técnicas de ETL con R .
StackOverflow: Top 5% mundial en R y top 10% en Matlab. En Argentina es 2º en el lenguaje R.
Ha sido Senior Researcher en el centro de R&D de Tenaris, líder mundial en la producción de tubos de acero sin
costura. Posee una patente sobre un diseño innovador de soldadura.
Es mentor de HTML, CSS y Javascript del proyecto Digitalers de Telecom y Acamica, dirigido a jóvenes de bajos
recursos.
Ha sido docente en la UBA y el CBC durante 9 años.
Ha desarrollado mas de 18 aplicaciones web como hobby.
Políglota, destacándose en el Ingles, Portugués y Español.
Vivió 5+ años en Chile, Argentina, Honduras y Brasil.
Es casado y padre de tres hijos (8 y 5 años).
Extraer - Transformar - Cargar
Que es Manipulación de Datos?
Que vamos a hacer?
Partidos de los Pumas.txt
Preguntas sobre los datos
?
Partidos de los Pumas.txt Preguntas:
₋ Contra que potencias jugaron?
₋ Cuantos partidos jugaron contra cada una?
₋ Cuantos ganaron?
₋ Cual es la diferencia de puntos promedio?
₋ Cual fue el mayor puntaje y contra quien? Lo
perdieron o lo ganaron?
₋ Cual/es nos tienen de hijo? Y viceversa
Es muy difícil responder estas preguntas con los
datos organizados de la manera que están.
Mis preguntas
fecha equipo1 score1 equipo2 score2 sede
fecha sede rival score_rival score_Pumas gano? local?
rival jugados ganados eficacia diferencia de puntos promedio
₋ Contra que potencias jugaron?
₋ Cuantos ganaron?
₋ Cuantos puntos hicieron en promedio?
₋ Cual fue el mayor puntaje y contra quien? Lo
perdieron o lo ganaron?
₋ Cuantos partidos jugaron contra cada una?
₋ Cuantos ganaron?
₋ Cual es la diferencia de puntos promedio?
₋ Cual/es nos tienen de hijo? Y viceversa
Hay que transformar el arreglo de los datos para que nos ayuden a responder las preguntas
Transformaciones
¿Qué es R?
Entorno de desarrollo – Rstudio
Ayuda
Introducción
R
¿Qué es R?
“R es un entorno y lenguaje de programación con un enfoque al análisis
estadístico.
R es una implementación de software libre del lenguaje S pero con soporte
de alcance estático. Se trata de uno de los lenguajes más utilizados en
investigación por la comunidad estadística, siendo además muy popular en el
campo de la minería de datos, la investigación biomédica, la bioinformática y
las matemáticas financieras. A esto contribuye la posibilidad de cargar diferentes
bibliotecas o paquetes con funcionalidades de cálculo o graficación.”
https://cran.r-project.org/
Entorno de desarrollo – RStudio
• Editor
• Consola
• Entorno
• Historial
• Explorador de archivos
• Gráficos
• Documentación
• Instalación de librerías
https://www.rstudio.com/
RStudio
Editor
Solapas de scripts
Rojo: hubo cambios en el script
Autocompletado
Resaltado por colores
Run: ejecuta línea individual
LenguajePosición del cursor
Secciones internas
RStudio
Source: ejecuta script
Environment: variables y funciones en memoria
History: historial de comandos en consola
Consola: Ejecuta comandos
y muestra resultados
Files: manejo de archivos
Plots: ventana de gráficos
Packages: paquetes instalados
Help: documentación online
RStudio
RStudio
Proyecto:
• Organiza el trabajo
• Los datos en memoria se pueden guardar entre sesiones
• Los archivos abiertos en el editor se mantienen
• Cambia al directorio de trabajo correcto
• La lista permite elegir fácilmente otros proyectos
Comando Ejemplo
help(“ejemplo”) Muestra la documentación sobre la función ejemplo()
?ejemplo Igual a help()
??tema
Busca en la documentación información que contenga la palabra tema.
Esta búsqueda incluye los paquetes instalados
help.start() Abre el índice de la ayuda en línea
example(“ejemplo”) Ejecuta ejemplos en la documentación de la función ejemplo()
Ayuda
Tipos de datos
Operaciones básicas
Estructuras de datos
Estructuras de control
Estructuras de Datos y Operaciones Básicas
Tipo Ejemplo
Numérico 42.68 , Inf
Entero 5L
Cadena de caracteres “Hola Mundo!”
Booleano TRUE, FALSE, T, F
Nulo o vacío NULL
Dato faltante / Not Available NA
Not a Number NaN
Tipos de datos
Operación Símbolo Ejemplo
Asignación = , <-
a = 4
a <- 4
Suma, Resta, Multiplicación y División + , - , * , / 20/4
Potencia ^ 5^4
Módulo a%%b 5%%3 ( = 2 )
Igual? Distinto? == , !=
a == 5
a != 0
Menor, menor o igual? < , <=
a < 8
a <= 3
Mayor, mayor o igual? > , >=
a > 15
a >= -3
Lógicas
AND: &
OR: |
NOT: !
a < 5 & a > 0
a == 3 | a == 5
! (a < 10)
Operaciones Básicas
Estructura Resumen
Vector Conjunto unidimensional de elementos con el mismo tipo de dato
Matriz Conjunto bidimensional de elementos con el mismo tipo de dato
Factor Vector o matriz donde los elementos se codifican como niveles
Lista Conjunto de elementos de tipos o estructura de datos distintos
Data frame
Matriz de datos donde cada columna contiene datos del mismo
tipo. Distintas columnas pueden diferir en el tipo de dato.
Estructuras de Datos
Inspeccionar los datos
Cargarlos a R
Manipularlos hasta obtener la estructura deseada
• Crear/eliminar columnas
• Decidir: ifelse
• Agrupados: aggregate
• Unir: merge
Analizar el resultado
Empecemos el Análisis
Carga de Datos: read.table
read.table(
file,
header = FALSE,
sep = "",
quote = ""'",
dec = ".",
numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names,
col.names,
as.is = !stringsAsFactors,
na.strings = "NA",
colClasses = NA,
nrows = -1,
skip = 0,
check.names = TRUE,
fill = !blank.lines.skip,
strip.white = FALSE,
blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE,
flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "",
encoding = "unknown",
text,
skipNul = FALSE)
Archivo (Obligatorio)
TRUE: primer fila son
nombres de columna
Separador datos
Separador decimales
Cantidad de filas a leer
-1: todas
FALSE: las columnas de
caracteres serán leídas
como tal. No se
transformaran a
factores
Decidir: ifelse
La toma de decisiones puede hacerse de manera vectorial con la funcion:
Esta función toma tres parámetros que pueden ser vectores de la misma longitud.
El vector condición tiene que ser booleano (TRUE/FALSE)
Los otros dos vectores serán parte del resultado cuando se cumpla la condición correspondiente.
ifelse(condicion, verdadero, falso)
Agregando columnas
Calcular y agregar una nueva columna a un data frame se puede hacer de la siguiente forma:
El resultado tiene la misma cantidad de filas
Si el resultado es un valor único, este se repetirá en todas las filas
Ejemplo
Df$volumen = Df$largo * Df$ancho * Df$alto
Eliminando columnas
Eliminar una columna de un data frame se logra haciendo:
Ejemplo
Df$volumen = NULL
Consolidar: aggregate
Aggregate permite consolidar (agrupar) los datos mediante una función:
Donde el objeto R es un vector, lista o data frame
Producto
BigBurger
Royale
BigBurger
Royale
BigBurger
Royale
País
Argentina
Argentina
Brasil
Brasil
Honduras
Honduras
Precio
10
12
8
9
4
5
Producto
BigBurger
Royale
Precio Promedio
7.33
9.66
aggregate(x = objeto R, by = lista de grupos, FUN = función)
País
Argentina
Brasil
Precio Promedio
11
8.5
Honduras 4.5
Agrupando por Producto
Agrupando por País
Ejemplo
aggregate(x = list(Precio.Promedio = df$Precio),
by = list(Producto = df$Producto),
FUN = mean)
Consolidar: ejemplo
df
Producto País Precio Costo
Big Burger Argentina 10 4.0
Royale Argentina 12 5.0
Big Burger Brasil 8 3.0
Royale Brasil 9 3.1
Big Burger Honduras 4 2.0
Royale Honduras 5 2.5
Producto Precio.Promedio
Big Burger 7.33
Royale 8.67
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"),
incomparables = NULL)
Unir: merge
La funcion merge permite unir dos data frames :
Los dos data frames
By: columnas por las cuales se hace el merge
Formato: c( “col1”, ”col2” )
All: tipo de unión. TRUE / FALSE
suffixes: como renombrar otras
columnas con nombres iguales
Unir: ejemplo
merge(x, y, all = TRUE, by.x = "madre", by.y = "listaMadres")
madre edadMadre
Ana 32
Julia 35
Valeria 55
Laura 36
Monica 40
listaMadres hijo edadHijo
Ana Jose 6
Ana Agustina 4
Beatriz Zoe 11
Julia Mateo 7
Laura Pedro 1
Laura Pablo 3
Laura Monica 5
Monica Tomas 8
Monica Esteban 8
madre edadMadre hijo edadHijo
Ana 32 Jose 6
Ana 32 Agustina 4
Julia 35 Mateo 7
Laura 36 Pedro 1
Laura 36 Pablo 3
Laura 36 Monica 5
Monica 40 Tomas 8
Monica 40 Esteban 8
Valeria 55 NA NA
Beatriz NA Zoe 11
• Agrupar por rival y calcular:
o partidos jugados
o victorias,
o locales,
o diferencia de puntos promedio
• Unificar
• Calcular eficacia y reordenar
# Leer datos --------------------------------------------------------------
Pumas = read.table("Partidos de los Pumas.txt",sep = ",",header = T,fileEncoding = "UTF-8",
stringsAsFactors = F)
# Procesos ----------------------------------------------------------------
# Dejar todos los resultados de Argentina en la misma columna y los de los rivales en otra
Pumas$score_Arg = ifelse(Pumas$equipo1 == "Argentina", Pumas$score1, Pumas$score2)
Pumas$score_rival = ifelse(Pumas$equipo1 == "Argentina", Pumas$score2, Pumas$score1)
Pumas$rival = ifelse(Pumas$equipo1 == "Argentina", Pumas$equipo2, Pumas$equipo1)
# Determinemos si Argentina fue local o no
Pumas$local = ifelse(Pumas$equipo1 == "Argentina", 1, 0)
# Eliminemos columnas no necesarias
Pumas$equipo1 = NULL
Pumas$equipo2 = NULL
Pumas$score1 = NULL
Pumas$score2 = NULL
# Determinemos si Argentina gano o perdio
Pumas$victoria = with(Pumas,ifelse(score_Arg > score_rival,1,0))
# Calculemos diferencia de puntos
Pumas$dif_puntos = with(Pumas, score_Arg - score_rival)
# Agrupados ---------------------------------------------------------------
victorias_vs_rival = aggregate(x = list(Victorias = Pumas$victoria), by = list(rival = Pumas$rival), FUN = sum)
juegos_vs_rival = aggregate(x = list(Partidos = Pumas$fecha), by = list(rival = Pumas$rival), FUN = length)
diferencia_puntos_prom = aggregate(x = list(dif_pts_mean = Pumas$dif_puntos), by = list(rival = Pumas$rival), FUN = mean)
localia = aggregate(x = list(localia = Pumas$local), by = list(rival = Pumas$rival), FUN = sum)
# Unificar agrupados ------------------------------------------------------
# Juntemos los resultados en una sola tabla
vs_Otros = merge(victorias_vs_rival, juegos_vs_rival)
vs_Otros = merge(vs_Otros, localia)
vs_Otros = merge(vs_Otros, diferencia_puntos_prom)
# Calculos extra ----------------------------------------------------------
# Calculemos la eficacia
vs_Otros$Eficacia = vs_Otros$Victorias / vs_Otros$Partidos * 100
# Reordenemos por Eficacia
vs_Otros = vs_Otros[order(vs_Otros$Eficacia, decreasing = T),]
• Reordenar equipos y puntajes
• Determinar local
• Determinar si ganaron
• Calcular diferencia de puntos
Resultado Final
Rival Victorias Jugados De Local
Diferencia de
Puntos Promedio
Eficacia (%)
Italia 13 19 11 7.894737 68.42105
Escocia 10 17 10 -1.058824 58.82353
Irlanda 7 20 13 -2.950000 35.00000
Gales 6 18 8 -4.166667 33.33333
Francia 12 47 31 -8.936170 25.53191
Samoa 1 4 4 -7.250000 25.00000
Australia 5 23 11 -10.739130 21.73913
Inglaterra 4 20 13 -10.300000 20.00000
Nueva
Zelanda
0 24 11 -25.250000 0.00000
Sudáfrica 0 19 10 -19.315789 0.00000
Preguntas:
₋ Contra que potencias jugaron?
₋ Cuantos partidos jugaron contra cada
una?
₋ Cuantos ganaron?
₋ Cuantos puntos hicieron en promedio?
₋ Cual fue el mayor puntaje y contra
quien? Lo perdieron o lo ganaron?
₋ Cual/es nos tienen de hijo? Y viceversa.
Resultado Final
Workshop Manipulacion de Datos con R

Más contenido relacionado

Similar a Workshop Manipulacion de Datos con R

introduccion de programacion
introduccion de programacionintroduccion de programacion
introduccion de programacion
Luis Peña Ponce
 
Diapositivas laura j
Diapositivas laura jDiapositivas laura j
Diapositivas laura j
JonathaLaura
 
Resumen contenido tic3
Resumen contenido tic3Resumen contenido tic3
Resumen contenido tic3
rfrrick
 

Similar a Workshop Manipulacion de Datos con R (20)

introduccion a programacion
introduccion a programacionintroduccion a programacion
introduccion a programacion
 
introduccion de programacion
introduccion de programacionintroduccion de programacion
introduccion de programacion
 
programacion
programacionprogramacion
programacion
 
Conceptos_de_Bases_de_Datos_20220427100402.ppt
Conceptos_de_Bases_de_Datos_20220427100402.pptConceptos_de_Bases_de_Datos_20220427100402.ppt
Conceptos_de_Bases_de_Datos_20220427100402.ppt
 
clases de herramientas lorenita
clases de herramientas lorenitaclases de herramientas lorenita
clases de herramientas lorenita
 
Diapositivas laura j
Diapositivas laura jDiapositivas laura j
Diapositivas laura j
 
Ambiente excel kathia gonzalez
Ambiente excel kathia gonzalezAmbiente excel kathia gonzalez
Ambiente excel kathia gonzalez
 
Ambiente excel kathia gonzalez
Ambiente excel kathia gonzalezAmbiente excel kathia gonzalez
Ambiente excel kathia gonzalez
 
Manual C-C++ Pablo
Manual C-C++ PabloManual C-C++ Pablo
Manual C-C++ Pablo
 
Organizacion de datos
Organizacion de datosOrganizacion de datos
Organizacion de datos
 
Trabajo spss 17 mary
Trabajo spss 17 maryTrabajo spss 17 mary
Trabajo spss 17 mary
 
Trabajo spss 17
Trabajo spss 17Trabajo spss 17
Trabajo spss 17
 
Diseño Lógico de la base de datos
Diseño Lógico de la base de datosDiseño Lógico de la base de datos
Diseño Lógico de la base de datos
 
Resumen contenido tic3
Resumen contenido tic3Resumen contenido tic3
Resumen contenido tic3
 
Programación 1: estructuras de datos
Programación 1: estructuras de datosProgramación 1: estructuras de datos
Programación 1: estructuras de datos
 
Presentacion de organizacion_y_representacion_grafica_de_datos
Presentacion de organizacion_y_representacion_grafica_de_datosPresentacion de organizacion_y_representacion_grafica_de_datos
Presentacion de organizacion_y_representacion_grafica_de_datos
 
Modelo relacional
Modelo relacionalModelo relacional
Modelo relacional
 
Estrategias fuentes y herramientas para recopilar organizar interpretar y usa...
Estrategias fuentes y herramientas para recopilar organizar interpretar y usa...Estrategias fuentes y herramientas para recopilar organizar interpretar y usa...
Estrategias fuentes y herramientas para recopilar organizar interpretar y usa...
 
Bases datos
Bases datosBases datos
Bases datos
 
U4
U4U4
U4
 

Último

Proyectos de investigacion en ciencias sociales 6to - maipue (2).pdf
Proyectos de investigacion en ciencias sociales 6to - maipue (2).pdfProyectos de investigacion en ciencias sociales 6to - maipue (2).pdf
Proyectos de investigacion en ciencias sociales 6to - maipue (2).pdf
nicolas24233
 
REPORTE DE HOMICIDIO DOLOSO IRAPUATO ABRIL 2024
REPORTE DE HOMICIDIO DOLOSO IRAPUATO ABRIL 2024REPORTE DE HOMICIDIO DOLOSO IRAPUATO ABRIL 2024
REPORTE DE HOMICIDIO DOLOSO IRAPUATO ABRIL 2024
IrapuatoCmovamos
 
La Inteligencia Artificial -AnaliticayDatos-BeatrizGarcia-Abril2024-D.pdf
La Inteligencia Artificial -AnaliticayDatos-BeatrizGarcia-Abril2024-D.pdfLa Inteligencia Artificial -AnaliticayDatos-BeatrizGarcia-Abril2024-D.pdf
La Inteligencia Artificial -AnaliticayDatos-BeatrizGarcia-Abril2024-D.pdf
analiticaydatos
 
Reporte de incidencia delictiva Silao marzo 2024
Reporte de incidencia delictiva Silao marzo 2024Reporte de incidencia delictiva Silao marzo 2024
Reporte de incidencia delictiva Silao marzo 2024
OBSERVATORIOREGIONAL
 
METODOLOGÍA 5S - PRESENTACION DE INICIO DEL PROYECTO
METODOLOGÍA 5S - PRESENTACION DE INICIO DEL PROYECTOMETODOLOGÍA 5S - PRESENTACION DE INICIO DEL PROYECTO
METODOLOGÍA 5S - PRESENTACION DE INICIO DEL PROYECTO
JoselynGoeTmara
 
2. POLITICAS Y LEGISLACION EDUCATIVA.pptx
2. POLITICAS Y LEGISLACION EDUCATIVA.pptx2. POLITICAS Y LEGISLACION EDUCATIVA.pptx
2. POLITICAS Y LEGISLACION EDUCATIVA.pptx
camilasto28
 
Reporte de incidencia delictiva de Romita marzo 2024
Reporte de incidencia delictiva de Romita marzo 2024Reporte de incidencia delictiva de Romita marzo 2024
Reporte de incidencia delictiva de Romita marzo 2024
OBSERVATORIOREGIONAL
 
Anclaje Grupo 5..pptx de todo tipo de anclaje
Anclaje Grupo 5..pptx de todo tipo de anclajeAnclaje Grupo 5..pptx de todo tipo de anclaje
Anclaje Grupo 5..pptx de todo tipo de anclaje
klebersky23
 

Último (17)

Pineda - Metodologia de la investigacion manual para el desarrollo de persona...
Pineda - Metodologia de la investigacion manual para el desarrollo de persona...Pineda - Metodologia de la investigacion manual para el desarrollo de persona...
Pineda - Metodologia de la investigacion manual para el desarrollo de persona...
 
Proyectos de investigacion en ciencias sociales 6to - maipue (2).pdf
Proyectos de investigacion en ciencias sociales 6to - maipue (2).pdfProyectos de investigacion en ciencias sociales 6to - maipue (2).pdf
Proyectos de investigacion en ciencias sociales 6to - maipue (2).pdf
 
REPORTE DE HOMICIDIO DOLOSO IRAPUATO ABRIL 2024
REPORTE DE HOMICIDIO DOLOSO IRAPUATO ABRIL 2024REPORTE DE HOMICIDIO DOLOSO IRAPUATO ABRIL 2024
REPORTE DE HOMICIDIO DOLOSO IRAPUATO ABRIL 2024
 
REGISTRO CONTABLE DE CONTABILIDAD 2022..
REGISTRO CONTABLE DE CONTABILIDAD 2022..REGISTRO CONTABLE DE CONTABILIDAD 2022..
REGISTRO CONTABLE DE CONTABILIDAD 2022..
 
La Inteligencia Artificial -AnaliticayDatos-BeatrizGarcia-Abril2024-D.pdf
La Inteligencia Artificial -AnaliticayDatos-BeatrizGarcia-Abril2024-D.pdfLa Inteligencia Artificial -AnaliticayDatos-BeatrizGarcia-Abril2024-D.pdf
La Inteligencia Artificial -AnaliticayDatos-BeatrizGarcia-Abril2024-D.pdf
 
Reporte de incidencia delictiva Silao marzo 2024
Reporte de incidencia delictiva Silao marzo 2024Reporte de incidencia delictiva Silao marzo 2024
Reporte de incidencia delictiva Silao marzo 2024
 
Mapa concepto sobre la contabilidad de costos
Mapa concepto sobre la contabilidad de costosMapa concepto sobre la contabilidad de costos
Mapa concepto sobre la contabilidad de costos
 
4° UNIDAD DE APRENDIZAJE 2 MAYO 2024.docx
4°  UNIDAD DE APRENDIZAJE 2 MAYO  2024.docx4°  UNIDAD DE APRENDIZAJE 2 MAYO  2024.docx
4° UNIDAD DE APRENDIZAJE 2 MAYO 2024.docx
 
METODOLOGÍA 5S - PRESENTACION DE INICIO DEL PROYECTO
METODOLOGÍA 5S - PRESENTACION DE INICIO DEL PROYECTOMETODOLOGÍA 5S - PRESENTACION DE INICIO DEL PROYECTO
METODOLOGÍA 5S - PRESENTACION DE INICIO DEL PROYECTO
 
Crecimiento del PIB real revisado sexenios neoliberales y nueva era del sober...
Crecimiento del PIB real revisado sexenios neoliberales y nueva era del sober...Crecimiento del PIB real revisado sexenios neoliberales y nueva era del sober...
Crecimiento del PIB real revisado sexenios neoliberales y nueva era del sober...
 
Asignatura-Optativa-Sociologia-CS-3BGU.pdf
Asignatura-Optativa-Sociologia-CS-3BGU.pdfAsignatura-Optativa-Sociologia-CS-3BGU.pdf
Asignatura-Optativa-Sociologia-CS-3BGU.pdf
 
5558423-peru-evolucion-de-la-pobreza-monetaria-2014-2023(2).pdf
5558423-peru-evolucion-de-la-pobreza-monetaria-2014-2023(2).pdf5558423-peru-evolucion-de-la-pobreza-monetaria-2014-2023(2).pdf
5558423-peru-evolucion-de-la-pobreza-monetaria-2014-2023(2).pdf
 
2. POLITICAS Y LEGISLACION EDUCATIVA.pptx
2. POLITICAS Y LEGISLACION EDUCATIVA.pptx2. POLITICAS Y LEGISLACION EDUCATIVA.pptx
2. POLITICAS Y LEGISLACION EDUCATIVA.pptx
 
Reporte de incidencia delictiva de Romita marzo 2024
Reporte de incidencia delictiva de Romita marzo 2024Reporte de incidencia delictiva de Romita marzo 2024
Reporte de incidencia delictiva de Romita marzo 2024
 
Anclaje Grupo 5..pptx de todo tipo de anclaje
Anclaje Grupo 5..pptx de todo tipo de anclajeAnclaje Grupo 5..pptx de todo tipo de anclaje
Anclaje Grupo 5..pptx de todo tipo de anclaje
 
Problemas de programación lineal entera.pptx
Problemas de programación lineal entera.pptxProblemas de programación lineal entera.pptx
Problemas de programación lineal entera.pptx
 
PRESENTACION SOBRE LA HOJA DE CALCULO ⠀⠀
PRESENTACION SOBRE LA HOJA DE CALCULO ⠀⠀PRESENTACION SOBRE LA HOJA DE CALCULO ⠀⠀
PRESENTACION SOBRE LA HOJA DE CALCULO ⠀⠀
 

Workshop Manipulacion de Datos con R

  • 1.
  • 2. Ricardo Schifini Doctor en Ciencias Físicas por la Pontificia Universidade Católica do Rio de Janeiro y Licenciado de la UBA. Consultor independiente de data analytics, munging, cleaning, scrapping y ETLs. Ha trabajado en proyectos para empresas lideres mundiales del agro, petróleo y gas y compañías Argentinas lideres de la salud prepaga. Ha formado a profesionales bancarios y de la salud en técnicas de ETL con R . StackOverflow: Top 5% mundial en R y top 10% en Matlab. En Argentina es 2º en el lenguaje R. Ha sido Senior Researcher en el centro de R&D de Tenaris, líder mundial en la producción de tubos de acero sin costura. Posee una patente sobre un diseño innovador de soldadura. Es mentor de HTML, CSS y Javascript del proyecto Digitalers de Telecom y Acamica, dirigido a jóvenes de bajos recursos. Ha sido docente en la UBA y el CBC durante 9 años. Ha desarrollado mas de 18 aplicaciones web como hobby. Políglota, destacándose en el Ingles, Portugués y Español. Vivió 5+ años en Chile, Argentina, Honduras y Brasil. Es casado y padre de tres hijos (8 y 5 años).
  • 3. Extraer - Transformar - Cargar Que es Manipulación de Datos?
  • 4. Que vamos a hacer?
  • 5. Partidos de los Pumas.txt Preguntas sobre los datos ?
  • 6. Partidos de los Pumas.txt Preguntas: ₋ Contra que potencias jugaron? ₋ Cuantos partidos jugaron contra cada una? ₋ Cuantos ganaron? ₋ Cual es la diferencia de puntos promedio? ₋ Cual fue el mayor puntaje y contra quien? Lo perdieron o lo ganaron? ₋ Cual/es nos tienen de hijo? Y viceversa Es muy difícil responder estas preguntas con los datos organizados de la manera que están. Mis preguntas
  • 7. fecha equipo1 score1 equipo2 score2 sede fecha sede rival score_rival score_Pumas gano? local? rival jugados ganados eficacia diferencia de puntos promedio ₋ Contra que potencias jugaron? ₋ Cuantos ganaron? ₋ Cuantos puntos hicieron en promedio? ₋ Cual fue el mayor puntaje y contra quien? Lo perdieron o lo ganaron? ₋ Cuantos partidos jugaron contra cada una? ₋ Cuantos ganaron? ₋ Cual es la diferencia de puntos promedio? ₋ Cual/es nos tienen de hijo? Y viceversa Hay que transformar el arreglo de los datos para que nos ayuden a responder las preguntas Transformaciones
  • 8. ¿Qué es R? Entorno de desarrollo – Rstudio Ayuda Introducción
  • 9. R ¿Qué es R? “R es un entorno y lenguaje de programación con un enfoque al análisis estadístico. R es una implementación de software libre del lenguaje S pero con soporte de alcance estático. Se trata de uno de los lenguajes más utilizados en investigación por la comunidad estadística, siendo además muy popular en el campo de la minería de datos, la investigación biomédica, la bioinformática y las matemáticas financieras. A esto contribuye la posibilidad de cargar diferentes bibliotecas o paquetes con funcionalidades de cálculo o graficación.” https://cran.r-project.org/
  • 10. Entorno de desarrollo – RStudio • Editor • Consola • Entorno • Historial • Explorador de archivos • Gráficos • Documentación • Instalación de librerías https://www.rstudio.com/ RStudio
  • 11. Editor Solapas de scripts Rojo: hubo cambios en el script Autocompletado Resaltado por colores Run: ejecuta línea individual LenguajePosición del cursor Secciones internas RStudio Source: ejecuta script
  • 12. Environment: variables y funciones en memoria History: historial de comandos en consola Consola: Ejecuta comandos y muestra resultados Files: manejo de archivos Plots: ventana de gráficos Packages: paquetes instalados Help: documentación online RStudio
  • 13. RStudio Proyecto: • Organiza el trabajo • Los datos en memoria se pueden guardar entre sesiones • Los archivos abiertos en el editor se mantienen • Cambia al directorio de trabajo correcto • La lista permite elegir fácilmente otros proyectos
  • 14. Comando Ejemplo help(“ejemplo”) Muestra la documentación sobre la función ejemplo() ?ejemplo Igual a help() ??tema Busca en la documentación información que contenga la palabra tema. Esta búsqueda incluye los paquetes instalados help.start() Abre el índice de la ayuda en línea example(“ejemplo”) Ejecuta ejemplos en la documentación de la función ejemplo() Ayuda
  • 15. Tipos de datos Operaciones básicas Estructuras de datos Estructuras de control Estructuras de Datos y Operaciones Básicas
  • 16. Tipo Ejemplo Numérico 42.68 , Inf Entero 5L Cadena de caracteres “Hola Mundo!” Booleano TRUE, FALSE, T, F Nulo o vacío NULL Dato faltante / Not Available NA Not a Number NaN Tipos de datos
  • 17. Operación Símbolo Ejemplo Asignación = , <- a = 4 a <- 4 Suma, Resta, Multiplicación y División + , - , * , / 20/4 Potencia ^ 5^4 Módulo a%%b 5%%3 ( = 2 ) Igual? Distinto? == , != a == 5 a != 0 Menor, menor o igual? < , <= a < 8 a <= 3 Mayor, mayor o igual? > , >= a > 15 a >= -3 Lógicas AND: & OR: | NOT: ! a < 5 & a > 0 a == 3 | a == 5 ! (a < 10) Operaciones Básicas
  • 18. Estructura Resumen Vector Conjunto unidimensional de elementos con el mismo tipo de dato Matriz Conjunto bidimensional de elementos con el mismo tipo de dato Factor Vector o matriz donde los elementos se codifican como niveles Lista Conjunto de elementos de tipos o estructura de datos distintos Data frame Matriz de datos donde cada columna contiene datos del mismo tipo. Distintas columnas pueden diferir en el tipo de dato. Estructuras de Datos
  • 19. Inspeccionar los datos Cargarlos a R Manipularlos hasta obtener la estructura deseada • Crear/eliminar columnas • Decidir: ifelse • Agrupados: aggregate • Unir: merge Analizar el resultado Empecemos el Análisis
  • 20. Carga de Datos: read.table read.table( file, header = FALSE, sep = "", quote = ""'", dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"), row.names, col.names, as.is = !stringsAsFactors, na.strings = "NA", colClasses = NA, nrows = -1, skip = 0, check.names = TRUE, fill = !blank.lines.skip, strip.white = FALSE, blank.lines.skip = TRUE, comment.char = "#", allowEscapes = FALSE, flush = FALSE, stringsAsFactors = default.stringsAsFactors(), fileEncoding = "", encoding = "unknown", text, skipNul = FALSE) Archivo (Obligatorio) TRUE: primer fila son nombres de columna Separador datos Separador decimales Cantidad de filas a leer -1: todas FALSE: las columnas de caracteres serán leídas como tal. No se transformaran a factores
  • 21. Decidir: ifelse La toma de decisiones puede hacerse de manera vectorial con la funcion: Esta función toma tres parámetros que pueden ser vectores de la misma longitud. El vector condición tiene que ser booleano (TRUE/FALSE) Los otros dos vectores serán parte del resultado cuando se cumpla la condición correspondiente. ifelse(condicion, verdadero, falso)
  • 22. Agregando columnas Calcular y agregar una nueva columna a un data frame se puede hacer de la siguiente forma: El resultado tiene la misma cantidad de filas Si el resultado es un valor único, este se repetirá en todas las filas Ejemplo Df$volumen = Df$largo * Df$ancho * Df$alto
  • 23. Eliminando columnas Eliminar una columna de un data frame se logra haciendo: Ejemplo Df$volumen = NULL
  • 24. Consolidar: aggregate Aggregate permite consolidar (agrupar) los datos mediante una función: Donde el objeto R es un vector, lista o data frame Producto BigBurger Royale BigBurger Royale BigBurger Royale País Argentina Argentina Brasil Brasil Honduras Honduras Precio 10 12 8 9 4 5 Producto BigBurger Royale Precio Promedio 7.33 9.66 aggregate(x = objeto R, by = lista de grupos, FUN = función) País Argentina Brasil Precio Promedio 11 8.5 Honduras 4.5 Agrupando por Producto Agrupando por País
  • 25. Ejemplo aggregate(x = list(Precio.Promedio = df$Precio), by = list(Producto = df$Producto), FUN = mean) Consolidar: ejemplo df Producto País Precio Costo Big Burger Argentina 10 4.0 Royale Argentina 12 5.0 Big Burger Brasil 8 3.0 Royale Brasil 9 3.1 Big Burger Honduras 4 2.0 Royale Honduras 5 2.5 Producto Precio.Promedio Big Burger 7.33 Royale 8.67
  • 26. 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"), incomparables = NULL) Unir: merge La funcion merge permite unir dos data frames : Los dos data frames By: columnas por las cuales se hace el merge Formato: c( “col1”, ”col2” ) All: tipo de unión. TRUE / FALSE suffixes: como renombrar otras columnas con nombres iguales
  • 27. Unir: ejemplo merge(x, y, all = TRUE, by.x = "madre", by.y = "listaMadres") madre edadMadre Ana 32 Julia 35 Valeria 55 Laura 36 Monica 40 listaMadres hijo edadHijo Ana Jose 6 Ana Agustina 4 Beatriz Zoe 11 Julia Mateo 7 Laura Pedro 1 Laura Pablo 3 Laura Monica 5 Monica Tomas 8 Monica Esteban 8 madre edadMadre hijo edadHijo Ana 32 Jose 6 Ana 32 Agustina 4 Julia 35 Mateo 7 Laura 36 Pedro 1 Laura 36 Pablo 3 Laura 36 Monica 5 Monica 40 Tomas 8 Monica 40 Esteban 8 Valeria 55 NA NA Beatriz NA Zoe 11
  • 28. • Agrupar por rival y calcular: o partidos jugados o victorias, o locales, o diferencia de puntos promedio • Unificar • Calcular eficacia y reordenar # Leer datos -------------------------------------------------------------- Pumas = read.table("Partidos de los Pumas.txt",sep = ",",header = T,fileEncoding = "UTF-8", stringsAsFactors = F) # Procesos ---------------------------------------------------------------- # Dejar todos los resultados de Argentina en la misma columna y los de los rivales en otra Pumas$score_Arg = ifelse(Pumas$equipo1 == "Argentina", Pumas$score1, Pumas$score2) Pumas$score_rival = ifelse(Pumas$equipo1 == "Argentina", Pumas$score2, Pumas$score1) Pumas$rival = ifelse(Pumas$equipo1 == "Argentina", Pumas$equipo2, Pumas$equipo1) # Determinemos si Argentina fue local o no Pumas$local = ifelse(Pumas$equipo1 == "Argentina", 1, 0) # Eliminemos columnas no necesarias Pumas$equipo1 = NULL Pumas$equipo2 = NULL Pumas$score1 = NULL Pumas$score2 = NULL # Determinemos si Argentina gano o perdio Pumas$victoria = with(Pumas,ifelse(score_Arg > score_rival,1,0)) # Calculemos diferencia de puntos Pumas$dif_puntos = with(Pumas, score_Arg - score_rival) # Agrupados --------------------------------------------------------------- victorias_vs_rival = aggregate(x = list(Victorias = Pumas$victoria), by = list(rival = Pumas$rival), FUN = sum) juegos_vs_rival = aggregate(x = list(Partidos = Pumas$fecha), by = list(rival = Pumas$rival), FUN = length) diferencia_puntos_prom = aggregate(x = list(dif_pts_mean = Pumas$dif_puntos), by = list(rival = Pumas$rival), FUN = mean) localia = aggregate(x = list(localia = Pumas$local), by = list(rival = Pumas$rival), FUN = sum) # Unificar agrupados ------------------------------------------------------ # Juntemos los resultados en una sola tabla vs_Otros = merge(victorias_vs_rival, juegos_vs_rival) vs_Otros = merge(vs_Otros, localia) vs_Otros = merge(vs_Otros, diferencia_puntos_prom) # Calculos extra ---------------------------------------------------------- # Calculemos la eficacia vs_Otros$Eficacia = vs_Otros$Victorias / vs_Otros$Partidos * 100 # Reordenemos por Eficacia vs_Otros = vs_Otros[order(vs_Otros$Eficacia, decreasing = T),] • Reordenar equipos y puntajes • Determinar local • Determinar si ganaron • Calcular diferencia de puntos Resultado Final
  • 29. Rival Victorias Jugados De Local Diferencia de Puntos Promedio Eficacia (%) Italia 13 19 11 7.894737 68.42105 Escocia 10 17 10 -1.058824 58.82353 Irlanda 7 20 13 -2.950000 35.00000 Gales 6 18 8 -4.166667 33.33333 Francia 12 47 31 -8.936170 25.53191 Samoa 1 4 4 -7.250000 25.00000 Australia 5 23 11 -10.739130 21.73913 Inglaterra 4 20 13 -10.300000 20.00000 Nueva Zelanda 0 24 11 -25.250000 0.00000 Sudáfrica 0 19 10 -19.315789 0.00000 Preguntas: ₋ Contra que potencias jugaron? ₋ Cuantos partidos jugaron contra cada una? ₋ Cuantos ganaron? ₋ Cuantos puntos hicieron en promedio? ₋ Cual fue el mayor puntaje y contra quien? Lo perdieron o lo ganaron? ₋ Cual/es nos tienen de hijo? Y viceversa. Resultado Final