Importación de datos

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)

Eploración gráfica

La librería base de R permite realizar diferentes gráficos. En R tenemos tres tipos de gráficos:

  1. Alto nivel: funciones que crean un nuevo gráfico
  2. Bajo nivel: añaden información a un gráfico
  3. Interactivas: funciones que permiten interactuar con gráficos (otras librerias)

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

Gráficos de bajo nivel

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",)