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).
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
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
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