# Instalación de paquetes
install.packages("readr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("dplyr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("tidyr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
install.packages("networkD3")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.5'
## (as 'lib' is unspecified)
# Carga de librerías
library(readr)
library(dplyr)
##
## 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
library(tidyr)
library(networkD3)
energia <- read_csv("owid-energy-data.csv")
## Rows: 23232 Columns: 130
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (2): country, iso_code
## dbl (128): year, population, gdp, biofuel_cons_change_pct, biofuel_cons_chan...
##
## ℹ 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.
# 2. Filtro solo España en año 2022
energia_filtrada <- energia |>
filter(country == "Spain", year == 2022)
# 3. Selecciono solo las fuentes de electricidad con el operador OR
energia_reducida <- energia_filtrada |>
select(
coal_electricity,
gas_electricity,
oil_electricity,
nuclear_electricity,
hydro_electricity,
solar_electricity,
wind_electricity
)
# 4. Convierto datos a formato largo (necesario para Sankey), con pivot longer puedo transformar datos de formato ancho (wide) a formato largo (long) o a mi imagen y semejanza, por ejemplo:
energia_sankey <- energia_reducida |>
pivot_longer(
cols = everything(), # Aqui convierto todas las columnas en filas
names_to = "source", # La columna original pasa a ser llamada Source u el origen.
values_to = "value" # El valor de cada celda pasa a una nueva columna llamada value que será el peso o magnitud del flujo
) |>
mutate(target = "Electricity") # Añado una columna mas que es el destino u objetivo, en mi caso, la electricidad.
https://cran.r-project.org/web/packages/networkD3/readme/README.html
# Primero creo una lista única de todos los nodos que aparecerán en el diagrama, donde indico el origen y destino de cada conexión, y elimino duplicados con unique.
nodes <- data.frame(name = unique(c(energia_sankey$source, energia_sankey$target)))
# Aqui voy a proceder a preparar los enlaces, con mutate como siempre creo o modifico columnas, con match devuelvo la posición de cada valor de origen en el nobre del nodo y resto menos 1 para que cuente bien desde el 0
links <- energia_sankey |>
mutate(
source = match(source, nodes$name) - 1,
target = match(target, nodes$name) - 1
)
# Finalemnte la nomenclatura
sankeyNetwork(
Links = links,
Nodes = nodes,
Source = "source",
Target = "target",
Value = "value",
NodeID = "name"
)
## Links is a tbl_df. Converting to a plain data frame.