Santiago Banchero
Leo Lucianna
Juan Manuel Fernandez
Minería de Datos - UBA
En esta clase, vamos a abordar las siguientes técnicas a través del lenguaje R:
Existen, varias operaciones para integrar datos, por ejemplo merge:
productos<-data.frame(Codigo=c(45, 46), Denominacion=c("Licuadora", "TV 4k"), Precio=c(1245.10, 14742))
head(productos)
Codigo Denominacion Precio
1 45 Licuadora 1245.1
2 46 TV 4k 14742.0
stock<-data.frame(Cod=c(45, 46), stock=c(8650, 145))
dataset<-merge(productos, stock, by.x = "Codigo", by.y = "Cod")
head(dataset)
Codigo Denominacion Precio stock
1 45 Licuadora 1245.1 8650
2 46 TV 4k 14742.0 145
Bonus Track: Librerías sqldf y dplyr.
Con sqldf vamos a manipular los dataframes como si fueran tablas sql:
library(sqldf)
join_string = "SELECT Codigo, Denominacion, Precio, stock as Stock FROM productos p INNER JOIN stock s ON p.Codigo=s.Cod"
sql_query = sqldf(join_string,stringsAsFactors = FALSE)
head(sql_query)
Codigo Denominacion Precio Stock
1 45 Licuadora 1245.1 8650
2 46 TV 4k 14742.0 145
Otra librería muy conocida de R para la manipulación de dataframes es dplyr:
library(dplyr)
data.dplyr = inner_join(productos, stock, by = c("Codigo" = "Cod"))
head(data.dplyr)
Codigo Denominacion Precio stock
1 45 Licuadora 1245.1 8650
2 46 TV 4k 14742.0 145
Además, como vimos antes, debemos tener en cuenta:
names(stock)
[1] "Cod" "stock"
names(stock)[1]="Codigo"
names(stock)
[1] "Codigo" "stock"
celsius=c(26,32)
fahrenheit=(celsius*1.8)+32
print(fahrenheit)
[1] 78.8 89.6
library(lubridate)
fechas <- c(as.Date("2011-06-26"), as.Date("2013-07-15"))
meses <- c(5, 8)
todos <- cbind(meses, month(fechas))
Manejo de Ruido por Binning: Equal Freq // Equal Width
library(infotheo)
# Discretize recibe el atributo, el método de binning y la cantidad de bins
bin_eq_freq <- discretize(iris$Sepal.Width,"equalfreq", 5)
# Nos copiamos el atributo original
bin_eq_freq$Sepal.Width = iris$Sepal.Width
# Por cada bin calculamos la media y reemplazamos en el atributo suavizado
for(bin in 1:5){
bin_eq_freq$suavizado[ bin_eq_freq$X==bin] = mean(bin_eq_freq$Sepal.Width[ bin_eq_freq$X==bin])
}
# grafico Sepal.Width ordenado de menor a mayor
plot(sort(iris$Sepal.Width) , type = "l", col="red", ylab = "Sepal.Width", xlab = "Observaciones", main = "Dato original vs suavizado")
# Agrego la serie de la variable media
lines(sort(bin_eq_freq$suavizado),
type = "l", col="blue")
legend("topleft", legend=c("Original", "Suavizado"), col=c("red", "blue"), lty=1)
En datos de tipo cualitativos/nominales: Test de Chi-Cuadrado
Hacemos la tabla de contingencia:
library(MASS)
tbl_cont = table(survey$Smoke, survey$Exer)
print(tbl_cont)
Freq None Some
Heavy 7 1 3
Never 87 18 84
Occas 12 3 4
Regul 9 1 7
Luego aplicamos el Test de Chi-cuadrado:
chisq.test(tbl_cont)
Pearson's Chi-squared test
data: tbl_cont
X-squared = 5.4885, df = 6, p-value = 0.4828
En datos de tipo cuantitativos/numéricos: Coeficiente de Correlación & Covarianza
llamadas=read.csv('llamadas.csv')
cor(llamadas$minutos,llamadas$unidades) # Coeficiente de Pearson
[1] 0.9936987
Debemos recordar validar los supuestos para una regresión -a menudo, esto no aparece en la Bibliografía-
plot(llamadas$minutos,llamadas$unidades, main = "Relación entre unidades y minutos", xlab = "Duración de la llamada (minutos)", ylab = "Unidades") # Gráficamente