Para importar datos es importante definir un directorio de trabajo, esto es, definir la carpeta de trabajo donde podemos acceder a las bases de datos.
Llamamos la librería readr que nos permite leer documentos en texto plano .csv
library(readr)
## Warning: package 'readr' was built under R version 4.2.1
setwd("C:/Users/Julian/Desktop/Diplomado/Bases")
list.files()
## [1] "forbes.csv" "Historico del Bitcoin (BTC).csv"
BTC<- read_csv("Historico del Bitcoin (BTC).csv")
## Rows: 207 Columns: 7
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): Fecha, Vol., % var.
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Podemos establecer directorio de manera manual con el código setwd(choose.dir())
Exploremos la base
names(BTC)
## [1] "Fecha" "Último" "Apertura" "Máximo" "Mínimo" "Vol." "% var."
head(BTC)
## # A tibble: 6 × 7
## Fecha Último Apertura Máximo Mínimo Vol. `% var.`
## <chr> <dbl> <dbl> <dbl> <dbl> <chr> <chr>
## 1 26.07.2022 21.0 21.3 21.3 21.0 214,67K -1,33%
## 2 25.07.2022 21.3 22.6 22.7 21.3 206,93K -5,67%
## 3 24.07.2022 22.6 22.4 23.0 22.3 126,66K 0,54%
## 4 23.07.2022 22.5 22.7 23.0 22.0 137,42K -0,95%
## 5 22.07.2022 22.7 23.2 23.7 22.5 197,54K -2,06%
## 6 21.07.2022 23.2 23.2 23.4 22.4 217,08K -0,27%
summary(BTC)
## Fecha Último Apertura Máximo
## Length:207 Min. :18.99 Min. :18.98 Min. :19.43
## Class :character 1st Qu.:29.09 1st Qu.:29.14 1st Qu.:29.92
## Mode :character Median :38.25 Median :38.34 Median :39.35
## Mean :34.89 Mean :35.01 Mean :35.81
## 3rd Qu.:41.84 3rd Qu.:41.89 3rd Qu.:42.74
## Max. :47.74 Max. :47.74 Max. :48.20
## Mínimo Vol. % var.
## Min. :17.63 Length:207 Length:207
## 1st Qu.:28.66 Class :character Class :character
## Median :37.40 Mode :character Mode :character
## Mean :34.02
## 3rd Qu.:40.92
## Max. :47.03
str(BTC)
## spec_tbl_df [207 × 7] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Fecha : chr [1:207] "26.07.2022" "25.07.2022" "24.07.2022" "23.07.2022" ...
## $ Último : num [1:207] 21 21.3 22.6 22.5 22.7 ...
## $ Apertura: num [1:207] 21.3 22.6 22.4 22.7 23.2 ...
## $ Máximo : num [1:207] 21.3 22.7 23 23 23.7 ...
## $ Mínimo : num [1:207] 21 21.3 22.3 22 22.5 ...
## $ Vol. : chr [1:207] "214,67K" "206,93K" "126,66K" "137,42K" ...
## $ % var. : chr [1:207] "-1,33%" "-5,67%" "0,54%" "-0,95%" ...
## - attr(*, "spec")=
## .. cols(
## .. Fecha = col_character(),
## .. Último = col_number(),
## .. Apertura = col_number(),
## .. Máximo = col_number(),
## .. Mínimo = col_number(),
## .. Vol. = col_character(),
## .. `% var.` = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
Para evitar problemas con las variables, usemos nombres sencillos
nombres<-c("Fecha","Ultimo","Apertura","Maximo","Minimo","Volumen","Var")
colnames(BTC)<-nombres
names(BTC)
## [1] "Fecha" "Ultimo" "Apertura" "Maximo" "Minimo" "Volumen" "Var"
Creo una columna para numerar las observaciones
BTC$numeracion<-1:207
Organicemos temporalmente nuestra base
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.1
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
BTC<-arrange(BTC,desc(numeracion))
View(BTC)
La librería base de R permite realizar diferentes gráficos. En R tenemos tres tipos de gráficos:
#Gráficos de alto nivel
La función genérica para graficar es la función plot. Dependiendo de la naturaleza de los objetos, el gráfico se construirá
Dos vectores numéricos producen un gráfico de dispersión
plot(BTC$Maximo,BTC$Minimo, ylab = "Mínimo",
xlab = "Máximo", main = "Cotización Bitcoin")
Un vector produce una dispersión indexada. En esta ocasión el gráfico lo cambiamos para que aparezca en formato lineas con el argumento type
plot(BTC$Ultimo, xlab = "Observaciones",
ylab = "Cierre", type = "l")
Si el gráfico es una serie de tiempo genera un gráfico temporal. Para ello construyamos la serie de tiempo
bitcoin.ts<-ts(BTC$Ultimo, frequency = 365,start = c(2022,01,01))
class(bitcoin.ts)
## [1] "ts"
plot(bitcoin.ts)
Si es un factor genera un gráfico de caja y bigotes. Para ello utilicemos una base dentro de R.
str(iris)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
plot(iris$Species,iris$Sepal.Length)
BTC$rent<-0
BTC$rent[BTC$Var<0]<-"Perdidas"
BTC$rent[BTC$Var>0]<-"Ganancias"
class(BTC$rent)
## [1] "character"
Grafiquemos este vectos categórico que hemos creado
boxplot(BTC$Ultimo~BTC$rent, ylab = "Precio de cierre", xlab = "Rentabilidad")
Si es un data frame crea una correlación de variables
plot(BTC)
También podemos usar prefijos para sugerir un tipo de gráfico
Usamod barplot() para realizar diagrama de barras
barplot(table(BTC$rent), ylab = "Frecuencia")
Para gráficos de cajas y bigotes usamos el comando boxplot()
boxplot(BTC$Ultimo, horizontal=T, notch=T, col = "orange", border = "black", main="Boxplot, precio de cierre Bitcoin (2022)")
stripchart(BTC$Ultimo, method="jitter",
pch=19, add = T, col = "red") #Nivel bajo
boxplot(BTC$Ultimo~BTC$rent, notch=T, col=4:5, main="Rentabilidad", ylab = "Cierre BTC", xlab = "Rentabilidad")
stripchart(BTC$Ultimo~BTC$rent,method="jitter",
pch=19, add=T, vertical=T, col=2:3)
Podemos realizar gráficos de pruebas de normalidad
qqnorm(BTC$Ultimo)
qqline(BTC$Ultimo)
También histogramas para variables cuantitativas
hist(BTC$Ultimo)
hist(BTC$Ultimo, breaks =4)
Estas funciones añaden información adicional a los gráficos, por tanto requieren que ya haya un gráfico creado
Añadir lines o puntos: lines() y points()
plot(BTC$Ultimo, type="h", col="orange")
lines(BTC$Ultimo, col="red")
text(50,20,"cierre Bitcoin")
points(BTC$Apertura, col="purple")
Añadir texto
plot(1:10,1:10, type = "l")
text(5,9,"Aqui podemos insertar mensaje")
La función abline()
plot(BTC$Ultimo, type = "l")
abline(h=mean(BTC$Ultimo), v=180)
Añadir titulos con la función title()
plot(BTC$Ultimo, type = "l")
title("Bitcoin 2022","Histórico de cotización")
axis(side = 1)
Finalmente, podemos dividir la pantalla para tener varias gráficas en una
Dependiendo del byrow es como va a rellenar: si por filas o por columnas
layout(matrix(c(1,2,3,3),nrow = 2,byrow = T))
layout.show(3)
plot(BTC$Ultimo, type = "l", main = "Cotización Bitcoin (2022)")
hist(BTC$Ultimo, col = heat.colors(7), main = "Distribución (2022)")
boxplot(BTC$Ultimo~BTC$rent, notch=T, col=4:5,
horizontal=T, main="Boxplot")
stripchart(BTC$Ultimo~BTC$rent,method="jitter",
pch=19, add=T, horizontal=T, col=2:3)
## Warning in plot.xy(xy.coords(x, y), type = type, ...): "horizontal" is not a
## graphical parameter
## Warning in plot.xy(xy.coords(x, y), type = type, ...): "horizontal" is not a
## graphical parameter
Podemos también diferenciarlo
plot(diff(BTC$Ultimo), type = "l") #Primera diferencia
plot(diff(log(BTC$Ultimo)), type="l") #Primera diferencia logaritmica
plot(diff(log(BTC$Ultimo),lag=12), type="l",)