Documente Academic
Documente Profesional
Documente Cultură
Diseñado Notas
con de yclase:
IEEE-80 evaluado
Análisis de datos con Rcon MEF
El presente trabajo se presenta como guía detallada de análisis de datos para ingenieros
electricistas
FACULTAD DEdeINGENIERÍA
Facultad Ingeniería YYArquitectura
ARQUITECTURA
Universidad Nacional de
Universidad Nacional deColombia
Colombia
Sede Manizales
Sede Manizales
2018
2010
CAPÍTULO 1
Que es un dato?
Como se leen los datos
5 etapas
Etapa 1: enmarcar el problema (hacer las preguntas adecuadas). Cual es el objetivo
de la empresa, qué queremos predecir o estimar?
Etapa 2: adquirir y preparar los datos. Que recursos tenemos para obtener datos? Que
información es relevante? Limpieza y filtración de datos
Etapa 3: Explorar datos. Visualizar datos. Localizar en los gráficos posibles tenden-
cias, correlaciones o patrones.
Etapa 4: Modelar y evaluar los datos. Ultilizar algún algoritmo innovador para crear
el modelo. Evaluar el modelo.
Etapa 5: Comunicar los resultados y/o puesta en producción. Que hemos aprendido?
Los resultados tienen sentido?
2
1.1 preparación de datos para el análisis
stringsAsFactors = FALSE)
names(auto)
auto_custom_header <-
read.csv("../data/tema1/auto-mpg-noheader.csv",
header = F,
col.names = c("numero", "millas_por_galeon", "cilindrada",
"desplazamiento", "caballos_de_potencia",
"peso", "aceleracion", "año", "modelo"
)
)
head(auto_custom_header, 2)
3
adquisición y preparación de datos para el análisis
remove(pedidos)
load("../data/tema1/pedidos.Rdata")
data(iris)
data(cars)
save.image(file = "../data/tema1/alldata.Rdata")
attach("../data/tema1/primes_and_pow2.Rdata")
data()
Permite verificar si falta algún valor en nuestra base de datos y eliminarlos. Sin embargo es
necesario realizar otros tipos de operaciones que nos permitan
data <- read.csv("../data/tema1/missing-data.csv", na.strings = "")
is.na(data[4,2])
is.na(data[4,1])
is.na(data$Income)
4
1.1 preparación de datos para el análisis
mean(data$Income)
mean(data$Income, na.rm = TRUE)
sd(data$Income)
sd(data$Income, na.rm = TRUE)
5
adquisición y preparación de datos para el análisis
duplicated(family)
family[duplicated(family),]
(students$Income - min(students$Income))/
(max(students$Income) - min(students$Income))
6
1.1 preparación de datos para el análisis
X−µ
Z= (1.1)
σ
housing <- read.csv("../data/tema1/BostonHousing.csv")
#sd = sqrt(sum(x^2)/(n-1))
7
adquisición y preparación de datos para el análisis
#dummy variables
students <- read.csv("../data/tema1/data-conversion.csv")
install.packages("dummies")
library(dummies)
dummy(students$State, sep=".")
Se puede borrar las filas u observaciones, eliminar las variables, reemplazar por promedio.
library(Hmisc), library(mice), library(VIM).
housing.data <- read.csv("../data/tema1/housing-with-missing-value.csv",
header = TRUE, stringsAsFactors = FALSE)
summary(housing.data)
8
1.1 preparación de datos para el análisis
summary(housing.data.2)
install.packages("Hmisc")
library(Hmisc)
install.packages("mice")
library(mice)
md.pattern(housing.data)
#para seguir la información que hace falta
install.packages("VIM")
library(VIM)
aggr(housing.data,
col= c(’green’, ’red’),
9
adquisición y preparación de datos para el análisis
numbers = TRUE,
sortVars = TRUE,
labels = names(housing.data),
cex.axis = 0.75,
gap = 1,
ylab = c("Histograma de NAs", "Patrón")
)
install.packages("tidyr")
library(tidyr)
View(crime.data)
10
1.1 preparación de datos para el análisis
Murder, Assault,
sep = "_")
Paquete para crear un modelo de datos para obtener valores para los NAs
library(mice)
summary(imputed_data)
anyNA(housing.data)
11
adquisición y preparación de datos para el análisis
impute_arg
impute_arg$imputed$rad
#el R2 entre mayor (mas cerca de 1) mucho mejor el modelo de predicción
boxplot(ozone.data$pressure_height,
main = "Pressure Height",
boxwex = 0.5)$out
summary(ozone.data$pressure_height)
boxplot(pressure_height ~ Month,
data = ozone.data,
main = "Presure Height per Month"
)
boxplot(ozone_reading ~Month,
data = ozone.data,
main = "Ozone reading per Month")$out
#Con el parámetro $out se puede observar los outliers
mtext("Hola")
12
1.2 análisis exploratorio de datos
x
}
par(mfrow = c(1,2))
summary(data)
13
adquisición y preparación de datos para el análisis
str(data)
summary(data$cylinders)
summary(data$mpg)
str(data$cylinders)
X = data$mpg
par(mfrow = c(1,1))
14
1.2 análisis exploratorio de datos
hist(X)
1.2.3. Subconjuntos
#Index by position
data[1:5, 8:9]
data[1:5, c(8,9)]
#Index by Name
data[1:5, c("model_year", "car_name")]
# & : AND
# | : OR
# ! : NOT
# ==
##Min / Max de mpg
data[data$mpg == max(data$mpg) | data$mpg == min(data$mpg),]
#subset
subset(data, mpg>30 & cylinders == 6, select = c("car_name", "mpg"))
#Excluir columnas
data[1:5,c(-1,-9)]
data[1:5, -c(1,9)]
15
adquisición y preparación de datos para el análisis
str(carslist[1])
names(carslist[[1]])
16
1.2 análisis exploratorio de datos
head(data1$val)
head(data2$val)
nrow(data)
17
adquisición y preparación de datos para el análisis
str(AAPL)
#Hacemos el casting a fecha de las mismas...
AAPL$Date = as.Date(AAPL$Date)
AMZN$Date = as.Date(AMZN$Date)
FB$Date = as.Date(FB$Date)
GOOG$Date = as.Date(GOOG$Date)
library(ggplot2)
tail(GOOG)
getSymbols("AAPL")
barChart(AAPL)
chartSeries(AAPL, TA = "NULL")
candleChart(AAPL, up.col = "black",
dn.col="red", theme = "white")
head(AAPL)
chartSeries(AAPL[,4],TA = "addMACD()")
18
1.2 análisis exploratorio de datos
getSymbols("NFLX")
barChart(NFLX)
chartSeries(NFLX, TA = "NULL")
chartSeries(NFLX[,4],TA = "addMACD()")
#HOY
Sys.Date()
#yyyy-mm-dd o yyyy/mm/dd
as.Date("2018-01-06")
dt <- -2018
class(dt) <- "Date"
dt
19
adquisición y preparación de datos para el análisis
dt<dt2
dt==dt2
dt2<dt
20
1.2 análisis exploratorio de datos
hist(d, prob=T, ylim = c(0,0.8), breaks = 30, main = "Walmart Stocks", col = "green
lines(density(d), lwd=3)
wmt.m.ts
d <- diff(as.numeric(wmt.m.ts))
d
wmt.m.return <- d / lag(as.numeric(wmt.m.ts), k = -1)
View(wmt.m.return)
hist(wmt.m.return, prob = T, col = "blue")
s <- read.csv("../data/tema6/ts-example.csv")
head(s)
21
adquisición y preparación de datos para el análisis
plot(s.ts.m)
start(s.ts.m)
end(s.ts.m)
frequency(s.ts.m)
start(s.ts.q)
end(s.ts.q)
frequency(s.ts.q)
#stl
#Seasonal Decomposition of Time Series by Loess
flour.l <- log(prices.ts[,1])
flour.stl<- stl(flour.l, s.window = "period")
plot(flour.stl)
flour.stl
#decompose
#Classical Seasonal Decomposition by Moving Averages
22
1.2 análisis exploratorio de datos
n <- 12
gas.f.1 <- filter(prices.ts[,2], filter = rep(1/n, n), sides = 2)
gas.f.2 <- filter(prices.ts[,2], filter = rep(1/n,n), sides = 1)
plot(prices.ts[,2])
lines(gas.f.1, col = "blue", lwd = 3)
lines(gas.f.2, col = "red", lwd = 3)
inf.hw$SSE
inf.hw$alpha
inf.hw$beta
inf.hw$gamma
head(inf.hw$fitted)
install.packages("forecast")
library(forecast)
23
adquisición y preparación de datos para el análisis
infy.fore$lower
infy.fore$upper
1.2.12. ARIMA
1.2.13. Plot
#Histograma de frecuencias
hist(acceleration,
col = rainbow(12),
xlab = "Aceleración",
ylab = "Frecuencias",
main = "Histograma de las aceleraciones",
breaks = 12)
#Boxplots
boxplot(mpg, xlab = "Millas por Galeón")
boxplot(mpg ~ model_year, xlab = "Millas por Galeón (por año)")
boxplot(mpg ~ cylinders, xlab = "Consumo por Número de cilindros")
boxplot(auto)
#Scatterplot
24
1.2 análisis exploratorio de datos
with(auto, {
plot(mpg ~ weight, main = "Peso vs Consumo")
plot(mpg ~ acceleration, main = "Aceleración vs Consumo")
}
)
par(old.par)
#Laticce
auto <- read.csv("../data/tema2/auto-mpg.csv", stringsAsFactors = F)
auto$cylinders = factor(auto$cylinders,
levels = c(3,4,5,6,8),
labels = c("3C", "4C", "5C", "6C", "8C"))
25
adquisición y preparación de datos para el análisis
trellis.par.set(theme = col.whitebg())
par(mfrow=c(2,2))
winter <- subset(data, season == "Invierno")$cnt
spring <- subset(data, season == "Primavera")$cnt
summer <- subset(data, season == "Verano")$cnt
fall <- subset(data, season == "Otoño")$cnt
26
1.2 análisis exploratorio de datos
lines(density(fall))
abline(v = mean(fall), col="red")
abline(v=median(fall), col="blue")
install.packages("beanplot")
library(beanplot)
par(mfrow=c(1,1))
beanplot(data$cnt ~ data$season, col = c("blue", "red", "yellow"))
#causalidad
library(lattice)
bwplot(cnt ~ weathersit, data = data,
layout = c(1,1),
xlab = "Pronóstico del tiempo",
ylab = "Frecuencias",
panel = function(x,y,...){
panel.bwplot(x,y,...)
panel.stripplot(x,y,jitter.data = TRUE,...)
},
par.settings = list(box.rectangle = list(fill = c(’red’, ’yellow’, ’green’))
#qqnorm
trees
par(mfrow=c(1,1))
qqnorm(trees$Height)
27
adquisición y preparación de datos para el análisis
qqnorm(randu$x)
#qqplot
randu
n <- length(randu$x)
n
y <- qunif(ppoints(n))
y
qqplot(y, randu$x)
qqplot(chi3, chi3)
par(mfrow=c(1,2))
x <- seq(-3, 3, 0.01)
plot(x, dnorm(x))
plot(x, pnorm(x))
plot(x, dcauchy(x))
plot(x, pcauchy(x))
cp <- read.csv("../data/tema3/college-perf.csv")
28
1.2 análisis exploratorio de datos
prop.table(table)
round(prop.table(table, 1)*100, 2)
round(prop.table(table, 2)*100, 2)
summary(table)
install.packages("ROCR")
library(ROCR)
tail(prob.cuts.1)
prob.cuts.1[prob.cuts.1$tpr>=0.8,]
29
adquisición y preparación de datos para el análisis
plot(perf2)
lines(par()$usr[1:2], par()$usr[3:4])
install.packages("ROCR")
library(ROCR)
tail(prob.cuts.1)
prob.cuts.1[prob.cuts.1$tpr>=0.8,]
install.packages("e1071")
library(caret)
library(e1071)
30
1.2 análisis exploratorio de datos
set.seed(2018)
t.ids <- createDataPartition(banknote$class, p = 0.7, list = F)
mod <- svm(class ~ ., data = banknote[t.ids, ],
class.weights = c("0"=0.3, "1"=0.7),
cost=1000)
table(banknote[t.ids,"class"], fitted(mod), dnn = c("Actual", "Predicho"))
pred <- predict(mod, banknote[-t.ids,])
table(banknote[-t.ids, "class"], pred, dnn = c("Actual", "Predicho"))
31
adquisición y preparación de datos para el análisis
Referencias
32